Skip to content
Snippets Groups Projects
rulesAssistantOptions.js 115 KiB
Newer Older
  • Learn to ignore specific revisions
  • vas's avatar
    vas committed
    			this.setValue(current_rule.set.hLength);
    			this.onchange = (value) => current_rule.set.hLength = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    2hu4u's avatar
    2hu4u committed
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	class HaircutsList extends ListSelector {
    
    2hu4u's avatar
    2hu4u committed
    		constructor() {
    			const pairs = [
    				["maintain hair length", 1],
    				["do not maintain hair length", 0]
    			];
    
    			super("Hair length maintenance", pairs, true, false, true);
    
    2hu4u's avatar
    2hu4u committed
    			this.setValue(current_rule.set.haircuts);
    			this.onchange = (value) => current_rule.set.haircuts = value;
    		}
    	}
    
    
    	class HairColorList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    				["blonde"],
    				["golden"],
    				["platinum blonde"],
    
    klorpa's avatar
    klorpa committed
    				["strawberry-blonde"],
    
    vas's avatar
    vas committed
    				["copper"],
    				["ginger"],
    				["red"],
    
    vas's avatar
    vas committed
    				["green"],
    				["blue"],
    				["pink"],
    				["dark brown"],
    				["brown"],
    				["auburn"],
    				["burgundy"],
    				["chocolate"],
    				["chestnut"],
    				["hazel"],
    
    deepmurk's avatar
    deepmurk committed
    				["jet black"],
    
    vas's avatar
    vas committed
    				["black"],
    				["grey"],
    				["silver"],
    				["white"],
    
    vas's avatar
    vas committed
    				["blue-violet"],
    
    deepmurk's avatar
    deepmurk committed
    				["purple"],
    				["dark orchid"],
    				["sea green"],
    				["green-yellow"],
    				["dark blue"],
    
    vas's avatar
    vas committed
    				["blazing red"],
    				["neon green"],
    				["neon blue"],
    				["neon pink"]
    			];
    			super("Hair color", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.hColor);
    			this.onchange = (value) => current_rule.set.hColor = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    ezsh's avatar
    ezsh committed
    
    
    	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;
    		}
    	}
    
    vas's avatar
    vas committed
    
    
    	class HairStyleList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    				["neat"],
    				["shaved"],
    				["trimmed"],
    				["buzzcut"],
    				["up"],
    				["ponytail"],
    				["bun"],
    
    vas's avatar
    vas committed
    				["messy bun"],
    
    vas's avatar
    vas committed
    				["curled"],
    				["permed"],
    				["luxurious"],
    				["dreadlocks"],
    				["cornrows"],
    				["braided"],
    				["tails"],
    
    vas's avatar
    vas committed
    				["afro"],
    				["strip"]
    			];
    			super("Hair style", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.hStyle);
    			this.onchange = (value) => current_rule.set.hStyle = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class EyebrowColorList extends ListSelector {
    
    		constructor() {
    			const pairs = [
    				["blonde"],
    				["golden"],
    				["platinum blonde"],
    
    klorpa's avatar
    klorpa committed
    				["strawberry-blonde"],
    
    				["copper"],
    				["ginger"],
    				["red"],
    				["deep red"],
    				["green"],
    				["blue"],
    				["pink"],
    				["dark brown"],
    				["brown"],
    				["auburn"],
    				["burgundy"],
    				["chocolate"],
    				["chestnut"],
    				["hazel"],
    
    deepmurk's avatar
    deepmurk committed
    				["jet black"],
    
    				["black"],
    				["grey"],
    				["silver"],
    				["white"],
    				["blue-violet"],
    
    deepmurk's avatar
    deepmurk committed
    				["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;
    		}
    	}
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	class MarkingsList extends ListSelector {
    
    		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 {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    				["blonde"],
    				["golden"],
    				["platinum blonde"],
    
    klorpa's avatar
    klorpa committed
    				["strawberry-blonde"],
    
    vas's avatar
    vas committed
    				["copper"],
    				["ginger"],
    				["red"],
    
    vas's avatar
    vas committed
    				["green"],
    				["blue"],
    				["pink"],
    				["dark brown"],
    				["brown"],
    				["auburn"],
    				["burgundy"],
    				["chocolate"],
    				["chestnut"],
    				["hazel"],
    
    deepmurk's avatar
    deepmurk committed
    				["jet black"],
    
    vas's avatar
    vas committed
    				["black"],
    				["grey"],
    				["silver"],
    				["white"],
    
    vas's avatar
    vas committed
    				["blue-violet"],
    
    deepmurk's avatar
    deepmurk committed
    				["purple"],
    				["dark orchid"],
    				["sea green"],
    				["green-yellow"],
    				["dark blue"],
    
    vas's avatar
    vas committed
    				["blazing red"],
    				["neon green"],
    				["neon blue"],
    				["neon pink"]
    			];
    			super("Pubic hair color, when present", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.pubicHColor);
    			this.onchange = (value) => current_rule.set.pubicHColor = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class PubicHairStyleList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    				["waxed"],
    				["in a strip"],
    				["neat"],
    				["bushy"],
    				["bushy in the front and neat in the rear"],
    				["very bushy"]
    			];
    			super("Pubic hairstyle", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.pubicHStyle);
    			this.onchange = (value) => current_rule.set.pubicHStyle = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class ArmpitHairColorList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    				["blonde"],
    				["golden"],
    				["platinum blonde"],
    				["strawberry-blonde"],
    				["copper"],
    				["ginger"],
    				["red"],
    
    vas's avatar
    vas committed
    				["green"],
    				["blue"],
    				["pink"],
    				["dark brown"],
    				["brown"],
    				["auburn"],
    
    klorpa's avatar
    klorpa committed
    				["burgundy"],
    
    vas's avatar
    vas committed
    				["chocolate"],
    				["chestnut"],
    				["hazel"],
    
    deepmurk's avatar
    deepmurk committed
    				["jet black"],
    
    vas's avatar
    vas committed
    				["black"],
    				["grey"],
    				["silver"],
    
    vas's avatar
    vas committed
    				["white"],
    				["blue-violet"],
    
    deepmurk's avatar
    deepmurk committed
    				["purple"],
    				["dark orchid"],
    				["sea green"],
    				["green-yellow"],
    				["dark blue"],
    
    				["blazing red"],
    				["neon green"],
    				["neon blue"],
    				["neon pink"]
    
    vas's avatar
    vas committed
    			];
    			super("Underarm hair color, when present", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.underArmHColor);
    			this.onchange = (value) => current_rule.set.underArmHColor = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class ArmpitHairStyleList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    				["waxed"],
    				["shaved"],
    				["neat"],
    				["bushy"]
    			];
    			super("Underarm hair style", pairs);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.underArmHStyle);
    			this.onchange = (value) => current_rule.set.underArmHStyle = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	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 {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Ear piercings", piercingTypes());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.earPiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.earPiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class NosePiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Nasal piercings", piercingTypes());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.nosePiercing);
    
    			this.onchange = (value) => current_rule.set.nosePiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class EyebrowPiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Eyebrow piercings", piercingTypes());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.eyebrowPiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.eyebrowPiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class NavelPiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Navel piercings", piercingTypes());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.navelPiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.navelPiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class NipplePiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Nipple piercings", piercingTypes());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.nipplesPiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.nipplesPiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	class AreolaPiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    
    				["none", 0],
    				["studded", 1]
    
    vas's avatar
    vas committed
    			];
    
    			super("Areola studs", pairs, true, false, true);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.areolaePiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.areolaePiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class LipPiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Lip piercings", piercingTypes());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.lipsPiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.lipsPiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class TonguePiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Tongue piercing", piercingTypes());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.tonguePiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.tonguePiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class ClitPiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Clit piercing", piercingTypes(true));
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.clitPiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.clitPiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class LabiaPiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Pussylips piercings", piercingTypes());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.vaginaPiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.vaginaPiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class ShaftPiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Shaft piercings", piercingTypes());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.dickPiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.dickPiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class PerineumPiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Perianal piercings", piercingTypes());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.anusPiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.anusPiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	class CorsetPiercingList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const pairs = [
    
    				["none", 0],
    				["applied", 1]
    
    vas's avatar
    vas committed
    			];
    
    			super("Corset piercings", pairs, true, false, true);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.corsetPiercing);
    
    vas's avatar
    vas committed
    			this.onchange = (value) => current_rule.set.corsetPiercing = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    	class AutoBrandingList extends BooleanSwitch {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Automatic branding", [0, 1]);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.autoBrand);
    			this.onchange = (value) => current_rule.set.autoBrand = value;
    
    vas's avatar
    vas committed
    		}
    
    vas's avatar
    vas committed
    	}
    
    
    vas's avatar
    vas committed
    	class BrandingLocationList extends List {
    		constructor() {
    			super("Your preferred location for brands is", []);
    
    
    klorpa's avatar
    klorpa committed
    			// 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.
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    
    
    ezsh's avatar
    ezsh committed
    			this._cheeks = new ListSubSection(this, "Cheeks", [
    
    vas's avatar
    vas committed
    				["Left", "left cheek"],
    
    				["Right", "right cheek"],
    				["Both", "cheeks"]
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._ears = new ListSubSection(this, "Ears", [
    
    				["Left", "left ear"],
    
    				["Right", "right ear"],
    				["Both", "ears"]
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			// Torso
    
    ezsh's avatar
    ezsh committed
    			this._breasts = new ListSubSection(this, "Breasts", [
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				["Left", "left breast"],
    
    				["Right", "right breast"],
    				["Both", "breasts"]
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			]);
    
    
    ezsh's avatar
    ezsh committed
    			this._shoulders = new ListSubSection(this, "Shoulders", [
    
    vas's avatar
    vas committed
    				["Left", "left shoulder"],
    
    				["Right", "right shoulder"],
    				["Both", "shoulders"]
    
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._upperArms = new ListSubSection(this, "Arms, upper", [
    
    vas's avatar
    vas committed
    				["Left", "left upper arm"],
    
    				["Right", "right upper arm"],
    				["Both", "upper arms"]
    
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._lowerArms = new ListSubSection(this, "Arms, lower", [
    
    vas's avatar
    vas committed
    				["Left", "left lower arm"],
    
    				["Right", "right lower arm"],
    				["Both", "lower arms"]
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._wrist = new ListSubSection(this, "Wrist", [
    
    vas's avatar
    vas committed
    				["Left", "left wrist"],
    
    				["Right", "right wrist"],
    				["Both", "wrists"]
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._hand = new ListSubSection(this, "Hand", [
    
    vas's avatar
    vas committed
    				["Left", "left hand"],
    
    				["Right", "right hand"],
    				["Both", "hands"]
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._buttocks = new ListSubSection(this, "Buttocks", [
    
    vas's avatar
    vas committed
    				["Left", "left buttock"],
    
    				["Right", "right buttock"],
    				["Both", "buttocks"]
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._thigh = new ListSubSection(this, "Thigh", [
    
    vas's avatar
    vas committed
    				["Left", "left thigh"],
    
    				["Right", "right thigh"],
    				["Both", "thighs"]
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._calf = new ListSubSection(this, "Calf", [
    
    vas's avatar
    vas committed
    				["Left", "left calf"],
    
    				["Right", "right calf"],
    				["Both", "calves"]
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._ankle = new ListSubSection(this, "Ankle", [
    
    vas's avatar
    vas committed
    				["Left", "left ankle"],
    
    				["Right", "right ankle"],
    				["Both", "ankles"]
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._feet = new ListSubSection(this, "Feet", [
    
    vas's avatar
    vas committed
    				["Left", "left foot"],
    
    				["Right", "right foot"],
    				["Both", "feet"]
    
    vas's avatar
    vas committed
    			]);
    
    vas's avatar
    vas committed
    
    
    ezsh's avatar
    ezsh committed
    			this._other = new ListSubSection(this, "Other", [
    
    vas's avatar
    vas committed
    				["Neck", "neck"],
    				["Chest", "chest"],
    				["Back", "back"],
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				["Lower Back", "lower back"],
    				["Belly", "belly"],
    				["Pubic mound", "pubic mound"]
    
    vas's avatar
    vas committed
    			]);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    
    			// 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;
    
    vas's avatar
    vas committed
    		}
    
    ezsh's avatar
    ezsh committed
    
    		_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);
    		}
    
    vas's avatar
    vas committed
    	}
    
    vas's avatar
    vas committed
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	class BrandDesignList extends StringEditor {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    
    klorpa's avatar
    klorpa committed
    				["Your slaving emblem", "your personal symbol"],
    
    vas's avatar
    vas committed
    				["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"]
    
    vas's avatar
    vas committed
    			];
    
    klorpa's avatar
    klorpa committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSSupremacist !== "unset" || V.arcologies[0].FSSubjugationist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Racial Slur", "a racial slur"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    klorpa's avatar
    klorpa committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSSupremacist !== "unset" && V.arcologies[0].FSSupremacistRace === "white") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Swastika", "a swastika"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    klorpa's avatar
    klorpa committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSSubjugationist !== "unset" && V.arcologies[0].FSSubjugationistRace === "semitic") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Star of David", "a Star of David"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSGenderRadicalist !== "unset" || V.arcologies.FSGenderFundamentalist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Gender Symbol", "a gender symbol"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSPaternalist !== "unset") {
    
    klorpa's avatar
    klorpa committed
    				items.push(["(FS) Personal Symbol", "$his own personal symbol"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSDegradationist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Chain Symbol", "a chain symbol"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    Pregmodder's avatar
    Pregmodder committed
    			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"]);
    			}
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSBodyPurist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Vitruvian Man", "a Vitruvian man"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSTransformationFetishist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Most Desired Implants", "a shortlist of desired implants"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSYouthPreferentialist !== "unset") {
    
    klorpa's avatar
    klorpa committed
    				items.push(["(FS) Virginity Status", "$his virginity status"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSMaturityPreferentialist !== "unset") {
    
    klorpa's avatar
    klorpa committed
    				items.push(["(FS) Sexual Skill Info", "$his sexual skills"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    Pregmodder's avatar
    Pregmodder committed
    			if (V.arcologies[0].FSPetiteAdmiration !== "unset" || V.arcologies[0].FSStatuesqueGlorification !== "unset") {
    				items.push(["(FS) Current height", "$his current height"]);
    			}
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") {
    
    klorpa's avatar
    klorpa committed
    				items.push(["(FS) Breast Ceiling", "$his absolute maximum breast size"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSAssetExpansionist !== "unset") {
    
    klorpa's avatar
    klorpa committed
    				items.push(["(FS) Breast Floor", "$his absolute minimum breast size"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSPastoralist !== "unset") {
    
    klorpa's avatar
    klorpa committed
    				items.push(["(FS) Product Quality", "$his body product quality"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSPhysicalIdealist !== "unset") {
    
    klorpa's avatar
    klorpa committed
    				items.push(["(FS) Deadlift Info", "$his deadlift record"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
    
    klorpa's avatar
    klorpa committed
    				items.push(["(FS) Weight Record", "$his highest weigh-in"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSHedonisticDecadence && V.PC.refreshmentType === 2) {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Favorite Food", `a big helping of ${V.PC.refreshment}`]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSRepopulationFocus !== "unset") {
    
    klorpa's avatar
    klorpa committed
    				items.push(["(FS) Birth Count", "the number of children $he has birthed"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSChattelReligionist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Religious Symbol", "a religious symbol"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSRomanRevivalist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Republican Crest", "a small crest of your Republic"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSAztecRevivalist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Seven Serpents", "a small symbol of the Aztec gods"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSEgyptianRevivalist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Dynastic Sigil", "a small sigil of your Dynasty"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSEdoRevivalist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Mon", "a small image of the Shogunate's mon"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSArabianRevivalist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Caliphate Symbol", "a small symbol of the Caliphate"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    vas's avatar
    vas committed
    
    
    DCoded's avatar
    DCoded committed
    			if (V.arcologies[0].FSChineseRevivalist !== "unset") {
    
    vas's avatar
    vas committed
    				items.push(["(FS) Imperial Seal", "a small image of your Imperial Seal"]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    klorpa's avatar
    klorpa committed
    
    
    			super("Your brand design is", items, true, true);
    
    			this.setValue(current_rule.set.brandDesign);
    			this.onchange = (value) => current_rule.set.brandDesign = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    vas's avatar
    vas committed
    
    
    	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 {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Facial tattoos", commonTattoos());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.lipsTat);
    			this.onchange = (value) => current_rule.set.lipsTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    	class ShoulderTattooList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Shoulder tattoos", commonTattoos());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.shouldersTat);
    			this.onchange = (value) => current_rule.set.shouldersTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class ChestTattooList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Chest tattoos", commonTattoos());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.boobsTat);
    			this.onchange = (value) => current_rule.set.boobsTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class ArmTattooList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Arm tattoos", commonTattoos());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.armsTat);
    			this.onchange = (value) => current_rule.set.armsTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class UpperBackTattooList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Upper back tattoos", commonTattoos());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.backTat);
    			this.onchange = (value) => current_rule.set.backTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class LowerBackTattooList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Lower back tattoos", commonTattoos());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.stampTat);
    			this.onchange = (value) => current_rule.set.stampTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class AbdomenTattooList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Abdomen tattoos", commonTattoos());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.vaginaTat);
    			this.onchange = (value) => current_rule.set.vaginaTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class DickTattooList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Dick tattoos", commonTattoos());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.dickTat);
    			this.onchange = (value) => current_rule.set.dickTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class ButtockTattooList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Buttock tattoos:", commonTattoos());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.buttTat);
    			this.onchange = (value) => current_rule.set.buttTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class AnalTattooList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Anal tattoo or bleaching", commonTattoos().concat([['bleached']]));
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.anusTat);
    			this.onchange = (value) => current_rule.set.anusTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class LegTattooList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Leg tattoos", commonTattoos());
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.legsTat);
    			this.onchange = (value) => current_rule.set.legsTat = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    Pregmodder's avatar
    Pregmodder committed
    	class BirthsTattooList extends RadioSelector {
    		constructor() {
    			const items = [
    				["remove", "remove"],
    
    Pregmodder's avatar
    Pregmodder committed
    			];
    			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"],
    
    Pregmodder's avatar
    Pregmodder committed
    			];
    			super("Tattoo a mark for each abortion", items, true);
    			this.setValue(current_rule.set.abortionTat);
    			this.onchange = (value) => current_rule.set.abortionTat = value;
    		}
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class VisionSurgeryList extends RadioSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    				["fixed", 1],
    
    vas's avatar
    vas committed
    				["blurred", -1],
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Vision correction", items, true);
    
    			this.setValue(current_rule.set.surgery.eyes);
    			this.onchange = (value) => current_rule.set.surgery.eyes = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class HearingSurgeryList extends RadioSelector {
    
    klorpa's avatar
    klorpa committed
    		constructor() {
    			const items = [
    				["fixed", 0],
    				["muffled", -1],
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Hearing correction", items, true);
    
    			this.setValue(current_rule.set.surgery.hears);
    			this.onchange = (value) => current_rule.set.surgery.hears = value;
    
    klorpa's avatar
    klorpa committed
    		}
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    ezsh's avatar
    ezsh committed
    	class SmellSurgeryList extends RadioSelector {
    
    klorpa's avatar
    klorpa committed
    		constructor() {
    			const items = [
    				["fixed", 0],
    				["disabled", -1],
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Olfactory correction", items, true);
    
    			this.setValue(current_rule.set.surgery.smells);
    			this.onchange = (value) => current_rule.set.surgery.smells = value;
    
    klorpa's avatar
    klorpa committed
    		}
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    ezsh's avatar
    ezsh committed
    	class TasteSurgeryList extends RadioSelector {
    
    klorpa's avatar
    klorpa committed
    		constructor() {
    			const items = [
    				["fixed", 0],
    				["disabled", -1],
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Gustatory correction", items, true);
    
    			this.setValue(current_rule.set.surgery.tastes);
    			this.onchange = (value) => current_rule.set.surgery.tastes = value;
    
    klorpa's avatar
    klorpa committed
    		}
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    ezsh's avatar
    ezsh committed
    	class LactationSurgeryList extends RadioSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    				["implanted", 1],
    
    vas's avatar
    vas committed
    				["removed", 0],
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Lactation drug implants", items, true);
    
    			this.setValue(current_rule.set.surgery.lactation);
    			this.onchange = (value) => current_rule.set.surgery.lactation = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class SemenSurgeryList extends RadioSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    				["implanted", 1],
    
    vas's avatar
    vas committed
    				["removed", 0],
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Prostate production enhancing drug implants", items, true);
    
    			this.setValue(current_rule.set.surgery.prostate);
    			this.onchange = (value) => current_rule.set.surgery.prostate = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class VasectomyList extends RadioSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    				["apply vasectomy", true],
    				["undo vasectomy", false],
    			];
    
    ezsh's avatar
    ezsh committed
    			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;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	class CosmeticSurgeryList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    				["none", 0],
    				["subtle", 1],
    
    vas's avatar
    vas committed
    				["invasive", 2],
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Cosmetic Surgery", items, true);
    
    			this.setValue(current_rule.set.surgery.cosmetic);
    			this.onchange = (value) => current_rule.set.surgery.cosmetic = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class LipSurgeryList extends NumericTargetEditor {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    				["removed", 0],
    				["plush", 20],
    				["big", 40],
    				["huge", 70],
    
    vas's avatar
    vas committed
    				["facepussy", 95],
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Lip implants", items, true, 0, 95, true);
    
    			this.setValue(current_rule.set.surgery.lips);
    			this.onchange = (value) => current_rule.set.surgery.lips = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class ButtSurgeryList extends NumericTargetEditor {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    
    vas's avatar
    vas committed
    				["removed", 0],
    
    vas's avatar
    vas committed
    				["slim", 2],
    				["stacked", 4],
    				["huge", 6],
    
    klorpa's avatar
    klorpa committed
    				["maximized", 9],
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Buttock implants", items, true, 0, 9, true);
    
    			this.setValue(current_rule.set.surgery.butt);
    			this.onchange = (value) => current_rule.set.surgery.butt = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    	class BreastSurgeryList extends NumericTargetEditor {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    
    vas's avatar
    vas committed
    				["removed", 0],
    
    vas's avatar
    vas committed
    				["slim", 400],
    				["stacked", 1000],
    				["huge", 2000],
    				["barely functional", 9000],
    
    klorpa's avatar
    klorpa committed
    				["maximized", 48000]
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Breast implants", items, true, 0, 48000, true);
    
    			this.setValue(current_rule.set.surgery.boobs);
    			this.onchange = (value) => current_rule.set.surgery.boobs = value;
    
    vas's avatar
    vas committed
    		}
    	}