Newer
Older
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 {
["contraceptives", true],
["fertile", false],
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"]);
}
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
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;
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(this.value2string(current_rule.set.dietCum, current_rule.set.dietMilk));
this.onchange = (value) => {
current_rule.set.dietCum = value.cum;
current_rule.set.dietMilk = value.milk;
this.setValue(this.value2string(current_rule.set.dietCum, current_rule.set.dietMilk));
value2string(cum, milk) {
return `cum: ${cum}, milk: ${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 ReleaseList extends ListSelector {
["permissive"],
["sapphic"],
["masturbation"],
["restrictive"],
["chastity"]
this.setValue(current_rule.set.releaseRules);
this.onchange = (value) => current_rule.set.releaseRules = 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;
super("Eye coloring");
this.colorlist = new LensesColorList(this);
this.shapelist = new LensesShapeList(this);
this.colorlist.onchange = () => this.setValue(undefined);
this.shapelist.onchange = () => this.setValue(undefined);
this.setValue(current_rule.set.eyeColor);
this.onchange = (value) => current_rule.set.eyeColor = value;
_appendContentTo(container) {
super._appendContentTo(container);
this.colorlist._appendContentTo(container);
this.shapelist._appendContentTo(container);
if (this.colorlist.getData() !== null) { lst.push(this.colorlist.getData()); }
if (this.shapelist.getData() !== null) { lst.push(this.shapelist.getData()); }
return (lst.length === 0) ? null : lst.join(" ");
if (val === undefined) {
val = this.combine();
} else {
if (val === noDefaultSetting.value) {
this.colorlist.setValue(val);
this.shapelist.setValue(val);
} else {
//
}
}
super.setValue(val);
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
class LensesColorList extends List {
constructor(parent) {
const items =
[
"blue",
"black",
"brown",
"green",
"turquoise",
"sky-blue",
"hazel",
"pale-grey",
"white",
"pink",
"yellow",
"orange",
"amber",
"red"
];
super("Color", items);
this.labelElement_.className = "ra-sub-label";
this.parent = parent;
}
createValueElement() {
return null;
}
}
class LensesShapeList extends List {
constructor(parent) {
const items =
[
"catlike",
"serpent-like",
"goat-like",
"devilish",
"demonic",
"hypnotic",
"heart-shaped",
"star-shaped",
"wide-eyed",
"almond-shaped",
"bright",
"teary",
"vacant"
];
super("Shape", items);
this.labelElement_.className = "ra-sub-label";
this.parent = parent;
}
createValueElement() {
return null;
["correct with hearing aids"],
["muffle with ear plugs"],
["deafen with ear plugs"]
];
this.setValue(current_rule.set.earwear);
this.onchange = (value) => current_rule.set.earwear = value;
}
}
class MakeupList extends ListSelector {
["makeup-free", 0],
["nice", 1],
["gorgeous", 2],
["color-coordinate with hair", 3],
["slutty", 4]
this.setValue(current_rule.set.makeup);
this.onchange = (value) => current_rule.set.makeup = value;
class NailsList extends ListSelector {
["clipped", 0],
["extended", 1],
["color-coordinate with hair", 2],
["sharp and claw-like", 3],
["bright and glittery", 4],
["hooker nails", 5],
["neon colored", 6],
["neon color-coordinate with hair", 7],
["metallic painted", 8],