Newer
Older
constructor() {
super("Buttplug attachments for slaves with buttplugs", isItemAccessible.array(App.Data.misc.buttplugAttachments));
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.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"]);
wkwk
committed
if (V.dispensary) {
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"]);
}
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
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],
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
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.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 LactationList extends RadioSelector {
constructor() {
const pairs = [
["none"],
["induce"],
["maintain"]
];
super("Lactation rules", pairs, true);
this.setValue(current_rule.set.lactationRules);
this.onchange = (value) => current_rule.set.lactationRules = value;
}
}
class MobilityDeviceList extends ListSelector {
constructor() {
const pairs = [
["restrictive"],
["permissive"],
];
super("Mobility device usage rules", pairs);
this.setValue(current_rule.set.mobilityRules);
this.onchange = (value) => current_rule.set.mobilityRules = 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]);
}
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
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
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],
wkwk
committed
["slutty", 4],
["neon", 5],
["neon color-coordinate with hair", 6],