Skip to content
Snippets Groups Projects
rulesAssistantOptions.js 105 KiB
Newer Older
  • Learn to ignore specific revisions
  • DCoded's avatar
    DCoded committed
    				if (isNaN(value)) { value = null; }
    
    vas's avatar
    vas committed
    			}
    
    vas's avatar
    vas committed
    			return value;
    
    vas's avatar
    vas committed
    		}
    
    		setmin(value) {
    
    			current_rule.condition.data.value[0] = this.parse(value);
    
    Skriv's avatar
    Skriv committed
    			this.min.value = `${current_rule.condition.data.value[0]}`;
    
    vas's avatar
    vas committed
    		}
    
    		setmax(value) {
    
    			current_rule.condition.data.value[1] = this.parse(value);
    
    Skriv's avatar
    Skriv committed
    			this.max.value = `${current_rule.condition.data.value[1]}`;
    
    vas's avatar
    vas committed
    		}
    
    		info(attribute) {
    
    vas's avatar
    vas committed
    			return ({
    				"devotion": "Very Hateful: (-∞, -95), Hateful: [-95, -50), Resistant: [-50, -20), Ambivalent: [-20, 20], Accepting: (20, 50], Devoted: (50, 95], Worshipful: (95, ∞)",
    				"trust": "Extremely terrified: (-∞, -95), Terrified: [-95, -50), Frightened: [-50, -20), Fearful: [-20, 20], Careful: (20, 50], Trusting: (50, 95], Total trust: (95, ∞)",
    				"health": "Death: (-∞, -100), Near Death: [-100, -90), Extremely Unhealthy: [-90, -50), Unhealthy: [-50, -20), Healthy: [-20, 20], Very Healthy: (20, 50], Extremely Healthy: (50, 90], Unnaturally Healthy: (90, ∞)",
    				"energy": "Frigid: (-∞, 20], Poor: (20, 40], Average: (40, 60], Powerful: (60, 80], Sex Addict: (80, 100), Nympho: 100",
    				"weight": "Emaciated: (-∞, -95), Skinny: [-95, -30), Thin: [-30, -10), Average: [-10, 10], Plush: (10, 30], Fat: (30, 95], Overweight: (95, ∞)",
    				"lactation": "None: 0, 1: Natural, 2: Lactation implant",
    				"preg": "Barren: -2, On contraceptives: -1, Not pregnant: 0, Pregnancy weeks: [1, ∞)",
    				"pregType": "Fetus count, known only after the 10th week of pregnancy",
    				"bellyImplant": "Volume in CCs. None: -1",
    				"belly": "Volume in CCs, any source",
    
    Pregmodder's avatar
    Pregmodder committed
    				"intelligenceImplant": "Education level. 0: uneducated, 15: educated, 30: advanced education, (0, 15): incomplete education.",
    				"intelligence": "From moronic to brilliant: [-100, 100]",
    
    vas's avatar
    vas committed
    				"accent": "No accent: 0, Nice accent: 1, Bad accent: 2, Can't speak language: 3 and above",
    
    				"waist": "Masculine waist: (95, ∞), Ugly waist: (40, 95], Unattractive waist: (10, 40], Average waist: [-10, 10], Feminine waist: [-40, -10), Wasp waist: [-95, -40), Absurdly narrow: (-∞, -95)",
    
    brickode's avatar
    brickode committed
    			} [attribute] || " ");
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class ItemEditor extends Element {
    		render(fn, data) {
    			const elem = document.createElement("div");
    
    			const input = document.createElement("input");
    			input.setAttribute("type", "text");
    			input.value = JSON.stringify(data.value);
    
    DCoded's avatar
    DCoded committed
    			input.onkeypress = e => { if (returnP(e)) { this.setValue(input); } };
    
    brickode's avatar
    brickode committed
    			input.onblur = e => this.setValue(input);
    
    			this.input = input;
    			elem.appendChild(input);
    
    			const infobar = document.createElement("div");
    			infobar.innerHTML = this.info(data.attribute);
    			elem.appendChild(infobar);
    
    			return elem;
    		}
    
    		info(attribute) {
    
    Skriv's avatar
    Skriv committed
    			return `Insert a valid JSON array. Known values: ${{
    
    vas's avatar
    vas committed
    				"fetish": "buttslut, cumslut, masochist, sadist, dom, submissive, boobs, pregnancy, none (AKA vanilla)",
    
    vas's avatar
    vas committed
    				"amp": "Amputated: 1, Not amputated: 0",
    
    Pregmodder's avatar
    Pregmodder committed
    				"genes": "XX, XY",
    
    Skriv's avatar
    Skriv committed
    			}[attribute]}`;
    
    klorpa's avatar
    klorpa committed
    
    
    		setValue(input) {
    			try {
    				const arr = JSON.parse(input.value);
    				current_rule.condition.data.value = arr;
    				input.value = JSON.stringify(arr);
    			} catch (e) {
    				alert(e);
    			}
    		}
    	}
    
    
    
    vas's avatar
    vas committed
    	class AssignmentInclusion extends ButtonList {
    
    vas's avatar
    vas committed
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Apply to assignments and facilities");
    
    klorpa's avatar
    klorpa committed
    			const items = ["Classes", "Confined", "Fucktoy", "Gloryhole", "House Servant", "Milked", "Public Servant", "Rest", "Subordinate Slave", "Whore"];
    
    DCoded's avatar
    DCoded committed
    			if (V.HGSuite > 0) {
    				items.push("Head Girl Suite");
    			}
    			if (V.brothel > 0) {
    				items.push("Brothel");
    			}
    			if (V.club > 0) {
    				items.push("Club");
    			}
    			if (V.arcade > 0) {
    				items.push("Arcade");
    			}
    			if (V.dairy > 0) {
    				items.push("Dairy");
    			}
    			if (V.servantsQuarters > 0) {
    				items.push("Servant Quarters");
    			}
    			if (V.masterSuite > 0) {
    				items.push("Master Suite");
    			}
    			if (V.schoolroom > 0) {
    				items.push("Schoolroom");
    			}
    			if (V.spa > 0) {
    				items.push("Spa");
    			}
    			if (V.nursery > 0) {
    				items.push("Nursery");
    			}
    			if (V.clinic > 0) {
    				items.push("Clinic");
    			}
    			if (V.cellblock > 0) {
    				items.push("Cellblock");
    			}
    
    vas's avatar
    vas committed
    			items.forEach(
    
    				i => this.appendChild(new ButtonItem(i, this.getAttribute(i), current_rule.condition.assignment.includes(this.getAttribute(i)))));
    
    vas's avatar
    vas committed
    		}
    
    		onchange() {
    
    vas's avatar
    vas committed
    			current_rule.condition.assignment = this.getSelection();
    
    vas's avatar
    vas committed
    		}
    
    		getAttribute(what) {
    			return {
    				"Rest": "rest",
    				"Fucktoy": "please you",
    				"Subordinate Slave": "be a subordinate slave",
    				"House Servant": "be a servant",
    				"Confined": "stay confined",
    				"Whore": "whore",
    				"Public Servant": "serve the public",
    				"Classes": "take classes",
    				"Milked": "get milked",
    				"Gloryhole": "work a glory hole",
    				"Head Girl Suite": "live with your Head Girl",
    				"Brothel": "work in the brothel",
    				"Club": "serve in the club",
    				"Arcade": "be confined in the arcade",
    				"Dairy": "work in the dairy",
    
    				"Farmyard": "work as a farmhand",
    
    vas's avatar
    vas committed
    				"Servant Quarters": "work as a servant",
    				"Master Suite": "serve in the master suite",
    				"Schoolroom": "learn in the schoolroom",
    				"Spa": "rest in the spa",
    
    brickode's avatar
    brickode committed
    				"Nursery": "work as a nanny",
    
    vas's avatar
    vas committed
    				"Clinic": "get treatment in the clinic",
    				"Cellblock": "be confined in the cellblock",
    
    brickode's avatar
    brickode committed
    			} [what];
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class SpecialInclusion extends List {
    
    vas's avatar
    vas committed
    		constructor() {
    
    vas's avatar
    vas committed
    			const items = [
    
    				["include", -1],
    				["exclude", 0],
    				["only", 1]
    
    vas's avatar
    vas committed
    			];
    
    			super("Special slaves", items, true, false, true);
    
    			this.setValue(current_rule.condition.specialSlaves);
    			this.onchange = (value) => current_rule.condition.specialSlaves = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    	class SpecificInclusionExclusion extends Options {
    		constructor() {
    
    vas's avatar
    vas committed
    			super();
    
    vas's avatar
    vas committed
    			this.appendChild(new OptionsItem("Limit to specific slaves", () => this.show_slave_selection()));
    			this.appendChild(new OptionsItem("Exclude specific slaves", () => this.show_slave_exclusion()));
    			this.subwidget = null;
    		}
    
    		show_slave_selection() {
    
    DCoded's avatar
    DCoded committed
    			if (this.subwidget) { this.subwidget.remove(); }
    
    vas's avatar
    vas committed
    			this.subwidget = new SlaveSelection();
    			this.appendChild(this.subwidget);
    		}
    
    		show_slave_exclusion() {
    
    DCoded's avatar
    DCoded committed
    			if (this.subwidget) { this.subwidget.remove(); }
    
    vas's avatar
    vas committed
    			this.subwidget = new SlaveExclusion();
    			this.appendChild(this.subwidget);
    		}
    	}
    
    	class SlaveSelection extends ButtonList {
    		constructor() {
    			super("Include specific slaves");
    			V.slaves.forEach(slave => this.appendChild(new ButtonItem(
    				[slave.slaveName, slave.slaveSurname].join(" "),
    				slave.ID,
    				current_rule.condition.selectedSlaves.includes(slave.ID))));
    		}
    
    
    		onchange() {
    			current_rule.condition.selectedSlaves = this.getSelection();
    		}
    
    vas's avatar
    vas committed
    	}
    
    	class SlaveExclusion extends ButtonList {
    		constructor() {
    			super("Exclude specific slaves");
    			V.slaves.forEach(slave => this.appendChild(new ButtonItem(
    				[slave.slaveName, slave.slaveSurname].join(" "),
    				slave.ID,
    				current_rule.condition.excludedSlaves.includes(slave.ID))));
    		}
    
    
    		onchange() {
    			current_rule.condition.excludedSlaves = this.getSelection();
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	// parent section for effect editing
    	class EffectEditor extends Element {
    		constructor() {
    
    vas's avatar
    vas committed
    			super();
    
    ezsh's avatar
    ezsh committed
    			this.appendChild(new AppearanceSection(true));
    			this.appendChild(new CosmeticSection(true));
    			this.appendChild(new BodyModSection(true));
    			this.appendChild(new AutosurgerySection(true));
    			this.appendChild(new RegimenSection(true));
    			this.appendChild(new BehaviourSection(true));
    			this.appendChild(new OtherSection(true));
    
    vas's avatar
    vas committed
    		}
    
    		render() {
    
    vas's avatar
    vas committed
    			const element = document.createElement("div");
    			return element;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class AppearanceSection extends Section {
    
    ezsh's avatar
    ezsh committed
    		constructor(isCollapsed) {
    			super("Appearance Settings", isCollapsed);
    
    vas's avatar
    vas committed
    			this.appendChild(new ClothesList());
    			this.appendChild(new CollarList());
    			this.appendChild(new ShoeList());
    			this.appendChild(new CorsetList());
    
    vas's avatar
    vas committed
    			this.appendChild(new LeggingsList());
    
    			this.appendChild(new VagChastityList());
    
    vas's avatar
    vas committed
    			this.appendChild(new VagAccVirginsList());
    			this.appendChild(new VagAccAVirginsList());
    			this.appendChild(new VagAccOtherList());
    
    DCoded's avatar
    DCoded committed
    			this.appendChild(new VaginalAttachmentsList());
    
    vas's avatar
    vas committed
    			if (V.seeDicks !== 0 || V.makeDicks !== 0) {
    
    				this.appendChild(new DickChastityList());
    
    vas's avatar
    vas committed
    				this.appendChild(new DickAccVirginsList());
    				this.appendChild(new DickAccOtherList());
    
    vas's avatar
    vas committed
    			}
    
    			this.appendChild(new AnalChastityList());
    
    vas's avatar
    vas committed
    			this.appendChild(new ButtplugsVirginsList());
    			this.appendChild(new ButtplugsOtherList());
    
    			this.appendChild(new ButtplugAttachmentsList());
    
    vas's avatar
    vas committed
    			this.appendChild(new ImplantVolumeList());
    
    vas's avatar
    vas committed
    	class RegimenSection extends Section {
    
    ezsh's avatar
    ezsh committed
    		constructor(isCollapsed) {
    			super("Physical Regimen Settings", isCollapsed);
    			if (V.arcologies[0].FSAssetExpansionistResearch === 1)
    
    kopareigns's avatar
    kopareigns committed
    				this.appendChild(new HyperGrowthSwitch());
    
    ezsh's avatar
    ezsh committed
    			this.appendChild(new IntensiveGrowthSwitch());
    
    vas's avatar
    vas committed
    			this.appendChild(new GrowthList());
    			this.appendChild(new CurrativesList());
    			this.appendChild(new AphrodisiacList());
    			this.appendChild(new ContraceptiveList());
    
    Pregmodder's avatar
    Pregmodder committed
    			this.appendChild(new AbortionList());
    
    DCoded's avatar
    DCoded committed
    			if (V.pregSpeedControl) {
    
    vas's avatar
    vas committed
    				this.appendChild(new PregDrugsList());
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    			this.appendChild(new FemaleHormonesList());
    			this.appendChild(new ShemaleHormonesList());
    			this.appendChild(new GeldingHormonesList());
    			this.appendChild(new OtherDrugsList());
    
    Pregmodder's avatar
    Pregmodder committed
    			if (V.enema === 1) {
    				this.appendChild(new EnemaList());
    			}
    
    vas's avatar
    vas committed
    			this.appendChild(new DietList());
    			this.appendChild(new DietGrowthList());
    			this.appendChild(new DietBaseList());
    
    Pregmodder's avatar
    Pregmodder committed
    			if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) {
    				this.appendChild(new DietSolidFoodList());
    			}
    
    vas's avatar
    vas committed
    			this.appendChild(new MuscleList());
    			this.appendChild(new BraceList());
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class BehaviourSection extends Section {
    
    ezsh's avatar
    ezsh committed
    		constructor(isCollapsed) {
    			super("Behavior Settings", isCollapsed);
    
    vas's avatar
    vas committed
    			this.appendChild(new AutomaticAssignmentList());
    
    vas's avatar
    vas committed
    			this.appendChild(new LivingStandardList());
    			this.appendChild(new PunishmentList());
    			this.appendChild(new RewardList());
    			this.appendChild(new ReleaseList());
    
    Pregmodder's avatar
    Pregmodder committed
    			this.appendChild(new ToyHoleList());
    
    vas's avatar
    vas committed
    			this.appendChild(new SmartFetishList());
    			this.appendChild(new SmartXYAttractionList());
    			this.appendChild(new SmartXXAttractionList());
    			this.appendChild(new SmartEnergyList());
    			this.appendChild(new SpeechList());
    			this.appendChild(new RelationshipList());
    
    			if (V.studio === 1) {
    				this.appendChild(new PornBroadcastStatus());
    
    vas's avatar
    vas committed
    				this.appendChild(new PornList());
    
    vas's avatar
    vas committed
    		}
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    vas's avatar
    vas committed
    	class OtherSection extends Section {
    
    ezsh's avatar
    ezsh committed
    		constructor(isCollapsed) {
    			super("Other Settings", isCollapsed);
    
    vas's avatar
    vas committed
    			this.appendChild(new LabelList());
    
    			this.appendChild(new LabelRemoveList());
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    	class CosmeticSection extends Section {
    
    ezsh's avatar
    ezsh committed
    		constructor(isCollapsed) {
    			super("Cosmetic Settings", isCollapsed);
    
    vas's avatar
    vas committed
    			this.appendChild(new EyewearList());
    			this.appendChild(new LensesList());
    
    klorpa's avatar
    klorpa committed
    			this.appendChild(new EarwearList());
    
    vas's avatar
    vas committed
    			this.appendChild(new MakeupList());
    			this.appendChild(new NailsList());
    			this.appendChild(new HairLengthList());
    
    2hu4u's avatar
    2hu4u committed
    			this.appendChild(new HaircutsList());
    
    klorpa's avatar
    klorpa committed
    			this.appendChild(new HairColorList());
    
    vas's avatar
    vas committed
    			this.appendChild(new HairStyleList());
    
    			this.appendChild(new EyebrowColorList());
    			this.appendChild(new EyebrowStyleList());
    			this.appendChild(new EyebrowFullnessList());
    
    klorpa's avatar
    klorpa committed
    			this.appendChild(new PubicHairColorList());
    
    vas's avatar
    vas committed
    			this.appendChild(new PubicHairStyleList());
    
    klorpa's avatar
    klorpa committed
    			this.appendChild(new ArmpitHairColorList());
    
    vas's avatar
    vas committed
    			this.appendChild(new ArmpitHairStyleList());
    
    klorpa's avatar
    klorpa committed
    			this.appendChild(new SkinColorList());
    
    			this.appendChild(new MarkingsList());
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class BodyModSection extends Section {
    
    ezsh's avatar
    ezsh committed
    		constructor(isCollapsed) {
    			super("Body Mod Settings", isCollapsed);
    
    vas's avatar
    vas committed
    			this.appendChild(new EarPiercingList());
    			this.appendChild(new NosePiercingList());
    			this.appendChild(new EyebrowPiercingList());
    			this.appendChild(new NavelPiercingList());
    			this.appendChild(new NipplePiercingList());
    			this.appendChild(new AreolaPiercingList());
    			this.appendChild(new LipPiercingList());
    			this.appendChild(new TonguePiercingList());
    			this.appendChild(new ClitPiercingList());
    			this.appendChild(new LabiaPiercingList());
    			this.appendChild(new ShaftPiercingList());
    			this.appendChild(new PerineumPiercingList());
    			this.appendChild(new CorsetPiercingList());
    
    			this.appendChild(new AutoBrandingList());
    			this.appendChild(new BrandingLocationList());
    			this.appendChild(new BrandDesignList());
    
    			this.appendChild(new FaceTattooList());
    			this.appendChild(new ShoulderTattooList());
    			this.appendChild(new ChestTattooList());
    			this.appendChild(new ArmTattooList());
    			this.appendChild(new UpperBackTattooList());
    			this.appendChild(new LowerBackTattooList());
    			this.appendChild(new AbdomenTattooList());
    
    DCoded's avatar
    DCoded committed
    			if (V.seeDicks || V.makeDicks) {
    
    vas's avatar
    vas committed
    				this.appendChild(new DickTattooList());
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    			this.appendChild(new ButtockTattooList());
    			this.appendChild(new AnalTattooList());
    			this.appendChild(new LegTattooList());
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class AutosurgerySection extends Section {
    
    vas's avatar
    vas committed
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Autosurgery Settings", true);
    
    			this.appendChild(new AutosurgerySwitch());
    
    vas's avatar
    vas committed
    			this.appendChild(new VisionSurgeryList());
    
    klorpa's avatar
    klorpa committed
    			this.appendChild(new HearingSurgeryList());
    
    klorpa's avatar
    klorpa committed
    			this.appendChild(new SmellSurgeryList());
    			this.appendChild(new TasteSurgeryList());
    
    vas's avatar
    vas committed
    			this.appendChild(new LactationSurgeryList());
    
    vas's avatar
    vas committed
    			if (V.seeDicks || V.makeDicks) {
    
    vas's avatar
    vas committed
    				this.appendChild(new SemenSurgeryList());
    
    vas's avatar
    vas committed
    				this.appendChild(new VasectomyList());
    			}
    
    vas's avatar
    vas committed
    			this.appendChild(new CosmeticSurgeryList());
    			this.appendChild(new LipSurgeryList());
    			this.appendChild(new ButtSurgeryList());
    			this.appendChild(new BreastSurgeryList());
    			this.appendChild(new TighteningSurgeryList());
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			this.appendChild(new TummyTuckSurgeryList());
    
    vas's avatar
    vas committed
    			this.appendChild(new BodyHairSurgeryList());
    			this.appendChild(new HairSurgeryList());
    
    DCoded's avatar
    DCoded committed
    			if (V.bellyImplants > 0) {
    
    vas's avatar
    vas committed
    				this.appendChild(new BellyImplantList());
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	class ClothesList extends List {
    		constructor() {
    			const items = [
    				["Select her own outfit", "choosing her own clothes"]
    			];
    			super("Clothes", items);
    
    			const nclothes = [
    
    vas's avatar
    vas committed
    				["Apron", "an apron"],
    
    				["Ballgown", "a ball gown"],
    
    vas's avatar
    vas committed
    				["Bangles", "slutty jewelry"],
    				["Bodysuit", "a comfortable bodysuit"],
    
    deepmurk's avatar
    deepmurk committed
    				["Boyshorts", "boyshorts"],
    
    deepmurk's avatar
    deepmurk committed
    				["Bra", "a bra"],
    				["Button-up shirt and panties", "a button-up shirt and panties"],
    				["Button-up shirt", "a button-up shirt"],
    
    deepmurk's avatar
    deepmurk committed
    				["Cheerleader", "a cheerleader outfit"],
    
    vas's avatar
    vas committed
    				["Clubslut netting", "clubslut netting"],
    				["Cutoffs and a t-shirt", "cutoffs and a t-shirt"],
    
    deepmurk's avatar
    deepmurk committed
    				["Cutoffs", "cutoffs"],
    
    deepmurk's avatar
    deepmurk committed
    				["Cybersuit", "a cybersuit"],
    
    vas's avatar
    vas committed
    				["Fallen nun", "a fallen nuns habit"],
    
    Pregmodder's avatar
    Pregmodder committed
    				["Halter top dress", "a halter top dress"],
    
    vas's avatar
    vas committed
    				["Hijab and abaya", "a hijab and abaya"],
    
    deepmurk's avatar
    deepmurk committed
    				["Jeans", "jeans"],
    
    klorpa's avatar
    klorpa committed
    				["Kitty lingerie", "kitty lingerie"],
    
    vas's avatar
    vas committed
    				["Latex catsuit", "a latex catsuit"],
    
    deepmurk's avatar
    deepmurk committed
    				["Leather pants and a tube top", "leather pants and a tube top"],
    
    deepmurk's avatar
    deepmurk committed
    				["Leather pants and pasties", "leather pants and pasties"],
    				["Leather pants", "leather pants"],
    
    klorpa's avatar
    klorpa committed
    				["Leotard", "a leotard"],
    
    vas's avatar
    vas committed
    				["Maid (nice)", "a nice maid outfit"],
    				["Maid (slutty)", "a slutty maid outfit"],
    				["Mini dress", "a mini dress"],
    
    vas's avatar
    vas committed
    				["Monokini", "a monokini"],
    
    vas's avatar
    vas committed
    				["Nice lingerie", "attractive lingerie"],
    				["Nurse (nice)", "a nice nurse outfit"],
    
    klorpa's avatar
    klorpa committed
    				["Nurse (slutty)", "a slutty nurse outfit"],
    
    deepmurk's avatar
    deepmurk committed
    				["One-piece swimsuit", "a one-piece swimsuit"],
    
    klorpa's avatar
    klorpa committed
    				["Overalls", "overalls"],
    
    deepmurk's avatar
    deepmurk committed
    				["Over-sized t-shirt and boyshorts", "an oversized t-shirt and boyshorts"],
    
    deepmurk's avatar
    deepmurk committed
    				["Over-sized t-shirt", "an oversized t-shirt"],
    				["Panties", "panties"],
    
    Pregmodder's avatar
    Pregmodder committed
    				["Pasties", "pasties"],
    
    klorpa's avatar
    klorpa committed
    				["Pasties and panties", "panties and pasties"],
    
    deepmurk's avatar
    deepmurk committed
    				["Scalemail bikini", "a scalemail bikini"],
    
    vas's avatar
    vas committed
    				["Schoolgirl", "a schoolgirl outfit"],
    				["Slave gown", "a slave gown"],
    				["Slutty outfit", "a slutty outfit"],
    
    deepmurk's avatar
    deepmurk committed
    				["Spats and tank top", "spats and a tank top"],
    				["Sport shorts and a sports bra", "sport shorts and a sports bra"],
    
    klorpa's avatar
    klorpa committed
    				["Sport shorts and a t-shirt", "sport shorts and a t-shirt"],
    
    deepmurk's avatar
    deepmurk committed
    				["Sport shorts", "sport shorts"],
    
    deepmurk's avatar
    deepmurk committed
    				["Sports bra", "a sports bra"],
    
    Pregmodder's avatar
    Pregmodder committed
    				["String bikini", "a string bikini"],
    
    vas's avatar
    vas committed
    				["Succubus costume", "a succubus outfit"],
    
    klorpa's avatar
    klorpa committed
    				["Suit (nice)", "nice business attire"],
    
    				["Suit (slutty)", "slutty business attire"],
    
    				["Sweater and cutoffs", "a sweater and cutoffs"],
    
    deepmurk's avatar
    deepmurk committed
    				["Sweater and panties", "a sweater and panties"],
    				["Sweater", "a sweater"],
    
    deepmurk's avatar
    deepmurk committed
    				["T-shirt and jeans", "a t-shirt and jeans"],
    
    klorpa's avatar
    klorpa committed
    				["T-shirt and panties", "a t-shirt and panties"],
    
    deepmurk's avatar
    deepmurk committed
    				["T-shirt and thong", "a t-shirt and thong"],
    
    deepmurk's avatar
    deepmurk committed
    				["T-shirt", "a t-shirt"],
    				["Tank-top and panties", "a tank-top and panties"],
    				["Tank-top", "a tank-top"],
    				["Thong", "a thong"],
    				["Tube top and thong", "a tube top and thong"],
    				["Tube top", "a tube top"]
    
    vas's avatar
    vas committed
    			];
    
    Pregmodder's avatar
    Pregmodder committed
    			const spclothes = [
    				["Battlearmor", "battlearmor"],
    				["Biyelgee costume", "a biyelgee costume"],
    				["Burkini", "a burkini"],
    				["Burqa", "a burqa"],
    				["Dirndl", "a dirndl"],
    
    deepmurk's avatar
    deepmurk committed
    				["Gothic Lolita Dress", "a gothic lolita dress"],
    				["Hanbok", "a hanbok"],
    				["Hijab and blouse", "a hijab and blouse"],
    
    deepmurk's avatar
    deepmurk committed
    				["Ku Klux Klan Robe", "a klan robe"],
    
    deepmurk's avatar
    deepmurk committed
    				["Ku Klux Klan Robe (slutty)", "a slutty klan robe"],
    
    Pregmodder's avatar
    Pregmodder committed
    				["Lederhosen", "lederhosen"],
    				["Mounty outfit", "a mounty outfit"],
    				["Military uniform", "a military uniform"],
    				["Niqab and abaya", "a niqab and abaya"],
    
    deepmurk's avatar
    deepmurk committed
    				["Police Uniform", "a police uniform"],
    				["Pony outfit (nice)", "a nice pony outfit"],
    				["Pony outfit (slutty)", "a slutty pony outfit"],
    
    Pregmodder's avatar
    Pregmodder committed
    				["Red Army uniform", "a red army uniform"],
    
    klorpa's avatar
    klorpa committed
    				["Santa dress", "a Santa dress"],
    				["Schutzstaffel uniform (nice)", "a schutzstaffel uniform"],
    				["Schutzstaffel uniform (slutty)", "a slutty schutzstaffel uniform"],
    
    deepmurk's avatar
    deepmurk committed
    				["Striped Bra", "a striped bra"],
    				["Striped Panties", "striped panties"],
    				["Striped Underwear", "striped underwear"],
    
    Pregmodder's avatar
    Pregmodder committed
    				["Skimpy battledress", "battledress"],
    
    deepmurk's avatar
    deepmurk committed
    				["Skimpy loincloth", "a skimpy loincloth"],
    
    Pregmodder's avatar
    Pregmodder committed
    			];
    
    vas's avatar
    vas committed
    			const fsnclothes = [
    				["Body oil (FS)", "body oil"],
    				["Bunny outfit (FS)", "a bunny outfit"],
    				["Chattel habit (FS)", "a chattel habit"],
    				["Conservative clothing (FS)", "conservative clothing"],
    				["Harem gauze (FS)", "harem gauze"],
    				["Huipil (FS)", "a huipil"],
    				["Kimono (FS)", "a kimono"],
    				["Maternity dress (FS)", "a maternity dress"],
    				["Maternity lingerie (FS)", "attractive lingerie for a pregnant woman"],
    
    klorpa's avatar
    klorpa committed
    				["Qipao (nice) (FS)", "a long qipao"],
    				["Qipao (slutty) (FS)", "a slutty qipao"],
    
    vas's avatar
    vas committed
    				["Stretch pants and a crop-top (FS)", "stretch pants and a crop-top"],
    				["Toga (FS)", "a toga"],
    				["Western clothing (FS)", "Western clothing"],
    			];
    
    DCoded's avatar
    DCoded committed
    			spclothes.forEach(pair => { if (isItemAccessible(pair[1])) { nclothes.push(pair); } });
    			fsnclothes.forEach(pair => { if (isItemAccessible(pair[1])) { nclothes.push(pair); } });
    
    vas's avatar
    vas committed
    			const nice = new ListSubSection(this, "Nice", nclothes);
    
    vas's avatar
    vas committed
    			this.appendChild(nice);
    
    			const hclothes = [
    				["Nude", "no clothing"],
    				["Penitent nun", "a penitent nuns habit"],
    				["Restrictive latex", "restrictive latex"],
    				["Shibari ropes", "shibari ropes"],
    				["Uncomfortable straps", "uncomfortable straps"]
    			];
    			const fshclothes = [
    				["Chains (FS)", "chains"],
    			];
    
    DCoded's avatar
    DCoded committed
    			fshclothes.forEach(pair => { if (isItemAccessible(pair[1])) { hclothes.push(pair); } });
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    			const harsh = new ListSubSection(this, "Harsh", hclothes);
    
    vas's avatar
    vas committed
    			this.appendChild(harsh);
    
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.clothes);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.clothes = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    	class CollarList extends List {
    		constructor() {
    			const items = [
    				["No collar", "none"],
    			];
    			super("Collar", items);
    
    			const ncollars = [
    				["Stylish leather", "stylish leather"],
    				["Satin choker", "satin choker"],
    				["Silken Ribbon", "silk ribbon"],
    				["Heavy Gold", "heavy gold"],
    				["Pretty jewelry", "pretty jewelry"],
    
    klorpa's avatar
    klorpa committed
    				["Bell", "bell collar"],
    
    vas's avatar
    vas committed
    				["Cowbell", "leather with cowbell"]
    			];
    
    DCoded's avatar
    DCoded committed
    			if (V.seeAge !== 0) { ncollars.push(["Nice retirement counter", "nice retirement counter"]); }
    
    vas's avatar
    vas committed
    			const fsncollars = [
    				["Bowtie collar", "bowtie"],
    
    klorpa's avatar
    klorpa committed
    				["Ancient Egyptian", "ancient Egyptian"],
    
    vas's avatar
    vas committed
    			];
    
    DCoded's avatar
    DCoded committed
    			fsncollars.forEach(pair => { if (isItemAccessible(pair[1])) { ncollars.push(pair); } });
    
    vas's avatar
    vas committed
    			const nice = new ListSubSection(this, "Nice", ncollars);
    
    vas's avatar
    vas committed
    			this.appendChild(nice);
    
    
    brickode's avatar
    brickode committed
    			setup.harshCollars.forEach(item => {
    
    DCoded's avatar
    DCoded committed
    				if (item.fs === "seeAge" && V.seeAge === 0) {
    					return;
    				} else if (item.fs === "seePreg" && V.seePreg === 0) {
    					return;
    				} else if (item.rs === "buyGag" && V.toysBoughtGags !== 1) {
    					return;
    
    DCoded's avatar
    DCoded committed
    				} else {
    					hcollars.push([item.name, item.value]);
    				}
    
    vas's avatar
    vas committed
    			const harsh = new ListSubSection(this, "Harsh", hcollars);
    
    vas's avatar
    vas committed
    			this.appendChild(harsh);
    
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.collar);
    			this.onchange = (value) => current_rule.set.collar = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class ShoeList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Shoes", setup.shoes.map(i => [i.name, i.value]));
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.shoes);
    			this.onchange = (value) => current_rule.set.shoes = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class CorsetList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const bellies = [];
    
    			setup.bellyAccessories.forEach(acc => {
    
    DCoded's avatar
    DCoded committed
    				if (acc.fs === undefined && acc.rs === undefined) {
    
    					bellies.push([acc.name, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				} else if (acc.fs === "repopulation" && V.arcologies[0].FSRepopulationFocus !== "unset") {
    
    Skriv's avatar
    Skriv committed
    					bellies.push([`${acc.name} (FS)`, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				} else if (acc.rs === "boughtBelly" && V.clothesBoughtBelly === 1) {
    
    Skriv's avatar
    Skriv committed
    					bellies.push([`${acc.name} (Purchased)`, acc.value]);
    
    DCoded's avatar
    DCoded committed
    }
    
    vas's avatar
    vas committed
    			});
    			super("Corsetage", bellies);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.bellyAccessory);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.bellyAccessory = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	class LeggingsList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    
    				["none"],
    				["short stockings"],
    				["long stockings"],
    
    vas's avatar
    vas committed
    			];
    
    			super("Leg accessory", items, true, false, true);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.legAccessory);
    			this.onchange = (value) => current_rule.set.legAccessory = value;
    		}
    	}
    
    
    	class VagChastityList extends List {
    
    		constructor() {
    			const chaste = [
    
    				["none", 0],
    				["chastity", 1],
    
    			super("Vaginal chastity", chaste, true, false, true);
    
    			this.setValue(current_rule.set.chastityVagina);
    			this.onchange = (value) => current_rule.set.chastityVagina = value;
    		}
    
    klorpa's avatar
    klorpa committed
    	}
    
    	class VagAccVirginsList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const accs = [];
    
    			setup.vaginalAccessories.forEach(acc => {
    
    DCoded's avatar
    DCoded committed
    				if (acc.fs === undefined && acc.rs === undefined) {
    
    					accs.push([acc.name, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				} else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1) {
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name} (Purchased)`, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				}
    
    vas's avatar
    vas committed
    			});
    
    vas's avatar
    vas committed
    			super("Vaginal accessories for virgins", accs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.virginAccessory);
    			this.onchange = (value) => current_rule.set.virginAccessory = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class VagAccAVirginsList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const accs = [];
    
    			setup.vaginalAccessories.forEach(acc => {
    
    DCoded's avatar
    DCoded committed
    				if (acc.fs === undefined && acc.rs === undefined) {
    
    					accs.push([acc.name, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				} else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1) {
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name} (Purchased)`, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				}
    
    vas's avatar
    vas committed
    			});
    
    vas's avatar
    vas committed
    			super("Vaginal accessories for anal virgins", accs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.aVirginAccessory);
    			this.onchange = (value) => current_rule.set.aVirginAccessory = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class VagAccOtherList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const accs = [];
    
    			setup.vaginalAccessories.forEach(acc => {
    
    DCoded's avatar
    DCoded committed
    				if (acc.fs === undefined && acc.rs === undefined) {
    
    					accs.push([acc.name, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				} else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1) {
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name} (Purchased)`, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				}
    
    vas's avatar
    vas committed
    			});
    
    vas's avatar
    vas committed
    			super("Vaginal accessories for other slaves", accs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.vaginalAccessory);
    			this.onchange = (value) => current_rule.set.vaginalAccessory = value;
    
    vas's avatar
    vas committed
    		}
    
    	class VaginalAttachmentsList extends ListSelector {
    
    		constructor() {
    
    DCoded's avatar
    DCoded committed
    			const accs = [];
    
    			setup.vaginalAttachments.forEach(acc => {
    
    DCoded's avatar
    DCoded committed
    				if (acc.fs === undefined && acc.rs === undefined) {
    
    					accs.push([acc.name, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				} else if (acc.rs === "buyVaginalAttachments" && V.toysBoughtVaginalAttachments === 1) {
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name} (Purchased)`, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				}
    
    DCoded's avatar
    DCoded committed
    			});
    
    			super("Vaginal attachments for slaves with vaginal accessories", accs);
    			this.setValue(current_rule.set.vaginalAttachment);
    			this.onchange = (value) => current_rule.set.vaginalAttachment = value;
    		}
    
    vas's avatar
    vas committed
    	}
    
    DCoded's avatar
    DCoded committed
    
    
    	class DickChastityList extends List {
    
    		constructor() {
    			const items = [
    
    				["none", 0],
    				["chastity cage", 1],
    
    			super("Penile chastity", items, true, false, true);
    
    			this.setValue(current_rule.set.chastityPenis);
    			this.onchange = (value) => current_rule.set.chastityPenis = value;
    		}
    
    klorpa's avatar
    klorpa committed
    	}
    
    vas's avatar
    vas committed
    
    
    	class DickAccVirginsList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Dick accessories for anal virgins", setup.dickAccessories.map(i => [i.name, i.value]));
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.aVirginDickAccessory);
    			this.onchange = (value) => current_rule.set.aVirginDickAccessory = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class DickAccOtherList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Dick accessories for other slaves", setup.dickAccessories.map(i => [i.name, i.value]));
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.dickAccessory);
    			this.onchange = (value) => current_rule.set.dickAccessory = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class AnalChastityList extends List {
    
    		constructor() {
    			const items = [
    
    				["none", 0],
    				["chastity", 1],
    
    			super("Anal chastity", items, true, false, true);
    
    			this.setValue(current_rule.set.chastityAnus);
    			this.onchange = (value) => current_rule.set.chastityAnus = value;
    		}
    
    klorpa's avatar
    klorpa committed
    	}
    
    	class ButtplugsVirginsList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const accs = [];
    
    			setup.buttplugs.forEach(acc => {
    
    DCoded's avatar
    DCoded committed
    				if (acc.fs === undefined && acc.rs === undefined) {
    
    					accs.push([acc.name, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				} else if (acc.rs === "buyBigPlugs" && V.toysBoughtButtPlugs === 1) {
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name} (Purchased)`, acc.value]);
    
    DCoded's avatar
    DCoded committed
    }
    
    vas's avatar
    vas committed
    			});
    
    vas's avatar
    vas committed
    			super("Buttplugs for anal virgins", accs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.aVirginButtplug);
    			this.onchange = (value) => current_rule.set.aVirginButtplug = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class ButtplugsOtherList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const accs = [];
    
    			setup.buttplugs.forEach(acc => {
    
    DCoded's avatar
    DCoded committed
    				if (acc.fs === undefined && acc.rs === undefined) {
    
    					accs.push([acc.name, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				} else if (acc.rs === "buyBigPlugs" && V.toysBoughtButtPlugs === 1) {
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name} (Purchased)`, acc.value]);
    
    DCoded's avatar
    DCoded committed
    }
    
    vas's avatar
    vas committed
    			});
    
    vas's avatar
    vas committed
    			super("Buttplugs for other slaves", accs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.buttplug);
    			this.onchange = (value) => current_rule.set.buttplug = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class ButtplugAttachmentsList extends ListSelector {
    
    			setup.buttplugAttachments.forEach(acc => {
    
    DCoded's avatar
    DCoded committed
    				if (acc.fs === undefined && acc.rs === undefined) {
    
    					accs.push([acc.name, acc.value]);
    
    DCoded's avatar
    DCoded committed
    				} else if (acc.rs === "buyTails" && V.toysBoughtButtPlugTails === 1) {
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name} (Purchased)`, acc.value]);
    
    DCoded's avatar
    DCoded committed
    }
    
    			});
    			super("Buttplug attachments for slaves with buttplugs", accs);
    			this.setValue(current_rule.set.buttplugAttachment);
    			this.onchange = (value) => current_rule.set.buttplugAttachment = value;
    		}
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    	class ImplantVolumeList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    
    				["no changes", -1],
    				["empty implant", 0],
    				["early pregnancy", 1500],
    				["second trimester pregnancy", 5000],
    				["full-term pregnancy", 15000],
    				["full-term with twins", 30000],
    				["full-term with triplets", 45000],
    				["full-term with quadruplets", 60000],
    				["full-term with quintuplets", 75000],
    				["full-term with sextuplets", 90000],
    				["full-term with septuplets", 105000],
    				["full-term with octuplets", 120000]
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Belly implant target volume (if present)", pairs, false);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.bellyImplantVol);
    			this.onchange = (value) => current_rule.set.bellyImplantVol = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class AutosurgerySwitch extends BooleanSwitch {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Assistant-applied implants (Autosurgery global switch)", [0, 1]);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.autoSurgery);
    			this.onchange = (value) => current_rule.set.autoSurgery = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    vas's avatar
    vas committed
    
    
    	class IntensiveGrowthSwitch extends BooleanSwitch {
    
    ezsh's avatar
    ezsh committed
    		constructor() {
    
    			super("Use intensive growth drugs for healthy slaves", [0, 1]);
    
    			this.setValue(current_rule.set.growth.intensity);
    			this.onchange = (value) => current_rule.set.growth.intensity = value;
    
    	class HyperGrowthSwitch extends BooleanSwitch {
    
    kopareigns's avatar
    kopareigns committed
    		constructor() {
    
    			super("Use hyper growth drugs", [0, 1]);
    
    kopareigns's avatar
    kopareigns committed
    			this.setValue(current_rule.set.hyper_drugs);
    			this.onchange = (value) => current_rule.set.hyper_drugs = value;
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class GrowthList extends Options {
    		constructor() {
    			super();
    			this.sublists = [];
    			const pairs = [
    
    				[capFirstChar(noDefaultSetting.text), () => this.nds()],
    
    vas's avatar
    vas committed
    				["Girlish figure", () => this.girlish()],
    				["Stacked figure", () => this.stacked()],
    				["Huge but functional", () => this.huge()],
    				["Unlimited", () => this.unlimited()],
    				["None", () => this.none()]
    			];
    			pairs.forEach(pair => this.appendChild(new OptionsItem(...pair)));
    
    			this.breasts = new BreastGrowthList();
    			this.butts = new ButtGrowthList();
    			this.lips = new LipGrowthList();
    			this.sublists.push(this.breasts, this.butts, this.lips);
    
    			if (V.seeDicks > 0 || V.makeDicks > 0) {
    				this.dicks = new DickGrowthList();
    				this.balls = new BallGrowthList();
    				this.sublists.push(this.dicks, this.balls);
    			}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    			this.sublists.forEach(i => this.appendChild(i));
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		render() {
    			const elem = document.createElement("div");
    			const span = document.createElement("span");
    
    vas's avatar
    vas committed
    			span.innerHTML = "Growth hormone regimes for healthy slaves: ";
    
    vas's avatar
    vas committed
    			elem.appendChild(span);
    			return elem;
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		nds() {
    
    			[this.breasts, this.butts, this.lips, this.dicks, this.balls].forEach(i => {
    
    ezsh's avatar
    ezsh committed
    				i.setValue(null);
    
    				i.propagateChange();
    
    vas's avatar
    vas committed
    			});
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		girlish() {
    
    ezsh's avatar
    ezsh committed
    			this.breasts.setValue(App.RA.makeTarget('<=', 350));
    			this.butts.setValue(App.RA.makeTarget('<=', 2));
    			this.lips.setValue(App.RA.makeTarget('<=', 25));
    			if (this.dicks) this.dicks.setValue(App.RA.makeTarget('==', 0));
    			if (this.balls) this.balls.setValue(App.RA.makeTarget('==', 0));
    
    vas's avatar
    vas committed
    			this.sublists.forEach(i => i.propagateChange());
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		stacked() {
    
    ezsh's avatar
    ezsh committed
    			this.breasts.setValue(App.RA.makeTarget('>=', 1000));
    			this.butts.setValue(App.RA.makeTarget('>=', 5));
    			this.lips.setValue(App.RA.makeTarget('>=', 25));
    			if (this.dicks) this.dicks.setValue(App.RA.makeTarget('>=', 4));
    			if (this.balls) this.balls.setValue(App.RA.makeTarget('>=', 4));
    
    vas's avatar
    vas committed
    			this.sublists.forEach(i => i.propagateChange());
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		huge() {
    
    ezsh's avatar
    ezsh committed
    			this.breasts.setValue(App.RA.makeTarget('>=', 9000));
    			this.butts.setValue(App.RA.makeTarget('>=', 10));
    			this.lips.setValue(App.RA.makeTarget('>=', 45));
    			if (this.dicks) this.dicks.setValue(App.RA.makeTarget('>=', 6));
    			if (this.balls) this.balls.setValue(App.RA.makeTarget('>=', 6));
    
    vas's avatar
    vas committed
    			this.sublists.forEach(i => i.propagateChange());
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		unlimited() {
    
    ezsh's avatar
    ezsh committed
    			this.breasts.setValue(App.RA.makeTarget('>=', 48000));
    			this.butts.setValue(App.RA.makeTarget('>=', 20));
    			this.lips.setValue(App.RA.makeTarget('>=', 100));
    			if (this.dicks) this.dicks.setValue(App.RA.makeTarget('>=', 30));
    			if (this.balls) this.balls.setValue(App.RA.makeTarget('>=', 125));
    
    vas's avatar
    vas committed
    			this.sublists.forEach(i => i.propagateChange());
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		none() {
    
    			this.sublists.forEach(i => {
    
    ezsh's avatar
    ezsh committed
    				i.setValue(App.RA.makeTarget('==', 0));
    
    				i.propagateChange();
    
    vas's avatar
    vas committed
    			});
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class BreastGrowthList extends NumberRange {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    
    klorpa's avatar
    klorpa committed
    				["B-Cup", 350],
    				["D-Cup", 1000],
    
    				["monstrous", 9000],
    				["unlimited", 48000],
    				["none", 0]
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Breasts", pairs, true, 0, 48000, true);
    
    			this.setValue(current_rule.set.growth.boobs);
    			this.onchange = (value) => current_rule.set.growth.boobs = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class ButtGrowthList extends NumberRange {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    
    				["cute", 2],
    				["big", 4],
    				["huge", 6],
    				["unlimited", 20],
    				["none", 0]
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Butts", pairs, true, 0, 20, true);
    
    			this.setValue(current_rule.set.growth.butt);
    			this.onchange = (value) => current_rule.set.growth.butt = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class LipGrowthList extends NumberRange {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    
    				["plump", 25],
    				["beestung", 45],
    				["facepussy", 100],
    				["none", 0]
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Lips", pairs, true, 0, 100, true);
    
    			this.setValue(current_rule.set.growth.lips);
    			this.onchange = (value) => current_rule.set.growth.lips = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class DickGrowthList extends NumberRange {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    
    				["above average", 4],
    				["pornstar", 6],
    				["unlimited", 30],
    				["none", 0]
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Dicks, if present", pairs, true, 0, 30, true);
    
    			this.setValue(current_rule.set.growth.dick);
    			this.onchange = (value) => current_rule.set.growth.dick = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class BallGrowthList extends NumberRange {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    
    				["sizable", 4],
    				["cumslave", 6],
    				["unlimited", 125],
    				["none", 0]
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Balls, if present", pairs, true, 0, 125, true);
    
    			this.setValue(current_rule.set.growth.balls);
    			this.onchange = (value) => current_rule.set.growth.balls = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}