Newer
Older
this.setValue(current_rule.set.aVirginButtplug);
this.onchange = (value) => current_rule.set.aVirginButtplug = value;
class ButtplugsOtherList extends ListSelector {
super("Buttplugs for other slaves", isItemAccessible.array(App.Data.slaveWear.buttplugs));
this.setValue(current_rule.set.buttplug);
this.onchange = (value) => current_rule.set.buttplug = value;
class ButtplugAttachmentsList extends ListSelector {
constructor() {
super("Buttplug attachments for slaves with buttplugs", isItemAccessible.array(App.Data.slaveWear.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],
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"]);
}
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
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 RestList extends ListSelector {
constructor() {
const pairs = [
["none"],
["permissive"],
["restrictive"],
["cruel"],
["mandatory"]
];
super("Sleep rules", pairs);
this.setValue(current_rule.set.restRules);
this.onchange = (value) => current_rule.set.restRules = 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],
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 ReleaseFacilityLeaderSwitch extends RadioSelector {
constructor() {
const pairs = [
["Allowed", 1],
["Forbidden", 0],
];
super("Sex with development facility leaders", pairs);
this.setValue(current_rule.set.releaseRules.facilityLeader);
this.onchange = (value) => current_rule.set.releaseRules.facilityLeader = 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 {
["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;
const items = App.Medicine.Modification.eyeColor.map(color => color.value);
super("Iris", items);
this.setValue(current_rule.set.iris);
this.onchange = (value) => current_rule.set.iris = value;
}
class PupilShapeList extends List {
constructor() {
const items = ["none"].concat(App.Medicine.Modification.eyeShape.map(shape => shape.value));
super("Pupil", items);
this.setValue(current_rule.set.pupil);
this.onchange = (value) => current_rule.set.pupil = value;
}
class ScleraColorList extends List {
constructor() {
const items = ["none"].concat(App.Medicine.Modification.eyeColor.map(color => color.value));
super("Sclera", items);
this.setValue(current_rule.set.sclera);
this.onchange = (value) => current_rule.set.sclera = value;
["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],
["metallic", 7],
["metallic color-coordinate with hair", 8]
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;
wkwk
committed
["shaved", 0],