Newer
Older
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"],
["green"],
["blue"],
["pink"],
["dark brown"],
["brown"],
["auburn"],
["burgundy"],
["chocolate"],
["chestnut"],
["hazel"],
["purple"],
["dark orchid"],
["sea green"],
["green-yellow"],
["dark blue"],
["blazing red"],
["neon green"],
["neon blue"],
["neon pink"]
];
super("Hair color", pairs);
this.setValue(current_rule.set.hColor);
this.onchange = (value) => current_rule.set.hColor = value;
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
class HornColorList extends ListSelector {
constructor() {
const pairs = [
["golden"],
["copper"],
["red"],
["deep red"],
["green"],
["pink"],
["dark brown"],
["brown"],
["burgundy"],
["jet black"],
["black"],
["grey"],
["silver"],
["white"],
["blue-violet"],
["purple"],
["dark orchid"],
["sea green"],
["green-yellow"],
["dark blue"],
["blazing red"],
["neon green"],
["neon blue"],
["neon pink"]
];
super("Horn color", pairs);
this.setValue(current_rule.set.hornColor);
this.onchange = (value) => current_rule.set.hornColor = value;
}
}
class HairStyleList extends ListSelector {
constructor() {
const pairs = [
["neat"],
["shaved"],
["trimmed"],
["buzzcut"],
["up"],
["ponytail"],
["bun"],
["curled"],
["permed"],
["luxurious"],
["dreadlocks"],
["cornrows"],
["braided"],
["tails"],
this.setValue(current_rule.set.hStyle);
this.onchange = (value) => current_rule.set.hStyle = value;
class EyebrowColorList extends ListSelector {
constructor() {
const pairs = [
["blonde"],
["golden"],
["platinum blonde"],
["copper"],
["ginger"],
["red"],
["deep red"],
["green"],
["blue"],
["pink"],
["dark brown"],
["brown"],
["auburn"],
["burgundy"],
["chocolate"],
["chestnut"],
["hazel"],
["black"],
["grey"],
["silver"],
["white"],
["blue-violet"],
["purple"],
["dark orchid"],
["sea green"],
["green-yellow"],
["dark blue"],
["blazing red"],
["neon green"],
["neon blue"],
["neon pink"]
];
super("Eyebrow hair color, when present", pairs);
this.setValue(current_rule.set.eyebrowHColor);
this.onchange = (value) => current_rule.set.eyebrowHColor = value;
}
}
class EyebrowStyleList extends ListSelector {
constructor() {
const pairs = [
["shaved"],
["straight"],
["rounded"],
["natural"],
["slanted inwards"],
["slanted outwards"],
["high-arched"],
["elongated"],
["shortened"],
["curved"]
];
super("Eyebrow style", pairs);
this.setValue(current_rule.set.eyebrowHStyle);
this.onchange = (value) => current_rule.set.eyebrowHStyle = value;
}
}
class EyebrowFullnessList extends ListSelector {
constructor() {
const pairs = [
["pencil-thin"],
["thin"],
["threaded"],
["natural"],
["tapered"],
["thick"],
["bushy"]
];
super("Eyebrow fullness", pairs);
this.setValue(current_rule.set.eyebrowFullness);
this.onchange = (value) => current_rule.set.eyebrowFullness = value;
}
}
constructor() {
const pairs = [
["remove beauty marks"],
["remove birthmarks"],
["remove both"]
];
super("Facial markings", pairs, true, false, true);
this.setValue(current_rule.set.markings);
this.onchange = (value) => current_rule.set.markings = value;
}
}
class PubicHairColorList extends ListSelector {
constructor() {
const pairs = [
["blonde"],
["golden"],
["platinum blonde"],
["green"],
["blue"],
["pink"],
["dark brown"],
["brown"],
["auburn"],
["burgundy"],
["chocolate"],
["chestnut"],
["hazel"],
["purple"],
["dark orchid"],
["sea green"],
["green-yellow"],
["dark blue"],
["blazing red"],
["neon green"],
["neon blue"],
["neon pink"]
];
super("Pubic hair color, when present", pairs);
this.setValue(current_rule.set.pubicHColor);
this.onchange = (value) => current_rule.set.pubicHColor = value;
class PubicHairStyleList extends ListSelector {
constructor() {
const pairs = [
["waxed"],
["in a strip"],
["neat"],
["bushy"],
["bushy in the front and neat in the rear"],
["very bushy"]
];
super("Pubic hairstyle", pairs);
this.setValue(current_rule.set.pubicHStyle);
this.onchange = (value) => current_rule.set.pubicHStyle = value;
class ArmpitHairColorList extends ListSelector {
constructor() {
const pairs = [
["blonde"],
["golden"],
["platinum blonde"],
["strawberry-blonde"],
["copper"],
["ginger"],
["red"],
["green"],
["blue"],
["pink"],
["dark brown"],
["brown"],
["auburn"],
["purple"],
["dark orchid"],
["sea green"],
["green-yellow"],
["dark blue"],
["blazing red"],
["neon green"],
["neon blue"],
["neon pink"]
this.setValue(current_rule.set.underArmHColor);
this.onchange = (value) => current_rule.set.underArmHColor = value;
class ArmpitHairStyleList extends ListSelector {
constructor() {
const pairs = [
["waxed"],
["shaved"],
["neat"],
["bushy"]
];
super("Underarm hair style", pairs);
this.setValue(current_rule.set.underArmHStyle);
this.onchange = (value) => current_rule.set.underArmHStyle = value;
function piercingTypes(smartEnabled = false) {
let res = [
["none", 0],
["light", 1],
["heavy", 2]
];
if (smartEnabled) {
res.push(["Smart (expensive)", 3]);
}
return res;
}
class EarPiercingList extends ListSelector {
this.onchange = (value) => current_rule.set.earPiercing = value;
class NosePiercingList extends ListSelector {
this.onchange = (value) => current_rule.set.nosePiercing = value;
class EyebrowPiercingList extends ListSelector {
super("Eyebrow piercings", piercingTypes());
this.onchange = (value) => current_rule.set.eyebrowPiercing = value;
class NavelPiercingList extends ListSelector {
this.onchange = (value) => current_rule.set.navelPiercing = value;
class NipplePiercingList extends ListSelector {
this.onchange = (value) => current_rule.set.nipplesPiercing = value;
super("Areola studs", pairs, true, false, true);
this.onchange = (value) => current_rule.set.areolaePiercing = value;
class LipPiercingList extends ListSelector {
this.onchange = (value) => current_rule.set.lipsPiercing = value;
class TonguePiercingList extends ListSelector {
this.onchange = (value) => current_rule.set.tonguePiercing = value;
class ClitPiercingList extends ListSelector {
super("Clit piercing", piercingTypes(true));
this.onchange = (value) => current_rule.set.clitPiercing = value;
class LabiaPiercingList extends ListSelector {
super("Pussylips piercings", piercingTypes());
this.onchange = (value) => current_rule.set.vaginaPiercing = value;
class ShaftPiercingList extends ListSelector {
this.onchange = (value) => current_rule.set.dickPiercing = value;
class PerineumPiercingList extends ListSelector {
super("Perianal piercings", piercingTypes());
this.onchange = (value) => current_rule.set.anusPiercing = value;
super("Corset piercings", pairs, true, false, true);
this.onchange = (value) => current_rule.set.corsetPiercing = value;
class AutoBrandingList extends BooleanSwitch {
super("Automatic branding", [0, 1]);
this.setValue(current_rule.set.autoBrand);
this.onchange = (value) => current_rule.set.autoBrand = value;
class BrandingLocationList extends List {
constructor() {
super("Your preferred location for brands is", []);
// I sorted this next section from top of body down, to make it easier to read for users. Hopefully when making similar lists elsewhere in the game, folks will use the same order. Makes it much easier to compare and make sure nothing is missing. And alphabetical is a poor choice for user facing lists.
this._cheeks = new ListSubSection(this, "Cheeks", [
["Right", "right cheek"],
["Both", "cheeks"]
["Right", "right ear"],
["Both", "ears"]
this._breasts = new ListSubSection(this, "Breasts", [
["Right", "right breast"],
["Both", "breasts"]
this._shoulders = new ListSubSection(this, "Shoulders", [
["Right", "right shoulder"],
["Both", "shoulders"]
this._upperArms = new ListSubSection(this, "Arms, upper", [
["Right", "right upper arm"],
["Both", "upper arms"]
this._lowerArms = new ListSubSection(this, "Arms, lower", [
["Right", "right lower arm"],
["Both", "lower arms"]
this._wrist = new ListSubSection(this, "Wrist", [
["Right", "right wrist"],
["Both", "wrists"]
["Right", "right hand"],
["Both", "hands"]
this._buttocks = new ListSubSection(this, "Buttocks", [
["Right", "right buttock"],
["Both", "buttocks"]
this._thigh = new ListSubSection(this, "Thigh", [
["Right", "right thigh"],
["Both", "thighs"]
["Right", "right calf"],
["Both", "calves"]
this._ankle = new ListSubSection(this, "Ankle", [
["Right", "right ankle"],
["Both", "ankles"]
["Right", "right foot"],
["Both", "feet"]
this._other = new ListSubSection(this, "Other", [
["Lower Back", "lower back"],
["Belly", "belly"],
["Pubic mound", "pubic mound"]
// Ignoring testicles and penis for now, as not all slaves have them.
this.setValue(current_rule.set.brandTarget);
this.onchange = (value) => current_rule.set.brandTarget = value;
_appendContentTo(container) {
super._appendContentTo(container);
this._cheeks._appendContentTo(container);
this._ears._appendContentTo(container);
this._breasts._appendContentTo(container);
this._shoulders._appendContentTo(container);
this._upperArms._appendContentTo(container);
this._lowerArms._appendContentTo(container);
this._wrist._appendContentTo(container);
this._hand._appendContentTo(container);
this._buttocks._appendContentTo(container);
this._thigh._appendContentTo(container);
this._calf._appendContentTo(container);
this._ankle._appendContentTo(container);
this._feet._appendContentTo(container);
this._other._appendContentTo(container);
}
["Your initials", "your initials"],
["SLUT"],
["WHORE"],
["SLAVE"],
["COW"],
["MEAT"],
["CUMDUMP"],
["LOVER"],
["Pussy symbol", "a pussy symbol"],
["Anus symbol", "an anus symbol"],
["Penis symbol", "a penis symbol"],
["Lady", "a lady silhouette"],
["Princess", "a princess silhouette"],
["Queen", "a queen silhouette"],
["Angel", "an angel silhouette"],
["Devil", "a devil silhouette"]
if (V.arcologies[0].FSSupremacist !== "unset" || V.arcologies[0].FSSubjugationist !== "unset") {
if (V.arcologies[0].FSSupremacist !== "unset" && V.arcologies[0].FSSupremacistRace === "white") {
if (V.arcologies[0].FSSubjugationist !== "unset" && V.arcologies[0].FSSubjugationistRace === "semitic") {
if (V.arcologies[0].FSGenderRadicalist !== "unset" || V.arcologies.FSGenderFundamentalist !== "unset") {
if (V.arcologies[0].FSIntellectualDependency !== "unset") {
items.push(["(FS) Scores", "how much sex $he needs per day"]);
}
if (V.arcologies[0].FSSlaveProfessionalism !== "unset") {
items.push(["(FS) Scores", "$his average slave aptitude test scores"]);
}
if (V.arcologies[0].FSTransformationFetishist !== "unset") {
items.push(["(FS) Most Desired Implants", "a shortlist of desired implants"]);
if (V.arcologies[0].FSYouthPreferentialist !== "unset") {
if (V.arcologies[0].FSMaturityPreferentialist !== "unset") {
if (V.arcologies[0].FSPetiteAdmiration !== "unset" || V.arcologies[0].FSStatuesqueGlorification !== "unset") {
items.push(["(FS) Current height", "$his current height"]);
}
if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") {
items.push(["(FS) Breast Ceiling", "$his absolute maximum breast size"]);
if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
if (V.arcologies[0].FSHedonisticDecadence && V.PC.refreshmentType === 2) {
items.push(["(FS) Favorite Food", `a big helping of ${V.PC.refreshment}`]);
items.push(["(FS) Birth Count", "the number of children $he has birthed"]);
if (V.arcologies[0].FSChattelReligionist !== "unset") {
items.push(["(FS) Republican Crest", "a small crest of your Republic"]);
items.push(["(FS) Seven Serpents", "a small symbol of the Aztec gods"]);
if (V.arcologies[0].FSEgyptianRevivalist !== "unset") {
items.push(["(FS) Caliphate Symbol", "a small symbol of the Caliphate"]);
items.push(["(FS) Imperial Seal", "a small image of your Imperial Seal"]);
super("Your brand design is", items, true, true);
this.setValue(current_rule.set.brandDesign);
this.onchange = (value) => current_rule.set.brandDesign = value;
function commonTattoos() {
return [
["none", 0],
["tribal patterns"],
["flowers"],
["counting"],
["advertisements"],
["rude words"],
["degradation"],
["bovine patterns"],
["Asian art"],
["permanent makeup"],
["sacrament"],
["sacrilege"],
["possessive"],
["paternalist"]
];
}
class FaceTattooList extends ListSelector {
this.setValue(current_rule.set.lipsTat);
this.onchange = (value) => current_rule.set.lipsTat = value;
class ShoulderTattooList extends ListSelector {
this.setValue(current_rule.set.shouldersTat);
this.onchange = (value) => current_rule.set.shouldersTat = value;
class ChestTattooList extends ListSelector {
this.setValue(current_rule.set.boobsTat);
this.onchange = (value) => current_rule.set.boobsTat = value;
class ArmTattooList extends ListSelector {
this.setValue(current_rule.set.armsTat);
this.onchange = (value) => current_rule.set.armsTat = value;
class UpperBackTattooList extends ListSelector {
super("Upper back tattoos", commonTattoos());
this.setValue(current_rule.set.backTat);
this.onchange = (value) => current_rule.set.backTat = value;
class LowerBackTattooList extends ListSelector {
super("Lower back tattoos", commonTattoos());
this.setValue(current_rule.set.stampTat);
this.onchange = (value) => current_rule.set.stampTat = value;
class AbdomenTattooList extends ListSelector {
this.setValue(current_rule.set.vaginaTat);
this.onchange = (value) => current_rule.set.vaginaTat = value;
class DickTattooList extends ListSelector {
this.setValue(current_rule.set.dickTat);
this.onchange = (value) => current_rule.set.dickTat = value;
class ButtockTattooList extends ListSelector {
this.setValue(current_rule.set.buttTat);
this.onchange = (value) => current_rule.set.buttTat = value;
class AnalTattooList extends ListSelector {
super("Anal tattoo or bleaching", commonTattoos().concat([['bleached']]));
this.setValue(current_rule.set.anusTat);
this.onchange = (value) => current_rule.set.anusTat = value;
class LegTattooList extends ListSelector {
this.setValue(current_rule.set.legsTat);
this.onchange = (value) => current_rule.set.legsTat = value;
class BirthsTattooList extends RadioSelector {
constructor() {
const items = [
["remove", "remove"],
];
super("Tattoo a mark for each successful birth", items, true);
this.setValue(current_rule.set.birthsTat);
this.onchange = (value) => current_rule.set.birthsTat = value;
}
}
class AbortionTattooList extends RadioSelector {
constructor() {
const items = [
["remove", "remove"],
];
super("Tattoo a mark for each abortion", items, true);
this.setValue(current_rule.set.abortionTat);
this.onchange = (value) => current_rule.set.abortionTat = value;
}
}
class VisionSurgeryList extends RadioSelector {
this.setValue(current_rule.set.surgery.eyes);
this.onchange = (value) => current_rule.set.surgery.eyes = value;
class HearingSurgeryList extends RadioSelector {
constructor() {
const items = [
["fixed", 0],
["muffled", -1],
];
this.setValue(current_rule.set.surgery.hears);
this.onchange = (value) => current_rule.set.surgery.hears = value;
constructor() {
const items = [
["fixed", 0],
["disabled", -1],
];
this.setValue(current_rule.set.surgery.smells);
this.onchange = (value) => current_rule.set.surgery.smells = value;
constructor() {
const items = [
["fixed", 0],
["disabled", -1],
];
this.setValue(current_rule.set.surgery.tastes);
this.onchange = (value) => current_rule.set.surgery.tastes = value;
class LactationSurgeryList extends RadioSelector {
this.setValue(current_rule.set.surgery.lactation);
this.onchange = (value) => current_rule.set.surgery.lactation = value;
super("Prostate production enhancing drug implants", items, true);
this.setValue(current_rule.set.surgery.prostate);
this.onchange = (value) => current_rule.set.surgery.prostate = value;
constructor() {
const items = [
["apply vasectomy", true],
["undo vasectomy", false],
];
super("Apply or undo vasectomy for slaves with testicles", items, true);
this.setValue(current_rule.set.surgery.vasectomy);
this.onchange = (value) => current_rule.set.surgery.vasectomy = value;
this.setValue(current_rule.set.surgery.cosmetic);
this.onchange = (value) => current_rule.set.surgery.cosmetic = value;
class LipSurgeryList extends NumericTargetEditor {
constructor() {
const items = [
["removed", 0],
["plush", 20],
["big", 40],
["huge", 70],
this.setValue(current_rule.set.surgery.lips);
this.onchange = (value) => current_rule.set.surgery.lips = value;
class ButtSurgeryList extends NumericTargetEditor {
this.setValue(current_rule.set.surgery.butt);
this.onchange = (value) => current_rule.set.surgery.butt = value;
class BreastSurgeryList extends NumericTargetEditor {
["slim", 400],
["stacked", 1000],
["huge", 2000],
["barely functional", 9000],
this.setValue(current_rule.set.surgery.boobs);
this.onchange = (value) => current_rule.set.surgery.boobs = value;