Skip to content
Snippets Groups Projects
rulesAssistantOptions.js 113 KiB
Newer Older
  • Learn to ignore specific revisions
  • vas's avatar
    vas committed
    				["floor length", 150]
    
    vas's avatar
    vas committed
    			];
    
    			super("Hair length", pairs, true);
    
    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);
    
    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 = App.Medicine.Modification.Color.Primary.map(c => [c.value]);
    
    vas's avatar
    vas committed
    			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() {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			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;
    		}
    	}
    
    vas's avatar
    vas committed
    
    
    	class HairStyleList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			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]));
    
    vas's avatar
    vas committed
    			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 {
    
    			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 {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			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 {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			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;
    		}
    	}
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	class MarkingsList extends ListSelector {
    
    		constructor() {
    			const pairs = [
    				["remove beauty marks"],
    				["remove birthmarks"],
    				["remove both"]
    			];
    
    			super("Facial markings", pairs, 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 = App.Medicine.Modification.Color.Primary.map(c => [c.value]);
    
    vas's avatar
    vas committed
    			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() {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			const pairs = Array.from(App.Medicine.Modification.pubicStyles, style => [style]);
    
    vas's avatar
    vas committed
    			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 = App.Medicine.Modification.Color.Primary.map(c => [c.value]);
    
    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() {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			const pairs = Array.from(App.Medicine.Modification.armpitStyles, style => [style]);
    
    vas's avatar
    vas committed
    			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);
    
    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);
    
    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
    
    
    			if (V.arcologies[0].FSGenderRadicalist !== "unset" || V.arcologies[0].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
    
    
    			if (V.arcologies[0].FSNeoImperialist !== "unset") {
    				items.push(["(FS) Imperial Family Crest", "a small crest bearing the symbol of your Family"]);
    			}
    
    
    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", 2],
    				["removed", 1],
    
    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
    		}
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class TighteningSurgeryList extends RadioSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    
    vas's avatar
    vas committed
    				["tightening", 1],
    
    vas's avatar
    vas committed
    				["virginity restoration", 2],
    
    vas's avatar
    vas committed
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Orifice Tightening", items, true);
    
    			this.setValue(current_rule.set.surgery.holes);
    			this.onchange = (value) => current_rule.set.surgery.holes = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    Skriv's avatar
    Skriv committed
    
    
    ezsh's avatar
    ezsh committed
    	class TummyTuckSurgeryList extends RadioSelector {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		constructor() {
    			const items = [
    				["tuck", 1],
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Tummy Tuck", items, true);
    
    			this.setValue(current_rule.set.surgery.tummy);
    			this.onchange = (value) => current_rule.set.surgery.tummy = value;
    
    ezsh's avatar
    ezsh committed
    	class BodyHairSurgeryList extends RadioSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    
    vas's avatar
    vas committed
    				["keep", 1],
    				["removal", 2],
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Body Hair", items, true);
    
    			this.setValue(current_rule.set.surgery.bodyhair);
    			this.onchange = (value) => current_rule.set.surgery.bodyhair = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    
    ezsh's avatar
    ezsh committed
    	class HairSurgeryList extends RadioSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    
    vas's avatar
    vas committed
    				["keep", 1],
    				["removal", 2],
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Hair", items, true);
    
    			this.setValue(current_rule.set.surgery.hair);
    			this.onchange = (value) => current_rule.set.surgery.hair = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    ezsh's avatar
    ezsh committed
    
    
    	class EarShapeSurgeryList extends RadioSelector {
    		constructor() {
    			const items = [
    				["normal ears", 1],
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				["small elfin ears", 2],
    
    				["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 {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			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]);
    
    DCoded's avatar
    DCoded committed
    			}
    
    klorpa's avatar
    klorpa committed
    
    
    vas's avatar
    vas committed
    			super("Automatically set assignment", items);
    			this.setValue(current_rule.set.setAssignment);
    			this.onchange = (value) => current_rule.set.setAssignment = value;
    		}
    
    vas's avatar
    vas committed
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    	class PitAssignmentList extends ListSelector{
    
    		constructor() {
    
    			const items =[["remove from pit", 0], ["assign to pit", 1]];
    
    klorpa's avatar
    klorpa committed
    			super("Pit assignment", items);
    
    			this.setValue(current_rule.set.pitRules);
    			this.onchange = (value) => current_rule.set.pitRules = value;
    		}
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    ezsh's avatar
    ezsh committed
    	class BellyImplantList extends RadioSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    				["install", "install"],
    				["remove", "remove"],
    			];
    
    ezsh's avatar
    ezsh committed
    			super("Belly implant", items, true);
    
    			this.setValue(current_rule.set.surgery.bellyImplant);
    			this.onchange = (value) => current_rule.set.surgery.bellyImplant = value;
    
    vas's avatar
    vas committed
    		}
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    ezsh's avatar
    ezsh committed
    	class LabelList extends StringEditor {
    
    vas's avatar
    vas committed
    		constructor() {
    
    			super("Custom label(s) (separate by '|')", [], true, true);
    
    vas's avatar
    vas committed
    			this.setValue(current_rule.set.label);
    			this.onchange = (value) => current_rule.set.label = value;
    		}
    	}
    
    ezsh's avatar
    ezsh committed
    	class LabelRemoveList extends StringEditor {
    
    			super("Remove custom label(s) (separate by '|')", [], true, true);
    
    			this.setValue(current_rule.set.removeLabel);
    			this.onchange = (value) => current_rule.set.removeLabel = value;
    		}
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    	class SkinColorList extends ListSelector {
    
    vas's avatar
    vas committed
    		constructor() {
    			const items = [
    
    				["natural"],
    
    klorpa's avatar
    klorpa committed
    				["pure white"],
    				["ivory"],
    				["white"],
    				["extremely pale"],
    				["very pale"],
    
    vas's avatar
    vas committed
    				["pale"],
    
    klorpa's avatar
    klorpa committed
    				["extremely fair"],
    				["very fair"],
    				["fair"],
    				["light"],
    				["light olive"],
    				["tan"],
    				["olive"],
    				["bronze"],
    				["dark olive"],
    
    vas's avatar
    vas committed
    				["dark"],
    
    klorpa's avatar
    klorpa committed
    				["light beige"],
    				["beige"],
    				["dark beige"],
    				["light brown"],
    				["brown"],
    				["dark brown"],
    				["black"],
    				["ebony"],
    				["pure black"],
    
    klorpa's avatar
    klorpa committed
    				["sun tanned"],
    				["spray tanned"],
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				...App.Medicine.Modification.dyedSkins
    
    ezsh's avatar
    ezsh committed
    			];
    
    vas's avatar
    vas committed
    			super("Dye or tan skin", items);
    			this.setValue(current_rule.set.skinColor);
    			this.onchange = (x) => current_rule.set.skinColor = x;
    		}
    	}
    
    klorpa's avatar
    klorpa committed
    
    
    vas's avatar
    vas committed
    	return rulesAssistantOptions;
    
    ezsh's avatar
    ezsh committed
    })();