Newer
Older
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 MultiListSelector {
if (V.pregnancyMonitoringUpgrade === 1 && V.geneticMappingUpgrade >= 1) {
pairs.push(["boys", "male"]);
pairs.push(["girls", "female"]);
for (let i = 0; i < App.Data.misc.filterRaces.length; ++i) {
pairs.push([App.Data.misc.filterRaces[i], "race:" + App.Data.misc.filterRacesLowercase[i]]);
}
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"]);
}
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
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],
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
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;
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 {
this.colorlist.setValue(val);
this.shapelist.setValue(val);
} else {

MouseOfLight
committed
let list = val.split(' ');

MouseOfLight
committed
this.colorlist.setValue(list[0]);
this.shapelist.setValue(list[1]);

MouseOfLight
committed
this.colorlist.trySetValue(list[0]);
this.shapelist.trySetValue(list[0]);
}
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
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],
["metallic color-coordinate with hair", 9]
this.setValue(current_rule.set.nails);
this.onchange = (value) => current_rule.set.nails = value;
["very short", 5],
["short", 10],
["shoulder length", 30],
["long", 60],
["very long", 100],
["floor length", 150]
super("Hair length", pairs, true, false, true);
this.setValue(current_rule.set.hLength);
this.onchange = (value) => current_rule.set.hLength = value;
constructor() {
const pairs = [
["maintain hair length", 1],
["do not maintain hair length", 0]
];
super("Hair length maintenance", pairs, true, false, true);
this.setValue(current_rule.set.haircuts);
this.onchange = (value) => current_rule.set.haircuts = value;
}
}
class HairColorList extends ListSelector {
constructor() {
const pairs = [
["blonde"],
["golden"],
["platinum blonde"],