Skip to content
Snippets Groups Projects
rulesAssistantOptions.js 102 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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 {
    
    vas's avatar
    vas committed
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Behavior Settings");
    
    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 {
    		constructor() {
    			super("Other Settings");
    			this.appendChild(new LabelList());
    
    			this.appendChild(new LabelRemoveList());
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    	class CosmeticSection extends Section {
    
    vas's avatar
    vas committed
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Cosmetic Settings", true);
    
    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 {
    
    vas's avatar
    vas committed
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Body Mod Settings", true);
    
    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());
    
    vas's avatar
    vas committed
    			if (V.seeDicks || V.makeDicks)
    
    vas's avatar
    vas committed
    				this.appendChild(new DickTattooList());
    			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());
    			this.appendChild(new BodyHairSurgeryList());
    			this.appendChild(new HairSurgeryList());
    
    vas's avatar
    vas committed
    			if (V.bellyImplants > 0)
    				this.appendChild(new BellyImplantList());
    
    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 = [
    
    deepmurk's avatar
    deepmurk committed
    				["No default clothes setting", "no default setting"],
    
    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"],
    
    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"],
    			];
    
    Pregmodder's avatar
    Pregmodder committed
    			spclothes.forEach(pair => { if (isItemAccessible(pair[1])) nclothes.push(pair); });
    
    vas's avatar
    vas committed
    			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"],
    			];
    			fshclothes.forEach(pair => { if (isItemAccessible(pair[1])) hclothes.push(pair); });
    
    
    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 default collar setting", "no default setting"],
    				["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"]
    			];
    			if (V.seeAge !== 0)
    				ncollars.push(["Nice retirement counter", "nice retirement counter"]);
    			const fsncollars = [
    				["Bowtie collar", "bowtie"],
    
    klorpa's avatar
    klorpa committed
    				["Ancient Egyptian", "ancient Egyptian"],
    
    vas's avatar
    vas 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);
    
    
    			const hcollars = [];
    			setup.harshCollars.forEach(item => {
    
    klorpa's avatar
    klorpa committed
    				if (item.fs === "seeAge" && V.seeAge === 0) return;
    
    Pregmodder's avatar
    Pregmodder committed
    				else if (item.fs === "seePreg" && V.seePreg === 0) return;
    
    vas's avatar
    vas committed
    				else if (item.rs === "buyGag" && V.toysBoughtGags !== 1) return;
    
    				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 List {
    		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
    	}
    
    
    vas's avatar
    vas committed
    	class CorsetList extends List {
    		constructor() {
    			const bellies = [];
    			setup.bellyAccessories.forEach(acc => {
    				if (acc.fs === undefined && acc.rs === undefined)
    					bellies.push([acc.name, acc.value]);
    				else if (acc.fs === "repopulation" && V.arcologies[0].FSRepopulationFocus !== "unset")
    
    Skriv's avatar
    Skriv committed
    					bellies.push([`${acc.name } (FS)`, acc.value]);
    
    vas's avatar
    vas committed
    				else if (acc.rs === "boughtBelly" && V.clothesBoughtBelly === 1)
    
    Skriv's avatar
    Skriv committed
    					bellies.push([`${acc.name } (Purchased)`, acc.value]);
    
    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
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class LeggingsList extends List {
    		constructor() {
    			const items = [
    
    Skriv's avatar
    Skriv committed
    				["No default setting", "no default setting"],
    
    				["None", "none"],
    				["Short stockings", "short stockings"],
    				["Long stockings", "long stockings"],
    
    vas's avatar
    vas committed
    			];
    			super("Leg accessory", items);
    			this.setValue(current_rule.set.legAccessory);
    			this.onchange = (value) => current_rule.set.legAccessory = value;
    		}
    	}
    
    
    	class VagChastityList extends List {
    		constructor() {
    			const chaste = [
    
    Pregmodder's avatar
    Pregmodder committed
    				["No default setting", "no default setting"],
    				["None", 0],
    				["Chastity", 1],
    
    			];
    			super("Vaginal chastity", chaste);
    			this.setValue(current_rule.set.chastityVagina);
    			this.onchange = (value) => current_rule.set.chastityVagina = value;
    		}
    
    klorpa's avatar
    klorpa committed
    	}
    
    vas's avatar
    vas committed
    	class VagAccVirginsList extends List {
    		constructor() {
    			const accs = [];
    			setup.vaginalAccessories.forEach(acc => {
    				if (acc.fs === undefined && acc.rs === undefined)
    					accs.push([acc.name, acc.value]);
    				else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1)
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name } (Purchased)`, acc.value]);
    
    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
    	}
    
    
    vas's avatar
    vas committed
    	class VagAccAVirginsList extends List {
    		constructor() {
    			const accs = [];
    			setup.vaginalAccessories.forEach(acc => {
    				if (acc.fs === undefined && acc.rs === undefined)
    					accs.push([acc.name, acc.value]);
    				else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1)
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name } (Purchased)`, acc.value]);
    
    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
    	}
    
    
    vas's avatar
    vas committed
    	class VagAccOtherList extends List {
    		constructor() {
    			const accs = [];
    			setup.vaginalAccessories.forEach(acc => {
    				if (acc.fs === undefined && acc.rs === undefined)
    					accs.push([acc.name, acc.value]);
    				else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1)
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name } (Purchased)`, acc.value]);
    
    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
    		}
    
    brickode's avatar
    brickode committed
    	class VaginalAttachmentsList extends List {
    
    		constructor() {
    
    DCoded's avatar
    DCoded committed
    			const accs = [];
    			setup.vaginalAttachments.forEach(acc => {
    				if (acc.fs === undefined && acc.rs === undefined)
    					accs.push([acc.name, acc.value]);
    				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
    			});
    
    			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 = [
    
    Pregmodder's avatar
    Pregmodder committed
    				["No default setting", "no default setting"],
    				["None", 0],
    				["Chastity cage", 1],
    
    			];
    			super("Penile chastity", items);
    			this.setValue(current_rule.set.chastityPenis);
    			this.onchange = (value) => current_rule.set.chastityPenis = value;
    		}
    
    klorpa's avatar
    klorpa committed
    	}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    	class DickAccVirginsList extends List {
    		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
    	}
    
    
    vas's avatar
    vas committed
    	class DickAccOtherList extends List {
    		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 = [
    
    Pregmodder's avatar
    Pregmodder committed
    				["No default setting", "no default setting"],
    				["None", 0],
    				["Chastity", 1],
    
    			];
    			super("Anal chastity", items);
    			this.setValue(current_rule.set.chastityAnus);
    			this.onchange = (value) => current_rule.set.chastityAnus = value;
    		}
    
    klorpa's avatar
    klorpa committed
    	}
    
    vas's avatar
    vas committed
    	class ButtplugsVirginsList extends List {
    		constructor() {
    			const accs = [];
    			setup.buttplugs.forEach(acc => {
    				if (acc.fs === undefined && acc.rs === undefined)
    					accs.push([acc.name, acc.value]);
    				else if (acc.rs === "buyBigPlugs" && V.toysBoughtButtPlugs === 1)
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name } (Purchased)`, acc.value]);
    
    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
    	}
    
    
    vas's avatar
    vas committed
    	class ButtplugsOtherList extends List {
    		constructor() {
    			const accs = [];
    			setup.buttplugs.forEach(acc => {
    				if (acc.fs === undefined && acc.rs === undefined)
    					accs.push([acc.name, acc.value]);
    				else if (acc.rs === "buyBigPlugs" && V.toysBoughtButtPlugs === 1)
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name } (Purchased)`, acc.value]);
    
    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 List {
    		constructor() {
    			const accs = [];
    			setup.buttplugAttachments.forEach(acc => {
    				if (acc.fs === undefined && acc.rs === undefined)
    					accs.push([acc.name, acc.value]);
    				else if (acc.rs === "buyTails" && V.toysBoughtButtPlugTails === 1)
    
    Skriv's avatar
    Skriv committed
    					accs.push([`${acc.name } (Purchased)`, acc.value]);
    
    			});
    			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
    
    
    vas's avatar
    vas committed
    	class ImplantVolumeList extends List {
    		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
    			super("Belly implant target volume (if present)", pairs);
    
    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 List {
    		constructor() {
    			const pairs = [
    				["Activate", 1],
    				["Off", 0],
    			];
    			super("Assistant-applied implants (Autosurgery global switch)", pairs);
    
    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
    
    
    kopareigns's avatar
    kopareigns committed
    	class HyperGrowthSwitch extends List {
    		constructor() {
    			const pairs = [
    				["No", 0],
    				["Yes", 1],
    			];
    
    Pregmodder's avatar
    Pregmodder committed
    			super("Use hyper growth drugs", pairs);
    
    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 = [
    				["No default setting", () => this.nds()],
    				["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 => {
    				i.setValue("no default change");
    				i.propagateChange();
    			});
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		girlish() {
    			this.breasts.setValue(350);
    			this.butts.setValue(2);
    			this.lips.setValue(25);
    			if (this.dicks) this.dicks.setValue(0);
    			if (this.balls) this.balls.setValue(0);
    			this.sublists.forEach(i => i.propagateChange());
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		stacked() {
    			this.breasts.setValue(1000);
    
    			this.butts.setValue(5);
    
    vas's avatar
    vas committed
    			this.lips.setValue(25);
    			if (this.dicks) this.dicks.setValue(4);
    			if (this.balls) this.balls.setValue(4);
    			this.sublists.forEach(i => i.propagateChange());
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		huge() {
    			this.breasts.setValue(9000);
    			this.butts.setValue(10);
    			this.lips.setValue(45);
    			if (this.dicks) this.dicks.setValue(6);
    			if (this.balls) this.balls.setValue(6);
    			this.sublists.forEach(i => i.propagateChange());
    		}
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    		unlimited() {
    			this.breasts.setValue(48000);
    
    x's avatar
    x committed
    			this.butts.setValue(20);
    
    vas's avatar
    vas committed
    			this.lips.setValue(100);
    
    x's avatar
    x committed
    			if (this.dicks) this.dicks.setValue(30);
    			if (this.balls) this.balls.setValue(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 => {
    				i.setValue(0);
    				i.propagateChange();
    			});
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class BreastGrowthList extends NumberRange {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    				["No default setting", "no default setting"],
    
    klorpa's avatar
    klorpa committed
    				["B-Cup", 350],
    				["D-Cup", 1000],
    
    vas's avatar
    vas committed
    				["Monstrous", 9000],
    				["Unlimited", 48000],
    				["None", 0]
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Breasts", pairs, 0, 48000, true);
    
    vas's avatar
    vas committed
    			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 = [
    				["No default setting", "no default setting"],
    				["Cute", 2],
    				["Big", 4],
    				["Huge", 6],
    
    x's avatar
    x committed
    				["Unlimited", 20],
    
    vas's avatar
    vas committed
    				["None", 0]
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Butts", pairs, 0, 20, true);
    
    vas's avatar
    vas committed
    			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 = [
    				["No default setting", "no default setting"],
    				["Plump", 25],
    				["Beestung", 45],
    				["Facepussy", 100],
    				["None", 0]
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Lips", pairs, 0, 100, true);
    
    vas's avatar
    vas committed
    			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 = [
    				["No default setting", "no default setting"],
    				["Above average", 4],
    				["Pornstar", 6],
    
    x's avatar
    x committed
    				["Unlimited", 30],
    
    vas's avatar
    vas committed
    				["None", 0]
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Dicks, if present", pairs, 0, 30, true);
    
    vas's avatar
    vas committed
    			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 = [
    				["No default setting", "no default setting"],
    
    klorpa's avatar
    klorpa committed
    				["Sizable", 4],
    
    vas's avatar
    vas committed
    				["Cumslave", 6],
    
    x's avatar
    x committed
    				["Unlimited", 125],
    
    vas's avatar
    vas committed
    				["None", 0]
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Balls, if present", pairs, 0, 125, true);
    
    vas's avatar
    vas committed
    			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
    	}
    
    
    vas's avatar
    vas committed
    	class CurrativesList extends List {
    		constructor() {
    			const pairs = [
    				["No default setting", "no default setting"],
    
    vas's avatar
    vas committed
    				["None", 0],
    				["Preventatives", 1],
    				["Curatives", 2],
    
    vas's avatar
    vas committed
    			];
    			super("Health drugs", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.curatives);
    			this.onchange = (value) => current_rule.set.curatives = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	class AphrodisiacList extends List {
    		constructor() {
    			const pairs = [
    				["No default setting", "no default setting"],
    
    vas's avatar
    vas committed
    				["None", 0],
    				["Standard", 1],
    				["Extreme", 2],
    				["Anaphrodisiacs", -1]
    
    vas's avatar
    vas committed
    			];
    			super("Aphrodisiacs", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.aphrodisiacs);
    			this.onchange = (value) => current_rule.set.aphrodisiacs = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class ContraceptiveList extends List {
    		constructor() {
    
    klorpa's avatar
    klorpa committed
    			const drugs = [
    
    vas's avatar
    vas committed
    				["No default setting", "no default setting"],
    
    vas's avatar
    vas committed
    				["Contraceptives", true],
    				["Fertile", false],
    
    vas's avatar
    vas committed
    			];
    			super("Contraceptives for fertile slaves", drugs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.preg);
    			this.onchange = (value) => current_rule.set.preg = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    Pregmodder's avatar
    Pregmodder committed
    	class AbortionList extends List {
    		constructor() {
    			const pairs = [
    				["No default setting", "no default setting"],
    				["Abort all", "all"],
    			];
    
    Skriv's avatar
    Skriv committed
    			if (V.pregnancyMonitoringUpgrade === 1 && V.geneticMappingUpgrade === 1) {
    
    Pregmodder's avatar
    Pregmodder committed
    				pairs.push(["Abort boys", "male"]);
    				pairs.push(["Abort girls", "female"]);
    
    Skriv's avatar
    Skriv committed
    			}
    
    Pregmodder's avatar
    Pregmodder committed
    			super("Pregnancy termination", pairs);
    			this.setValue(current_rule.set.abortion);
    			this.onchange = (value) => current_rule.set.abortion = value;
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class PregDrugsList extends List {
    		constructor() {
    			const pairs = [
    
    vas's avatar
    vas committed
    				["No changes", "no default setting"],
    
    vas's avatar
    vas committed
    				["None", "none"],
    
    vas's avatar
    vas committed
    				["Fast gestation", "fast"],
    				["Slow gestation", "slow"],
    
    klorpa's avatar
    klorpa committed
    				["Birth suppressors", "suppress"],
    
    vas's avatar
    vas committed
    				["Birth stimulators", "stimulate"]
    
    vas's avatar
    vas committed
    			];
    			super("Pregnancy control agents for pregnant slaves", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.pregSpeed);
    			this.onchange = (value) => current_rule.set.pregSpeed = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	class FemaleHormonesList extends List {
    		constructor() {
    			const pairs = [
    				["No default setting", "no default setting"],
    
    vas's avatar
    vas committed
    				["Intensive Female", 2],
    				["Female", 1],
    				["None", 0],
    				["Male", -1],
    				["Intensive Male", -2]
    
    vas's avatar
    vas committed
    			];
    			super("Hormones for female slaves", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.XX);
    			this.onchange = (value) => current_rule.set.XX = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	class GeldingHormonesList extends List {
    		constructor() {
    			const pairs = [
    				["No default setting", "no default setting"],
    
    vas's avatar
    vas committed
    				["Intensive Female", 2],
    				["Female", 1],
    				["None", 0],
    				["Male", -1],
    				["Intensive Male", -2]
    
    vas's avatar
    vas committed
    			];
    			super("Hormones for geldings", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.gelding);
    			this.onchange = (value) => current_rule.set.gelding = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	class ShemaleHormonesList extends List {
    		constructor() {
    			const pairs = [
    				["No default setting", "no default setting"],
    
    vas's avatar
    vas committed
    				["Intensive Female", 2],
    				["Female", 1],
    				["None", 0],
    				["Male", -1],
    
    vas's avatar
    vas committed
    				["Intensive Male", -2]
    
    vas's avatar
    vas committed
    			];
    			super("Hormones for shemales", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.XY);
    			this.onchange = (value) => current_rule.set.XY = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	class OtherDrugsList extends List {
    		constructor() {
    
    vas's avatar
    vas committed
    			const drugs = [
    				["No default setting", "no default setting"],
    				["None", "none"],
    				["Fertility drugs", "fertility drugs"],
    				["Psychosuppressants", "psychosuppressants"],
    				["Steroids", "steroids"],
    				["Natural hormone enhancers", "hormone enhancers"],
    				["Hormone blockers", "hormone blockers"],
    
    				["breast injections"],
    				["intensive breast injections"],
    				["butt injections"],
    				["intensive butt injections"],
    				["lip injections"],
    				["penis enhancement"],
    				["intensive penis enhancement"],
    				["testicle enhancement"],
    				["intensive testicle enhancement"],
    
    vas's avatar
    vas committed
    			];
    
    			if (V.growthStim === 1)
    				drugs.push(["Growth Stimulants (Research)", "growth stimulants"]);
    			if (V.precociousPuberty === 1 && V.pubertyHormones) {
    				drugs.push(["Female hormone injections (Research)", "female hormone injections"]);
    				drugs.push(["Male hormone injections (Research)", "male hormone injections"]);
    			}
    			if (V.purchasedSagBGone === 1)
    				drugs.push(["Sag-B-gone (Product)", "sag-B-gone"]);
    
    			if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
    
    vas's avatar
    vas committed
    				drugs.push(["Weight loss pills (FS)", "appetite suppressors"]);
    
    				drugs.push(["breast redistributors"]);
    				drugs.push(["butt redistributors"]);
    
    Pregmodder's avatar
    Pregmodder committed
    				drugs.push(["nipple atrophiers"]);
    
    				drugs.push(["lip atrophiers"]);
    				drugs.push(["penis atrophiers"]);
    				drugs.push(["testicle atrophiers"]);
    
    Pregmodder's avatar
    Pregmodder committed
    				drugs.push(["clitoris atrophiers"]);
    				drugs.push(["labia atrophiers"]);
    
    			}
    			if (V.arcologies[0].FSAssetExpansionistResearch === 1) {
    				drugs.push(["hyper breast injections"]);
    				drugs.push(["hyper butt injections"]);
    				drugs.push(["hyper penis enhancement"]);
    				drugs.push(["hyper testicle enhancement"]);
    			}
    
    vas's avatar
    vas committed
    			if (V.arcologies[0].FSYouthPreferentialistResearch === 1)
    
    vas's avatar
    vas committed
    				drugs.push(["Anti-aging cream (FS)", "anti-aging cream"]);
    			if (V.seeHyperPreg === 1 && V.superFertilityDrugs === 1)
    				drugs.push(["Super fertility drugs", "super fertility drugs"]);
    			super("Other drugs", drugs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.drug);
    			this.onchange = (value) => current_rule.set.drug = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    Pregmodder's avatar
    Pregmodder committed
    	class EnemaList extends List {
    		constructor() {
    			const enemas = [
    				["No default setting", "no default setting"],
    				["None", "none"],
    				["Water", "water"]
    			];
    			if (V.medicalEnema === 1) {
    				enemas.push(
    
    Skriv's avatar
    Skriv committed
    					["Aphrodisiac", "aphrodisiac"],
    					["Curative", "curative"],
    					["Tightener", "tightener"]
    
    Pregmodder's avatar
    Pregmodder committed
    				);
    			}
    			super("Enemas", enemas);
    			this.setValue(current_rule.set.inflationType);
    			this.onchange = (value) => current_rule.set.inflationType = value;
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class DietList extends List {
    		constructor() {
    			const diets = [
    				["no default setting", "no default setting"],
    
    vas's avatar
    vas committed
    				["Healthy diet", "healthy"],
    
    vas's avatar
    vas committed
    				["Fix fat and skinny slaves", "attractive"],
    				["Curvy", 30],
    
    klorpa's avatar
    klorpa committed
    				["Average", 0],
    
    vas's avatar
    vas committed
    				["Thin", -30]
    
    vas's avatar
    vas committed
    			];
    			if (V.feeder === 1) {
    				diets.push(
    
    vas's avatar
    vas committed
    					["Feminine", "XX"],
    					["Masculine", "XY"]
    
    vas's avatar
    vas committed
    				);
    				if (V.dietXXY === 1)
    
    vas's avatar
    vas committed
    					diets.push(["Futanari", "XXY"]);
    
    vas's avatar
    vas committed
    			}
    			if (V.dietCleanse === 1)
    
    vas's avatar
    vas committed
    				diets.push(["Cleansing", "cleansing"]);
    
    vas's avatar
    vas committed
    			if (V.dietFertility === 1)
    
    vas's avatar
    vas committed
    				diets.push(["Fertility", "fertility"]);
    
    vas's avatar
    vas committed
    			if (V.cumProDiet === 1)
    
    vas's avatar
    vas committed
    				diets.push(["Cum production", "cum production"]);
    
    vas's avatar
    vas committed
    
    
    x's avatar
    x committed
    			super("Slave diets", diets, true);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.diet);
    			this.onchange = (value) => current_rule.set.diet = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	class DietGrowthList extends List {
    		constructor() {
    			const pairs = [
    				["On", 1],
    				["Off", 0]
    			];
    			super("Diet support for growth drugs", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.dietGrowthSupport);
    			this.onchange = (value) => current_rule.set.dietGrowthSupport = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	class DietBaseList extends List {
    		constructor() {
    			// TODO: better data structure?
    			const pairs = [
    				["No default setting", {cum: "no default setting", milk: "no default setting"}],
    				["Normal Diet", {cum: 0, milk: 0}],
    				["Cum Added", {cum: 1, milk: 0}],
    				["Milk Added", {cum: 0, milk: 1}],
    				["Cum & Milk Added", {cum: 1, milk: 1}],
    				["Cum-Based", {cum: 2, milk: 0}],
    				["Milk-Based", {cum: 0, milk: 2}],
    			];
    			super("Diet base", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(this.value2string(current_rule.set.dietCum, current_rule.set.dietMilk));
    
    vas's avatar
    vas committed
    			this.onchange = (value) => {
    
    vas's avatar
    vas committed
    				current_rule.set.dietCum = value.cum;
    
    				current_rule.set.dietMilk = value.milk;
    
    kopareigns's avatar
    kopareigns committed
    				this.setValue(this.value2string(current_rule.set.dietCum, current_rule.set.dietMilk));
    
    vas's avatar
    vas committed
    			};
    		}
    
    klorpa's avatar
    klorpa committed
    
    
    vas's avatar
    vas committed
    		value2string(cum, milk) {
    			return `cum: ${cum}, milk: ${milk}`;
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    Pregmodder's avatar
    Pregmodder committed
    	class DietSolidFoodList extends List {
    		constructor() {
    			const pairs = [
    				["No default setting", "no default setting"],
    
    				["Permitted", 0],
    				["Forbidden", 1],
    
    Pregmodder's avatar
    Pregmodder committed
    			];
    			super("Solid food access", pairs);
    			this.setValue(current_rule.set.onDiet);
    			this.onchange = (value) => current_rule.set.onDiet = value;
    		}
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class MuscleList extends NumberRange {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    				["No default setting", "no default setting"],
    
    vas's avatar
    vas committed
    				["None", 0],
    				["Toned", 20],
    				["Ripped", 50],
    				["Massive", 100],
    				["Weak", -20]