Newer
Older
this.setValue(current_rule.set.chastityVagina);
this.onchange = (value) => current_rule.set.chastityVagina = value;
}
class VagAccVirginsList extends ListSelector {
} else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1) {
this.setValue(current_rule.set.virginAccessory);
this.onchange = (value) => current_rule.set.virginAccessory = value;
class VagAccAVirginsList extends ListSelector {
} else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1) {
this.setValue(current_rule.set.aVirginAccessory);
this.onchange = (value) => current_rule.set.aVirginAccessory = value;
class VagAccOtherList extends ListSelector {
} else if (acc.rs === "buyBigDildos" && V.toysBoughtDildos === 1) {
this.setValue(current_rule.set.vaginalAccessory);
this.onchange = (value) => current_rule.set.vaginalAccessory = value;
class VaginalAttachmentsList extends ListSelector {
} else if (acc.rs === "buyVaginalAttachments" && V.toysBoughtVaginalAttachments === 1) {
super("Vaginal attachments for slaves with vaginal accessories", accs);
this.setValue(current_rule.set.vaginalAttachment);
this.onchange = (value) => current_rule.set.vaginalAttachment = value;
}
this.setValue(current_rule.set.chastityPenis);
this.onchange = (value) => current_rule.set.chastityPenis = value;
}
class DickAccVirginsList extends ListSelector {
super("Dick accessories for anal virgins", setup.dickAccessories.map(i => [i.name, i.value]));
this.setValue(current_rule.set.aVirginDickAccessory);
this.onchange = (value) => current_rule.set.aVirginDickAccessory = value;
class DickAccOtherList extends ListSelector {
super("Dick accessories for other slaves", setup.dickAccessories.map(i => [i.name, i.value]));
this.setValue(current_rule.set.dickAccessory);
this.onchange = (value) => current_rule.set.dickAccessory = value;
this.setValue(current_rule.set.chastityAnus);
this.onchange = (value) => current_rule.set.chastityAnus = value;
}
class ButtplugsVirginsList extends ListSelector {
} else if (acc.rs === "buyBigPlugs" && V.toysBoughtButtPlugs === 1) {
this.setValue(current_rule.set.aVirginButtplug);
this.onchange = (value) => current_rule.set.aVirginButtplug = value;
class ButtplugsOtherList extends ListSelector {
} else if (acc.rs === "buyBigPlugs" && V.toysBoughtButtPlugs === 1) {
this.setValue(current_rule.set.buttplug);
this.onchange = (value) => current_rule.set.buttplug = value;
class ButtplugAttachmentsList extends ListSelector {
constructor() {
const accs = [];
} else if (acc.rs === "buyTails" && V.toysBoughtButtPlugTails === 1) {
});
super("Buttplug attachments for slaves with buttplugs", accs);
this.setValue(current_rule.set.buttplugAttachment);
this.onchange = (value) => current_rule.set.buttplugAttachment = value;
}
}
class ImplantVolumeList extends ListSelector {
["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)", pairs, false);
this.setValue(current_rule.set.bellyImplantVol);
this.onchange = (value) => current_rule.set.bellyImplantVol = value;
class AutosurgerySwitch extends BooleanSwitch {
super("Assistant-applied implants (Autosurgery global switch)", [0, 1]);
this.setValue(current_rule.set.autoSurgery);
this.onchange = (value) => current_rule.set.autoSurgery = value;
class IntensiveGrowthSwitch extends BooleanSwitch {
super("Use intensive growth drugs for healthy slaves", [0, 1]);
this.setValue(current_rule.set.growth.intensity);
this.onchange = (value) => current_rule.set.growth.intensity = value;
class HyperGrowthSwitch extends BooleanSwitch {
this.setValue(current_rule.set.hyper_drugs);
this.onchange = (value) => current_rule.set.hyper_drugs = value;
}
}
super("Growth hormone regimes for healthy slaves");
[capFirstChar(noDefaultSetting.text), () => 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);
}
}
_appendContentTo(container) {
super._appendContentTo(container);
this.sublists.forEach(i => i._appendContentTo(container));
[this.breasts, this.butts, this.lips, this.dicks, this.balls].forEach(i => {
this.breasts.setValue(App.RA.makeTarget('<=', 350));
this.butts.setValue(App.RA.makeTarget('<=', 2));
this.lips.setValue(App.RA.makeTarget('<=', 25));
if (this.dicks) { this.dicks.setValue(App.RA.makeTarget('==', 0)); }
if (this.balls) { this.balls.setValue(App.RA.makeTarget('==', 0)); }
this.breasts.setValue(App.RA.makeTarget('>=', 1000));
this.butts.setValue(App.RA.makeTarget('>=', 5));
this.lips.setValue(App.RA.makeTarget('>=', 25));
if (this.dicks) { this.dicks.setValue(App.RA.makeTarget('>=', 4)); }
if (this.balls) { this.balls.setValue(App.RA.makeTarget('>=', 4)); }
this.breasts.setValue(App.RA.makeTarget('>=', 9000));
this.butts.setValue(App.RA.makeTarget('>=', 10));
this.lips.setValue(App.RA.makeTarget('>=', 45));
if (this.dicks) { this.dicks.setValue(App.RA.makeTarget('>=', 6)); }
if (this.balls) { this.balls.setValue(App.RA.makeTarget('>=', 6)); }
this.breasts.setValue(App.RA.makeTarget('>=', 48000));
this.butts.setValue(App.RA.makeTarget('>=', 20));
this.lips.setValue(App.RA.makeTarget('>=', 100));
if (this.dicks) { this.dicks.setValue(App.RA.makeTarget('>=', 30)); }
if (this.balls) { this.balls.setValue(App.RA.makeTarget('>=', 125)); }
class BreastGrowthList extends NumericTargetEditor {
["monstrous", 9000],
["unlimited", 48000],
["none", 0]
this.setValue(current_rule.set.growth.boobs);
this.onchange = (value) => current_rule.set.growth.boobs = value;
class ButtGrowthList extends NumericTargetEditor {
["cute", 2],
["big", 4],
["huge", 6],
["unlimited", 20],
["none", 0]
this.setValue(current_rule.set.growth.butt);
this.onchange = (value) => current_rule.set.growth.butt = value;
class LipGrowthList extends NumericTargetEditor {
["plump", 25],
["beestung", 45],
["facepussy", 100],
["none", 0]
this.setValue(current_rule.set.growth.lips);
this.onchange = (value) => current_rule.set.growth.lips = value;
class DickGrowthList extends NumericTargetEditor {
["above average", 4],
["pornstar", 6],
["unlimited", 30],
["none", 0]
this.setValue(current_rule.set.growth.dick);
this.onchange = (value) => current_rule.set.growth.dick = value;
class BallGrowthList extends NumericTargetEditor {
["sizable", 4],
["cumslave", 6],
["unlimited", 125],
["none", 0]
this.setValue(current_rule.set.growth.balls);
this.onchange = (value) => current_rule.set.growth.balls = value;
["none", 0],
["preventatives", 1],
["curatives", 2],
super("Health drugs", pairs, true, false, true);
this.setValue(current_rule.set.curatives);
this.onchange = (value) => current_rule.set.curatives = value;
class AphrodisiacList extends ListSelector {
["none", 0],
["standard", 1],
["extreme", 2],
["anaphrodisiacs", -1]
this.setValue(current_rule.set.aphrodisiacs);
this.onchange = (value) => current_rule.set.aphrodisiacs = value;
class ContraceptiveList extends RadioSelector {
super("Contraceptives for fertile slaves", drugs, true);
this.setValue(current_rule.set.preg);
this.onchange = (value) => current_rule.set.preg = value;
class AbortionList extends ListSelector {
if (V.pregnancyMonitoringUpgrade === 1 && V.geneticMappingUpgrade >= 1) {
pairs.push(["abort boys", "male"]);
pairs.push(["abort girls", "female"]);
super("Pregnancy termination", pairs);
this.setValue(current_rule.set.abortion);
this.onchange = (value) => current_rule.set.abortion = value;
}
}
class PregDrugsList extends ListSelector {
["none"],
["fast gestation", "fast"],
["slow gestation", "slow"],
["birth suppressors", "suppress"],
["birth stimulators", "stimulate"]
this.setValue(current_rule.set.pregSpeed);
this.onchange = (value) => current_rule.set.pregSpeed = value;
class FemaleHormonesList extends ListSelector {
["Intensive Female", 2],
["Female", 1],
["None", 0],
["Male", -1],
["Intensive Male", -2]
this.setValue(current_rule.set.XX);
this.onchange = (value) => current_rule.set.XX = value;
class GeldingHormonesList extends ListSelector {
["Intensive Female", 2],
["Female", 1],
["None", 0],
["Male", -1],
["Intensive Male", -2]
this.setValue(current_rule.set.gelding);
this.onchange = (value) => current_rule.set.gelding = value;
class ShemaleHormonesList extends ListSelector {
["Intensive Female", 2],
["Female", 1],
["None", 0],
["Male", -1],
this.setValue(current_rule.set.XY);
this.onchange = (value) => current_rule.set.XY = value;
class OtherDrugsList extends ListSelector {
// Lips
if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
drugs.push(["lip atrophiers"]);
drugs.push(["lip injections"]);
// Breasts
if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
drugs.push(["breast redistributors"]);
}
drugs.push(["breast injections"]);
drugs.push(["intensive breast injections"]);
if (V.arcologies[0].FSAssetExpansionistResearch === 1) {
drugs.push(["hyper breast injections"]);
if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
}
// Womb
drugs.push(["fertility drugs"]);
if (V.seeHyperPreg === 1 && V.superFertilityDrugs === 1) {
drugs.push(["Super fertility drugs", "super fertility drugs"]);
}
if (V.precociousPuberty === 1 && V.pubertyHormones) {
drugs.push(["Female hormone injections (Research)", "female hormone injections"]);
}
// Vagina
if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
// Dicks
if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
drugs.push(["penis atrophiers"]);
}
drugs.push(["penis enhancement"]);
drugs.push(["intensive penis enhancement"]);
if (V.arcologies[0].FSAssetExpansionistResearch === 1) {
drugs.push(["hyper penis enhancement"]);
}
drugs.push(["Erectile dysfunction circumvention", "priapism agents"]);
// Balls
if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
drugs.push(["testicle atrophiers"]);
}
drugs.push(["testicle enhancement"]);
drugs.push(["intensive testicle enhancement"]);
if (V.arcologies[0].FSAssetExpansionistResearch === 1) {
drugs.push(["hyper testicle enhancement"]);
}
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
if (V.precociousPuberty === 1 && V.pubertyHormones) {
drugs.push(["Male hormone injections (Research)", "male hormone injections"]);
}
// Butt
if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
drugs.push(["butt redistributors"]);
}
drugs.push(["butt injections"]);
drugs.push(["intensive butt injections"]);
if (V.arcologies[0].FSAssetExpansionistResearch === 1) {
drugs.push(["hyper butt injections"]);
}
// Body
if (V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
drugs.push(["Weight loss pills (FS)", "appetite suppressors"]);
}
drugs.push(["steroids"]);
if (V.growthStim === 1) {
drugs.push(["Growth Stimulants (Research)", "growth stimulants"]);
}
// Mind
drugs.push(["psychosuppressants"]);
if (V.arcologies[0].FSSlaveProfessionalismResearch === 1) {
drugs.push(["Mental stimulants (FS)", "psychostimulants"]);
}
// Hormones
drugs.push(["hormone blockers"]);
drugs.push(["Natural hormone enhancers", "hormone enhancers"]);
// Age
if (V.arcologies[0].FSYouthPreferentialistResearch === 1) {
this.setValue(current_rule.set.drug);
this.onchange = (value) => current_rule.set.drug = value;
class EnemaList extends ListSelector {
["aphrodisiac"],
["curative"],
["tightener"]
super("Enemas", enemas);
this.setValue(current_rule.set.inflationType);
this.onchange = (value) => current_rule.set.inflationType = value;
}
}
class WeightEditor extends NumericRangeEditor {
constructor() {
const hdp = V.arcologies[0].FSHedonisticDecadence !== "unset";
["emaciated", App.RA.makeRange(-100, -96)],
["very thin", App.RA.makeRange(-95, -31)],
["pleasingly thin", App.RA.makeRange(-30, -11)],
["healthy", App.RA.makeRange(-10, 10)],
["nicely plush", App.RA.makeRange(11, 30)],
[hdp ? "quite curvy" : "chubby", App.RA.makeRange(31, 95)],
[hdp ? "extremely curvy": "overweight", App.RA.makeRange(96, 130)],
[hdp ? "amazingly curvy": "very overweight", App.RA.makeRange(131, 160)],
[hdp ? "spectacularly curvy": "extremely overweight", App.RA.makeRange(161, 190)],
[hdp ? "perfectly curvy" : "dangerously overweight", App.RA.makeRange(191, 200)]
];
super("Weight", pairs, true, -100, 200);
this.setValue(current_rule.set.weight);
this.onchange = (value) => current_rule.set.weight = value;
}
}
class DietList extends ListSelector {
["fix fat and skinny slaves", "attractive"],
["feminine", "XX"],
["masculine", "XY"]
super("Special diets", diets);
this.setValue(current_rule.set.diet);
this.onchange = (value) => current_rule.set.diet = value;
this.setValue(current_rule.set.dietGrowthSupport);
this.onchange = (value) => current_rule.set.dietGrowthSupport = value;

MouseOfLight
committed
const dietAddedText = function(value) {
switch(value) {
case 0:
return "None";
case 1:
return "Added";
case 2:
return "Based";
default:
return value;
}
class DietBaseList extends List {
constructor() {
// TODO: better data structure?
const pairs = [
[capFirstChar(noDefaultSetting.text), {cum: null, milk: null}],
["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}],
this.setValue({cum: current_rule.set.dietCum, milk: current_rule.set.dietMilk});
this.onchange = (value) => {
current_rule.set.dietCum = value.cum;
current_rule.set.dietMilk = value.milk;

MouseOfLight
committed
this.setValue(value);

MouseOfLight
committed
setTextValue(what) {
if(what.cum == null && what.milk == null) {
super.setTextValue(capFirstChar(noDefaultSetting.text));

MouseOfLight
committed
super.setTextValue(`Cum: ${dietAddedText(what.cum)}, Milk: ${dietAddedText(what.milk)}`);
}
class DietSolidFoodList extends RadioSelector {
this.setValue(current_rule.set.onDiet);
this.onchange = (value) => current_rule.set.onDiet = value;
}
}
class MuscleList extends NumericTargetEditor {
["none", 0],
["toned", 20],
["ripped", 50],
["massive", 100],
["weak", -20]
this.setValue(current_rule.set.muscles);
this.onchange = (value) => current_rule.set.muscles = value;
class BraceList extends ListSelector {
["none"],
["straighten"],
["universal"]
this.setValue(current_rule.set.teeth);
this.onchange = (value) => current_rule.set.teeth = value;
class LivingStandardList extends ListSelector {
["luxurious"],
["normal"],
["spare"]
this.setValue(current_rule.set.livingRules);
this.onchange = (value) => current_rule.set.livingRules = value;
class PunishmentList extends ListSelector {
["confinement"],
["whipping"],
["chastity"],
["situational"]
this.setValue(current_rule.set.standardPunishment);
this.onchange = (value) => current_rule.set.standardPunishment = value;
class RewardList extends ListSelector {
["relaxation"],
["drugs"],
["orgasm"],
["situational"]
this.setValue(current_rule.set.standardReward);
this.onchange = (value) => current_rule.set.standardReward = value;
class ReleaseMasturbationSwitch extends RadioSelector {
["Allowed", 1],
["Forbidden", 0],
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
super("Masturbation", pairs);
this.setValue(current_rule.set.releaseRules.masturbation);
this.onchange = (value) => current_rule.set.releaseRules.masturbation = value;
}
}
class ReleasePartnerSwitch extends RadioSelector {
constructor() {
const pairs = [
["Allowed", 1],
["Forbidden", 0],
];
super("Sex with partner", pairs);
this.setValue(current_rule.set.releaseRules.partner);
this.onchange = (value) => current_rule.set.releaseRules.partner = value;
}
}
class ReleaseFamilySwitch extends RadioSelector {
constructor() {
const pairs = [
["Allowed", 1],
["Forbidden", 0],
];
super("Sex with family", pairs);
this.setValue(current_rule.set.releaseRules.family);
this.onchange = (value) => current_rule.set.releaseRules.family = value;
}
}
class ReleaseSlavesSwitch extends RadioSelector {
constructor() {
const pairs = [
["Allowed", 1],
["Forbidden", 0],
];
super("Sex with other slaves", pairs);
this.setValue(current_rule.set.releaseRules.slaves);
this.onchange = (value) => current_rule.set.releaseRules.slaves = value;
}
}
class ReleaseMasterSwitch extends RadioSelector {
constructor() {
const pairs = [
["Granted", 1],
["Denied", 0],
];
super(`Routine sex with ${properMaster()}`, pairs);
this.setValue(current_rule.set.releaseRules.master);
this.onchange = (value) => current_rule.set.releaseRules.master = value;
class ToyHoleList extends ListSelector {
["all her holes"],
["mouth"],
["boobs"],
["pussy"],
["ass"],
["dick"]
];
super("Fucktoy use preference", pairs);
this.setValue(current_rule.set.toyHole);
this.onchange = (value) => current_rule.set.toyHole = value;
}
}
class SmartFetishList extends ListSelector {
["vanilla"],
["oral"],
["anal"],
["boobs"],
["Preg", "pregnancy"],
["Pain", "masochist"],
["Sadism", "sadist"]
];
super("Smart piercing fetish target", pairs);
this.setValue(current_rule.set.clitSetting);
this.onchange = (value) => current_rule.set.clitSetting = value;
class SmartXYAttractionList extends ListSelector {
["passionate", 100],
["attracted", 75],
["indifferent", 45],
["none", 0]
this.setValue(current_rule.set.clitSettingXY);
this.onchange = (value) => current_rule.set.clitSettingXY = value;
class SmartXXAttractionList extends ListSelector {
["passionate", 100],
["attracted", 75],
["indifferent", 45],
["none", 0]
this.setValue(current_rule.set.clitSettingXX);
this.onchange = (value) => current_rule.set.clitSettingXX = value;
class SmartEnergyList extends ListSelector {
["sex addict", 85],
["powerful", 65],
["healthy", 45],
["weak", 25],
["frigid", 0]
this.setValue(current_rule.set.clitSettingEnergy);
this.onchange = (value) => current_rule.set.clitSettingEnergy = value;
["permissive"],
["suppress accents", "accent elimination"],
["restrictive"]
this.setValue(current_rule.set.speechRules);
this.onchange = (value) => current_rule.set.speechRules = value;
["permissive"],
["just friends"],
["restrictive"]
this.setValue(current_rule.set.relationshipRules);
this.onchange = (value) => current_rule.set.relationshipRules = value;
class PornBroadcastStatus extends RadioSelector {
constructor() {
const pairs = [
super("Porn Broadcasting Status", pairs, true);
this.setValue(current_rule.set.pornFeed);
this.onchange = (value) => current_rule.set.pornFeed = value;
}
}
class PornList extends ListSelector {
/* ["No broadcasting", -1], **This has changed, it would now use pornFeed** */
["1000", 1000],
["2000", 2000],
["3000", 3000],
["4000", 4000],
["5000", 5000]
this.setValue(current_rule.set.pornFameSpending);
this.onchange = (value) => current_rule.set.pornFameSpending = value;
class EyewearList extends ListSelector {
["correct with contacts"],
["universal glasses"],
["blur with glasses"],
["blur with contacts"]
];
super("Eyewear", pairs);
this.setValue(current_rule.set.eyewear);
this.onchange = (value) => current_rule.set.eyewear = value;