Newer
Older
class HairColorList extends ListSelector {
const pairs = App.Medicine.Modification.Color.Primary.map(c => [c.value]);
this.setValue(current_rule.set.hColor);
this.onchange = (value) => current_rule.set.hColor = value;
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
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 {
const pairs = App.Medicine.Modification.hairStyles.Normal.map(c => [c.title, c.value]).concat(App.Medicine.Modification.hairStyles.Cut.map(c => [c.title, c.value]));
this.setValue(current_rule.set.hStyle);
this.onchange = (value) => current_rule.set.hStyle = value;
class EyebrowColorList extends ListSelector {
const pairs = App.Medicine.Modification.Color.Primary.map(c => [c.value]);
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"]
];
this.setValue(current_rule.set.markings);
this.onchange = (value) => current_rule.set.markings = value;
}
}
class PubicHairColorList extends ListSelector {
const pairs = App.Medicine.Modification.Color.Primary.map(c => [c.value]);
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 {
const pairs = App.Medicine.Modification.Color.Primary.map(c => [c.value]);
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;
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;
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[0].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"]);
if (V.arcologies[0].FSNeoImperialist !== "unset") {
items.push(["(FS) Imperial Family Crest", "a small crest bearing the symbol of your Family"]);
}
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;
["implanted", 2],
["removed", 1],
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;
class TighteningSurgeryList extends RadioSelector {
this.setValue(current_rule.set.surgery.holes);
this.onchange = (value) => current_rule.set.surgery.holes = value;
class TummyTuckSurgeryList extends RadioSelector {
constructor() {
const items = [
["tuck", 1],
];
this.setValue(current_rule.set.surgery.tummy);
this.onchange = (value) => current_rule.set.surgery.tummy = value;
class BodyHairSurgeryList extends RadioSelector {
this.setValue(current_rule.set.surgery.bodyhair);
this.onchange = (value) => current_rule.set.surgery.bodyhair = value;
this.setValue(current_rule.set.surgery.hair);
this.onchange = (value) => current_rule.set.surgery.hair = value;
class EarShapeSurgeryList extends RadioSelector {
constructor() {
const items = [
["normal ears", 1],
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
["long elfin ears", 3],
["bovine ears", 4],
];
super("Ear Shape", items, true);
this.setValue(current_rule.set.surgery.earShape);
this.onchange = (value) => current_rule.set.surgery.earShape = value;
}
}
class HornSurgeryList extends RadioSelector {
constructor() {
const items = [
["none", 1],
["curved succubus horns", 2],
["backswept horns", 3],
["cow horns", 4],
["one long oni horn", 5],
["two long oni horns", 6],
["small horns", 7],
];
super("Horn Implants", items, true);
this.setValue(current_rule.set.surgery.horn);
this.onchange = (value) => current_rule.set.surgery.horn = value;
}
}
class AutomaticAssignmentList extends ListSelector {
const items = [];
const penthouseDesc = App.Data.Facilities.penthouse;
for (const jn in penthouseDesc.jobs) {
/** @type {FC.Data.JobDesc} */
const jd = penthouseDesc.jobs[jn];
items.push([jd.position, jd.assignment]);
}
const penthouse = App.Entity.facilities.penthouse;
/** @type {Object.<string, App.Entity.Facilities.Facility>} */
const facilities = App.Entity.facilities;
const facilitiesToSkip = [penthouse, facilities.pit, facilities.armory, facilities.arcologyAgent];
for (const fn in facilities) {
const f = facilities[fn];
if (facilitiesToSkip.includes(f)) { continue; }
items.push([f.name, f.job().desc.assignment]);
super("Automatically set assignment", items);
this.setValue(current_rule.set.setAssignment);
this.onchange = (value) => current_rule.set.setAssignment = value;
}
class PitAssignmentList extends ListSelector{
const items =[["remove from pit", 0], ["assign to pit", 1]];
this.setValue(current_rule.set.pitRules);
this.onchange = (value) => current_rule.set.pitRules = value;
}
}
constructor() {
const items = [
["install", "install"],
["remove", "remove"],
];
this.setValue(current_rule.set.surgery.bellyImplant);
this.onchange = (value) => current_rule.set.surgery.bellyImplant = value;
super("Custom label(s) (separate by '|')", [], true, true);
this.setValue(current_rule.set.label);
this.onchange = (value) => current_rule.set.label = value;
}
}
constructor() {
super("Remove custom label(s) (separate by '|')", [], true, true);
this.setValue(current_rule.set.removeLabel);
this.onchange = (value) => current_rule.set.removeLabel = value;
}
}
class SkinColorList extends ListSelector {
["pure white"],
["ivory"],
["white"],
["extremely pale"],
["very pale"],
["extremely fair"],
["very fair"],
["fair"],
["light"],
["light olive"],
["tan"],
["olive"],
["bronze"],
["dark olive"],