Skip to content
Snippets Groups Projects
rulesAssistantOptions.tw 60.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • vas's avatar
    vas committed
    				["Ball gag", "ball gag"],
    				["Bit gag", "bit gag"],
    				["Neck corset", "neck corset"],
    			]
    			if (V.seeAge !== 0)
    				harsh.appendChild(["Cruel retirement counter", "cruel retirement counter"])
    			if (V.toysBoughtGags === 1)
    				harsh.appendChild(["Massive dildo gag", "massive dildo gag"])
    			hcollars.forEach(pair => harsh.appendChild(...pair))
    
    			this.selectValue(V.currentRule.set.collar)
    			this.onchange = (label, value) => V.currentRule.set.collar = value
    		}
    	}
    
    
    	class ShoeList extends List {
    		constructor() {
    			super("Shoes")
    			setup.shoes.forEach(shoes => this.appendChild(new ListItem(shoes)))
    			this.selectValue(V.currentRule.set.shoes)
    			this.onchange = (label, value) => V.currentRule.set.shoes = value
    		}
    	}
    
    	class CorsetList extends List {
    		constructor() {
    			super("Corsetage")
    			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")
    					bellies.push([acc.name + " (FS)", acc.value])
    				else if (acc.rs === "boughtBelly" && V.clothesBoughtBelly === 1)
    					bellies.push([acc.name + " (Purchased)", acc.value])
    			})
    			bellies.forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.bellyAccessory)
    			this.onchange = (label, value) => V.currentRule.set.bellyAccessory
    		}
    	}
    
    	class VagAccVirginsList extends List {
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Vaginal accessories for virgins")
    
    			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)
    					accs.push([acc.name + " (Purchased)", acc.value])
    			})
    			accs.forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.virginAccessory)
    			this.onchange = (label, value) => V.currentRule.set.virginAccessory = value
    		}
    	}
    
    	class VagAccAVirginsList extends List {
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Vaginal accessories for anal virgins")
    			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)
    					accs.push([acc.name + " (Purchased)", acc.value])
    			})
    			accs.forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.aVirginAccessory)
    			this.onchange = (label, value) => V.currentRule.set.aVirginAccessory = value
    
    vas's avatar
    vas committed
    	class VagAccOtherList extends List {
    		constructor() {
    			super("Vaginal accessories for other slaves")
    			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)
    					accs.push([acc.name + " (Purchased)", acc.value])
    			})
    			accs.forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.vaginalAccessory)
    			this.onchange = (label, value) => V.currentRule.set.vaginalAccessory = value
    		}
    	}
    
    	class DickAccVirginsList extends List {
    		constructor() {
    			super("Dick accessories for anal virgins")
    			setup.dickAccessories.forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.aVirginDickAccessory)
    			this.onchange = (label, value) => V.currentRule.set.aVirginDickAccessory = value
    		}
    	}
    
    	class DickAccOtherList extends List {
    		constructor() {
    			super("Dick accessories for other slaves")
    			setup.dickAccessories.forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.dickAccessory)
    			this.onchange = (label, value) => V.currentRule.set.dickAccessory = value
    		}
    	}
    
    	class ButtplugsVirginsList extends List {
    		constructor() {
    			super("Buttplugs for anal virgins")
    			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)
    					accs.push([acc.name + " (Purchased)", acc.value])
    			})
    			accs.forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.aVirginButtplug)
    			this.onchange = (label, value) => V.currentRule.set.aVirginButtplug = value
    		}
    	}
    
    	class ButtplugsOtherList extends List {
    		constructor() {
    			super("Buttplugs for other slaves")
    			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)
    					accs.push([acc.name + " (Purchased)", acc.value])
    			})
    			accs.forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.buttplug)
    			this.onchange = (label, value) => V.currentRule.set.buttplug = value
    		}
    	}
    
    	class ImplantVolumeList extends List {
    		constructor() {
    			super("Belly implant target volume (if present)")
    			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]
    			]
    			pairs.forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.bellyImplantVol)
    			this.onchange = (label, value) => V.currentRule.set.bellyImplantVol = value
    		}
    	}
    
    	class AutosurgerySwitch extends List {
    		constructor() {
    			super("Assistant-applied implants (Autosurgery global switch)")
    			this.appendChild(new ListItem("Activate", "ACTIVE, STAND CLEAR", 1))
    			this.appendChild(new ListItem("Off", "off", 0))
    			this.selectValue(V.currentRule.set.autoSurgery)
    			this.onchange = (label, value) => V.currentRule.set.autoSurgery = value
    		}
    	}
    
    	class GrowthList extends Options {
    		constructor() {
    			super()
    
    vas's avatar
    vas committed
    			this.sublists = []
    
    vas's avatar
    vas committed
    			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)))
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    			this.breasts = new BreastGrowthList()
    			this.butts = new ButtGrowthList()
    			this.lips = new LipGrowthList()
    
    vas's avatar
    vas committed
    			this.sublists.push(this.breasts, this.butts, this.lips)
    
    vas's avatar
    vas committed
    
    
    vas's avatar
    vas committed
    			if (V.seeDicks > 0 || V.makeDicks > 0) {
    				this.dicks = new DickGrowthList()
    				this.balls = new BallGrowthList()
    				this.sublists.push(this.dicks, this.balls)
    			}
    
    			this.sublists.forEach(i => this.appendChild(i))
    
    vas's avatar
    vas committed
    		}
    
    		render() {
    			const elem = document.createElement("div")
    			const span = document.createElement("span")
    			span.innerHTML = "Growth hormone regimes for healthy slaves:"
    			elem.appendChild(span)
    			return elem
    		}
    
    		nds() {
    			[this.breasts, this.butts, this.lips, this.dicks, this.balls].forEach(i => {
    				i.setValue("no default change")
    				i.propagateChange()
    			})
    		}
    
    		girlish() {
    			this.breasts.setValue(350)
    			this.butts.setValue(2)
    			this.lips.setValue(25)
    
    vas's avatar
    vas committed
    			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
    		}
    
    		stacked() {
    			this.breasts.setValue(1000)
    			this.butts.setValue(4)
    			this.lips.setValue(25)
    
    vas's avatar
    vas committed
    			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
    		}
    
    		huge() {
    			this.breasts.setValue(9000)
    			this.butts.setValue(10)
    			this.lips.setValue(45)
    
    vas's avatar
    vas committed
    			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
    		}
    
    		unlimited() {
    			this.breasts.setValue(48000)
    			this.butts.setValue(10)
    			this.lips.setValue(100)
    
    vas's avatar
    vas committed
    			if (this.dicks) this.dicks.setValue(10)
    			if (this.balls) this.balls.setValue(6)
    			this.sublists.forEach(i => i.propagateChange())
    
    vas's avatar
    vas committed
    		}
    
    		none() {
    
    vas's avatar
    vas committed
    			this.sublists.forEach(i => {
    
    vas's avatar
    vas committed
    				i.setValue(0)
    				i.propagateChange()
    			})
    		}
    	}
    
    	class BreastGrowthList extends List {
    
    vas's avatar
    vas committed
    		constructor() {
    			super("Breasts", true)
    			[
    				["No default setting", "no default setting"],
    				["B Cup", 350],
    				["D Cup", 1000],
    				["Monstrous", 9000],
    				["Unlimited", 48000],
    				["None", 0]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.setValue(V.currentRule.set.growth_boobs)
    			this.onchange = (label, value) => V.currentRule.set.growth_boobs = value
    		}
    
    vas's avatar
    vas committed
    	}
    
    	class ButtGrowthList extends List {
    
    vas's avatar
    vas committed
    		constructor() {
    			super("Butts", true)
    			[
    				["No default setting", "no default setting"],
    				["Cute", 2],
    				["Big", 4],
    				["Huge", 6],
    				["Unlimited", 10],
    				["None", 0]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.setValue(V.currentRule.set.growth_butt)
    			this.onchange = (label, value) => V.currentRule.set.growth_butt = value
    		}
    
    vas's avatar
    vas committed
    	}
    
    	class LipGrowthList extends List {
    
    vas's avatar
    vas committed
    		constructor() {
    			super("Lips", true)
    			[
    				["No default setting", "no default setting"],
    				["Plump", 25],
    				["Beestung", 45],
    				["Facepussy", 100],
    				["None", 0]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.setValue(V.currentRule.set.growth_lips)
    			this.onchange = (label, value) => V.currentRule.set.growth_lips = value
    		}
    
    vas's avatar
    vas committed
    	}
    
    	class DickGrowthList extends List {
    
    vas's avatar
    vas committed
    		constructor() {
    			super("Dicks, if present", true)
    			[
    				["No default setting", "no default setting"],
    				["Above average", 4],
    				["Pornstar", 6],
    				["Unlimited", 10],
    				["None", 0]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.setValue(V.currentRule.set.growth_dick)
    			this.onchange = (label, value) => V.currentRule.set.growth_dick = value
    		}
    
    vas's avatar
    vas committed
    	}
    
    	class BallGrowthList extends List {
    
    vas's avatar
    vas committed
    		constructor() {
    			super("Balls, if present", true)
    			[
    				["No default setting", "no default setting"],
    				["Sizeable", 4],
    				["Cumslave", 6],
    				["Unlimited", 10],
    				["None", 0]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.setValue(V.currentRule.set.growth_balls)
    			this.onchange = (label, value) => V.currentRule.set.growth_balls = value
    		}
    	}
    
    	class CurrativesList extends List {
    		constructor() {
    			super("Health drugs")
    			[
    				["No default setting", "no default setting"],
    				["None", "none", 0],
    				["Preventatives", "preventatives", 1],
    				["Curatives", "curatives", 2]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.curatives)
    			this.onchange = (label, value) => V.currentRule.set.curatives = value
    		}
    	}
    
    	class AphrodisiacList extends List {
    		constructor() {
    			super("Aphrodisiacs")
    			[
    				["No default setting", "no default setting"],
    				["None", "none", 0],
    				["Standard", "standard", 1],
    				["Extreme", "extreme", 2],
    				["Anaphrodisiacs", "anaphrodisiacs", -1]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.aphrodisiacs)
    			this.onchange = (label, value) => V.currentRule.set.aphrodisiacs = value
    		}
    	}
    
    	class ContraceptiveList extends List {
    		constructor() {
    			super("Contraceptives for fertile slaves")
    			const drugs =  [
    				["No default setting", "no default setting"],
    				["Contraceptives", "contraceptives", -1]
    				["Fertile", "fertile", 0],
    				["Very fertile", "very fertile", 1],
    				["Extremely fertile", "extremely fertile", 2],
    			]
    			if (V.seeHyperPreg === 1 && V.superFertilityDrugs === 1) {
    				drugs.push(["Hyper fertile", "hyper fertile", 3])
    				drugs.push(["Maximize fertility", "maximize fertility", 4])
    			}
    			drugs.forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.preg)
    			this.onchange = (label, value) => V.currentRule.set.preg = value
    		}
    	}
    
    	class PregDrugsList extends List {
    		constructor() {
    			super("Pregnancy control agents for pregnant slaves")
    			[
    				["No changes", "no changes", "no default setting"],
    				["None", "none"],
    				["Fast gestation", "fast gestation", "fast"],
    				["Slow gestation", "slow gestation", "slow"],
    				["Birth supressors", "birth supressors", "suppress"],
    				["Birth stimulators", "birth stimulators", "stimulate"]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.pregSpeed)
    			this.onchange = (label, value) => V.currentRule.set.pregSpeed = value
    		}
    	}
    
    	class FemaleHormonesList extends List {
    		constructor() {
    			super("Hormones for female slaves")
    			[
    				["No default setting", "no default setting"],
    				["Intensive Female", "intensive female", 2],
    				["Female", "female", 1],
    				["None", "none", 0],
    				["Male", "male", -1],
    				["Intensive Male", "intensive male", -2]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.XX)
    			this.onchange = (label, value) => V.currentRule.set.XX = value
    		}
    	}
    
    	class GeldingHormonesList extends List {
    		constructor() {
    			super("Hormones for geldings")
    			[
    				["No default setting", "no default setting"],
    				["Intensive Female", "intensive female", 2],
    				["Female", "female", 1],
    				["None", "none", 0],
    				["Male", "male", -1],
    				["Intensive Male", "intensive male", -2]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.gelding)
    			this.onchange = (label, value) => V.currentRule.set.gelding = value
    		}
    	}
    
    	class ShemaleHormonesList extends List {
    		constructor() {
    			super("Hormones for shemales")
    			[
    				["No default setting", "no default setting"],
    				["Intensive Female", "intensive female", 2],
    				["Female", "female", 1],
    				["None", "none", 0],
    				["Male", "male", -1],
    				["Intensive Male", "intensive male", -2]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.XY)
    			this.onchange = (label, value) => V.currentRule.set.XY = value
    		}
    	}
    
    	class OtherDrugsList extends List {
    		constructor() {
    			super("Other drugs (Will be overriden by hormones and other drugs where applicable)")
    			const drugs = []
    			setup.drugs.forEach(drug => {
    				if (drug.fs === undefined && drug.rs === undefined)
    					drugs.push([drug.name, drug.value])
    				else if (drug.rs === "growth" && V.growthStim === 1)
    					drugs.push([drug.name + " (Research)", drug.value])
    				else if (drug.rs === "pubHorm" && V.precociousPuberty === 1 && V.pubertyHormones === 1)
    					drugs.push([drug.name + " (Research)", drug.value])
    				else if (drug.rs === "nosag" && V.purchasedSagBGone === 1)
    					drugs.push([drug.name + " (Product)", drug.value])
    				else if (drug.fs === "slimness" && V.arcologies[0].FSSlimnessEnthusiastResearch === 1)
    					drugs.push([drug.name + " (FS)", drug.value])
    				else if (drug.fs === "youth" && V.arcologies[0].FSYouthPreferentialistResearch === 1)
    					drugs.push([drug.name + " (FS)", drug.value])
    			})
    			this.selectValue(V.currentRule.set.drug)
    			this.onchange = (label, value) => V.currentRule.set.drug = value
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class DietList extends List {
    
    vas's avatar
    vas committed
    		constructor() {
    			super("Slave diets")
    
    vas's avatar
    vas committed
    			const diets = [
    
    vas's avatar
    vas committed
    				["no default setting", "no default setting"],
    				["Fix fat and skinny slaves", "fix fat and skinny slaves", "attractive"],
    
    vas's avatar
    vas committed
    				["Curvy", "curvy", 30],
    				["Average", "average", 0],
    				["Thin", "thin", -30]
    			]
    			if (V.feeder === 1) {
    				diets.push(
    					["Feminine", "feminine", "XX"],
    					["Masculine", "masculine", "XY"]
    				)
    				if (V.dietXXY === 1)
    					diets.push(["Futanari", "futanari", "XXY"])
    			}
    			if (V.dietCleanse === 1)
    				diets.push(["Cleansing", "promote health", "cleansing"])
    			if (V.dietFertility === 1)
    				diets.push(["Feritlity", "promote fertility", "fertility"])
    			if (V.cumProDiet === 1)
    				diets.push(["Cum production", "promote cum production", "cum production"])
    			diets.forEach(pair => this.appendChild(new ListItem(...pair)))
    
    vas's avatar
    vas committed
    			this.selectValue(V.currentRule.set.diet)
    			this.onchange = (label, value) => V.currentRule.set.diet = value
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	class DietGrowthList extends List {
    		constructor() {
    			super("Diet support for growth drugs")
    			[
    				["On", "On", 1],
    				["Off", "Off", 0]
    			].forEach(i => this.appendChild(new ListItem(...i)))
    			this.selectValue(V.currentRule.set.dietGrowthSupport)
    			this.onchange = (label, value) => V.currentRule.set.dietGrowthSupport = value
    		}
    	}
    
    	class DietBaseList extends List {
    		constructor() {
    			super("Diet base")
    			// TODO: better data structure?
    			[
    				["No default setting", "No default setting", {cum: "no default setting", milk: "no default setting"}],
    				["Normal Diet", "Normal Diet", {cum: 0, milk: 0}],
    				["Cum Added", "Cum Added", {cum: 1, milk: 0}],
    				["Milk Added", "Milk Added", {cum: 0, milk: 1}],
    				["Cum & Milk Added", "Cum & Milk Added", {cum: 1, milk: 1}],
    				["Cum-Based", "Cum-Based", {cum: 2, milk: 0}]
    				["Milk-Based", "Milk-Based", {cum: 0, milk: 2}]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue({cum: V.currentRule.set.dietCum, milk: V.currentRule.set.dietMilk})
    			this.onchange = (label, value) => {
    				V.currentRule.set.dietCum = value.cum
    				V.currentRule.set.dietMilk = value.milk
    			}
    		}
    	}
    
    	class MuscleList extends List {
    		constructor() {
    			super("Muscles", true)
    			[
    				["No default setting", "no default setting"],
    				["None", "None", 0],
    				["Toned", "Toned", 20],
    				["Ripped", "Ripped", 50],
    				["Massive", "Massive", 100],
    				["Weak", "Weak", -20]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.setValue(V.currentRule.set.muscles)
    			this.onchange = (label, value) => V.currentRule.set.muscles = value
    		}
    	}
    
    	class BraceList extends List {
    		constructor() {
    			super("Braces")
    			[
    				["No default setting", "no default setting"],
    				["None", "none"],
    				["Straighten", "straighten"],
    				["Universal", "universal"]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    
    vas's avatar
    vas committed
    			this.selectValue(V.currentRule.set.teeth)
    
    vas's avatar
    vas committed
    			this.onchange = (label, value) => V.currentRule.set.teeth = value
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class LivingStandardList extends List {
    		constructor() {
    			super("Living standard")
    			[
    				["No default setting", "no default setting"],
    				["Luxurious", "luxurious"],
    				["Normal", "normal"],
    				["Spare", "spare"]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.livingRules)
    			this.onchange = (label, value) => V.currentRule.set.livingRules = value
    		}
    	}
    
    	class PunishmentList extends List {
    		constructor() {
    			super("Typical punishment")
    			[
    				["No default setting", "no default setting"],
    				["Confinement", "confinement"],
    				["Whipping", "whipping"],
    				["Chastity", "chastity"],
    				["Situational", "situational"]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    
    vas's avatar
    vas committed
    			this.selectValue(V.currentRule.set.standardPunishment)
    
    vas's avatar
    vas committed
    			this.onchange = (label, value) => V.currentRule.set.standardPunishment = value
    		}
    	}
    
    	class RewardList extends List {
    		constructor() {
    			super("Typical reward")
    			[
    				["No default setting", "no default setting"],
    				["Relaxation", "relaxation"],
    				["Drugs", "drugs"],
    				["Orgasm", "orgasm"],
    				["Situational", "situational"]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.standardReward)
    			this.onchange = (label, value) => V.currentRule.set.standardReward = value
    		}
    	}
    
    	class ReleaseList extends List {
    		constructor() {
    			super("Release rules")
    			[
    				["No default setting", "no default setting"],
    				["Permissive", "permissive"],
    				["Sapphic", "sapphic"],
    				["Masturbation", "masturbation"],
    				["Restritive", "restrictive"]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.releaseRules)
    			this.onchange = (label, value) => V.currentRule.set.releaseRules = value
    		}
    	}
    
    	class SmartFetishList extends List {
    		constructor() {
    			super("Smart piercing fetish target")
    			[
    				["No default setting", "no default setting"],
    				["Vanilla", "vanilla"],
    				["Oral", "oral"],
    				["Anal", "anal"],
    				["Boobs", "boobs"],
    				["Sub", "submissive"],
    				["Dom", "dom"],
    				["Humiliation", "humiliation"],
    				["Preg", "pregnancy"],
    				["Pain", "masochist"],
    				["Sadism", "sadist"]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.clitSetting)
    			this.onchange = (label, value) => V.currentRule.set.clitSetting	= value
    		}
    	}
    
    	class SmartXYAttractionList extends List {
    		constructor() {
    			super("Smart piercing XY attraction target")
    			[
    				["No default setting", "no default setting"],
    				["Passionate", "passionate", 100],
    				["Attracted", "attracted", 75],
    				["Indifferent", "indifferent", 45],
    				["None", "none", 0]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.clitSettingXY)
    			this.onchange = (label, value) => V.currentRule.set.clitSettingXY = value
    		}
    	}
    
    	class SmartXXAttractionList extends List {
    		constructor() {
    			super("Smart piercing XX attraction target")
    			[
    				["No default setting", "no default setting"],
    				["Passionate", "passionate", 100],
    				["Attracted", "attracted", 75],
    				["Indifferent", "indifferent", 45],
    				["None", "none", 0]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.clitSettingXX)
    			this.onchange = (label, value) => V.currentRule.set.clitSettingXX = value
    
    vas's avatar
    vas committed
    		}
    	}
    
    vas's avatar
    vas committed
    
    	class SmartEnergyList extends List {
    		constructor() {
    			super("Smart piercing sex drive target")
    			[
    				["Nympho", "nympho", 100],
    				["Sex Addict", "sex addict", 85],
    				["Powerful", "powerful", 65],
    				["Healthy", "healthy", 45],
    				["Weak", "weak", 25],
    				["Frigid", "frigid", 0]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.clitSettingEnergy)
    			this.onchange = (label, value) => V.currentRule.set.clitSettingEnergy = value
    		}
    	}
    
    	class SpeechList extends List {
    		constructor() {
    			super("Speech rules")
    			[
    				["No default setting", "no default setting"],
    				["Permissive", "permissive"],
    				["Suppress accents", "accent elimination"],
    				["Restrictive", "restrictive"]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set)
    			this.onchange = (label,value) => V.currentRule.set = value
    		}
    	}
    
    	class RelationshipList extends List {
    		constructor() {
    			super("Relationship rules")
    			[
    				["No default setting", "no default setting"],
    				["Permissive", "permissive"],
    				["Just friends", "just friends"],
    				["Restrictive", "restrictive"]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set)
    			this.onchange = (label,value) => V.currentRule.set = value
    		}
    	}
    
    	class PornList extends List {
    		constructor() {
    			super("Weekly porn publicity subsidy")
    			[
    				["No default setting", "no default setting"],
    				["No broadcasting", "no broadcasting", -1],
    				["No subsidy", "no subsidy", 0],
    				["1000", "1000", 1000],
    				["2000", "2000", 2000],
    				["3000", "3000", 3000],
    				["4000", "4000", 4000],
    				["5000", "5000", 5000]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    
    vas's avatar
    vas committed
    			this.selectValue(V.currentRule.set.pornFameSpending)
    			this.onchange = (label,value) => V.currentRule.set.pornFameSpending = value
    		}
    	}
    
    	class CosmeticSection extends List {
    		constructor() {
    			this.appendChild(EyewearList)
    			this.appendChild(LensesList)
    			this.appendChild(MakeupList)
    			this.appendChild(NailsList)
    			this.appendChild(HairLengthList)
    			this.appendChild(HairColourList)
    			this.appendChild(HairStyleList)
    			this.appendChild(PubicHairColourList)
    			this.appendChild(PubicHairStyleList)
    			this.appendChild(ArmpitHairColourList)
    			this.appendChild(ArmpitHairStyleList)
    		}
    	}
    
    	class EyewearList extends List {
    		constructor() {
    			super("Eyewear")
    			[
    				["no default setting"],
    				["correct with contacts"],
    				["universal glasses"],
    				["blur with glasses"],
    
    vas's avatar
    vas committed
    				["blur with contacts"]
    
    vas's avatar
    vas committed
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.eyewear)
    			this.onchange = (label, value) => V.currentRule.set.eyewear = value
    		}
    	}
    
    	class LensesList extends Element {
    		constructor() {
    			super(V.currentRule.set.eyeColor)
    			this.appendChild(new OptionsItem("No default Setting", () => this.setValue("no default setting")))
    			this.colourlist = new LensesColourList()
    			this.shapelist = new LensesShapeList()
    			this.appendChild(this.colourlist)
    			this.appendChild(this.shapelist)
    		}
    
    		render(color) {
    			const elem = document.createElement("div")
    			elem.innerHTML = "Eye coloring: "
    			this.label = document.createElement("strong")
    			this.label.innerText = coloring
    			elem.appendChild(this.label)
    		}
    
    		combine() {
    			const lst = []
    			if (this.colourlist.value !== "no default setting")
    				lst.appendChild(this.colourlist.value)
    			if (this.shapelist.value !== "no default setting")
    				list.appendChild(this.shapelist.value)
    			if (lst.length === 0) return "no default value"
    			else return lst.join(" ")
    		}
    
    		set_value() {
    			const tmp = this.combine()
    			this.label.innerText = tmp
    			V.currentRule.set.eyeColor = tmp
    		}
    	}
    
    	class LensesColourList extends Options {
    		constructor() {
    			super("Color:")
    			[
    				["no default setting"]
    				["blue"],
    				["black"],
    				["brown"],
    				["green"],
    				["turquoise"],
    				["sky-blue"],
    				["hazel"],
    				["pale-grey"],
    				["white"],
    				["pink"],
    				["amber"],
    				["red"]
    			].forEach(i => this.appendChild(new OptionsItem(i, item => {
    				this.value = item.label
    				this.parent.set_value()
    			})))
    		}
    	}
    
    	class LensesShapeList extends Options {
    		constructor() {
    			super("Shape:")
    			[
    				["no default setting"],
    				["catlike"],
    				["serpent-like"],
    				["devilish"],
    				["demonic"],
    				["hypnotic"],
    				["heart-shaped"],
    				["wide-eyed"],
    				["almond-shaped"],
    				["bright"],
    				["teary"],
    
    vas's avatar
    vas committed
    				["vacant"]
    
    vas's avatar
    vas committed
    			].forEach(i => this.appendChild(new OptionsItem(i, item => {
    				this.value = item.label
    				this.parent.set_value()
    			})))
    		}
    	}
    
    	class MakeupList extends List {
    		constructor() {
    			super("Makeup")
    			[
    				["no default setting"],
    				["makeup-free", "makeup-free", 0],
    				["nice", "nice", 1],
    				["gorgeous", "gorgeous", 2],
    				["color-coordinate with hair", "color-coordinate with hair", 3],
    				["slutty", "slutty", 4]
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.makeup)
    			this.onchange = (label, value) => V.currentRule.set.makeup = value
    		}
    	}
    
    	class NailsList extends List {
    		constructor() {
    			super("Nails")
    			[
    
    vas's avatar
    vas committed
    				["no default setting"],
    				["clipped", "clipped", 0],
    				["extended", "extended", 1],
    				["color-coordinate with hair", "color-coordinate with hair", 2],
    				["sharp and claw-like", "sharp and claw-like", 3],
    				["bright and glittery", "bright and glittery", 4],
    				["hooker nails", "hooker nails", 5]
    
    vas's avatar
    vas committed
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    			this.selectValue(V.currentRule.set.nails)
    			this.onchange = (label, value) => V.currentRule.set.nails = value
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    vas's avatar
    vas committed
    	class HairLengthList extends List {
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Hair length")
    
    vas's avatar
    vas committed
    			[
    
    vas's avatar
    vas committed
    				["no default setting"],
    				["very short", "very short", 5],
    				["short", "short", 10],
    				["shoulder length", "shoulder length", 30],
    				["long", "long", 60],
    				["very long", "very long", 100],
    				["floor length", "floor length", 150]
    
    vas's avatar
    vas committed
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    
    vas's avatar
    vas committed
    			this.selectValue(V.currentRule.set.hLength)
    			this.onchange = (label, value) => V.currentRule.set.hLength = value
    
    vas's avatar
    vas committed
    		}
    	}
    	class HairColourList extends List {
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Hair color")
    
    vas's avatar
    vas committed
    			[
    
    vas's avatar
    vas committed
    				["no default setting"],
    				["blonde"],
    				["golden"],
    				["platinum blonde"],
    				["strawbery-blonde"],
    				["copper"],
    				["ginger"],
    				["red"]
    				["green"],
    				["blue"],
    				["pink"],
    				["dark brown"],
    				["brown"],
    				["auburn"],
    				["burgundy"],
    				["chocolate"],
    				["chestnut"],
    				["hazel"],
    				["black"],
    				["grey"],
    				["silver"],
    				["white"],
    				["blazing red"],
    				["neon green"],
    				["neon blue"],
    				["neon pink"]
    
    vas's avatar
    vas committed
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    
    vas's avatar
    vas committed
    			this.selectValue(V.currentRule.set.hColor)
    			this.onchange = (label, value) => V.currentRule.set.hColor = value
    
    vas's avatar
    vas committed
    		}
    	}
    
    	class HairStyleList extends List {
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Hair style")
    
    vas's avatar
    vas committed
    			[
    
    vas's avatar
    vas committed
    				["no default setting"],
    				["neat"],
    				["shaved"],
    				["trimmed"],
    				["buzzcut"],
    				["up"],
    				["ponytail"],
    				["bun"],
    				["curled"],
    				["permed"],
    				["luxurious"],
    				["dreadlocks"],
    				["cornrows"],
    				["braided"],
    				["tails"],
    				["afro"],
    				["strip"]
    
    vas's avatar
    vas committed
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    
    vas's avatar
    vas committed
    			this.selectValue(V.currentRule.set.hStyle)
    			this.onchange = (label, value) => V.currentRule.set.hStyle = value
    
    vas's avatar
    vas committed
    		}
    	}
    
    	class PubicHairColourList extends List {
    		constructor() {
    
    vas's avatar
    vas committed
    			super("Pubic hair color, when present")
    
    vas's avatar
    vas committed
    			[
    
    vas's avatar
    vas committed
    				["no default setting"],
    				["blonde"],
    				["golden"],
    				["platinum blonde"],
    				["strawerry-blonde"],
    				["copper"],
    				["ginger"],
    				["red"],
    				["green"],
    				["blue"],
    				["pink"],
    				["dark brown"],
    				["brown"],
    				["auburn"],
    				["burgundy"],
    				["chocolate"],
    				["chestnut"],
    				["hazel"],
    				["black"],
    				["grey"],
    				["silver"],
    				["white"],
    				["blazing red"],
    				["neon green"],
    				["neon blue"],
    				["neon pink"]
    
    vas's avatar
    vas committed
    			].forEach(pair => this.appendChild(new ListItem(...pair)))
    
    vas's avatar
    vas committed
    			this.selectValue(V.currentRule.set.pubicHColor)
    			this.onchange = (label, value) => V.currentRule.set.pubicHColor = value
    
    vas's avatar
    vas committed
    		}
    	}
    
    	class PubicHairStyleList extends List {