diff --git a/src/js/rulesAssistantOptions.tw b/src/js/rulesAssistantOptions.tw index e281da3f6dca4663df4858b9be772264aeb5fdb6..8f2a40553fc98c81853283c169437d6047445f92 100644 --- a/src/js/rulesAssistantOptions.tw +++ b/src/js/rulesAssistantOptions.tw @@ -133,7 +133,9 @@ window.rulesAssistantOptions = (function() { surgery_butt: "no default setting", surgery_faceShape: "no default setting", surgery_lips: "no default setting", - surgery_holes: "not default setting", + surgery_holes: "no default setting", + surgery_hair: "no default setting", + surgery_bodyhair: "no default setting", underArmHColor: "no default setting", underArmHStyle: "no default setting", drug: "no default setting", @@ -931,1375 +933,1387 @@ window.rulesAssistantOptions = (function() { this.appendChild(new UpperBackTattooList()) this.appendChild(new LowerBackTattooList()) this.appendChild(new AbdomenTattooList()) - this.appendChild(new DickTattooList()) + if (V.seeDicks || V.makeDicks) + this.appendChild(new DickTattooList()) this.appendChild(new ButtockTattooList()) this.appendChild(new AnalTattooList()) this.appendChild(new LegTattooList()) } } - class SurgerySection extends Element { + class AutoSurgerySection extends Element { constructor() { super() - } - } - - class ClothesList extends List { - constructor() { - const items = [ - ["Select her own outfit", "choosing her own clothes"] - ] - super("Clothes", items) - - const nclothes = [ - ["No default clothes setting", "no default setting"], - ["Bangles", "slutty jewelry"], - ["Bodysuit", "a comfortable bodysuit"], - ["Cheerleader outfit", "a cheerleader outfit"], - ["Clubslut netting", "clubslut netting"], - ["Cutoffs and a t-shirt", "cutoffs and a t-shirt"], - ["Fallen nun", "a fallen nuns habit"], - ["Halter top", "a halter top dress"], - ["Hijab and abaya", "a hijab and abaya"], - ["Latex catsuit", "a latex catsuit"], - ["Leotard", "a leotard"], - ["Maid (nice)", "a nice maid outfit"], - ["Maid (slutty)", "a slutty maid outfit"], - ["Military uniform", "a military uniform"], - ["Mini dress", "a mini dress"], - ["Nice lingerie", "attractive lingerie"], - ["Nurse (nice)", "a nice nurse outfit"], - ["Schoolgirl", "a schoolgirl outfit"], - ["Silken ballgown", "a ball gown"], - ["Skimpy battledress", "battledress"], - ["Slave gown", "a slave gown"], - ["Slutty outfit", "a slutty outfit"], - ["String bikini", "a stirng bikini"], - ["Scalemail bikini", "a scalemail bikini"], - ["Succubus costume", "a succubus outfit"], - ["Suit (nice)", "nice business sattire"], - ["Suit (slutty", "slutty business attire"], - ["Spats and tank top", "spats and a tank top"] - ] - 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"], - ["Slutty qipao (FS)", "a slutty qipao"], - ["Stretch pants and a crop-top (FS)", "stretch pants and a crop-top"], - ["Toga (FS)", "a toga"], - ["Western clothing (FS)", "Western clothing"], - ] - fsnclothes.forEach(pair => { if (isItemAccessible(pair[1])) nclothes.push(pair) }) - const nice = new ListSubSection("Nice", nclothes) - 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) }) - - const harsh = new ListSubSection("Harsh", hclothes) - this.appendChild(harsh) - - this.setValue(V.currentRule.set.clothes) - this.onchange = (data) => V.currentRule.set.clothes = value - } - } - - 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"], - ["Cowbell", "leather with cowbell"] - ] - if (V.seeAge !== 0) - ncollars.push(["Nice retirement counter", "nice retirement counter"]) - const fsncollars = [ - ["Bowtie collar", "bowtie"], - ["ancient Egyptian", "ancient Egyptian"], - ] - fsncollars.forEach(pair => { if (isItemAccessible(pair[1])) ncollars.push(pair) }) - const nice = new ListSubSection("Nice", ncollars) - this.appendChild(nice) - - const hcollars = [ - ["Tight steel", "tight steel"], - ["Uncomfortable leather", "uncomfortable leather"], - ["Pregnancy biometrics", "preg biometrics"], - ["Shock punishment", "shock punishment"], - ["Dildo gag", "dildo gag"], - ["Ball gag", "ball gag"], - ["Bit gag", "bit gag"], - ["Neck corset", "neck corset"], - ] - if (V.seeAge !== 0) - hcollars.push(["Cruel retirement counter", "cruel retirement counter"]) - if (V.toysBoughtGags === 1) - hcollars.push(["Massive dildo gag", "massive dildo gag"]) - const harsh = new ListSubSection("Harsh", hcollars) - this.appendChild(harsh) - - this.setValue(V.currentRule.set.collar) - this.onchange = (value) => V.currentRule.set.collar = value - } - } - - class ShoeList extends List { - constructor() { - super("Shoes", setup.shoes) - this.setValue(V.currentRule.set.shoes) - this.onchange = (value) => V.currentRule.set.shoes = value - } - } - - 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") - bellies.push([acc.name + " (FS)", acc.value]) - else if (acc.rs === "boughtBelly" && V.clothesBoughtBelly === 1) - bellies.push([acc.name + " (Purchased)", acc.value]) - }) - super("Corsetage", bellies) - this.setValue(V.currentRule.set.bellyAccessory) - this.onchange = (value) => V.currentRule.set.bellyAccessory - } - } - - 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) - accs.push([acc.name + " (Purchased)", acc.value]) - }) - super("Vaginal accessories for virgins") - this.setValue(V.currentRule.set.virginAccessory) - this.onchange = (value) => V.currentRule.set.virginAccessory = value - } - } - - 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) - accs.push([acc.name + " (Purchased)", acc.value]) - }) - super("Vaginal accessories for anal virgins") - this.setValue(V.currentRule.set.aVirginAccessory) - this.onchange = (value) => V.currentRule.set.aVirginAccessory = value - } - } - - 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) - accs.push([acc.name + " (Purchased)", acc.value]) - }) - super("Vaginal accessories for other slaves") - this.setValue(V.currentRule.set.vaginalAccessory) - this.onchange = (value) => V.currentRule.set.vaginalAccessory = value - } - } - - class DickAccVirginsList extends List { - constructor() { - super("Dick accessories for anal virgins", setup.dickAccessories) - this.setValue(V.currentRule.set.aVirginDickAccessory) - this.onchange = (value) => V.currentRule.set.aVirginDickAccessory = value - } - } - - class DickAccOtherList extends List { - constructor() { - super("Dick accessories for other slaves", setup.dickAccessories) - this.setValue(V.currentRule.set.dickAccessory) - this.onchange = (value) => V.currentRule.set.dickAccessory = value - } - } - - 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) - accs.push([acc.name + " (Purchased)", acc.value]) - }) - super("Buttplugs for anal virgins") - this.setValue(V.currentRule.set.aVirginButtplug) - this.onchange = (value) => V.currentRule.set.aVirginButtplug = value - } - } - - 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) - accs.push([acc.name + " (Purchased)", acc.value]) - }) - super("Buttplugs for other slaves") - this.setValue(V.currentRule.set.buttplug) - this.onchange = (value) => V.currentRule.set.buttplug = value - } - } - - 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] - ] - super("Belly implant target volume (if present)") - this.setValue(V.currentRule.set.bellyImplantVol) - this.onchange = (value) => V.currentRule.set.bellyImplantVol = value - } - } - - class AutosurgerySwitch extends List { - constructor() { - const pairs = [ - ["Activate", 1] - ["Off", 0] - ] - super("Assistant-applied implants (Autosurgery global switch)", pairs) - this.setValue(V.currentRule.set.autoSurgery) - this.onchange = (value) => V.currentRule.set.autoSurgery = value - } - } - - 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) - } - - this.sublists.forEach(i => this.appendChild(i)) - } - - 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) - if (this.dicks) this.dicks.setValue(0) - if (this.balls) this.balls.setValue(0) - this.sublists.forEach(i => i.propagateChange()) - } - - stacked() { - this.breasts.setValue(1000) - this.butts.setValue(4) - this.lips.setValue(25) - if (this.dicks) this.dicks.setValue(4) - if (this.balls) this.balls.setValue(4) - this.sublists.forEach(i => i.propagateChange()) - } - - 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()) - } - - unlimited() { - this.breasts.setValue(48000) - this.butts.setValue(10) - this.lips.setValue(100) - if (this.dicks) this.dicks.setValue(10) - if (this.balls) this.balls.setValue(6) - this.sublists.forEach(i => i.propagateChange()) - } - - none() { - this.sublists.forEach(i => { - i.setValue(0) - i.propagateChange() - }) - } - } - - class BreastGrowthList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["B Cup", 350], - ["D Cup", 1000], - ["Monstrous", 9000], - ["Unlimited", 48000], - ["None", 0] - ] - super("Breasts", pairs, true) - this.setValue(V.currentRule.set.growth_boobs) - this.onchange = (value) => V.currentRule.set.growth_boobs = value - } - } - - class ButtGrowthList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Cute", 2], - ["Big", 4], - ["Huge", 6], - ["Unlimited", 10], - ["None", 0] - ] - super("Butts", pairs, true) - this.setValue(V.currentRule.set.growth_butt) - this.onchange = (value) => V.currentRule.set.growth_butt = value - } - } - - class LipGrowthList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Plump", 25], - ["Beestung", 45], - ["Facepussy", 100], - ["None", 0] - ] - super("Lips", pairs, true) - this.setValue(V.currentRule.set.growth_lips) - this.onchange = (value) => V.currentRule.set.growth_lips = value - } - } - - class DickGrowthList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Above average", 4], - ["Pornstar", 6], - ["Unlimited", 10], - ["None", 0] - ] - super("Dicks, if present", pairs, true) - this.setValue(V.currentRule.set.growth_dick) - this.onchange = (value) => V.currentRule.set.growth_dick = value - } - } - - class BallGrowthList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Sizeable", 4], - ["Cumslave", 6], - ["Unlimited", 10], - ["None", 0] - ] - super("Balls, if present", pairs, true) - this.setValue(V.currentRule.set.growth_balls) - this.onchange = (value) => V.currentRule.set.growth_balls = value - } - } - - class CurrativesList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", "none", 0], - ["Preventatives", "preventatives", 1], - ["Curatives", "curatives", 2] - ] - super("Health drugs", pairs) - this.setValue(V.currentRule.set.curatives) - this.onchange = (value) => V.currentRule.set.curatives = value - } - } - - class AphrodisiacList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", "none", 0], - ["Standard", "standard", 1], - ["Extreme", "extreme", 2], - ["Anaphrodisiacs", "anaphrodisiacs", -1] - ] - super("Aphrodisiacs", pairs) - this.setValue(V.currentRule.set.aphrodisiacs) - this.onchange = (value) => V.currentRule.set.aphrodisiacs = value - } - } - - class ContraceptiveList extends List { - constructor() { - 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]) - } - super("Contraceptives for fertile slaves", drugs) - this.setValue(V.currentRule.set.preg) - this.onchange = (value) => V.currentRule.set.preg = value - } - } - - class PregDrugsList extends List { - constructor() { - const pairs = [ - ["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"] - ] - super("Pregnancy control agents for pregnant slaves", pairs) - this.setValue(V.currentRule.set.pregSpeed) - this.onchange = (value) => V.currentRule.set.pregSpeed = value - } - } - - class FemaleHormonesList extends List { - constructor() { - const pairs = [ - ["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] - ] - super("Hormones for female slaves", pairs) - this.setValue(V.currentRule.set.XX) - this.onchange = (value) => V.currentRule.set.XX = value - } - } - - class GeldingHormonesList extends List { - constructor() { - const pairs = [ - ["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] - ] - super("Hormones for geldings", pairs) - this.setValue(V.currentRule.set.gelding) - this.onchange = (value) => V.currentRule.set.gelding = value - } - } - - class ShemaleHormonesList extends List { - constructor() { - const pairs = [ - ["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] - ] - super("Hormones for shemales", pairs) - this.setValue(V.currentRule.set.XY) - this.onchange = (value) => V.currentRule.set.XY = value - } - } - - class OtherDrugsList extends List { - constructor() { - 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]) - }) - super("Other drugs (Will be overriden by hormones and other drugs where applicable)", drugs) - this.setValue(V.currentRule.set.drug) - this.onchange = (value) => V.currentRule.set.drug = value - } - } - - class DietList extends List { - constructor() { - const diets = [ - ["no default setting", "no default setting"], - ["Fix fat and skinny slaves", "fix fat and skinny slaves", "attractive"], - ["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"]) - - super("Slave diets", diets) - this.setValue(V.currentRule.set.diet) - this.onchange = (value) => V.currentRule.set.diet = value - } - } - - class DietGrowthList extends List { - constructor() { - const pairs = [ - ["On", 1], - ["Off", 0] - ] - super("Diet support for growth drugs", pairs) - this.setValue(V.currentRule.set.dietGrowthSupport) - this.onchange = (value) => V.currentRule.set.dietGrowthSupport = value - } - } - - 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) - this.setValue({cum: V.currentRule.set.dietCum, milk: V.currentRule.set.dietMilk}) - this.onchange = (value) => { - V.currentRule.set.dietCum = value.cum - V.currentRule.set.dietMilk = value.milk - } - } - } - - class MuscleList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", "None", 0], - ["Toned", "Toned", 20], - ["Ripped", "Ripped", 50], - ["Massive", "Massive", 100], - ["Weak", "Weak", -20] - ] - super("Muscles", pairs, true) - this.setValue(V.currentRule.set.muscles) - this.onchange = (value) => V.currentRule.set.muscles = value - } - } - - class BraceList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", "none"], - ["Straighten", "straighten"], - ["Universal", "universal"] - ] - super("Braces", pairs) - this.setValue(V.currentRule.set.teeth) - this.onchange = (value) => V.currentRule.set.teeth = value - } - } - - class LivingStandardList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Luxurious", "luxurious"], - ["Normal", "normal"], - ["Spare", "spare"] - ] - super("Living standard", pairs) - this.setValue(V.currentRule.set.livingRules) - this.onchange = (value) => V.currentRule.set.livingRules = value - } - } - - class PunishmentList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Confinement", "confinement"], - ["Whipping", "whipping"], - ["Chastity", "chastity"], - ["Situational", "situational"] - ] - super("Typical punishment", pairs) - this.setValue(V.currentRule.set.standardPunishment) - this.onchange = (value) => V.currentRule.set.standardPunishment = value - } - } - - class RewardList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Relaxation", "relaxation"], - ["Drugs", "drugs"], - ["Orgasm", "orgasm"], - ["Situational", "situational"] - ] - super("Typical reward", pairs) - this.setValue(V.currentRule.set.standardReward) - this.onchange = (value) => V.currentRule.set.standardReward = value - } - } - - class ReleaseList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Permissive", "permissive"], - ["Sapphic", "sapphic"], - ["Masturbation", "masturbation"], - ["Restritive", "restrictive"] - ] - super("Release rules", pairs) - this.setValue(V.currentRule.set.releaseRules) - this.onchange = (value) => V.currentRule.set.releaseRules = value - } - } - - class SmartFetishList extends List { - constructor() { - const pairs = [ - ["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"] - ] - super("Smart piercing fetish target", pairs) - this.setValue(V.currentRule.set.clitSetting) - this.onchange = (value) => V.currentRule.set.clitSetting = value - } - } - - class SmartXYAttractionList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Passionate", "passionate", 100], - ["Attracted", "attracted", 75], - ["Indifferent", "indifferent", 45], - ["None", "none", 0] - ] - super("Smart piercing XY attraction target", pairs) - this.setValue(V.currentRule.set.clitSettingXY) - this.onchange = (value) => V.currentRule.set.clitSettingXY = value - } - } - - class SmartXXAttractionList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Passionate", "passionate", 100], - ["Attracted", "attracted", 75], - ["Indifferent", "indifferent", 45], - ["None", "none", 0] - ] - super("Smart piercing XX attraction target", pairs) - this.setValue(V.currentRule.set.clitSettingXX) - this.onchange = (value) => V.currentRule.set.clitSettingXX = value - } - } - - class SmartEnergyList extends List { - constructor() { - const pairs = [ - ["Nympho", "nympho", 100], - ["Sex Addict", "sex addict", 85], - ["Powerful", "powerful", 65], - ["Healthy", "healthy", 45], - ["Weak", "weak", 25], - ["Frigid", "frigid", 0] - ] - super("Smart piercing sex drive target", pairs) - this.setValue(V.currentRule.set.clitSettingEnergy) - this.onchange = (value) => V.currentRule.set.clitSettingEnergy = value - } - } - - class SpeechList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["Permissive", "permissive"], - ["Suppress accents", "accent elimination"], - ["Restrictive", "restrictive"] - ] - super("Speech rules", pairs) - this.setValue(V.currentRule.set) - this.onchange = (value) => V.currentRule.set = value - } - } - - class RelationshipList extends List { - constructor() { - const pairs =[ - ["No default setting", "no default setting"], - ["Permissive", "permissive"], - ["Just friends", "just friends"], - ["Restrictive", "restrictive"] - ] - super("Relationship rules", pairs) - this.setValue(V.currentRule.set) - this.onchange = (value) => V.currentRule.set = value - } - } - - class PornList extends List { - constructor() { - const pairs = [ - ["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] - ] - super("Weekly porn publicity subsidy", pairs) - this.setValue(V.currentRule.set.pornFameSpending) - this.onchange = (value) => V.currentRule.set.pornFameSpending = value - } - } - - class EyewearList extends List { - constructor() { - const pairs = [ - ["no default setting"], - ["correct with contacts"], - ["universal glasses"], - ["blur with glasses"], - ["blur with contacts"] - ] - super("Eyewear", pairs) - this.setValue(V.currentRule.set.eyewear) - this.onchange = (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"], - ["vacant"] - ].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.setValue(V.currentRule.set.makeup) - this.onchange = (value) => V.currentRule.set.makeup = value - } - } - - class NailsList extends List { - constructor() { - super("Nails") - [ - ["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] - ].forEach(pair => this.appendChild(new ListItem(...pair))) - this.setValue(V.currentRule.set.nails) - this.onchange = (value) => V.currentRule.set.nails = value - } - } - - class HairLengthList extends List { - constructor() { - const pairs = [ - ["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] - ] - super("Hair length", pairs) - this.setValue(V.currentRule.set.hLength) - this.onchange = (value) => V.currentRule.set.hLength = value - } - } - class HairColourList extends List { - constructor() { - const pairs = [ - ["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"] - ] - super("Hair color", pairs) - this.setValue(V.currentRule.set.hColor) - this.onchange = (value) => V.currentRule.set.hColor = value - } - } - - class HairStyleList extends List { - constructor() { - const pairs = [ - ["no default setting"], - ["neat"], - ["shaved"], - ["trimmed"], - ["buzzcut"], - ["up"], - ["ponytail"], - ["bun"], - ["curled"], - ["permed"], - ["luxurious"], - ["dreadlocks"], - ["cornrows"], - ["braided"], - ["tails"], - ["afro"], - ["strip"] - ] - super("Hair style", pairs) - this.setValue(V.currentRule.set.hStyle) - this.onchange = (value) => V.currentRule.set.hStyle = value - } - } - - class PubicHairColourList extends List { - constructor() { - const pairs = [ - ["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"] - ] - super("Pubic hair color, when present", pairs) - this.setValue(V.currentRule.set.pubicHColor) - this.onchange = (value) => V.currentRule.set.pubicHColor = value - } - } - - class PubicHairStyleList extends List { - constructor() { - const pairs = [ - ["no default setting"], - ["waxed"], - ["in a strip"], - ["neat"], - ["bushy"], - ["bushy in the front and neat in the rear"], - ["very bushy"] - ] - super("Pubic hairstyle", pairs) - this.setValue(V.currentRule.set.pubicHStyle) - this.onchange = (value) => V.currentRule.set.pubicHStyle = value - } - } - - class ArmpitHairColourList extends List { - constructor() { - const pairs = [ - ["no default setting"], - ["blonde"], - ["golden"], - ["platinum blonde"], - ["strawberry-blonde"], - ["copper"], - ["ginger"], - ["red"], - ["green"], - ["blue"], - ["pink"], - ["dark brown"], - ["brown"], - ["auburn"], - ["burgundry"], - ["chocolate"], - ["chestnut"], - ["hazel"], - ["black"], - ["grey"], - ["silver"], - ["white"] - ] - super("Underarm hair color, when present", pairs) - this.setValue(V.currentRule.set.underArmHColor) - this.onchange = (value) => V.currentRule.set.underArmHColor = value - } - } - - class ArmpitHairStyleList extends List { - constructor() { - const pairs = [ - ["no default setting"], - ["waxed"], - ["shaved"], - ["neat"], - ["bushy"] - ] - super("Underarm hair style", pairs) - this.setValue(V.currentRule.set.underArmHStyle) - this.onchange = (value) => V.currentRule.set.underArmHStyle = value - } - } - - class EarPiecingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2] - ] - super("Ear piercings", pairs) - this.setValue(V.currentRule.set.earPiercing) - this.onchange = (value) => V.currentRule.set.earPiercing - } - } - - class NosePiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2] - ] - super("Nasal piercings", pairs) - this.setValue(V.currentRule.set.nosePiercing) - this.onchange = (value) => V.currentRule.set.earPiercing - } - } - - class EyebrowPiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2] - ] - super("Eyebrow piercings", pairs) - this.setValue(V.currentRule.set.eyebrowPiercing) - this.onchange = (value) => V.currentRule.set.eyebrowPiercing - } - } - - class NavelPiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2] - ] - super("Navel piercings", pairs) - this.setValue(V.currentRule.set.navelPiercing) - this.onchange = (value) => V.currentRule.set.navelPiercing - } - } - - class NipplePiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2] - ] - super("Nipple piercings", pairs) - this.setValue(V.currentRule.set.nipplesPiercing) - this.onchange = (value) => V.currentRule.set.nipplesPiercing - } - } - - class AreolaPiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Studded", 1] - ] - super("Areola studs", pairs) - this.setValue(V.currentRule.set.areolaePiercing) - this.onchange = (value) => V.currentRule.set.areolaePiercing - } - } - - class LipPiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2] - ] - super("Lip piercings", pairs) - this.setValue(V.currentRule.set.lipsPiercing) - this.onchange = (value) => V.currentRule.set.lipsPiercing - } - } - - class TonguePiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2] - ] - super("Tongue piercing", pairs) - this.setValue(V.currentRule.set.tonguePiercing) - this.onchange = (value) => V.currentRule.set.tonguePiercing - } - } - - class CliptPiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2], - ["Smart (expensive)", 3] - ] - super("Clit piercing", pairs) - this.setValue(V.currentRule.set.clitPiercing) - this.onchange = (value) => V.currentRule.set.clitPiercing - } + this.appendChild(new VisionSurgeryList()) + this.appendChild(new LactationSurgeryList()) + if (V.seeDicks || V.makeDicks) + this.appendChild(new SemenSurgeryList()) + 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()) + } +} + +class ClothesList extends List { + constructor() { + const items = [ + ["Select her own outfit", "choosing her own clothes"] + ] + super("Clothes", items) + + const nclothes = [ + ["No default clothes setting", "no default setting"], + ["Bangles", "slutty jewelry"], + ["Bodysuit", "a comfortable bodysuit"], + ["Cheerleader outfit", "a cheerleader outfit"], + ["Clubslut netting", "clubslut netting"], + ["Cutoffs and a t-shirt", "cutoffs and a t-shirt"], + ["Fallen nun", "a fallen nuns habit"], + ["Halter top", "a halter top dress"], + ["Hijab and abaya", "a hijab and abaya"], + ["Latex catsuit", "a latex catsuit"], + ["Leotard", "a leotard"], + ["Maid (nice)", "a nice maid outfit"], + ["Maid (slutty)", "a slutty maid outfit"], + ["Military uniform", "a military uniform"], + ["Mini dress", "a mini dress"], + ["Nice lingerie", "attractive lingerie"], + ["Nurse (nice)", "a nice nurse outfit"], + ["Schoolgirl", "a schoolgirl outfit"], + ["Silken ballgown", "a ball gown"], + ["Skimpy battledress", "battledress"], + ["Slave gown", "a slave gown"], + ["Slutty outfit", "a slutty outfit"], + ["String bikini", "a stirng bikini"], + ["Scalemail bikini", "a scalemail bikini"], + ["Succubus costume", "a succubus outfit"], + ["Suit (nice)", "nice business sattire"], + ["Suit (slutty", "slutty business attire"], + ["Spats and tank top", "spats and a tank top"] + ] + 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"], + ["Slutty qipao (FS)", "a slutty qipao"], + ["Stretch pants and a crop-top (FS)", "stretch pants and a crop-top"], + ["Toga (FS)", "a toga"], + ["Western clothing (FS)", "Western clothing"], + ] + fsnclothes.forEach(pair => { if (isItemAccessible(pair[1])) nclothes.push(pair) }) + const nice = new ListSubSection("Nice", nclothes) + 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) }) + + const harsh = new ListSubSection("Harsh", hclothes) + this.appendChild(harsh) + + this.setValue(V.currentRule.set.clothes) + this.onchange = (data) => V.currentRule.set.clothes = value + } +} + +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"], + ["Cowbell", "leather with cowbell"] + ] + if (V.seeAge !== 0) + ncollars.push(["Nice retirement counter", "nice retirement counter"]) + const fsncollars = [ + ["Bowtie collar", "bowtie"], + ["ancient Egyptian", "ancient Egyptian"], + ] + fsncollars.forEach(pair => { if (isItemAccessible(pair[1])) ncollars.push(pair) }) + const nice = new ListSubSection("Nice", ncollars) + this.appendChild(nice) + + const hcollars = [ + ["Tight steel", "tight steel"], + ["Uncomfortable leather", "uncomfortable leather"], + ["Pregnancy biometrics", "preg biometrics"], + ["Shock punishment", "shock punishment"], + ["Dildo gag", "dildo gag"], + ["Ball gag", "ball gag"], + ["Bit gag", "bit gag"], + ["Neck corset", "neck corset"], + ] + if (V.seeAge !== 0) + hcollars.push(["Cruel retirement counter", "cruel retirement counter"]) + if (V.toysBoughtGags === 1) + hcollars.push(["Massive dildo gag", "massive dildo gag"]) + const harsh = new ListSubSection("Harsh", hcollars) + this.appendChild(harsh) + + this.setValue(V.currentRule.set.collar) + this.onchange = (value) => V.currentRule.set.collar = value + } +} + +class ShoeList extends List { + constructor() { + super("Shoes", setup.shoes) + this.setValue(V.currentRule.set.shoes) + this.onchange = (value) => V.currentRule.set.shoes = value + } +} + +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") + bellies.push([acc.name + " (FS)", acc.value]) + else if (acc.rs === "boughtBelly" && V.clothesBoughtBelly === 1) + bellies.push([acc.name + " (Purchased)", acc.value]) + }) + super("Corsetage", bellies) + this.setValue(V.currentRule.set.bellyAccessory) + this.onchange = (value) => V.currentRule.set.bellyAccessory + } +} + +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) + accs.push([acc.name + " (Purchased)", acc.value]) + }) + super("Vaginal accessories for virgins") + this.setValue(V.currentRule.set.virginAccessory) + this.onchange = (value) => V.currentRule.set.virginAccessory = value + } +} + +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) + accs.push([acc.name + " (Purchased)", acc.value]) + }) + super("Vaginal accessories for anal virgins") + this.setValue(V.currentRule.set.aVirginAccessory) + this.onchange = (value) => V.currentRule.set.aVirginAccessory = value + } +} + +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) + accs.push([acc.name + " (Purchased)", acc.value]) + }) + super("Vaginal accessories for other slaves") + this.setValue(V.currentRule.set.vaginalAccessory) + this.onchange = (value) => V.currentRule.set.vaginalAccessory = value + } +} + +class DickAccVirginsList extends List { + constructor() { + super("Dick accessories for anal virgins", setup.dickAccessories) + this.setValue(V.currentRule.set.aVirginDickAccessory) + this.onchange = (value) => V.currentRule.set.aVirginDickAccessory = value + } +} + +class DickAccOtherList extends List { + constructor() { + super("Dick accessories for other slaves", setup.dickAccessories) + this.setValue(V.currentRule.set.dickAccessory) + this.onchange = (value) => V.currentRule.set.dickAccessory = value + } +} + +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) + accs.push([acc.name + " (Purchased)", acc.value]) + }) + super("Buttplugs for anal virgins") + this.setValue(V.currentRule.set.aVirginButtplug) + this.onchange = (value) => V.currentRule.set.aVirginButtplug = value + } +} + +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) + accs.push([acc.name + " (Purchased)", acc.value]) + }) + super("Buttplugs for other slaves") + this.setValue(V.currentRule.set.buttplug) + this.onchange = (value) => V.currentRule.set.buttplug = value + } +} + +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] + ] + super("Belly implant target volume (if present)") + this.setValue(V.currentRule.set.bellyImplantVol) + this.onchange = (value) => V.currentRule.set.bellyImplantVol = value + } +} + +class AutosurgerySwitch extends List { + constructor() { + const pairs = [ + ["Activate", 1] + ["Off", 0] + ] + super("Assistant-applied implants (Autosurgery global switch)", pairs) + this.setValue(V.currentRule.set.autoSurgery) + this.onchange = (value) => V.currentRule.set.autoSurgery = value + } +} + +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) + } + + this.sublists.forEach(i => this.appendChild(i)) + } + + 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() + }) } - class LabiaPiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2] - ] - super("Pussylips piercings", pairs) - this.setValue(V.currentRule.set.vaginaPiercing) - this.onchange = (value) => V.currentRule.set.vaginaPiercing - } + 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()) } - class ShaftPiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2] - ] - super("Shaft piercings", pairs) - this.setValue(V.currentRule.set.dickPiercing) - this.onchange = (value) => V.currentRule.set.dickPiercing - } + stacked() { + this.breasts.setValue(1000) + this.butts.setValue(4) + this.lips.setValue(25) + if (this.dicks) this.dicks.setValue(4) + if (this.balls) this.balls.setValue(4) + this.sublists.forEach(i => i.propagateChange()) } - class PerineumPiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Light", 1], - ["Heavy", 2] - ] - super("Perianal piercings", pairs) - this.setValue(V.currentRule.set.anusPiercing) - this.onchange = (value) => V.currentRule.set.anusPiercing - } + 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()) } - class CorsetPiercingList extends List { - constructor() { - const pairs = [ - ["No default setting", "no default setting"], - ["None", 0], - ["Apply", 1] - ] - super("Corset piercings", pairs) - this.setValue(V.currentRule.set.corsetPiercing) - this.onchange = (value) => V.currentRule.set.corsetPiercing - } + unlimited() { + this.breasts.setValue(48000) + this.butts.setValue(10) + this.lips.setValue(100) + if (this.dicks) this.dicks.setValue(10) + if (this.balls) this.balls.setValue(6) + this.sublists.forEach(i => i.propagateChange()) } - class AutoBrandingList exnteds List { - constructor() { - const pairs = [ - ["Activate", 1], - ["Off", 0], - ] - super("Automatic branding", pairs) - this.setValue(V.currentRule.set.autoBrand) - this.onchange = (value) => V.currentRule.set.autoBrand = value - } + none() { + this.sublists.forEach(i => { + i.setValue(0) + i.propagateChange() + }) } - - class BrandingLocationList extends List { - constructor() { - super("Your preferred location for brands is", []) - - const ears = new ListSubSection("Ears", [ - ["Left", "left ear"], - ["Right", "right ear"], - ["Both", "ears"] - ]) - this.appendChild(ears) - - const cheeks = new ListSubSection("Cheeks", [ - ["Left", "left cheek"], - ["Right", "right cheek"], - ["Both", "cheeks"] - ]) +} + +class BreastGrowthList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["B Cup", 350], + ["D Cup", 1000], + ["Monstrous", 9000], + ["Unlimited", 48000], + ["None", 0] + ] + super("Breasts", pairs, true) + this.setValue(V.currentRule.set.growth_boobs) + this.onchange = (value) => V.currentRule.set.growth_boobs = value + } +} + +class ButtGrowthList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Cute", 2], + ["Big", 4], + ["Huge", 6], + ["Unlimited", 10], + ["None", 0] + ] + super("Butts", pairs, true) + this.setValue(V.currentRule.set.growth_butt) + this.onchange = (value) => V.currentRule.set.growth_butt = value + } +} + +class LipGrowthList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Plump", 25], + ["Beestung", 45], + ["Facepussy", 100], + ["None", 0] + ] + super("Lips", pairs, true) + this.setValue(V.currentRule.set.growth_lips) + this.onchange = (value) => V.currentRule.set.growth_lips = value + } +} + +class DickGrowthList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Above average", 4], + ["Pornstar", 6], + ["Unlimited", 10], + ["None", 0] + ] + super("Dicks, if present", pairs, true) + this.setValue(V.currentRule.set.growth_dick) + this.onchange = (value) => V.currentRule.set.growth_dick = value + } +} + +class BallGrowthList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Sizeable", 4], + ["Cumslave", 6], + ["Unlimited", 10], + ["None", 0] + ] + super("Balls, if present", pairs, true) + this.setValue(V.currentRule.set.growth_balls) + this.onchange = (value) => V.currentRule.set.growth_balls = value + } +} + +class CurrativesList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", "none", 0], + ["Preventatives", "preventatives", 1], + ["Curatives", "curatives", 2] + ] + super("Health drugs", pairs) + this.setValue(V.currentRule.set.curatives) + this.onchange = (value) => V.currentRule.set.curatives = value + } +} + +class AphrodisiacList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", "none", 0], + ["Standard", "standard", 1], + ["Extreme", "extreme", 2], + ["Anaphrodisiacs", "anaphrodisiacs", -1] + ] + super("Aphrodisiacs", pairs) + this.setValue(V.currentRule.set.aphrodisiacs) + this.onchange = (value) => V.currentRule.set.aphrodisiacs = value + } +} + +class ContraceptiveList extends List { + constructor() { + 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]) + } + super("Contraceptives for fertile slaves", drugs) + this.setValue(V.currentRule.set.preg) + this.onchange = (value) => V.currentRule.set.preg = value + } +} + +class PregDrugsList extends List { + constructor() { + const pairs = [ + ["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"] + ] + super("Pregnancy control agents for pregnant slaves", pairs) + this.setValue(V.currentRule.set.pregSpeed) + this.onchange = (value) => V.currentRule.set.pregSpeed = value + } +} + +class FemaleHormonesList extends List { + constructor() { + const pairs = [ + ["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] + ] + super("Hormones for female slaves", pairs) + this.setValue(V.currentRule.set.XX) + this.onchange = (value) => V.currentRule.set.XX = value + } +} + +class GeldingHormonesList extends List { + constructor() { + const pairs = [ + ["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] + ] + super("Hormones for geldings", pairs) + this.setValue(V.currentRule.set.gelding) + this.onchange = (value) => V.currentRule.set.gelding = value + } +} + +class ShemaleHormonesList extends List { + constructor() { + const pairs = [ + ["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] + ] + super("Hormones for shemales", pairs) + this.setValue(V.currentRule.set.XY) + this.onchange = (value) => V.currentRule.set.XY = value + } +} + +class OtherDrugsList extends List { + constructor() { + 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]) + }) + super("Other drugs (Will be overriden by hormones and other drugs where applicable)", drugs) + this.setValue(V.currentRule.set.drug) + this.onchange = (value) => V.currentRule.set.drug = value + } +} + +class DietList extends List { + constructor() { + const diets = [ + ["no default setting", "no default setting"], + ["Fix fat and skinny slaves", "fix fat and skinny slaves", "attractive"], + ["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"]) + + super("Slave diets", diets) + this.setValue(V.currentRule.set.diet) + this.onchange = (value) => V.currentRule.set.diet = value + } +} + +class DietGrowthList extends List { + constructor() { + const pairs = [ + ["On", 1], + ["Off", 0] + ] + super("Diet support for growth drugs", pairs) + this.setValue(V.currentRule.set.dietGrowthSupport) + this.onchange = (value) => V.currentRule.set.dietGrowthSupport = value + } +} + +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) + this.setValue({cum: V.currentRule.set.dietCum, milk: V.currentRule.set.dietMilk}) + this.onchange = (value) => { + V.currentRule.set.dietCum = value.cum + V.currentRule.set.dietMilk = value.milk + } + } +} + +class MuscleList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", "None", 0], + ["Toned", "Toned", 20], + ["Ripped", "Ripped", 50], + ["Massive", "Massive", 100], + ["Weak", "Weak", -20] + ] + super("Muscles", pairs, true) + this.setValue(V.currentRule.set.muscles) + this.onchange = (value) => V.currentRule.set.muscles = value + } +} + +class BraceList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", "none"], + ["Straighten", "straighten"], + ["Universal", "universal"] + ] + super("Braces", pairs) + this.setValue(V.currentRule.set.teeth) + this.onchange = (value) => V.currentRule.set.teeth = value + } +} + +class LivingStandardList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Luxurious", "luxurious"], + ["Normal", "normal"], + ["Spare", "spare"] + ] + super("Living standard", pairs) + this.setValue(V.currentRule.set.livingRules) + this.onchange = (value) => V.currentRule.set.livingRules = value + } +} + +class PunishmentList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Confinement", "confinement"], + ["Whipping", "whipping"], + ["Chastity", "chastity"], + ["Situational", "situational"] + ] + super("Typical punishment", pairs) + this.setValue(V.currentRule.set.standardPunishment) + this.onchange = (value) => V.currentRule.set.standardPunishment = value + } +} + +class RewardList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Relaxation", "relaxation"], + ["Drugs", "drugs"], + ["Orgasm", "orgasm"], + ["Situational", "situational"] + ] + super("Typical reward", pairs) + this.setValue(V.currentRule.set.standardReward) + this.onchange = (value) => V.currentRule.set.standardReward = value + } +} + +class ReleaseList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Permissive", "permissive"], + ["Sapphic", "sapphic"], + ["Masturbation", "masturbation"], + ["Restritive", "restrictive"] + ] + super("Release rules", pairs) + this.setValue(V.currentRule.set.releaseRules) + this.onchange = (value) => V.currentRule.set.releaseRules = value + } +} + +class SmartFetishList extends List { + constructor() { + const pairs = [ + ["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"] + ] + super("Smart piercing fetish target", pairs) + this.setValue(V.currentRule.set.clitSetting) + this.onchange = (value) => V.currentRule.set.clitSetting = value + } +} + +class SmartXYAttractionList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Passionate", "passionate", 100], + ["Attracted", "attracted", 75], + ["Indifferent", "indifferent", 45], + ["None", "none", 0] + ] + super("Smart piercing XY attraction target", pairs) + this.setValue(V.currentRule.set.clitSettingXY) + this.onchange = (value) => V.currentRule.set.clitSettingXY = value + } +} + +class SmartXXAttractionList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Passionate", "passionate", 100], + ["Attracted", "attracted", 75], + ["Indifferent", "indifferent", 45], + ["None", "none", 0] + ] + super("Smart piercing XX attraction target", pairs) + this.setValue(V.currentRule.set.clitSettingXX) + this.onchange = (value) => V.currentRule.set.clitSettingXX = value + } +} + +class SmartEnergyList extends List { + constructor() { + const pairs = [ + ["Nympho", "nympho", 100], + ["Sex Addict", "sex addict", 85], + ["Powerful", "powerful", 65], + ["Healthy", "healthy", 45], + ["Weak", "weak", 25], + ["Frigid", "frigid", 0] + ] + super("Smart piercing sex drive target", pairs) + this.setValue(V.currentRule.set.clitSettingEnergy) + this.onchange = (value) => V.currentRule.set.clitSettingEnergy = value + } +} + +class SpeechList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["Permissive", "permissive"], + ["Suppress accents", "accent elimination"], + ["Restrictive", "restrictive"] + ] + super("Speech rules", pairs) + this.setValue(V.currentRule.set) + this.onchange = (value) => V.currentRule.set = value + } +} + +class RelationshipList extends List { + constructor() { + const pairs =[ + ["No default setting", "no default setting"], + ["Permissive", "permissive"], + ["Just friends", "just friends"], + ["Restrictive", "restrictive"] + ] + super("Relationship rules", pairs) + this.setValue(V.currentRule.set) + this.onchange = (value) => V.currentRule.set = value + } +} + +class PornList extends List { + constructor() { + const pairs = [ + ["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] + ] + super("Weekly porn publicity subsidy", pairs) + this.setValue(V.currentRule.set.pornFameSpending) + this.onchange = (value) => V.currentRule.set.pornFameSpending = value + } +} + +class EyewearList extends List { + constructor() { + const pairs = [ + ["no default setting"], + ["correct with contacts"], + ["universal glasses"], + ["blur with glasses"], + ["blur with contacts"] + ] + super("Eyewear", pairs) + this.setValue(V.currentRule.set.eyewear) + this.onchange = (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"], + ["vacant"] + ].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.setValue(V.currentRule.set.makeup) + this.onchange = (value) => V.currentRule.set.makeup = value + } +} + +class NailsList extends List { + constructor() { + super("Nails") + [ + ["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] + ].forEach(pair => this.appendChild(new ListItem(...pair))) + this.setValue(V.currentRule.set.nails) + this.onchange = (value) => V.currentRule.set.nails = value + } +} + +class HairLengthList extends List { + constructor() { + const pairs = [ + ["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] + ] + super("Hair length", pairs) + this.setValue(V.currentRule.set.hLength) + this.onchange = (value) => V.currentRule.set.hLength = value + } +} +class HairColourList extends List { + constructor() { + const pairs = [ + ["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"] + ] + super("Hair color", pairs) + this.setValue(V.currentRule.set.hColor) + this.onchange = (value) => V.currentRule.set.hColor = value + } +} + +class HairStyleList extends List { + constructor() { + const pairs = [ + ["no default setting"], + ["neat"], + ["shaved"], + ["trimmed"], + ["buzzcut"], + ["up"], + ["ponytail"], + ["bun"], + ["curled"], + ["permed"], + ["luxurious"], + ["dreadlocks"], + ["cornrows"], + ["braided"], + ["tails"], + ["afro"], + ["strip"] + ] + super("Hair style", pairs) + this.setValue(V.currentRule.set.hStyle) + this.onchange = (value) => V.currentRule.set.hStyle = value + } +} + +class PubicHairColourList extends List { + constructor() { + const pairs = [ + ["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"] + ] + super("Pubic hair color, when present", pairs) + this.setValue(V.currentRule.set.pubicHColor) + this.onchange = (value) => V.currentRule.set.pubicHColor = value + } +} + +class PubicHairStyleList extends List { + constructor() { + const pairs = [ + ["no default setting"], + ["waxed"], + ["in a strip"], + ["neat"], + ["bushy"], + ["bushy in the front and neat in the rear"], + ["very bushy"] + ] + super("Pubic hairstyle", pairs) + this.setValue(V.currentRule.set.pubicHStyle) + this.onchange = (value) => V.currentRule.set.pubicHStyle = value + } +} + +class ArmpitHairColourList extends List { + constructor() { + const pairs = [ + ["no default setting"], + ["blonde"], + ["golden"], + ["platinum blonde"], + ["strawberry-blonde"], + ["copper"], + ["ginger"], + ["red"], + ["green"], + ["blue"], + ["pink"], + ["dark brown"], + ["brown"], + ["auburn"], + ["burgundry"], + ["chocolate"], + ["chestnut"], + ["hazel"], + ["black"], + ["grey"], + ["silver"], + ["white"] + ] + super("Underarm hair color, when present", pairs) + this.setValue(V.currentRule.set.underArmHColor) + this.onchange = (value) => V.currentRule.set.underArmHColor = value + } +} + +class ArmpitHairStyleList extends List { + constructor() { + const pairs = [ + ["no default setting"], + ["waxed"], + ["shaved"], + ["neat"], + ["bushy"] + ] + super("Underarm hair style", pairs) + this.setValue(V.currentRule.set.underArmHStyle) + this.onchange = (value) => V.currentRule.set.underArmHStyle = value + } +} + +class EarPiecingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2] + ] + super("Ear piercings", pairs) + this.setValue(V.currentRule.set.earPiercing) + this.onchange = (value) => V.currentRule.set.earPiercing + } +} + +class NosePiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2] + ] + super("Nasal piercings", pairs) + this.setValue(V.currentRule.set.nosePiercing) + this.onchange = (value) => V.currentRule.set.earPiercing + } +} + +class EyebrowPiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2] + ] + super("Eyebrow piercings", pairs) + this.setValue(V.currentRule.set.eyebrowPiercing) + this.onchange = (value) => V.currentRule.set.eyebrowPiercing + } +} + +class NavelPiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2] + ] + super("Navel piercings", pairs) + this.setValue(V.currentRule.set.navelPiercing) + this.onchange = (value) => V.currentRule.set.navelPiercing + } +} + +class NipplePiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2] + ] + super("Nipple piercings", pairs) + this.setValue(V.currentRule.set.nipplesPiercing) + this.onchange = (value) => V.currentRule.set.nipplesPiercing + } +} + +class AreolaPiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Studded", 1] + ] + super("Areola studs", pairs) + this.setValue(V.currentRule.set.areolaePiercing) + this.onchange = (value) => V.currentRule.set.areolaePiercing + } +} + +class LipPiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2] + ] + super("Lip piercings", pairs) + this.setValue(V.currentRule.set.lipsPiercing) + this.onchange = (value) => V.currentRule.set.lipsPiercing + } +} + +class TonguePiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2] + ] + super("Tongue piercing", pairs) + this.setValue(V.currentRule.set.tonguePiercing) + this.onchange = (value) => V.currentRule.set.tonguePiercing + } +} + +class CliptPiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2], + ["Smart (expensive)", 3] + ] + super("Clit piercing", pairs) + this.setValue(V.currentRule.set.clitPiercing) + this.onchange = (value) => V.currentRule.set.clitPiercing + } +} + +class LabiaPiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2] + ] + super("Pussylips piercings", pairs) + this.setValue(V.currentRule.set.vaginaPiercing) + this.onchange = (value) => V.currentRule.set.vaginaPiercing + } +} + +class ShaftPiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2] + ] + super("Shaft piercings", pairs) + this.setValue(V.currentRule.set.dickPiercing) + this.onchange = (value) => V.currentRule.set.dickPiercing + } +} + +class PerineumPiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Light", 1], + ["Heavy", 2] + ] + super("Perianal piercings", pairs) + this.setValue(V.currentRule.set.anusPiercing) + this.onchange = (value) => V.currentRule.set.anusPiercing + } +} + +class CorsetPiercingList extends List { + constructor() { + const pairs = [ + ["No default setting", "no default setting"], + ["None", 0], + ["Apply", 1] + ] + super("Corset piercings", pairs) + this.setValue(V.currentRule.set.corsetPiercing) + this.onchange = (value) => V.currentRule.set.corsetPiercing + } +} + +class AutoBrandingList exnteds List { + constructor() { + const pairs = [ + ["Activate", 1], + ["Off", 0], + ] + super("Automatic branding", pairs) + this.setValue(V.currentRule.set.autoBrand) + this.onchange = (value) => V.currentRule.set.autoBrand = value + } +} + +class BrandingLocationList extends List { + constructor() { + super("Your preferred location for brands is", []) + + const ears = new ListSubSection("Ears", [ + ["Left", "left ear"], + ["Right", "right ear"], + ["Both", "ears"] + ]) + this.appendChild(ears) + + const cheeks = new ListSubSection("Cheeks", [ + ["Left", "left cheek"], + ["Right", "right cheek"], + ["Both", "cheeks"] + ]) this.appendChild(cheeks) const shoulders = new ListSubSection("Shoulders", [ @@ -2491,4 +2505,417 @@ window.rulesAssistantOptions = (function() { super("Your brand design is", items, true) } } + + class FaceTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["Asian art"], + ["permanent makeup"], + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Facial tattoos", items) + this.selectValue(V.currentRule.set.lipsTat) + this.onchange = (value) => V.currentRule.set.lipsTat = value + } + } + + class ShoulderTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["Asian art"], + ["scenes"], + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Shoulder tattoos", items) + this.selectValue(V.currentRule.set.shouldersTat) + this.onchange = (value) => V.currentRule.set.shouldersTat = value + } + } + + class ChestTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["Asian art"], + ["scenes"], + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Chest tattoos", items) + this.selectValue(V.currentRule.set.boobsTat) + this.onchange = (value) => V.currentRule.set.boobsTat = value + } + } + + class ArmTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["Asian art"], + ["scenes"], + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Arm tattoos", items) + this.selectValue(V.currentRule.set.armsTat) + this.onchange = (value) => V.currentRule.set.armsTat = value + } + } + + class UpperBackTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["Asian art"], + ["scenes"], + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Upper back tattoos", items) + this.selectValue(V.currentRule.set.backTat) + this.onchange = (value) => V.currentRule.set.backTat = value + } + } + + class LowerBackTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["Asian art"], + ["scenes"], + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Lower back tattoos", items) + this.selectValue(V.currentRule.set.stampTat) + this.onchange = (value) => V.currentRule.set.stampTat = value + } + } + + class AbdomenTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["Asian art"], + ["scenes"], + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Abdomen tattoos", items) + this.selectValue(V.currentRule.set.vaginaTat) + this.onchange = (value) => V.currentRule.set.vaginaTat = value + } + } + + class DickTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["Asian art"], + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Dick tattoos", items) + this.selectValue(V.currentRule.set.dickTat) + this.onchange = (value) => V.currentRule.set.dickTat = value + } + } + + class ButtockTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["Asian art"], + ["scenes"], + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Buttock tattoos", items) + this.selectValue(V.currentRule.set.buttTat) + this.onchange = (value) => V.currentRule.set.buttTat = value + } + } + + class AnalTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["bleached"] + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Anal tattoo or bleaching", items) + this.selectValue(V.currentRule.set.anusTat) + this.onchange = (value) => V.currentRule.set.anusTat = value + } + } + + class LegTattooList extends List { + constructor() { + const items = [ + ["no default setting"], + ["none", 0] + ["tribal patterns"], + ["flowers"], + ["counting"], + ["advertisements"], + ["rude words"], + ["degradation"], + ["bovine patterns"], + ["Asian art"], + ["scenes"], + ["sacrament"], + ["sacrilege"], + ["possessive"], + ["paternalist"] + ] + super("Leg tattoos", items) + this.selectValue(V.currentRule.set.legsTat) + this.onchange = (value) => V.currentRule.set.legsTat = value + } + } + + class VisionSurgeryList extends List { + constructor() { + const items = [ + ["no default setting"], + ["fixed", 1], + ["blurred", -1] + ] + super("Vision correction", items) + this.selectValue(V.currentRule.set.surgery_eyes) + this.onchange = (value) => V.currentRule.set.surgery_eyes = value + } + } + + class LactationSurgeryList extends List { + constructor() { + const items = [ + ["no default setting"], + ["implanted", 1], + ["removed", 0] + ] + super("Lactation drug implants", items) + this.selectValue(V.currentRule.set.surgery_lactation) + this.onchange = (value) => V.currentRule.set.surgery_lactation = value + } + } + + class SemenSurgeryList extends List { + constructor() { + const items = [ + ["no default setting"], + ["implanted", 1], + ["removed", 0] + ] + super("Prostate production enhancing drug implants", items) + this.selectValue(V.currentRule.set.surgery_prostate) + this.onchange = (value) => V.currentRule.set.surgery_prostate = value + } + } + + class CosmeticSurgeryList extends List { + constructor() { + const items = [ + ["none", 0], + ["subtle", 1], + ["invasive", 2] + ] + super("Cosmetic Surgery", items) + this.selectValue(V.currentRule.set.surgery_cosmetic) + this.onchange = (value) => V.currentRule.set.surgery_cosmetic = value + } + } + + class LipSurgeryList extends List { + constructor() { + const items = [ + ["no default setting"], + ["removed", 0], + ["plush", 20], + ["big", 40], + ["huge", 70], + ["facepussy", 95] + ] + super("Lip implants", items) + this.selectValue(V.currentRule.set.surgery_lips) + this.onchange = (value) => V.currentRule.set.surgery_lips = value + } + } + + class ButtSurgeryList extends List { + constructor() { + const items = [ + ["no default setting"], + ["removed", 0] + ["slim", 2], + ["stacked", 4], + ["huge", 6], + ["maximised", 9] + ] + super("Buttock implants", items) + this.selectValue(V.currentRule.set.surgery_butt) + this.onchange = (value) => V.currentRule.set.surgery_butt = value + } + } + + class BreastSurgeryList extends List { + constructor() { + const items = [ + ["no default setting"], + ["removed", 0] + ["slim", 400], + ["stacked", 1000], + ["huge", 2000], + ["barely functional", 9000], + ["maximised", 48000] + ] + super("Breast implants", items) + this.selectValue(V.currentRule.set.surgery_boobs) + this.onchange = (value) => V.currentRule.set.surgery_boobs = value + } + } + + class TighteningSurgeryList extends List { + constructor() { + const items = [ + ["no default setting"], + ["tightening", 1] + ["virginity restoration", 2] + ] + super("Orifice Tightening", items) + this.selectValue(V.currentRule.set.surgery_holes) + this.onchange = (value) => V.currentRule.set.surgery_holes = value + } + } + + class BodyHairSurgeryList extends List { + constructor() { + const items = [ + ["no default setting"], + ["keep", 1] + ["removal", 2] + ] + super("Orifice Tightening", items) + this.selectValue(V.currentRule.set.surgery_bodyhair) + this.onchange = (value) => V.currentRule.set.surgery_bodyhair = value + } + } + + class HairSurgeryList extends List { + constructor() { + const items = [ + ["no default setting"], + ["keep", 1] + ["removal", 2] + ] + super("Orifice Tightening", items) + this.selectValue(V.currentRule.set.surgery_hair) + this.onchange = (value) => V.currentRule.set.surgery_hair = value + } + } })()