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);
this.setValue(current_rule.set.haircuts);
this.onchange = (value) => current_rule.set.haircuts = value;
}
}
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;
class HornColorList extends ListSelector {
constructor() {
const pairs = Array.from(App.Medicine.Modification.hornColor, color => [color]);
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 {
const pairs = Array.from(App.Medicine.Modification.eyebrowStyles, style => [style]);
super("Eyebrow style", pairs);
this.setValue(current_rule.set.eyebrowHStyle);
this.onchange = (value) => current_rule.set.eyebrowHStyle = value;
}
}
class EyebrowFullnessList extends ListSelector {
const pairs = Array.from(App.Medicine.Modification.eyebrowFullness, fullness => [fullness]);
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 {
const pairs = Array.from(App.Medicine.Modification.pubicStyles, style => [style]);
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 {
const pairs = Array.from(App.Medicine.Modification.armpitStyles, style => [style]);
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],
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
["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"],
["light beige"],
["beige"],
["dark beige"],
["light brown"],
["brown"],
["dark brown"],
["black"],
["ebony"],
["pure black"],
super("Dye or tan skin", items);
this.setValue(current_rule.set.skinColor);
this.onchange = (x) => current_rule.set.skinColor = x;
}
}