diff --git a/devTools/typings.d.ts b/devTools/typings.d.ts
index a1cc0bc71337599ac002f922a7885c2ffa1a0f2b..8c32d6c00032a6b5f9bf13bab5b47b540643d554 100644
--- a/devTools/typings.d.ts
+++ b/devTools/typings.d.ts
@@ -58,6 +58,10 @@ declare interface ClothesItem {
 	 * if 1, then accessory files are integrity-dependent "acc_(tattered|torn|frayed|full).png"
 	 */
 	accessory_integrity_img?: 0|1;
+	/**
+	 * if 1, then accessory files layer under breast sprites
+	 */
+	accessory_layer_under?: 0|1;
 	high_img: 0|1;
 	back_img: 0|1;
 	/**
@@ -90,7 +94,15 @@ declare interface ClothesItem {
 	 * * "secondary" - use secondary/accessory colour
 	 */
 	sleeve_colour?: ""|"no"|"primary"|"secondary";
-	breast_img: number;
+	/**
+	 * * 1 if has breast sprites and a unique image for every breast sprite
+	 * * 0 if no breast sprites
+	 * * Key represents breast size tier 0..6.
+	 * * Value represents the image used:
+	 *     - null if no clothed breast image exists for that breast size.
+	 *     - 0..6 for clothed breast image used for that breast size.
+ 	 */
+	breast_img: object|1|0;
 	cursed: number;
 	location: number;
 	iconFile: string;
diff --git a/game/03-JavaScript/ingame.js b/game/03-JavaScript/ingame.js
index 53c8ebdae81fb27a0e3077dfa0fabe2d41040e5f..d10e42f28b32a125141595e8866eda489bf2565d 100644
--- a/game/03-JavaScript/ingame.js
+++ b/game/03-JavaScript/ingame.js
@@ -1974,37 +1974,3 @@ function earSlimeMakingMundaneRequests() {
 	return true;
 }
 window.earSlimeMakingMundaneRequests = earSlimeMakingMundaneRequests;
-
-function minArousal() {
-	let result = playerHeatMinArousal() + playerRutMinArousal();
-
-	result += Object.values(V.worn).reduce((prev, curr) => {
-		if (curr.type.includes("fetish")) return prev + 150;
-		return prev;
-	}, 0);
-
-	return Math.clamp(result, 0, 5000);
-}
-window.minArousal = minArousal;
-
-function minPain() {
-	let result = 0;
-
-	if (V.lactating && V.breastfeedingdisable === "f" && V.milkFullPain > 200) {
-		result += Math.ceil((V.milkFullPain - 200) / 5);
-		if (!V.daily.milkFullPainMessage) {
-			V.milkFullPainMessage = 1;
-			V.effectsmessage = 1;
-		}
-	}
-
-	if (
-		V.earSlime.defyCooldown &&
-		(V.worn.genitals.name === "chastity parasite" || V.parasite.penis.name === "parasite" || V.parasite.clit.name === "parasite")
-	) {
-		result += 25;
-	}
-
-	return Math.clamp(result, 0, 50);
-}
-window.minPain = minPain;
diff --git a/game/04-Variables/canvasmodel-main.js b/game/04-Variables/canvasmodel-main.js
index 0142fdf54503e106b96a7ce83da286611731ffdd..d85c07c72e4d1077bcbae3e293d988337b43d397 100644
--- a/game/04-Variables/canvasmodel-main.js
+++ b/game/04-Variables/canvasmodel-main.js
@@ -4272,23 +4272,29 @@ function genlayer_clothing_breasts(slot, overrideOptions) {
 	return Object.assign({
 		srcfn(options) {
 			let isAltPosition = options.alt_position &&
-				(options["worn_" + slot + "_setup"].altposition !== undefined && 
+				(options["worn_" + slot + "_setup"].altposition !== undefined &&
 				!options.alt_without_breasts);
+			let breastImg = options["worn_" + slot + "_setup"].breast_img;
+			let breastSize = typeof breastImg === 'object' ? breastImg[options.breast_size] : Math.min(options.breast_size, 6);
 			let path = 'img/clothes/' +
 				slot + '/' +
 				options["worn_" + slot + "_setup"].variable + '/' +
-				(Math.min(options.breast_size, 6)) + (isAltPosition ? '_alt' : '') + '.png';
+				breastSize + (isAltPosition ? '_alt' : '') + '.png';
 			return gray_suffix(path, options.filters['worn_' + slot]);
 		},
-		z: ZIndices[slot],
 		showfn(options) {
+			let breastImg = options["worn_" + slot + "_setup"].breast_img;
+			if (typeof breastImg === 'object' && breastImg[options.breast_size] !== null) {
+				breastImg = 1;
+			}
 			return options.show_clothes &&
 				options["worn_" + slot] > 0 &&
-				options["worn_" + slot + "_setup"].breast_img === 1
+				breastImg === 1;
 		},
 		alphafn(options) {
 			return options["worn_" + slot + "_alpha"]
 		},
+		z: ZIndices[slot],
 		filters: ["worn_" + slot],
 		animation: "idle"
 	}, overrideOptions)
@@ -4603,21 +4609,28 @@ function genlayer_clothing_belly_acc(slot, overrideOptions) {
 function genlayer_clothing_breasts_acc(slot, overrideOptions) {
 	return Object.assign({
 		srcfn(options) {
+			let breastImg = options["worn_" + slot + "_setup"].breast_img;
+			let breastSize = typeof breastImg === 'object' ? breastImg[options.breast_size] : Math.min(options.breast_size, 6);
 			let path = 'img/clothes/' +
 				slot + '/' +
 				options["worn_" + slot + "_setup"].variable + '/' +
-				(Math.min(options.breast_size, 6)) + '_acc.png';
+				breastSize + '_acc.png';
 			return gray_suffix(path, options.filters['worn_' + slot + '_acc']);
 		},
-		z: ZIndices[slot],
 		showfn(options) {
+			let breastImg = options["worn_" + slot + "_setup"].breast_img;
+			if (typeof breastImg === 'object' && breastImg[options.breast_size] !== null) {
+				breastImg = 1;
+			}
 			return options.show_clothes &&
 				options["worn_" + slot] > 0 &&
-				options["worn_" + slot + "_setup"].breast_acc_img === 1
+				options["worn_" + slot + "_setup"].breast_acc_img === 1 &&
+				breastImg === 1;
 		},
 		alphafn(options) {
 			return options["worn_" + slot + "_alpha"]
 		},
+		z: ZIndices[slot],
 		filters: ["worn_" + slot + "_acc"],
 		animation: "idle"
 	}, overrideOptions)
diff --git a/game/04-Variables/variables-versionUpdate.twee b/game/04-Variables/variables-versionUpdate.twee
index e7a4abb6e4e1bbe408e9c0453f784b0aac42708d..a94a0ef6f74090ff912ac11e63909e9868395d39 100644
--- a/game/04-Variables/variables-versionUpdate.twee
+++ b/game/04-Variables/variables-versionUpdate.twee
@@ -5114,6 +5114,11 @@
 	<</if>>
 	*/
 
+	<<if $sydney_spear_talk is 1>>
+		<<set $sydneySeen.pushUnique("spearMission")>>
+		<<unset $sydney_spear_talk>>
+	<</if>>
+
 	<!--V0.4.7.0 Great Hawk expansion -->
 	<<if $playerPregnancyEggLayingDisable is undefined>>
 		<<set $playerPregnancyEggLayingDisable to $playerPregnancyBeastDisable>>
diff --git a/game/base-clothing/clothing-under-upper.js b/game/base-clothing/clothing-under-upper.js
index 9be0292894725e8e736a85c65c6c23461c704528..ade54d8f4bcd5863e12c8ce7a65dfe61de17986c 100644
--- a/game/base-clothing/clothing-under-upper.js
+++ b/game/base-clothing/clothing-under-upper.js
@@ -94,7 +94,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 0, 1: 2, 2: 2, 3: 3, 4: 3, 5: 4, 6: 5 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -140,7 +140,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "school_swimsuit.png",
@@ -185,7 +185,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "leotard.png",
@@ -231,7 +231,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "unitard.png",
@@ -276,7 +276,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "skimpy_leotard.png",
@@ -322,7 +322,7 @@ function initUnderUpper() {
 			accessory_colour_options: [],
 			accessory_colour_combat: "white",
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "foreign_school_swimsuit.png",
@@ -367,7 +367,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "swimsuit.png",
@@ -413,7 +413,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "bunny_leotard.png",
@@ -457,7 +457,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 0, 1: 2, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "catgirl_bra.png",
@@ -501,7 +501,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -545,7 +545,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 2, 3: 3, 4: 3, 5: 3, 6: 3 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -589,7 +589,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 2, 3: 3, 4: 3, 5: 5, 6: 5 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -633,7 +633,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -719,7 +719,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 2, 3: 3, 4: 4, 5: 4, 6: 6 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -764,7 +764,7 @@ function initUnderUpper() {
 			accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 0, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			breast_acc_img: 1,
 			cursed: 0,
 			location: 0,
@@ -810,7 +810,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -1073,7 +1073,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -1117,7 +1117,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -1161,7 +1161,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			breast_combat: 1,
 			mainImage: 0,
 			cursed: 0,
@@ -1205,7 +1205,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -1249,7 +1249,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: 0,
 			cursed: 0,
 			location: 0,
 			iconFile: "chest_binder.png",
@@ -1338,7 +1338,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "see-through_swimsuit.png",
@@ -1382,7 +1382,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
@@ -1470,7 +1470,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "leotardturtleneck.png",
@@ -1528,7 +1528,7 @@ function initUnderUpper() {
 			],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 0,
-			breast_img: 0,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "camisole.png",
@@ -1571,7 +1571,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "bunny_leotard.png",
@@ -1614,7 +1614,7 @@ function initUnderUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			mainImage: 0,
 			cursed: 0,
 			location: 0,
diff --git a/game/base-clothing/clothing-upper.js b/game/base-clothing/clothing-upper.js
index 998f7bf0319f26578d9428c2bc3f574eb2bffc9a..bd1c9aa78e0c08d56d1a2cf54080c048b1cb460d 100644
--- a/game/base-clothing/clothing-upper.js
+++ b/game/base-clothing/clothing-upper.js
@@ -97,7 +97,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 0, 1: 0, 2: 0, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "sundress.png",
@@ -186,7 +186,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "towel.png",
@@ -290,7 +290,7 @@ function initUpper() {
 			accessory_colour_combat: "light blue",
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 3, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "school_shirt.png",
@@ -397,7 +397,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 4, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "evening_gown.png",
@@ -442,7 +442,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "tank_top.png",
@@ -523,7 +523,7 @@ function initUpper() {
 			],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "ballgown.png",
@@ -570,7 +570,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			accessory_layer_under: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 1, 3: 3, 4: 4, 5: 5, 6: 6 },
 			altposition: "none",
 			cursed: 0,
 			location: 0,
@@ -616,9 +616,9 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
 			accessory_colour_sidebar: 1,
-			accessory_layer_under: 1 /* used to layer upperwear accessory under full */,
+			accessory_layer_under: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 1, 3: 3, 4: 4, 5: 5, 6: 6 },
 			altposition: "none",
 			cursed: 0,
 			location: 0,
@@ -667,7 +667,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: 0, 1: 1, 2: 1, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "maid_dress.png",
@@ -713,7 +713,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "nuns_habit.png",
@@ -758,7 +758,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "towel.png",
@@ -804,7 +804,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "tuxedo_jacket.png",
@@ -850,7 +850,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "blouse.png",
@@ -895,7 +895,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "babydoll.png",
@@ -940,7 +940,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "babydoll_lingerie.png",
@@ -986,7 +986,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "crop_top.png",
@@ -1032,7 +1032,7 @@ function initUpper() {
 			accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: 0, 1: 0, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "serafuku.png",
@@ -1077,7 +1077,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			breast_combat: 1,
 			cursed: 0,
 			location: 0,
@@ -1122,7 +1122,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "turtleneck.png",
@@ -1259,7 +1259,7 @@ function initUpper() {
 			accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "witch_dress.png",
@@ -1305,7 +1305,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 0,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 3, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "vampire_jacket.png",
@@ -1352,7 +1352,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "slut_shirt.png",
@@ -1489,7 +1489,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 3, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "christmas_shirt.png",
@@ -1534,7 +1534,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 3, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "christmas_dress.png",
@@ -1579,7 +1579,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "monks_habit.png",
@@ -1760,7 +1760,7 @@ function initUpper() {
 			accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			integrity_mask_img: 1,
 			cursed: 0,
 			location: 0,
@@ -1829,7 +1829,7 @@ function initUpper() {
 			altsleeve: "none",
 			altposition: "none",
 			altdisabled: ["sleeves"],
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			has_collar: 1,
 			cursed: 0,
 			location: 0,
@@ -2007,7 +2007,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 5 },
 			altposition: "none",
 			altdisabled: ["sleeves"],
 			cursed: 0,
@@ -2073,7 +2073,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 5 },
 			altposition: "none",
 			altdisabled: ["sleeves"],
 			cursed: 0,
@@ -2119,7 +2119,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "beatnik_shirt.png",
@@ -2163,7 +2163,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 0,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "cable_knit_turtleneck.png",
@@ -2207,7 +2207,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "v_neck.png",
@@ -2251,7 +2251,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 3, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "turtleneck_jumper.png",
@@ -2298,7 +2298,7 @@ function initUpper() {
 			accessory_colour_options: [],
 			accessory_colour_combat: "yellow",
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "cheongsam.png",
@@ -2346,7 +2346,7 @@ function initUpper() {
 			accessory_colour_options: [],
 			accessory_colour_combat: "yellow",
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "short_cheongsam.png",
@@ -2392,7 +2392,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			breast_combat: 1,
 			cursed: 0,
 			location: 0,
@@ -2440,7 +2440,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 1, 3: 3, 4: 3, 5: 5, 6: 5 },
 			breast_acc_img: 1,
 			cursed: 0,
 			location: 0,
@@ -2536,7 +2536,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "gothic_jacket.png",
@@ -2628,7 +2628,7 @@ function initUpper() {
 			accessory_colour_options: [],
 			sleeve_img: 1,
 			altsleeve: "none",
-			breast_img: 0,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "waiters_shirt.png",
@@ -2765,7 +2765,7 @@ function initUpper() {
 			accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "sailor_shirt.png",
@@ -2811,7 +2811,7 @@ function initUpper() {
 			accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "short_sailor_shirt.png",
@@ -2903,7 +2903,7 @@ function initUpper() {
 			accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "gym_shirt.png",
@@ -2996,7 +2996,7 @@ function initUpper() {
 			accessory_colour_options: [],
 			accessory_colour_combat: "white",
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "hunting_coat.png",
@@ -3044,7 +3044,7 @@ function initUpper() {
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
 			sleeve_colour: "none",
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "letterman_jacket.png",
@@ -3135,7 +3135,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 3, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "shadbelly_coat.png",
@@ -3551,7 +3551,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "star_pyjama_shirt.png",
@@ -3596,7 +3596,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "moon_pyjama_shirt.png",
@@ -3641,7 +3641,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "unitard.png",
@@ -3686,7 +3686,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "open_shoulders_crop_top.png",
@@ -3761,7 +3761,7 @@ function initUpper() {
 			],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "hoodie.png",
@@ -3809,7 +3809,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "bathrobe.png",
@@ -3956,7 +3956,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 0,
+			breast_img: { 0: null, 1: null, 2: null, 3: null, 4: null, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "utility_vest.png",
@@ -4000,8 +4000,10 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
 			accessory_colour_sidebar: 1,
+			accessory_integrity_img: 1,
 			sleeve_img: 0,
-			breast_img: 0,
+			breast_img: { 0: null, 1: null, 2: null, 3: null, 4: null, 5: 5, 6: 5 },
+			breast_acc_img: 1,
 			cursed: 0,
 			location: 0,
 			iconFile: "utility_shirt.png",
@@ -4047,7 +4049,7 @@ function initUpper() {
 			accessory_colour_sidebar: 0,
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 4, 4: 4, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "monster_hoodie.png",
@@ -4094,7 +4096,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 3, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "keyhole.png",
@@ -4182,7 +4184,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 3, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "",
@@ -4472,7 +4474,7 @@ function initUpper() {
 			],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "waitress_uniform.png",
@@ -4532,7 +4534,7 @@ function initUpper() {
 			],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "split_dress.png",
@@ -4596,7 +4598,7 @@ function initUpper() {
 			accessory_colour_options: [],
 			sleeve_img: 1,
 			sleeve_colour: "none",
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "skimpy_lolita_dress.png",
@@ -4678,7 +4680,7 @@ function initUpper() {
 			],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 3, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "short_ballgown.png",
@@ -4737,7 +4739,7 @@ function initUpper() {
 			],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 4, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "single_breasted_jacket.png",
@@ -4796,7 +4798,7 @@ function initUpper() {
 			],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 4, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "double_breasted_jacket.png",
@@ -4844,7 +4846,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "pink_nurse_dress.png",
@@ -4893,7 +4895,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "plastic_nurse_dress.png",
@@ -5001,7 +5003,7 @@ function initUpper() {
 			],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: 1, 1: 1, 2: 3, 3: 3, 4: 5, 5: 5, 6: 5 },
 			breast_acc_img: 1,
 			mainImage: 0,
 			cursed: 0,
@@ -5049,7 +5051,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "open_shoulder_sweater.png",
@@ -5097,7 +5099,7 @@ function initUpper() {
 			accessory_colour_sidebar: "secondary",
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 4, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "winter_jacket.png",
@@ -5236,7 +5238,7 @@ function initUpper() {
 			accessory_colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "classy_vampire_jacket.png",
@@ -5282,7 +5284,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "virgin_killer.png",
@@ -5332,7 +5334,7 @@ function initUpper() {
 			sleeve_img: 1,
 			sleeve_colour: "secondary",
 			sleeve_acc_img: 1,
-			breast_img: 1,
+			breast_img: { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "futuresuit.png",
@@ -5380,7 +5382,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "lace_nightgown.png",
@@ -5439,7 +5441,7 @@ function initUpper() {
 			accessory_colour_options: [],
 			accessory_colour_sidebar: 0,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "cat_hoodie.png",
@@ -5485,7 +5487,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "ao_dai.png",
@@ -5531,7 +5533,7 @@ function initUpper() {
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
 			altsleeve: "none",
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			back_img: 1,
 			back_img_colour: "secondary",
 			has_collar: 1,
@@ -5581,7 +5583,7 @@ function initUpper() {
 			accessory_colour_sidebar: 0,
 			sleeve_img: 1,
 			altsleeve: "none",
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			has_collar: 1,
 			cursed: 0,
 			location: 0,
@@ -5628,7 +5630,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "maid_dress_traditional.png",
@@ -5675,7 +5677,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "maid_dress_victorian.png",
@@ -5721,7 +5723,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "shrine_maiden.png",
@@ -5770,7 +5772,7 @@ function initUpper() {
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
 			sleeve_colour: "primary",
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "polo.png",
@@ -5818,7 +5820,7 @@ function initUpper() {
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			breast_acc_img: 1,
 			cursed: 0,
 			location: 0,
@@ -5866,7 +5868,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "band_tee.png",
@@ -5913,7 +5915,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "boxy.png",
@@ -5958,7 +5960,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 4, 6: 4 },
 			cursed: 0,
 			location: 0,
 			iconFile: "virgin_killer_dress.png",
@@ -6068,7 +6070,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "halter_sundress.png",
@@ -6133,7 +6135,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "leather_dress.png",
@@ -6196,7 +6198,7 @@ function initUpper() {
 			accessory_colour_sidebar: "secondary",
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: null, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "serafuku_new.png",
@@ -6240,7 +6242,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "cable_knit_cardigan.png",
@@ -6289,7 +6291,7 @@ function initUpper() {
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 6 },
 			cursed: 0,
 			location: 0,
 			iconFile: "open_shoulder_lolita_dress.png",
@@ -6337,7 +6339,7 @@ function initUpper() {
 			sleeve_img: 1,
 			sleeve_colour: "secondary",
 			altsleeve: "none",
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			has_collar: 1,
 			cursed: 0,
 			location: 0,
@@ -6385,7 +6387,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 3, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "jinglebell_dress.png",
@@ -6430,7 +6432,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 3, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "jinglebell_dress_sleeveless.png",
@@ -6478,7 +6480,7 @@ function initUpper() {
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
-			breast_img: 0,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "jumper.png",
@@ -6524,7 +6526,7 @@ function initUpper() {
 			accessory_colour_options: [],
 			accessory_integrity_img: 0,
 			sleeve_img: 1,
-			breast_img: 0,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "jumper.png",
@@ -6572,7 +6574,7 @@ function initUpper() {
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
-			breast_img: 0,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "jumper.png",
@@ -6621,7 +6623,7 @@ function initUpper() {
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
-			breast_img: 0,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "jumper.png",
@@ -6670,7 +6672,7 @@ function initUpper() {
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
 			sleeve_acc_img: 1,
-			breast_img: 0,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "jumper.png",
@@ -6715,7 +6717,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "leather_crop_top.png",
@@ -6761,7 +6763,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			accessory_integrity_img: 1,
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "leather_crop_top.png",
@@ -6807,7 +6809,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "leather_top.png",
@@ -6855,7 +6857,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			accessory_integrity_img: 1,
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "leather_top.png",
@@ -6919,9 +6921,9 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 5 },
 			altposition: "none",
-			altdisabled: ["sleeves"],
+			altdisabled: ["sleeves", "breasts"],
 			cursed: 0,
 			location: 0,
 			iconFile: "cropped_leather_jacket.png",
@@ -6966,7 +6968,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 1, 3: 3, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "sexy_nuns_habit.png",
@@ -7011,7 +7013,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: 2, 1: 2, 2: 2, 3: 4, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "sexy_priests_vestments.png",
@@ -7061,7 +7063,7 @@ function initUpper() {
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
 			sleeve_colour: "secondary",
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			has_collar: 1,
 			altposition: "none",
 			altdisabled: ["full", "sleeves", "breasts"],
@@ -7114,7 +7116,7 @@ function initUpper() {
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
 			sleeve_colour: "secondary",
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			has_collar: 1,
 			altposition: "none",
 			altdisabled: ["full", "sleeves", "breasts"],
@@ -7166,7 +7168,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
 			sleeve_colour: "secondary",
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			has_collar: 1,
 			altsleeve: "none",
 			cursed: 0,
@@ -7216,7 +7218,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			sleeve_img: 1,
 			sleeve_colour: "secondary",
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			has_collar: 1,
 			altsleeve: "none",
 			altdisabled: ["sleeves"],
@@ -7267,7 +7269,7 @@ function initUpper() {
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
 			sleeve_colour: "primary",
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			has_collar: 1,
 			altposition: "none",
 			altdisabled: ["full", "sleeves", "breasts"],
@@ -7315,7 +7317,7 @@ function initUpper() {
 			accessory_colour_options: [],
 			sleeve_img: 1,
 			altsleeve: "none",
-			breast_img: 0,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			has_collar: 1,
 			cursed: 0,
 			location: 0,
@@ -7365,7 +7367,7 @@ function initUpper() {
 			sleeve_img: 1,
 			sleeve_colour: "primary",
 			altsleeve: "none",
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 5 },
 			has_collar: 1,
 			cursed: 0,
 			location: 0,
@@ -7454,7 +7456,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 1, 2: 1, 3: 3, 4: 3, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "harem_vest.png",
@@ -7499,7 +7501,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: 2, 2: 2, 3: 4, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "long_sleeved_shirt.png",
@@ -7542,7 +7544,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 0,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 4, 4: 4, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "sexy_butler_top.png",
@@ -7589,7 +7591,7 @@ function initUpper() {
 			accessory_colour_sidebar: 1,
 			accessory_integrity_img: 1,
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 3, 5: 3, 6: 3 },
 			cursed: 0,
 			location: 0,
 			iconFile: "classic_open_shoulder_lolita_dress.png",
@@ -7654,7 +7656,7 @@ function initUpper() {
 			accessory_colour: 0,
 			accessory_colour_options: [],
 			sleeve_img: 1,
-			breast_img: 1,
+			breast_img: { 0: null, 1: null, 2: null, 3: 3, 4: 3, 5: 5, 6: 5 },
 			cursed: 0,
 			location: 0,
 			iconFile: "jumpsuit.png",
diff --git a/game/base-system/clamp.twee b/game/base-system/clamp.twee
index a66b18341c296f7566b9e3f6fe89febbeab29157..be3be629469ed574fea604acb917fda3fdc371b9 100644
--- a/game/base-system/clamp.twee
+++ b/game/base-system/clamp.twee
@@ -1,14 +1,4 @@
 :: Widgets Clamp [widget]
-<<widget "traumaclamp">>
-	<<if $trauma gte $traumamax>>
-		<<set $beauty -= (($trauma - $traumamax) / 5)>>
-	<</if>>
-	<<if $innocencestate is 1 and $trauma gt 0>>
-		<<set $innocencetrauma += $trauma>>
-		<<set $trauma to 0>>
-	<</if>>
-	<<set $trauma = Math.clamp($trauma, 0, $traumamax)>>
-<</widget>>
 
 <<widget "sleep_clamp">>
 	<<set $stress = Math.clamp($stress, 0, $stressmax)>>
@@ -152,16 +142,3 @@
 <<widget "maxDefaultActionSetsclamp">>
 	<<set $maxDefaultActionSets to Math.clamp($maxDefaultActionSets, 1, 10)>>
 <</widget>>
-
-<<widget "painclamp">>
-	<<if $gamemode is "soft">>
-		<<set $pain to Math.clamp($pain, 0, 0)>>
-	<<else>>
-		<<set $pain to Math.clamp($pain, minPain(), 200)>>
-	<</if>>
-<</widget>>
-
-<<widget "arousalclamp">>
-	<<set $arousal = Math.clamp($arousal, minArousal(), $arousalmax)>>
-<</widget>>
-
diff --git a/game/base-system/images.js b/game/base-system/images.js
index 19fdf21a87918a4d066dad3e5ccc5ea983c225e4..dc1433f32ac56c187c3be4f6df2478d8db50b1cc 100644
--- a/game/base-system/images.js
+++ b/game/base-system/images.js
@@ -1,48 +1,64 @@
 function gainSchoolStar(variable) {
 	if (V.statdisable === "t") return "";
+	const createElement = (type, clas, content) => {
+		const element = document.createElement(type);
+		element.classList.add(clas);
+		if (type === "img") {
+			element.src = content;
+		} else {
+			element.textContent = content;
+		}
+		return element;
+	};
+	const fragment = document.createDocumentFragment();
 	if (V.options.images === 1) {
+		const img = document.createElement("img");
+		img.classList.add("icon");
 		if (V[variable] + 1 === 3) {
-			return `<img class="icon" src="img/ui/gold_star.png">`;
+			fragment.appendChild(createElement("img", "icon", "img/ui/gold_star.png"));
 		} else if (V[variable] + 1 === 2) {
-			return `<img class="icon" src="img/ui/silver_star.png">`;
+			fragment.appendChild(createElement("img", "icon", "img/ui/silver_star.png"));
 		} else if (V[variable] + 1 === 1) {
-			return `<img class="icon" src="img/ui/bronze_star.png">`;
+			fragment.appendChild(createElement("img", "icon", "img/ui/bronze_star.png"));
 		}
 	} else {
 		if (V[variable] + 1 === 3) {
-			return `<span class="gold">Gold Star</span>`;
+			fragment.appendChild(createElement("span", "gold", "Gold Star"));
 		} else if (V[variable] + 1 === 2) {
-			return `<span class="platinum">Silver Star</span>`;
+			fragment.appendChild(createElement("span", "platinum", "Silver Star"));
 		} else if (V[variable] + 1 === 1) {
-			return `<span class="brown">Bronze Star</span>`;
+			fragment.appendChild(createElement("span", "brown", "Bronze Star"));
 		}
 	}
-	return "";
+	return fragment;
 }
 window.gainSchoolStar = gainSchoolStar;
 
 function schoolStar(variable) {
+	const createElement = (type, clas, content) => {
+		const element = document.createElement(type);
+		element.classList.add(clas);
+		if (type === "img") {
+			element.src = content;
+		} else {
+			element.textContent = content;
+		}
+		return element;
+	};
+	const fragment = document.createDocumentFragment();
 	if (V.options.images === 1) {
 		if (V[variable] >= 3) {
-			return `<img class="icon" src="img/ui/gold_star.png">`;
+			fragment.appendChild(createElement("img", "icon", "img/ui/gold_star.png"));
 		} else if (V[variable] === 2) {
-			return `<img class="icon" src="img/ui/silver_star.png">`;
+			fragment.appendChild(createElement("img", "icon", "img/ui/silver_star.png"));
 		} else if (V[variable] === 1) {
-			return `<img class="icon" src="img/ui/bronze_star.png">`;
+			fragment.appendChild(createElement("img", "icon", "img/ui/bronze_star.png"));
 		} else {
-			return `<img class="icon" src="img/ui/empty_star.png">`;
+			fragment.appendChild(createElement("img", "icon", "img/ui/empty_star.png"));
 		}
 	} else {
-		return `<span class="platinum">${V[variable]} / 3 stars</span>`;
+		fragment.appendChild(createElement("span", "platinum", `${V[variable]} / 3 stars`));
 	}
+	return fragment;
 }
 window.schoolStar = schoolStar;
-
-DefineMacroS("g_science_star", () => gainSchoolStar("science_star"));
-DefineMacroS("science_star", () => schoolStar("science_star"));
-DefineMacroS("g_maths_star", () => gainSchoolStar("maths_star"));
-DefineMacroS("maths_star", () => schoolStar("maths_star"));
-DefineMacroS("g_english_star", () => gainSchoolStar("english_star"));
-DefineMacroS("english_star", () => schoolStar("english_star"));
-DefineMacroS("g_history_star", () => gainSchoolStar("history_star"));
-DefineMacroS("history_star", () => schoolStar("history_star"));
diff --git a/game/base-system/stat-changes.js b/game/base-system/stat-changes.js
index bd1e604c59d7e43baad3e0b28b8ddbdabbd999ea..c16721bc0b0d891f6edbbbfa0efe3c6b25b26350 100644
--- a/game/base-system/stat-changes.js
+++ b/game/base-system/stat-changes.js
@@ -1,8 +1,7 @@
 /* eslint-disable no-undef */
 /* eslint-disable no-useless-escape */
 
-// eslint-disable-next-line no-var, no-unused-vars
-var statChange = (() => {
+const statChange = (() => {
 	function paramError(functionName = "", param = "", value, expectedValues = "") {
 		if (typeof value === "object") value = JSON.stringify(value);
 		throw new Error(
@@ -52,7 +51,7 @@ var statChange = (() => {
 			V.panicattacks = 0;
 		}
 
-		wikifier("updateHallucinations");
+		updateHallucinations();
 
 		if (V.trauma >= V.traumamax) {
 			V.dissociation = 2;
@@ -62,7 +61,7 @@ var statChange = (() => {
 			V.dissociation = 0;
 		}
 
-		wikifier("traumaclamp");
+		traumaClamp();
 	}
 	DefineMacro("trauma", trauma);
 
@@ -83,7 +82,7 @@ var statChange = (() => {
 				// eslint-disable-next-line prettier/prettier
 				V.trauma += Math.trunc((amount * 1) + ((amount * 0.5) * (V.control / V.controlmax)));
 			}
-			wikifier("traumaclamp");
+			traumaClamp();
 		}
 	}
 	DefineMacro("combattrauma", combattrauma);
@@ -93,11 +92,21 @@ var statChange = (() => {
 		amount = Number(amount);
 		if (amount) {
 			V.trauma += amount;
-			wikifier("traumaclamp");
+			traumaClamp();
 		}
 	}
 	DefineMacro("straighttrauma", straighttrauma);
 
+	function traumaClamp() {
+		if (V.trauma >= V.traumamax) V.beauty -= (V.trauma - V.traumamax) / 5;
+		if (V.innocencestate === 1 && V.trauma > 0) {
+			V.innocencetrauma += V.trauma;
+			V.trauma = 0;
+		}
+		V.trauma = Math.clamp(V.trauma, 0, V.traumamax);
+	}
+	DefineMacro("traumaclamp", traumaClamp);
+
 	function updateHallucinations() {
 		if (V.trauma >= (V.traumamax / 10) * 5 || V.awareness >= 400 || V.hallucinogen > 0 || Time.isBloodMoon() || V.worn.face.type.includes("esoteric")) {
 			V.hallucinations = 2;
@@ -343,7 +352,7 @@ var statChange = (() => {
 			}
 
 			V.arousal += amount * mod * Weather.BodyTemperature.arousalModifier;
-			wikifier("arousalclamp");
+			arousalClamp();
 
 			// Add to the tracker
 			if (amount > 0) {
@@ -356,6 +365,22 @@ var statChange = (() => {
 	DefineMacro("breastarousal", amount => arousal(amount, "breasts"));
 	DefineMacro("genitalarousal", amount => arousal(amount, "genitals"));
 
+	function arousalClamp() {
+		V.arousal = Math.clamp(V.arousal, minArousal(), V.arousalmax);
+	}
+	DefineMacro("arousalclamp", arousalClamp);
+
+	function minArousal() {
+		let result = playerHeatMinArousal() + playerRutMinArousal();
+
+		result += Object.values(V.worn).reduce((prev, curr) => {
+			if (curr.type.includes("fetish")) return prev + 150;
+			return prev;
+		}, 0);
+
+		return Math.clamp(result, 0, 5000);
+	}
+
 	function tiredness(amount, source) {
 		if (isNaN(amount)) paramError("tiredness", "amount", amount, "Expected a number.");
 		amount = Number(amount);
@@ -386,7 +411,7 @@ var statChange = (() => {
 
 			V.pain += pain;
 		}
-		wikifier("painclamp");
+		painClamp();
 	}
 	DefineMacro("pain", pain);
 
@@ -396,11 +421,41 @@ var statChange = (() => {
 		if (amount) {
 			V.pain += amount * (1 - V.masochism / 1200) * 4;
 			arousal(amount * (0 + V.masochism / 18) * 4);
-			wikifier("painclamp");
+			painClamp();
 		}
 	}
 	DefineMacro("masopain", masopain);
 
+	function painClamp() {
+		if (V.gamemode === "soft") {
+			V.pain = 0;
+		} else {
+			V.pain = Math.clamp(V.pain, minPain(), 200);
+		}
+	}
+	DefineMacro("painclamp", painClamp);
+
+	function minPain() {
+		let result = 0;
+
+		if (V.lactating && V.breastfeedingdisable === "f" && V.milkFullPain > 200) {
+			result += Math.ceil((V.milkFullPain - 200) / 5);
+			if (!V.daily.milkFullPainMessage) {
+				V.milkFullPainMessage = 1;
+				V.effectsmessage = 1;
+			}
+		}
+
+		if (
+			V.earSlime.defyCooldown &&
+			(V.worn.genitals.name === "chastity parasite" || V.parasite.penis.name === "parasite" || V.parasite.clit.name === "parasite")
+		) {
+			result += 25;
+		}
+
+		return Math.clamp(result, 0, 50);
+	}
+
 	function detention(amount) {
 		if (V.statFreeze) return;
 		if (isNaN(amount)) paramError("detention", "amount", amount, "Expected a number.");
@@ -526,17 +581,13 @@ var statChange = (() => {
 
 	function wolfpacktrust() {
 		V.wolfpacktrust++;
-		if (V.statdisable === "f") return '<span class="green">The pack trusts you a little more.</span>';
-		return "";
+		return statDisplay.statChange("The pack trusts you a little more.", 0, "green");
 	}
-	DefineMacroS("wolfpacktrust", wolfpacktrust);
 
 	function wolfpackfear() {
 		V.wolfpackfear++;
-		if (V.statdisable === "f") return '<span class="green">The pack fears you a little more.</span>';
-		return "";
+		return statDisplay.statChange("The pack fears you a little more.", 0, "green");
 	}
-	DefineMacroS("wolfpackfear", wolfpackfear);
 
 	function ferocity(amount) {
 		if (isNaN(amount)) paramError("ferocity", "amount", amount, "Expected a number.");
@@ -551,8 +602,6 @@ var statChange = (() => {
 		}
 		return "";
 	}
-	DefineMacroS("gferocity", (amount = 1) => ferocity(amount));
-	DefineMacroS("lferocity", (amount = 1) => ferocity(-amount));
 
 	function harmony(amount = 1) {
 		if (isNaN(amount)) paramError("harmony", "amount", amount, "Expected a number.");
@@ -567,8 +616,6 @@ var statChange = (() => {
 		}
 		return "";
 	}
-	DefineMacroS("gharmony", (amount = 1) => harmony(amount));
-	DefineMacroS("lharmony", (amount = 1) => harmony(-amount));
 
 	function submissive(amount, modifier = 4) {
 		if (V.statFreeze) return;
@@ -605,21 +652,19 @@ var statChange = (() => {
 			switch (V.player.penissize) {
 				case 4:
 					insecurity("penis_big", amount);
-					return '<<ginsecurity "penis_big">>';
+					return statDisplay.gacceptance("penis_big");
 				case 1:
 					insecurity("penis_small", amount);
-					return '<<ginsecurity "penis_small">>';
+					return statDisplay.gacceptance("penis_small");
 				case 0:
 				case -1:
 				case -2:
 					insecurity("penis_tiny", amount);
-					return '<<ginsecurity "penis_tiny">>';
+					return statDisplay.gacceptance("penis_tiny");
 			}
 		}
 		return "";
 	}
-	DefineMacroS("incgpenisinsecurity", amount => gainPenisInsecurity(amount));
-	DefineMacroS("incggpenisinsecurity", () => gainPenisInsecurity(20));
 
 	function insecurity(type, amount) {
 		if (V.statFreeze) return;
@@ -724,12 +769,11 @@ var statChange = (() => {
 			if (type && V["insecurity_" + type] > 0 && V["acceptance_" + type] < 1000) {
 				acceptance(type, amount);
 				if (V["acceptance_" + type] >= 1000) T.acceptanceAchieved = type;
-				return "<<gacceptance>>";
+				return statDisplay.gacceptance();
 			}
 		}
 		return "";
 	}
-	DefineMacroS("gpenisacceptance", gainPenisAcceptance);
 
 	function willpower(amount) {
 		if (V.statFreeze) return;
@@ -969,6 +1013,7 @@ var statChange = (() => {
 		trauma,
 		combattrauma,
 		straighttrauma,
+		traumaClamp,
 		updateHallucinations,
 		control,
 		corruption,
@@ -980,9 +1025,13 @@ var statChange = (() => {
 		stress,
 		sensitivity,
 		arousal,
+		arousalClamp,
+		minArousal,
 		tiredness,
 		pain,
 		masopain,
+		painClamp,
+		minPain,
 		detention,
 		delinquency,
 		status,
@@ -1019,3 +1068,4 @@ var statChange = (() => {
 		worldCorruption,
 	};
 })();
+window.statChange = statChange;
diff --git a/game/base-system/text.js b/game/base-system/text.js
index 6675f425903f2ebfa7eb2bc96a1eae56da79ea7b..1113da60933b4b12579f1f7f011d238680375ca9 100644
--- a/game/base-system/text.js
+++ b/game/base-system/text.js
@@ -2,10 +2,18 @@
 const statDisplay = {
 	statChange(statType, amount, colorClass, condition = () => true) {
 		amount = Number(amount);
-		if (V.statdisable === "t" || !condition()) return "";
+		if (V.statdisable === "t" || !condition()) return document.createDocumentFragment();
 
+		const fragment = document.createDocumentFragment();
+		const span = document.createElement("span");
+		span.className = colorClass;
 		const prefix = amount < 0 ? "- " : "+ ";
-		return ` | <span class="${colorClass}">${prefix.repeat(Math.abs(amount))}${statType}</span>`;
+
+		span.textContent = `${prefix.repeat(Math.abs(amount))}${statType}`;
+		fragment.appendChild(document.createTextNode(" | "));
+		fragment.appendChild(span);
+
+		return fragment;
 	},
 	grace(amount, expectedRank) {
 		amount = Number(amount);
@@ -33,7 +41,9 @@ const statDisplay = {
 	},
 	create(name, fn) {
 		if (this[name] === undefined && !Macro.get(name)) {
-			DefineMacroS(name, fn);
+			DefineMacro(name, function () {
+				this.output.append(fn(...this.args));
+			});
 			this[name] = fn;
 		} else {
 			console.error(`A function with the name "${name}" already exists in statDisplay.`);
@@ -342,6 +352,11 @@ statDisplay.create("gghunger", () => statDisplay.statChange("Hunger", 2, "red"))
 statDisplay.create("ggghunger", () => statDisplay.statChange("Hunger", 3, "red"));
 
 statDisplay.create("gacceptance", () => statDisplay.statChange("Acceptance", 1, "green"));
+statDisplay.create("ginsecurity", type => {
+	if (type === "breasts_tiny" && V.player.gender === "f") return "";
+	if (V["acceptance_" + type] <= 999) return statDisplay.statChange("Insecurity", 1, "red");
+	return "";
+});
 
 statDisplay.create("gwillpower", () => statDisplay.statChange("Willpower", 1, "green"));
 statDisplay.create("ggwillpower", () => statDisplay.statChange("Willpower", 2, "green"));
@@ -501,68 +516,92 @@ statDisplay.create("lscience", () => statDisplay.statChange("Science", -1, "red"
 statDisplay.create("gscience", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("Science", 1, "green");
-	return `${result} ${gainSchoolStar("science_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("science_star"));
+	return result;
 });
 statDisplay.create("ggscience", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("Science", 2, "green");
-	return `${result} ${gainSchoolStar("science_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("science_star"));
+	return result;
 });
 statDisplay.create("gggscience", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("Science", 3, "green");
-	return `${result} ${gainSchoolStar("science_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("science_star"));
+	return result;
 });
 
 statDisplay.create("lmaths", () => statDisplay.statChange("Maths", -1, "red"));
 statDisplay.create("gmaths", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("Maths", 1, "green");
-	return `${result} ${gainSchoolStar("maths_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("maths_star"));
+	return result;
 });
 statDisplay.create("ggmaths", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("Maths", 2, "green");
-	return `${result} ${gainSchoolStar("maths_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("maths_star"));
+	return result;
 });
 statDisplay.create("gggmaths", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("Maths", 3, "green");
-	return `${result} ${gainSchoolStar("maths_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("maths_star"));
+	return result;
 });
 
 statDisplay.create("lenglish", () => statDisplay.statChange("English", -1, "red"));
 statDisplay.create("genglish", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("English", 1, "green");
-	return `${result} ${gainSchoolStar("english_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("english_star"));
+	return result;
 });
 statDisplay.create("ggenglish", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("English", 2, "green");
-	return `${result} ${gainSchoolStar("english_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("english_star"));
+	return result;
 });
 statDisplay.create("gggenglish", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("English", 3, "green");
-	return `${result} ${gainSchoolStar("english_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("english_star"));
+	return result;
 });
 
 statDisplay.create("lhistory", () => statDisplay.statChange("History", -1, "red"));
 statDisplay.create("ghistory", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("History", 1, "green");
-	return `${result} ${gainSchoolStar("history_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("history_star"));
+	return result;
 });
 statDisplay.create("gghistory", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("History", 2, "green");
-	return `${result} ${gainSchoolStar("history_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("history_star"));
+	return result;
 });
 statDisplay.create("ggghistory", () => {
 	T.lustincrdisplay = 1;
 	const result = statDisplay.statChange("History", 3, "green");
-	return `${result} ${gainSchoolStar("history_star")}`;
+	result.append(" ");
+	result.appendChild(gainSchoolStar("history_star"));
+	return result;
 });
 
 statDisplay.create("ghousekeeping", (amount, silent) => {
@@ -645,3 +684,14 @@ statDisplay.create("llladeviancy", () => statDisplay.statChange("Alex's Deviancy
 statDisplay.create("gadeviancy", () => statDisplay.statChange("Alex's Deviancy", 1, "red"));
 statDisplay.create("ggadeviancy", () => statDisplay.statChange("Alex's Deviancy", 2, "red"));
 statDisplay.create("gggadeviancy", () => statDisplay.statChange("Alex's Deviancy", 3, "red"));
+
+// These rely on the 'statChange' function in 'stat-changes.js'
+statDisplay.create("gharmony", (amount = 1) => statChange.harmony(amount));
+statDisplay.create("lharmony", (amount = 1) => statChange.harmony(-amount));
+statDisplay.create("gferocity", (amount = 1) => statChange.ferocity(amount));
+statDisplay.create("lferocity", (amount = 1) => statChange.ferocity(-amount));
+statDisplay.create("incgpenisinsecurity", amount => statChange.gainPenisInsecurity(amount));
+statDisplay.create("incggpenisinsecurity", () => statChange.gainPenisInsecurity(20));
+statDisplay.create("gpenisacceptance", statChange.gainPenisAcceptance);
+statDisplay.create("wolfpacktrust", statChange.wolfpacktrust);
+statDisplay.create("wolfpackfear", statChange.wolfpackfear);
diff --git a/game/base-system/text.twee b/game/base-system/text.twee
index cd471ae2dbf4c8c8b65709beeaeb4f8d239b2f22..fa9073bf6e5a25c699e310132a1c686f6317b753 100644
--- a/game/base-system/text.twee
+++ b/game/base-system/text.twee
@@ -1801,40 +1801,6 @@
 	<</if>>
 <</widget>>
 
-<<widget "ginsecurity">>
-	<<if $statdisable is "f">>
-		<<if _args[0] is "penis_tiny">>
-			<<if $acceptance_penis_tiny lte 999>>
-				| <span class="red">+ Insecurity</span>
-			<</if>>
-		<<elseif _args[0] is "penis_small">>
-			<<if $acceptance_penis_small lte 999>>
-				| <span class="red">+ Insecurity</span>
-			<</if>>
-		<<elseif _args[0] is "penis_big">>
-			<<if $acceptance_penis_big lte 999>>
-				| <span class="red">+ Insecurity</span>
-			<</if>>
-		<<elseif _args[0] is "breasts_tiny">>
-			<<if $acceptance_breasts_tiny lte 999 and $player.gender is "f">>
-				| <span class="red">+ Insecurity</span>
-			<</if>>
-		<<elseif _args[0] is "breasts_small">>
-			<<if $acceptance_breasts_small lte 999>>
-				| <span class="red">+ Insecurity</span>
-			<</if>>
-		<<elseif _args[0] is "breasts_big">>
-			<<if $acceptance_breasts_big lte 999>>
-				| <span class="red">+ Insecurity</span>
-			<</if>>
-		<<elseif _args[0] is "pregnancy">>
-			<<if $acceptance_pregnancy lte 999>>
-				| <span class="red">+ Insecurity</span>
-			<</if>>
-		<</if>>
-	<</if>>
-<</widget>>
-
 <!-- Awareness -->
 
 <<widget "combataware">>
diff --git a/game/base-system/widgets.twee b/game/base-system/widgets.twee
index 49ba098831f8a4473b3df213146fb0fad39d6a70..6116013b0c8211dfd146184cf5fe10920f3ecebe 100644
--- a/game/base-system/widgets.twee
+++ b/game/base-system/widgets.twee
@@ -1439,7 +1439,7 @@
 				<</if>>
 			</div>
 			<<set _showCaptionText to !$options.showCaptionText>>
-			<<statbar `minArousal()` $arousal $arousalmax _showCaptionText>>
+			<<statbar `statChange.minArousal()` $arousal $arousalmax _showCaptionText>>
 			<div style="clear:both;"></div>
 		</div>
 	<</if>>
@@ -1666,7 +1666,7 @@
 			</div>
 			<div @class="($options.showCaptionText is true ? 'meter' : 'rightMeter')">
 				<<set _percent to Math.floor(($pain/100)*100)>>
-				<<set _minPercent to Math.clamp(Math.floor((minPain()/100)*100), 0, _percent)>>
+				<<set _minPercent to Math.clamp(Math.floor((statChange.minPain() / 100)*100), 0, _percent)>>
 				<<if $pain gte 100 and $willpowerpain is 0>>
 					<<set _statColor to "redbar">>
 				<<elseif $pain gte 80>>
@@ -1683,7 +1683,7 @@
 					<<set _statColor to "greenbar">>
 				<</if>>
 				<div @class="_statColor" @style="'width:' + _percent + '%'"></div>
-				<<if minPain()>>
+				<<if statChange.minPain()>>
 					<<if _minPercent>>
 						<div @class="_statColor + ' meterMin'" @style="'width:' + _minPercent + '%'"></div>
 					<</if>>
diff --git a/game/flavour-text-generators/seasonal-events.twee b/game/flavour-text-generators/seasonal-events.twee
index e64c1174f82a4e111b1aec8490f05e5f154699ff..6e97e977c5441c716dbf900ccd8a293c799a5886 100644
--- a/game/flavour-text-generators/seasonal-events.twee
+++ b/game/flavour-text-generators/seasonal-events.twee
@@ -567,6 +567,9 @@
 							You accidentally walk through a pile of leaves. A nearby <<person>> raking leaves looks over and yells at you. You hurry on. <<stress 3>><<gstress>>
 							<<endevent>>
 						<</addinlineevent>>
+						<<addinlineevent "autumn_park_4">>
+							A leaf on the wind <<if !$worn.face.type.includes("naked")>> lands on your cheek. <<else>> gets stuck in your $worn.face.name.<</if>> You pluck it off.<<if currentSkillValue('science') gte 500>> It's a maple leaf. The stem is also connected to one of the distinctive <<print either("samaras", "maple keys", "helicopters", "whirlybirds", "polynoses")>> containing the seeds.<<else>>You're not sure what it was, but it was huge and almost covered your whole face.<</if>>
+						<</addinlineevent>>
 					<</if>>
 				<<case "forest">>
 					<<addinlineevent "autumn_forest_1">>
@@ -618,6 +621,10 @@
 			<<addinlineevent "summer_anywhere_3" 0.5>>
 				A brutal wave of heat washes over you. You take a moment to wipe the sweat from your head. <<stress 1>><<gstress>>
 			<</addinlineevent>>
+			<<addinlineevent "summer_anywhere_4">>
+				<<generate1>><<person1>>
+				You overhear a <<person>> talking on <<his>> cell phone about <<his>> upcoming holiday trip. <<if $trauma lte ($traumamax / 5) * 3>> Hearing <<his>> obvious enthusiasm for the trip makes you smile. <<stress -1>><<lstress>><<else>>You resent hearing about a trip you'll never be able to take, stuck in this town like you are. <<stress 1>><<gstress>><</if>>
+			<</addinlineevent>>
 			<<if ["town", "park"].includes($location) and Time.hour gte 7 and Time.hour lt 21 and playerIsPregnant() and playerAwareTheyArePregnant()>>
 				<<addinlineevent "summer_pregnant_watch">>
 					You see a group of kids playing. Most are running and squealing as they spray each other with water guns, but a few are lazing on the grass. Occasionally, their friends cool them off with a blast of water, causing them to giggle.
diff --git a/game/overworld-forest/loc-cabin/hunt.twee b/game/overworld-forest/loc-cabin/hunt.twee
index d32c086da16320aef696d96b10a677611c27dc47..99742e2fbfa599ef3fb0d0b899004e67bb954a92 100644
--- a/game/overworld-forest/loc-cabin/hunt.twee
+++ b/game/overworld-forest/loc-cabin/hunt.twee
@@ -692,19 +692,33 @@ Without warning, you're dropped onto a bed. Strong arms pin you down, preventing
 		You pant heavily into your gag, feeling a frustrated yearning in your <<genitals>>. Eden seems to have taken pity on you, however, and you soon feel <<his>> hands slipping down towards your crotch.
 		<br><br>
 
-		<<if $player.penisExist and $player.vaginaExist>>
+		<<if $player.penisExist and $player.vaginaExist and !playerChastity()>>
 			<<He>> thoughtfully runs <<his>> fingers down the length of your <<penis>> while <<his>> thumb gently rubs your <<pussy>>. "Now, which do I play with?"
 			<<set _edenHermChoice to random(0, 1)>>
 			<br>
 		<</if>>
-		<<if _edenHermChoice is 1 or !$player.vaginaExist>>
+		<<if $worn.genitals.name is "chastity parasite">>
+			<<His>> rough hand squeezes your chastity parasite.
+			<br>
+			"Hold still," <<he>> whispers as <<he>> struggles to keep your hips in place. "It'll be over soon."
+			<br>
+			The waves of sensation bring you over the edge. You scream into your gag.
+			<<set $arousal to 10000>>
+			<<orgasm>>
+			You hear a satisfied chuckle as your orgasm subsides.
+		<<elseif playerChastity()>>
+			<<He>> slides <<his>> finger over your $worn.genitals.name.
+			<br><br>
+			"I'll get this off you one day," <<he>> whispers. "Don't you worry."
+		<<elseif _edenHermChoice is 1 or !$player.vaginaExist>>
 			<<His>> rough hand lightly grips your cock and begins stroking up and down. Your glans is teased, causing your hips to buckle. Eden pins you down as you do so.
 			<br>
 			"Hold still," <<he>> whispers. "It'll be over soon."
 			<br>
 			The incredible sensation brings you over the edge. You scream into your gag.
 			<<set $arousal to 10000>>
-			<<if $arousal gte $arousalmax>><<orgasm>><</if>>
+			<<orgasm>>
+			You hear a satisfied chuckle as your orgasm subsides.
 		<<else>>
 			<<His>> rough hand traces around your outer walls, until Eden suddenly jams <<his>> fingers inside your <<pussy>>. Your breathing gets a bit heavier. Emboldened by your signs of arousal, <<he>> begins to knead your clit. The sensation causes your legs to twitch. You can't help but begin to struggle. Eden pins you down as you do so.
 			<br>
@@ -712,9 +726,9 @@ Without warning, you're dropped onto a bed. Strong arms pin you down, preventing
 			<br>
 			The incredible sensation brings you over the edge. You scream into your gag.
 			<<set $arousal to 10000>>
-			<<if $arousal gte $arousalmax>><<orgasm>><</if>>
+			<<orgasm>>
+			You hear a satisfied chuckle as your orgasm subsides.
 		<</if>>
-		You hear a satisfied chuckle as your orgasm subsides.
 		<br><br>
 	<</if>>
 
diff --git a/game/overworld-town/loc-home/main.twee b/game/overworld-town/loc-home/main.twee
index 9d6c277d082171ef0671b19c0fdddb00c12878b6..fbc2189dc8b063e725735179717aced76bc1aeec 100644
--- a/game/overworld-town/loc-home/main.twee
+++ b/game/overworld-town/loc-home/main.twee
@@ -2308,6 +2308,19 @@ You are in the main hall of the orphanage.
 
 	<<link [[Next|Orphanage]]>><<endevent>><</link>>
 
+<<elseif Time.dayState isnot "night" and $robin.abandoned is 1 and $robinmissing is 0 and C.npc.Robin.init is 1>>
+	<<npc Robin>><<person1>>
+	<<unset $robin.abandoned>>
+	A pair of orphans approach you to let you know that Robin has come back from the docks. They say that <<he>> headed straight to <<his>> room. <<He>> hasn't left for hours now. <<lhope>><<hope -1>>
+	<br><br>
+
+	As you pass by <<his>> room, you see the door cracked open, as if Robin was in too much of a hurry to shut it properly. There's no note on the door, but you hear sobbing from inside. Robin is sitting on <<his>> bed, crying and hugging <<his>> knees.
+	<br><br>
+
+	<<link [[Comfort|Docks_Robin Comfort]]>><<npcincr Robin love 1>><<npcincr Robin trauma -1>><</link>><<glove>><<lrtrauma>><br>
+	<<link [[Ignore|Docks_Robin Ignore]]>><</link>>
+
+
 <<elseif Time.days gte 1 and _robin.init is 0 and Time.hour gte 7 and Time.hour lte 20 and !(Time.schoolDay and between(Time.hour, 8, 15))>>
 	<<set $robindebt to 0>><<set $robindebtlimit to 5>>
 	<<npc Robin>><<initnpc Robin>><<person1>>You hear a voice shout behind you. "Hey!" It's Robin. <<Hes>> another resident at the orphanage. <<Hes>> always looked up to you, despite being about the same age. <<He>> runs towards you and fails to slow down in time, colliding with you and almost falling over. You hold <<his>> arm to steady <<him>>. "Thanks," <<he>> says, looking embarrassed though still smiling.
diff --git a/game/overworld-town/loc-school/widgets-events.twee b/game/overworld-town/loc-school/widgets-events.twee
index 6ca3a90c366241eec157f5f71f4523363a2f702b..e9d75e83044c1c59c0be00f9a6ebe5479dfb18a5 100644
--- a/game/overworld-town/loc-school/widgets-events.twee
+++ b/game/overworld-town/loc-school/widgets-events.twee
@@ -2029,7 +2029,7 @@
 		<</if>>
 		<br><br>
 
-		<<link [[Comfort (0:05)|Bully Pantsing Robin]]>><<npcincr "Robin" trauma -2>><</link>><<llrtrauma>>
+		<<link [[Comfort (0:05)|Bully Pantsing Robin]]>><<npcincr "Robin" trauma -2>><<pass 5>><</link>><<llrtrauma>>
 		<br>
 		<<link [[Ignore|Hallways]]>><<endevent>><<set $eventskip to 1>><<stress 6>><</link>><<gstress>>
 
diff --git a/game/overworld-town/loc-street/events.twee b/game/overworld-town/loc-street/events.twee
index 207a80ce7fd11d6ca5724b3f8ddc3dc3c392f600..cb476780082c5fc93576e0de975ea8a54929644d 100644
--- a/game/overworld-town/loc-street/events.twee
+++ b/game/overworld-town/loc-street/events.twee
@@ -11679,7 +11679,7 @@ You and Whitney walk into the shopping centre hand in hand, almost being pulled
 As you enter the shop, Whitney takes you to one of the changing rooms. "So the plan is, you're going to wait here, while I'm going to find something for you to try on."
 <br><br>
 
-<<link [[Next|Whitney Shopping Centre Clothes 2]]>>
+<<link [[Next (0:05)|Whitney Shopping Centre Clothes 2]]>>
 	<<set $whitneyClothesGender to $player.gender_appearance is "f" or ($whitneyskirtcheck and $forcedcrossdressingdisable is "f") ? "f" : "m">>
 	<<pass 5>>
 	<<undress "whitneyShopping">>
@@ -11709,7 +11709,7 @@ It's not long before Whitney is back<<if $whitneyClothingChoice.length gte 2>> a
 <<if $whitneyClothingChoice.length gte 4>>
 	<<link [[Try something else|Whitney Shopping Centre Clothes 3]]>><<whitneyShoppingPickerChoice>><<unset $whitneyRng>><<set $phase to 1>><</link>>
 <<else>>
-	<<link [[Try something else|Whitney Shopping Centre Clothes 2]]>><<pass 5>><</link>>
+	<<link [[Try something else (0:05)|Whitney Shopping Centre Clothes 2]]>><<pass 5>><</link>>
 <</if>>
 
 :: Whitney Shopping Centre Clothes 2 Thank
@@ -11869,7 +11869,7 @@ You and Whitney walk into the shopping centre hand in hand, almost being pulled
 <</if>>
 <<He>> smirks at you. "You'll end up as my perfect slut once we're done."
 <br><br>
-As you enter the shop and forced to sit in on a stool, you hear Whitney whisper something to the makeup artist.
+As you enter the shop and forced to sit in a stool, you hear Whitney whisper something to the makeup artist.
 <br><br>
 
 <<link [[Next|Whitney Shopping Centre Cosmetics 2]]>><</link>>
@@ -11904,7 +11904,7 @@ the artist says after starting on your lips.
 	<<set $whitneyCrossdressMakeup to 0>>
 <</if>>
 
-After some time, you find youself _chosenColour makeup applied and more of it to take away with you.
+After some time, you find yourself _chosenColour makeup applied and more of it to take away with you.
 <br><br>
 All the while, Whitney has a faint smile on <<his>> face. "Looking amazing. Let's go, slut, I've got places to be."
 <br><br>
diff --git a/game/overworld-town/special-kylar/main.twee b/game/overworld-town/special-kylar/main.twee
index 0f3bf5c31cf3a58ea766ff27a7d4a96fce0d50b3..47b0b09004c9a77f7926d2e87bd69037d264b64c 100644
--- a/game/overworld-town/special-kylar/main.twee
+++ b/game/overworld-town/special-kylar/main.twee
@@ -1753,9 +1753,10 @@ pushing you down to the bed.
 
 <<set $outside to 0>><<effects>><<run statusCheck("Kylar")>>
 <<if $enemyarousal gte $enemyarousalmax>>
-	<<ejaculation>><<npcincr Kylar lust -20>><<lllust>>
+	<<ejaculation>>
 
-	<<He>> lies on top of you for a few moments, eyes closed in contentment.
+	<<He>> lies on top of you for a few moments, eyes closed in contentment.<<npcincr Kylar lust -20>><<lllust>>
+	<br><br>
 	<<if $orgasmcurrent is 0 and !playerChastity()>>
 		<<if _kylarStatus.includes("Rage")>>
 			After a few seconds, <<he>> backs up until <<hes>> facing your <<genitals>>. "You didn't cum," <<he>> murmurs. "Was I... not good enough?" <<He>> shakes <<his>> head violently. "I'll make up for it. I'll show you."
@@ -1776,13 +1777,14 @@ pushing you down to the bed.
 	<<endcombat>>
 
 	<<npc Kylar>><<person1>>
-
-	<<if Weather.precipitation isnot "none">>
-		<<link [[Walk to the arcade together (0:15)|Kylar Arcade Walk]]>><<set $phase to 0>><<pass 15>><</link>>
-		<br>
-	<<else>>
-		<<link [[Walk to the park together (0:15)|Kylar Park Walk]]>><<set $phase to 0>><<pass 15>><</link>>
-		<br>
+	<<if $exposed lte 0>>
+		<<if Weather.precipitation isnot "none">>
+			<<link [[Walk to the arcade together (0:15)|Kylar Arcade Walk]]>><<set $phase to 0>><<pass 15>><</link>>
+			<br>
+		<<else>>
+			<<link [[Walk to the park together (0:15)|Kylar Park Walk]]>><<set $phase to 0>><<pass 15>><</link>>
+			<br>
+		<</if>>
 	<</if>>
 	<<link [[Lie down in bed|Kylar Orphanage Nap]]>><</link>>
 	<br>
diff --git a/game/overworld-town/special-robin/main.twee b/game/overworld-town/special-robin/main.twee
index 4582f8d4e14f50bcaaf541eb66b612a7dade7286..30c78ca2d2ac39bc04f5ce813211ec215881c7fd 100644
--- a/game/overworld-town/special-robin/main.twee
+++ b/game/overworld-town/special-robin/main.twee
@@ -976,7 +976,7 @@ Robin hesitates for a few seconds before looking directly at you. You don't cove
 <<robinoptions>>
 
 :: Robin Room Naked Put
-<<effects>><<storeon "Robin's Room">>
+<<effects>>
 
 You take your clothes from Robin's bed and dress yourself. Robin looks in the opposite direction until you're finished.
 <br><br>
@@ -1845,7 +1845,7 @@ They pause for a moment, then burst into laughter. "Sure thing," the <<person1>>
 <br>
 <<ind>><<link [[Fight|Docks_Robin Fight]]>><<set $fightstart to 1>><</link>>
 <br>
-<<mericon>><<link [[Leave|Mer Street]]>><<endevent>><</link>>
+<<mericon>><<link [[Leave|Docks_Robin Leave]]>><</link>>
 <br>
 
 :: Docks_Robin Get Help
@@ -2047,6 +2047,14 @@ Bailey shoves Robin into the back seat, and drives away.
 <<link [[Next|Mer Street]]>><</link>>
 <br>
 
+:: Docks_Robin Leave
+<<set $outside to 1>><<set $location to "docks">><<effects>>
+<<npc Robin>><<person1>><<set $robin.abandoned to 1>>
+Robin watches as you leave <<him>> on the table. <<His>> soulless eyes stare at you as the last glimmer of hope leaves <<him>>. <<llllove>><<npcincr Robin love -10>><<gggrtrauma>><<npcincr Robin trauma 10>>
+<br><br>
+
+<<link [[Next|Mer Street]]>><<endevent>><</link>>
+
 :: Bailey's Office
 <<set $outside to 0>><<set $location to "home">><<effects>>
 
@@ -2482,6 +2490,34 @@ The <<person1>><<person>> and <<person2>><<person>> lift you onto the railing. T
 
 <</if>>
 
+:: Docks_Robin Comfort
+<<set $outside to 0>><<set $location to "home">><<effects>>
+/* I WILL kill whoever chose this naming convention for this string of passages. I should fix this later. */
+<<npc Robin 1>><<person1>>
+
+You enter Robin's room and sit down next to <<him>>. <<He>> looks at you, eyes welling up with tears. <<His>> expression is wary, but when you give <<him>> a hug, <<he>> slowly calms down.
+<br><br>
+
+<<if $speech_attitude is "meek">>
+	You put your head on <<his>> lap. "I'm sorry," you say. "I-I was so scared, seeing you like that, I d-didn't know what to do."
+	<br><br>
+	Robin sniffles and nods. <<He>> seems to have calmed down, but it's clear <<he>>'ll still need time to recover. <<He>> pets your head gently for a bit. It seems to soothe <<him>>, since <<his>> breathing eventually steadies.
+<<else>>
+	You take <<his>> head gently and pull it towards your chest, stroking <<his>> hair in silence until <<his>> breathing steadies.
+<</if>>
+<<He>> manages a small "thank you" before asking you to leave.
+<br><br>
+
+<<link [[Leave|Orphanage]]>><<set $fromRobinRoom to true>><<set $robin_kicked_out to true>><<set $daily.robin.kickedOut to true>><<endevent>><</link>>
+
+:: Docks_Robin Ignore
+<<set $outside to 0>><<set $location to "home">><<effects>>
+You decide it's better to just walk away. You have yourself to worry about.
+<br><br>
+
+<<link [[Next|Bedroom]]>><<set $robin_kicked_out to true>><<set $daily.robin.kickedOut to true>><<endevent>><</link>>
+
+
 :: Robin Note
 <<set $outside to 0>><<set $location to "home">><<effects>>
 
diff --git a/game/overworld-town/special-robin/widgets.twee b/game/overworld-town/special-robin/widgets.twee
index b8bdcb139dd66399e6a5fb2ed3cbf6d69e59c2b9..c56a6a8d467ab3f672b12ab28b938f0658729a3f 100644
--- a/game/overworld-town/special-robin/widgets.twee
+++ b/game/overworld-town/special-robin/widgets.twee
@@ -556,7 +556,7 @@
 		<<elseif _store_check is 1>>
 			Your clothes lay on Robin's bed.
 			<br>
-			<<dressasyouwereicon>><<link [[Put on your clothes|Robin Room Naked Put]]>><<handheldon 1>><</link>>
+			<<dressasyouwereicon>><<link [[Put on your clothes|Robin Room Naked Put]]>><<handheldon 1>><<storeon "Robin's Room">><</link>>
 			<br><br>
 		<</if>>
 
diff --git a/game/overworld-town/special-sydney/main.twee b/game/overworld-town/special-sydney/main.twee
index 9b33d33c2acf1afb3fdd74a2c75a74632da492db..c46cec19e7392267da0b8a9c6b0dfb9b23d2c7ab 100644
--- a/game/overworld-town/special-sydney/main.twee
+++ b/game/overworld-town/special-sydney/main.twee
@@ -195,8 +195,64 @@
 			Robin looks down in shame. "I... might have used my schoolbag as a projectile weapon against some old creep that was putting <<nnpc_his "Avery">> hands on <<phim>>." <<nnpc_He "Robin">> points to you, and you nod in confirmation.
 			<br><br>
 			"As noble as that sounds, I'm afraid there are no excuses. You know the rules." Robin leans forward, and Sydney uncaps a marker. "<span class="purple">Book Criminal >:(</span>" has been written on Robin's forehead. <<nnpc_He "Robin">> looks annoyed, but quickly cheers up as the three of you chat. Robin waves at you both as <<nnpc_he "Robin">> leaves. <<stress -3>><<lstress>>
+		<<elseif $balloonStand.robin.status is "sabotaged" and !$sydneySeen.includes("robinsabotage")>>
+			<<set $sydneySeen.pushUnique("robinsabotage")>>
+			<<if $robin.timer.hurt gte 1>>
+				You're interrupted when a book lands on the counter hard enough to startle the other students in the library. It's a history textbook, and you look to see who's dropped it. It's Robin, who still looks upset at you.
+				<br><br>
+				<<nnpc_He "Robin">> averts <<nnpc_his "Robin">> eyes and addresses Sydney. "I'm returning this. I'd like to renew it, but I can't afford it right now," <<nnpc_he "Robin">> says, giving you a meaningful, hurt look. <<ggstress>><<stress 12>>
+				<br><br>
+				Sydney looks worried. "Uh, okay. One moment." <<He>> takes the book and scans it in. "As always, it's on time. Thanks for that," <<he>> says.
+				<br><br>
+				"Yeah, sure. I'll see you another day when I have money and can rent again," Robin says, <<nnpc_his "Robin">> expression softening slightly.
+				<br><br>
+				"Yeah. See you then," Sydney says, perking up a bit. Robin nods and leaves with barely another look at you. "What was that about?" Sydney asks.
+				<br><br>
+				You shake your head and shrug. You decide it's better not to tell <<him>> about the balloon stand fiasco.
+			<<elseif $balloonStand.robin.knows is true>>
+				You're interrupted by a student showing up. It's Robin, and <<nnpc_he "Robin">> has a book with <<nnpc_him "Robin">>. "Hey, just here to return this. I wanted to renew, but I couldn't manage it this time," Robin says with a smile.
+				<br><br>
+				"Sure thing. Let me just scan it in for you real quick," Sydney says, taking the book from <<nnpc_him "Robin">>.
+				<br><br>
+				Robin turns to you and smiles. "About the balloon stand... thanks for telling me. It was hard, but now I think I'm glad you told me," <<nnpc_he "Robin">> says with a slight shrug. "I think we're better friends now because we've been through something rough together," <<nnpc_he "Robin">> adds. <<lstress>><<stress -6>>
+				<br><br>
+				Sydney finishes checking the book and scanning it in. <<He>> looks back at Robin with a smile. "It all checks out. Thanks again for being so punctual! I hope you can renew one day too," <<he>> says cheerfully.
+				<br><br>
+				"Yeah, here's hoping things get better for my stand! I'm going to head back to the classroom now," Robin says, waving to the two of you before leaving again.
+				<br><br>
+				"<<nnpc_He "Robin">> really does try, and I think that's admirable," Sydney says as <<he>> takes <<his>> seat again, pulling a book from the return bin.
+			<<else>>
+				Your chat is cut off by a student shuffling up to the counter. It's Robin, and <<nnpc_hes "Robin">> carrying a history textbook under <<nnpc_his "Robin">> arm. <<nnpc_He "Robin">> seems distracted, as though he's lost in thought.
+				<br><br>
+				Sydney clears <<his>> throat to get <<nnpc_his "Robin">> attention, and <<nnpc_he "Robin">> jumps a little."Sorry, I'm just returning this..." <<nnpc_he "Robin">> says, still not quite present. "I hope it's not late," <<nnpc_he "Robin">> adds sheepishly.
+				<br><br>
+				Sydney takes the book. <<He>> scans it and frowns. "I'm sorry Robin, but it's a day late," <<he>> says. "You're always so on time, what happened?" <<he>> asks, uncapping <<his>> red pen.
+				<br><br>
+				Robin shakes <<nnpc_his "Robin">> head. "I don't really know. My stand was doing fine for the longest time, and then suddenly, I'm just not getting customers anymore. I can't figure out what I'm doing wrong."<<ggstress>><<stress 12>>
+				<br><br>
+				"Well, I'm sorry to hear that, but you know the rules, Robin. I can't make exceptions, even for you and your perfect record," Sydney says regretfully, leaning forward to write on Robin's forehead."<span class="purple">Book Criminal >:(</span>"
+				<br><br>
+				Robin looks dejected, but soon cheers up as the three of you chat. <<nnpc_He "Robin">> still seems distracted, but <<nnpc_he "Robin">> waves at you both as <<nnpc_he "Robin">> leaves.
+			<</if>>
+		<<elseif $balloonStand.robin.status is "helped" and !$sydneySeen.includes("robinhelp")>>
+			<<set $sydneySeen.pushUnique("robinhelp")>>
+			You're cut off by a student approaching the counter. It's Robin, holding a history textbook. <<nnpc_He "Robin">> smiles upon seeing you. "I'm here to renew this," Robin says. <<nnpc_He "Robin">> slides the book across the counter.
+			<br><br>
+			"It's good to see you're renewing this time. You usually return them and check them out again a week or two later," Sydney says. <<He>> flips through the book for a few seconds, and seemingly satisfied, places it back on the counter. "That'll be £15 please," <<he>> says with a smile.
+			<br><br>
+			Robin passes the money across the counter. "Yeah, I've been making more sales lately, so I can actually renew this time!" <<nnpc_He "Robin">>
+			<<if $balloonStand.robin.knows>>
+				turns to you with a smile. "Thank you again. I don't know what I'd do without you in my life."
+			<<else>>
+				sounds excited.
+			<</if>>
+			<<llstress>><<stress -12>>
+			<br><br>
+			"That's great news!" Sydney says as <<he>> takes the money and stuffs it in the register. "I hope things keep improving for you." <<He>> matches Robin's cheerful energy, even as <<he>> stifles a yawn.
+			<br><br>
+			"Yeah, me too." Robin beams and waves at you both as <<nnpc_he "Robin">> leaves. Sydney smiles. "It's nice to see <<nnpc_hes "Robin">> doing well," <<he>> says as he turns back to you. <<He>> sits back down in the desk chair and picks up another returned book for processing.
 		<<else>>
-			You're cut off by a student approaching the counter. It's Robin, holding a history textbook. <<nnpc_He "Robin">> smiles upon seeing you. "Hey! Just returning this one."
+			You're cut off by a student approaching the counter. It's Robin, holding a history textbook. <<nnpc_He "Robin">> smiles upon seeing you. "Hey! Just <<= $balloonStand.robin.status is "helped" ? "renewing" : "returning">> this one."
 			<br><br>
 			Sydney lights up. "I can always count on you to be punctual, Robin. Keep up that perfect record." The three of you begin chatting for some time. Robin waves at you both as <<nnpc_he "Robin">> leaves. <<stress -3>><<lstress>>
 		<</if>>
@@ -2907,6 +2963,55 @@ Sydney stretches and yawns.
 	<br>
 <</if>>
 
+:: Sydney Library Transformation
+<<set $outside to 0>><<set $location to "school">><<schooleffects>><<effects>><<run statusCheck("Sydney")>>
+
+<<if $phase is 4>>
+	You wordlessly bump your head against Sydney's shoulder. <<He>> flinches when <<he>> notices your horns.
+	<<if _sydneyStatus.includes("corrupt")>>
+		"Hey, careful. You could have poked my eye out."
+	<<else>>
+		"I didn't know they made such pointy headbands... They aren't sharp, are they?"
+	<</if>>
+	<<He>> gently pats your head, and you give a happy moo, much to <<his>> confusion.
+<<elseif $phase is 3>>
+	You sit on the desk in front of Sydney and begin to chirp a birdsong, <<= $daily.sydney.tf gte 1 ? "keeping your voice low" : "only to get quickly, and harshly, shushed by the librarian">>.
+	<<if _sydneyStatus.includes("corrupt")>>
+		"I wonder how else I can make you sing," Sydney muses.
+	<<else>>
+		"It <<= $daily.sydney.tf gte 1 ? "sounds lovely. Thank you for sharing it with me" : "sounded lovely but... you should show me somewhere where we can be louder">>," Sydney whispers.
+	<</if>>
+<<elseif $phase is 2>>
+	You nuzzle into Sydney's arm affectionately. "<<= $daily.sydney.tf ? "Well, hello again," : "H-hey!">>" <<he>> says before placing a hand on your head and gently scritching your ears. You purr and relax as he pets you, until <<he>> removes <<his>> hand.
+	<<if _sydneyStatus.includes("corrupt")>>
+		"Those ears make you look really cute, you know."
+	<<else>>
+		"It must feel weird, wearing those all the time."
+	<</if>>
+<<elseif $phase is 1>>
+	You sit on the floor beside Sydney and nudge <<his>> thigh. <<He>> gently pets your head.
+	<<if _sydneyStatus.includes("corrupt")>>
+		"You <<= $daily.sydney.tf gte 1 ? "still can" : "could">> do something more while you're down there, you know," <<he>> says with a giggle. You <<= $speech_attitude is "bratty" ? "smirk" : "blush">> as you stand back up.
+	<<else>>
+		<<= $daily.sydney.tf gte 1 ? "\"You really don't have to sit on the floor,\" <<he>> reminds you" : "\"You don't need to sit down there, you know,\" <<he>> says">>, smiling down at you. You return <<his>> smile and stand back up.
+	<</if>>
+<<else>>
+	You sit on the table beside Sydney and swish your tail for <<him>>. <<He>> takes it into <<his>> hand and gently fluffs it, sending a shiver of pleasure up your spine.
+	<<if _sydneyStatus.includes("corrupt")>>
+		"<<= $daily.sydney.tf gte 1 ? "You'll have to show me where you got that plug" : "Is this a butt plug? I don't think I've seen these at <<sydneymum>>'s shop">>,"
+	<<else>>
+		"It's so fluffy!"
+	<</if>>
+	<<he>> says, stroking it a bit more before letting go. <<garousal>><<arousal 100 "bottom">>
+<</if>>
+<br><br>
+<<if !$daily.sydney.tf>>
+	<<set $daily.sydney.tf to 0>>
+<</if>>
+<<set $daily.sydney.tf++>>
+
+<<sydneyOptions>>
+
 :: Canteen Lunch Sydney
 <<set $outside to 0>><<set $location to "school">><<schooleffects>><<effects>><<run statusCheck("Sydney")>>
 <<npc "Sydney">><<person1>>
diff --git a/game/overworld-town/special-sydney/temple.twee b/game/overworld-town/special-sydney/temple.twee
index 79e9de2c38ae970ccd7aa6ad608303946ba3819f..82cdca8053b7215cda73a421142447f0695bbbf5 100644
--- a/game/overworld-town/special-sydney/temple.twee
+++ b/game/overworld-town/special-sydney/temple.twee
@@ -6,12 +6,7 @@
 <<elseif $sydneyChastityRemoveIntro>>
 	You sit next to Sydney. <<He>> looks anxious.
 <<elseif $phase is 1>>
-	You sit next to Sydney on the pew. <<He>> opens one eye, and smiles at you before returning to <<his>> prayer.
-	<<if $temple_spear_mission is 1 and $sydneyromance is 1 and $sydney_spear_talk isnot 1>>
-		You notice that <<his>> hands are slightly fidgeting.
-		<br><br>
-		<<link [[Ask what happened|Sydney Temple Spear Ask]]>><<set $sydney_spear_talk to 1>><</link>>
-	<</if>>
+	You sit next to Sydney on the pew. <<He>> opens one eye, and smiles at you before returning to <<his>> prayer. <<if $temple_spear_mission is 1 and !$sydneySeen.includes("spearMission") and $sydneyromance is 1>>You notice that <<his>> hands are fidgeting slightly.<</if>>
 <<else>>
 	Sydney's eyes are closed in quiet supplication.
 <</if>>
@@ -2958,44 +2953,55 @@ You _respond your thanks to <<him>>, and <<he>> returns to <<his>> duties.
 <<link [[Next|Temple]]>><</link>>
 <br>
 
-:: Sydney Temple Spear Ask
-<<temple_effects>><<effects>>
+:: Sydney Temple Spear
+<<set $outside to 0>><<set $location to "temple">><<temple_effects>><<effects>>
+
 <<if $speech_attitude is "meek">>
-	“A-are you okay?” you whisper worriedly.
+	"A-are you okay?" you whisper worriedly.
 <<elseif $speech_attitude is "bratty">>
-	“Something wrong? Is someone bothering you?” you ask.
+	"Something wrong? Is someone bothering you?" you ask.
 <<else>>
-	“What’s wrong?” you whisper. “You don’t really look okay right now.”
+	"What's wrong?" you whisper. "You don't really look okay right now."
 <</if>>
 <br><br>
-“You noticed?” Sydney opens <<his>> eyes and sighs. "I heard Jordan telling you to retrieve something. I believe you can do it... but I don't know why I feel so... scared...?" <<He>> sighs, <<his>> gaze downcast, and looks at <<his>> hands resting on <<his>> knees. "I just... ah... why does it have to be you, among all the other initiates here?"
+"You noticed?" Sydney opens <<his>> eyes and sighs. "I heard Jordan telling you to retrieve something. I believe you can do it... but I don't know why I feel so... scared...?" <<He>> sighs again, <<his>> gaze downcast, and looks at <<his>> hands resting on <<his>> knees. "I just... ah... why does it have to be you, among all the other initiates here?"
 <br><br>
-<<link [[Reassure Sydney|Sydney Temple Spear Response]]>><<set $phase to 1>><</link>><br>
-<<link [[Stay silent|Sydney Temple Spear Response]]>><<set $phase to 2>><</link>>
 
-:: Sydney Temple Spear Response
-<<run statusCheck("Sydney")>><<sydneySchedule>><<temple_effects>><<effects>>
+<<link [[Reassure Sydney|Sydney Temple Spear 2]]>><<set $phase to 1>><</link>><br>
+<<link [[Stay silent|Sydney Temple Spear 2]]>><<set $phase to 0>><</link>>
+
+:: Sydney Temple Spear 2
+<<set $outside to 0>><<set $location to "temple">><<temple_effects>><<effects>><<run statusCheck("Sydney")>>
+<<set $sydneySeen.pushUnique("spearMission")>>
+
 <<if $phase is 1>>
 	<<if $speech_attitude is "meek">>
-		"Don't be so sad..." You gently hold Sydney's hand while smiling reassuringly, "I'll definitely be fine there."
+		"Don't be so sad..." You gently hold Sydney's hand and give <<him>> a reassuring smile. "I'll be fine there."
 	<<elseif $speech_attitude is "bratty">>
-		"Why worry so much?" You pat Sydney's shoulder while smiling confidently. "I'll make sure to beat down anyone who stands in my way."
+		"You got nothing to worry about." You pat Sydney's shoulder and give <<him>> a confident smile. "I'll make sure to beat down anyone who stands in my way."
 	<<else>>
-		"Don't worry." You gently hold Sydney's hand. "I'll surely get it safely."
+		"Don't worry." You gently hold Sydney's hand. "I'm sure I'll get it safely."
 	<</if>>
 	<br><br>
-	<<if _sydneyStatus.includes("corrupt") or _sydneyStatus.includes("corruptLust")>>
-		"How can I not worry when you're in a dangerous situation and I, as your beloved, can't even help or protect you in the slightest!?" Sydney looks at you with frustration, <<his>> eyes tearing up a bit. "I can't imagine what it'll be like when you leave. What if something happens to you there? The worst case scenario, you could… you..."
+
+	<<if _sydneyStatus.includes("corrupt")>>
+		"How can I not worry when you're in a dangerous situation and I, as your beloved, can't even help or protect you in the slightest!?" Sydney looks at you with frustration, <<his>> eyes tearing up a bit. "I can't imagine what it'll be like when you leave. What if something happens to you there? The worst case scenario, you could... you..."
 	<<else>>
-		"I... I know.. but I'm still very worried..." Sydney looks at you with a worried gaze, <<his>> eyes tearing up a bit. "I don't know how long you'll be gone, I don't know if you'll be okay there, I don't know if... if you..."
+		"I... I know... but I'm still very worried." Sydney looks at you with a worried gaze, <<his>> eyes tearing up a bit. "I don't know how long you'll be gone, I don't know if you'll be okay there, I don't know if... if you..."
 	<</if>>
+	<<He>> stops <<himself>> and takes a deep breath.
 <<else>>
 	You just sit there silently, staring at your hands resting on your knees. You understand that taking such a task could be very dangerous, but Jordan has entrusted you. You can't back down now.
 <</if>>
 <br><br>
-"...S-sorry, I'm overthinking too much," Sydney says with a trembling tone, trying to calm <<his>> erratic breathing while wiping both his eyes. "I just... worry so much about you, your safety, whatever it is...." Before you try to answer, Sydney looks at you with a smile. You're not sure if that smile is reassuring or worried. "Just... make sure you're okay when you go, alright...? I'll be waiting for your return when you succeed."
+
+"...S-sorry, I'm overthinking things," Sydney says with a trembling tone, trying to calm <<his>> erratic breathing. <<He>> wipes both his eyes. "I just... worry so much about you, your safety..." Before you can answer, Sydney looks up you with a smile. You're not sure if that smile is reassuring or worried. "Just... make sure you're okay when you go, alright...? I'll be waiting for your return when you succeed."
 <br><br>
+
 You nod. Sydney heaves a sigh of relief once again before returning to <<his>> position to pray.
 <br><br>
+
 <<endevent>><<npc "Sydney">><<person1>>
-<<sydneyOptions>>
\ No newline at end of file
+<<sydneyOptions>>
+
+
diff --git a/game/overworld-town/special-sydney/widgets.twee b/game/overworld-town/special-sydney/widgets.twee
index 5ecb03ee683e076f7c4c56543755e6d0aee3dffa..673d1ea5461551c9e8f9e3544a5e00f53561ee57 100644
--- a/game/overworld-town/special-sydney/widgets.twee
+++ b/game/overworld-town/special-sydney/widgets.twee
@@ -634,7 +634,10 @@
 			<br>
 		<</if>>
 	<</if>>
-
+	<<if $location is "temple" and $temple_spear_mission is 1 and !$sydneySeen.includes("spearMission") and $sydneyromance is 1>>
+		<<askicon>><<link [["Ask " + $NPCList[0].pronouns.him + " what's on " + $NPCList[0].pronouns.his + " mind"|Sydney Temple Spear]]>><<handheldon 1>><</link>>
+		<br>
+	<</if>>
 	<<if $location is "school">>
 		<<if $sydneyChastityRemoveIntro is 1>>
 			<<socialiseicon>><<link [[Chat (0:15)|Sydney Chastity Remove Intro]]>><<set $sydneyChastityRemoveIntro to 2>><<pass 15>><<handheldon 1>><</link>>
@@ -676,6 +679,23 @@
 		<<walkicon>><<link [[Ask to go somewhere together|Sydney Walk]]>><<handheldon 1>><</link>>
 		<br>
 	<</if>>
+	<<set _tf to checkTFparts()>>
+	<<if C.npc.Sydney.love gte 10 and $fox gte 6 and _tf.foxTail>>
+		<<ind>><<link [[Swish tail (0:10)|Sydney Library Transformation]]>><<pass 10>><<trauma -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 0>><</link>><<fox>><<ltrauma>><<glove>>
+		<br>
+	<<elseif C.npc.Sydney.love gte 10 and $wolfgirl gte 6>>
+		<<ind>><<link [[Nudge (0:10)|Sydney Library Transformation]]>><<pass 10>><<stress -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 1>><</link>><<wolfgirl>><<lstress>><<glove>>
+		<br>
+	<<elseif C.npc.Sydney.love gte 10 and $cat gte 6>>
+		<<ind>><<link [[Nuzzle (0:10)|Sydney Library Transformation]]>><<pass 10>><<tiredness -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 2>><</link>><<cat>><<ltiredness>><<glove>>
+		<br>
+	<<elseif C.npc.Sydney.love gte 10 and $harpy gte 6>>
+		<<mooricon "sing">><<link [[Sing (0:10)|Sydney Library Transformation]]>><<pass 10>><<tiredness -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 3>><</link>><<harpy>><<ltiredness>><<glove>>
+		<br>
+	<<elseif C.npc.Sydney.love gte 10 and $cow gte 6>>
+		<<ind>><<link [[Gently headbutt (0:10)|Sydney Library Transformation]]>><<pass 10>><<trauma -2>><<npcincr Sydney love 2>><<handheldon 1>><<set $phase to 4>><</link>><<cow>><<ltrauma>><<glove>>
+		<br>
+	<</if>>
 	<<if _sydneyRomanceConfront>>
 		<<askicon>><<link [["Ask " + $NPCList[0].pronouns.him + " what's wrong"|Sydney Romance]]>><<handheldon 1>><</link>>
 		<br>
diff --git a/game/overworld-town/special-whitney/main.twee b/game/overworld-town/special-whitney/main.twee
index fe311e3647c6fd928c0467a80f755217b8539b97..9c9f46db5d83ce1f91eed05f3b022fbf68bd9d27 100644
--- a/game/overworld-town/special-whitney/main.twee
+++ b/game/overworld-town/special-whitney/main.twee
@@ -120,7 +120,7 @@ Half an hour passes before a <<generatey1>><<person1>><<person>> unwittingly fre
 		<</if>>
 	<<elseif $bullyevent is 14>>
 		<<link [[Next|Bully Textbooks]]>><<set $phase to 3>><</link>>
-	<<elseif $bullyevent is 15 and $whitneypantiescheck is 2 and !$whitneyskirtcheck and $forcedcrossdressingdisable is "f" and _whitney.dom gte 18>>
+	<<elseif $bullyevent is 16 and $whitneypantiescheck is 2 and !$whitneyskirtcheck and $forcedcrossdressingdisable is "f" and C.npc.Whitney.dom gte 18>>
 		<<link [[Next|Bully Skirt]]>><</link>>
 	<<else>>
 		<<link [[Next|Bully Locker]]>><</link>>
@@ -2732,7 +2732,7 @@ The crew make sure you're okay, then head back to their ship.
 		<br><br>
 		<<He>> reaches <<his>> hands towards your own.
 		<br><br>
-		<<link [[Remain still|Whitney Shopping Centre]]>><<pass 30>><<trauma 6>><<stress 6>><<sub 1>><<npcincr Whitney dom 1>><<set $phase to 1>><</link>><<gstress>><<gtrauma>><<gdom>><<handholdingvirginitywarning>>
+		<<link [[Remain still (0:30)|Whitney Shopping Centre]]>><<pass 30>><<trauma 6>><<stress 6>><<sub 1>><<npcincr Whitney dom 1>><<set $phase to 1>><</link>><<gstress>><<gtrauma>><<gdom>><<handholdingvirginitywarning>>
 		<br>
 		<<link [[Back away|Whitney Shopping Centre Refuse]]>><<def 1>><<npcincr Whitney dom -1>><<set $phase to 1>><</link>><<ldom>>
 		<br>
@@ -2790,7 +2790,7 @@ The crew make sure you're okay, then head back to their ship.
 		<br><br>
 		<<He>> reaches <<his>> hands towards your own.
 		<br><br>
-		<<link [[Remain still|Whitney Shopping Centre]]>><<pass 30>><<trauma 6>><<stress 6>><<sub 1>><<npcincr Whitney dom 1>><<set $phase to 1>><</link>><<gstress>><<gtrauma>><<gdom>><<handholdingvirginitywarning>>
+		<<link [[Remain still (0:30)|Whitney Shopping Centre]]>><<pass 30>><<trauma 6>><<stress 6>><<sub 1>><<npcincr Whitney dom 1>><<set $phase to 1>><</link>><<gstress>><<gtrauma>><<gdom>><<handholdingvirginitywarning>>
 		<br>
 		<<link [[Back away|Whitney Shopping Centre Refuse]]>><<def 1>><<npcincr Whitney dom -1>><<set $phase to 1>><</link>><<ldom>>
 		<br>
diff --git a/game/special-masturbation/actions.js b/game/special-masturbation/actions.js
index 8fde153dd7c7f49774aa0ab5a382b03a784b60d0..c1c13745dcdc94d47b6bf02025e711d72b5d763e 100644
--- a/game/special-masturbation/actions.js
+++ b/game/special-masturbation/actions.js
@@ -1,3 +1,6 @@
+/*
+	Old version can be found at https://gitgud.io/Vrelnir/degrees-of-lewdity/-/blob/master/game/special-masturbation/actions.twee?ref_type=0c2b0126
+*/
 function masturbationActions() {
 	const fragment = document.createDocumentFragment();
 
diff --git a/game/special-masturbation/actions.twee b/game/special-masturbation/actions.twee
deleted file mode 100644
index cdf9a4f3afb46cc5b96196c60b6b6a1a6dcccb9a..0000000000000000000000000000000000000000
--- a/game/special-masturbation/actions.twee
+++ /dev/null
@@ -1,871 +0,0 @@
-:: Widgets Masturbation Actions [widget]
-
-<<widget "masturbationactionsOld">>
-	<<set _playerToys to window.listUniqueCarriedSextoys().filter(toy => (V.player.penisExist && !playerChastity("penis") && toy.type.includesAny("stroker")) || toy.type.includesAny("dildo","breastpump"))>>
-	<<if $currentToyLeft is undefined>><<set $currentToyLeft to "none">><</if>>
-	<<if $currentToyRight is undefined>><<set $currentToyRight to "none">><</if>>
-	<<set $_genitals_exposed to $worn.over_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1 and $worn.under_lower.vagina_exposed gte 1>>
-	<<set $_breasts_exposed to $worn.over_upper.exposed gte 1 and $worn.upper.exposed gte 1 and $worn.under_upper.exposed gte 1>>
-	<<set $_balls_exposed to $_genitals_exposed and !playerChastity("hidden")>>
-	<<set _sextoysInUse to 0>>
-	<<if $currentToyLeft isnot undefined and $currentToyLeft isnot "none">>
-		<<set _sextoysInUse += 1>>
-		<<set $_lefttoy to _playerToys[$currentToyLeft].name>>
-		<<set $_lefttoycolour to _playerToys[$currentToyLeft].colour or "">>
-	<</if>>
-	<<if $currentToyRight isnot undefined and $currentToyRight isnot "none">>
-		<<set _sextoysInUse += 1>>
-		<<set $_righttoy to _playerToys[$currentToyRight].name>>
-		<<set $_righttoycolour to _playerToys[$currentToyRight].colour or "">>
-	<</if>>
-
-	/* Left Arm Actions */
-	<<set $leftaction to $leftactiondefault>>
-	<<if $leftarm is 0>>
-		Your left hand is free.
-		<br>
-		<<if $player.penisExist>>
-			<<if $awareness gte 400 and $masturbationorgasmsemen gte 1 and $leftFingersSemen isnot 1>>
-				| <label><<radiobutton "$leftaction" "msemencover" autocheck>> <span class="sub">Cover your fingers in semen</span> <<combataware 5>></label>
-			<</if>>
-			<<if !playerChastity("penis")>>
-				<<if !($mouth is "mpenis" and $selfsuckDepth is $penisHeight)>>
-					| <label><<radiobutton "$leftaction" "mpenisentrance" autocheck>> <span class="sub">Fondle your penis</span></label>
-				<</if>>
-			<<else>>
-				| <label><<radiobutton "$leftaction" "mchastity" autocheck>> <span class="sub">Try to fondle your penis</span></label>
-			<</if>>
-		<</if>>
-		<<if $player.ballsExist and $_genitals_exposed and $ballssize gte -1 and ($ballssize gte 1 or $rightarm isnot "mballs")>>
-			<<if $_balls_exposed>>
-				| <label><<radiobutton "$leftaction" "mballsentrance" autocheck>> <span class="sub">Fondle your balls</span></label>
-			<</if>>
-		<</if>>
-		<<if $player.vaginaExist>>
-			<<if !playerChastity("vagina")>>
-				| <label><<radiobutton "$leftaction" "mvaginaentrance" autocheck>> <span class="sub">Fondle your pussy</span></label>
-			<<else>>
-				| <label><<radiobutton "$leftaction" "mchastity" autocheck>> <span class="sub">Try to fondle your pussy</span></label>
-			<</if>>
-		<</if>>
-		<<if $awareness gte 100>>
-			| <label><<radiobutton "$leftaction" "mchest" autocheck>> <span class="sub">Fondle your chest</span> <<combataware 2>></label>
-		<</if>>
-		/* <<if $debug is 1>>
-			<<if $awareness gte 100 and $masochism gte 100>>
-				| <label><<radiobutton "$leftaction" "mpinch" autocheck>> <span class="sub">Pinch your nipple</span></label>
-			<</if>>
-		<</if>> */
-		<<if $awareness gte 200 and !playerChastity("anus")>>
-			| <label><<radiobutton "$leftaction" "manusentrance" autocheck>> <span class="sub">Stroke your anus</span> <<combataware 3>></label>
-		<</if>>
-		<<if $awareness gte 200 and (["home","brothel","cafe"].includes($location) or _enableSexToys)>> <!-- v0.3.6.2: Player sex toys -->
-			<<if _playerToys.length gte (_sextoysInUse + 1)>>
-				<<set $_playerToysLeft to {}>>
-				<<run _playerToys.forEach((toy,i) => {
-					if (i isnot $currentToyLeft and i isnot $currentToyRight) $_playerToysLeft[((toy.colour or "") + " " + toy.name)] = i;
-				})>>
-				| <label><<radiobutton "$leftaction" "mpickupdildo" autocheck>> <span class="green">Use Toy:</span> <<combataware 3>></label>
-				<label>
-					<<listbox "$selectedToyLeft" autoselect>>
-						<<optionsfrom $_playerToysLeft>>
-					<</listbox>>
-				</label>
-			<</if>>
-		<</if>>
-
-	<<elseif $leftarm is "mpenisentrance">>
-		You hold your <<penis>> <<if $player.penissize gte 0>>in your left hand.<<else>>with your left thumb and fingers.<</if>>
-		<br>
-		<<if $mouth isnot "mpenis">>
-			| <label><<radiobutton "$leftaction" "mpenisglans" autocheck>> <span class="sub">Fondle the glans</span></label>
-		<</if>>
-		<<if !($mouth is "mpenis" and $selfsuckDepth is $penisHeight)>>
-			| <label><<radiobutton "$leftaction" "mpenisshaft" autocheck>> <span class="sub">Rub the shaft</span></label>
-		<</if>>
-		| <label><<radiobutton "$leftaction" "mpenisstop" autocheck>> Move your hand away</label>
-
-	<<elseif $leftarm is "mvaginaentrance">>
-		You rub your <<pussy>> with your left hand.
-		<br>
-		<<if $_genitals_exposed>>
-			<<if $rightarm is 0 or !$rightarm.startsWith("mvagina") or $rightarm is "mvaginaentrance">>
-				<<if $vaginaFingerLimit gte 3 and currentSkillValue("vaginalskill") gte 300>>
-					| <label><<radiobutton "$leftaction" "mvaginafingerstarttwo" autocheck>> <span class="sub">Push two fingers in</span></label>
-				<</if>>
-				| <label><<radiobutton "$leftaction" "mvagina" autocheck>> <span class="sub">Push a finger in</span></label>
-			<</if>>
-			| <label><<radiobutton "$leftaction" "mvaginaclit" autocheck>> <span class="sub">Play with your clit</span></label>
-		<</if>>
-		| <label><<radiobutton "$leftaction" "mvaginarub" autocheck>> <span class="sub">Rub your vulva</span></label>
-		| <label><<radiobutton "$leftaction" "mvaginastop" autocheck>> Move your hand away</label>
-
-	<<elseif $leftarm is "mvagina">>
-		<<set $_fingers to ($fingersInVagina is 1 ? "finger" : "fingers")>>
-		You have <<number $fingersInVagina>> $_fingers in your <<pussy>>. <<if $fingersInVagina is $vaginaFingerLimit>>You cannot fit any more.<</if>>
-		<br>
-		<<if $fingersInVagina lt $vaginaFingerLimit-1 and $fingersInVagina lt 4 and currentSkillValue("vaginalskill") gte 300>>
-			| <label><<radiobutton "$leftaction" "mvaginafingeraddtwo" autocheck>> <span class="sub">Push another two fingers in</span></label>
-		<</if>>
-		<<if $fingersInVagina lt $vaginaFingerLimit>>
-			<<if $fingersInVagina is 4>>
-				| <label><<radiobutton "$leftaction" "mvaginafistadd" checked>> <span class="sub">Push your hand in</span></label>
-			<<else>>
-				| <label><<radiobutton "$leftaction" "mvaginafingeradd" autocheck>> <span class="sub">Push another finger in</span></label>
-			<</if>>
-		<</if>>
-		<<if $fingersInVagina gte 1>>
-			| <label><<radiobutton "$leftaction" "mvaginafingerremove" autocheck>> <span class="sub">Take one finger out</span></label>
-		<</if>>
-		| <label><<radiobutton "$leftaction" "mvaginatease" autocheck>> <span class="sub">Finger your vagina</span></label>
-		| <label><<radiobutton "$leftaction" "mvaginastop" autocheck>> Move your hand away</label>
-
-	<<elseif $leftarm is "mvaginafist">>
-		Your entire hand is inside your <<pussy>>. You can feel the tightness around your fist.
-		<br>
-		| <label><<radiobutton "$leftaction" "mvaginafist" autocheck>> <span class="sub">Fist your vagina</span></label>
-		| <label><<radiobutton "$leftaction" "mvaginafingerremove" autocheck>> <span class="sub">Take one finger out</span></label>
-		<<if currentSkillValue("vaginalskill") gte 700>>
-			| <label><<radiobutton "$leftaction" "mvaginafistremove" autocheck>> <span class="sub">Pull your hand out</span></label>
-		<</if>>
-
-	<<elseif $leftarm is "mvaginaentrancedildo">>
-		<<if $currentToyLeft is "none" or $currentToyLeft is undefined>>
-			Your left hand is free as you do not have a toy selected.
-			<br>
-			| <label><<radiobutton "$leftaction" "mvaginastopdildo" autocheck>> Move your hand away</label>
-		<<else>>
-			You rub your <<pussy>> with the $_lefttoycolour $_lefttoy in your left hand.
-			<<if $_lefttoy is "anal beads" or $_lefttoy is "butt plug">>It feels unusual, but you enjoy it anyway.<</if>>
-			<br>
-			<<if $_genitals_exposed and !playerChastity("vagina")>>
-				<<if ($rightarm isnot "mvagina" and $rightarm isnot "mvaginadildo")>>
-					| <label><<radiobutton "$leftaction" "mvaginadildo" autocheck>> <span class="sub">Push your $_lefttoycolour $_lefttoy in</span></label>
-				<</if>>
-				| <label><<radiobutton "$leftaction" "mvaginaclitdildo" autocheck>> <span class="sub">Play with your clit</span></label>
-				/*| <label><<radiobutton "$leftaction" "mvaginarub_dildo" autocheck>> <span class="sub">Rub your labia</span></label>*/
-			<<else>>
-				Your chastity is in the way.
-				<br>
-			<</if>>
-			| <label><<radiobutton "$leftaction" "mvaginastopdildo" autocheck>> Move your hand away</label>
-		<</if>>
-
-	<<elseif $leftarm is "mvaginadildo">>
-		You fuck your pussy with the $_lefttoycolour $_lefttoy in your left hand.
-		<br>
-
-		<<if $fingersInVagina gte 1>>
-			| <label><<radiobutton "$leftaction" "mvaginadildoremove" autocheck>> <span class="sub">Take the $_lefttoycolour $_lefttoy out</span></label>
-		<</if>>
-		| <label><<radiobutton "$leftaction" "mvaginateasedildo" autocheck>> <span class="sub">Tease</span></label>
-		| <label><<radiobutton "$leftaction" "mvaginastopdildo" autocheck>> Move your hand away</label>
-
-	<<elseif $leftarm is "manusentrance">>
-		You tease your anus with your left hand.
-		<br>
-		<<if $worn.over_lower.anus_exposed gte 1 and $worn.lower.anus_exposed gte 1 and $worn.under_lower.anus_exposed gte 1>>
-			| <label><<radiobutton "$leftaction" "manus" autocheck>> <span class="sub">Push a finger in</span></label>
-		<</if>>
-		| <label><<radiobutton "$leftaction" "manusrub" autocheck>> <span class="sub">Tease your anus</span></label>
-		| <label><<radiobutton "$leftaction" "manusstop" autocheck>> Move your hand away</label>
-
-	<<elseif $leftarm is "manus">>
-		You tease your anus with your left hand.
-		<br>
-		| <label><<radiobutton "$leftaction" "manustease" autocheck>> <span class="sub">Tease</span></label>
-		<<if $player.penisExist>>
-			| <label><<radiobutton "$leftaction" "manusprostate" autocheck>> <span class="sub">Tease your prostate</span></label>
-		<</if>>
-		| <label><<radiobutton "$leftaction" "manusstop" autocheck>> Move your hand away</label>
-
-
-	<<elseif $leftarm is "manusentrancedildo">>
-		You tease your anus with the $_lefttoycolour $_lefttoy your left hand.
-		<br>
-		<<if $worn.over_lower.anus_exposed gte 1 and $worn.lower.anus_exposed gte 1 and $worn.under_lower.anus_exposed gte 1 and !playerChastity("anus")>>
-			| <label><<radiobutton "$leftaction" "manusdildo" autocheck>> <span class="sub">Push your $_lefttoycolour $_lefttoy in</span></label>
-		<</if>>
-		| <label><<radiobutton "$leftaction" "manusrubdildo" autocheck>> <span class="sub">Tease your anus with your $_lefttoycolour $_lefttoy</span></label>
-		| <label><<radiobutton "$leftaction" "manusstopdildo" autocheck>> Move your hand away</label>
-
-	<<elseif $leftarm is "manusdildo">>
-		You tease your anus with the $_lefttoycolour $_lefttoy in your left hand.
-		<br>
-		| <label><<radiobutton "$leftaction" "manusteasedildo" autocheck>> <span class="sub">Tease</span></label>
-		<<if $player.penisExist>>
-			| <label><<radiobutton "$leftaction" "manusprostatedildo" autocheck>> <span class="sub">Tease your prostate</span></label>
-		<</if>>
-		| <label><<radiobutton "$leftaction" "manusstopdildo" autocheck>> Move your hand away</label>
-
-	<<elseif $leftarm is "mpenisentrancestroker">>
-		You tease your glans with the $_lefttoycolour $_lefttoy your left hand.
-		<br>
-		<<if $worn.over_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1 and $worn.under_lower.vagina_exposed gte 1>>
-			| <label><<radiobutton "$leftaction" "mpenisstroker" autocheck>> <span class="sub">Penetrate your $_lefttoycolour $_lefttoy</span></label>
-			| <label><<radiobutton "$leftaction" "mpenisentrancestroker" autocheck>> <span class="sub">Tease your glans with your $_lefttoycolour $_lefttoy</span></label>
-			/* ToDo: Swap this move for "mpenisstrokertease" */
-		<</if>>
-		| <label><<radiobutton "$leftaction" "mpenisstopstroker" autocheck>> Move your hand away</label>
-
-	<<elseif $leftarm is "mpenisstroker">>
-		Your <<penis>> penetrates the $_lefttoycolour $_lefttoy in your left hand.
-		<br>
-		| <label><<radiobutton "$leftaction" "mpenisstroker" autocheck>> <span class="sub">Masturbate</span></label>
-		| <label><<radiobutton "$leftaction" "mpenisstopstroker" autocheck>> Move your hand away</label>
-	<<elseif $leftarm is "mbreastpump">>
-		You hold your $_lefttoycolour $_lefttoy against your <<breasts>>.
-		<br>
-		| <label><<radiobutton "$leftaction" "mbreastpumppump" autocheck>> <span class="sub">Milk your <<breasts>></span></label>
-		| <label><<radiobutton "$leftaction" "mstopbreastpump" autocheck>> Move your hand away</label>
-	<<elseif $leftarm is "mdildomouthentrance">>
-		Your $_lefttoycolour $_lefttoy is in your left hand by your mouth.
-		<br>
-		| <label><<radiobutton "$leftaction" "mdildomouth" autocheck>> <span class="sub">Push into your mouth</span></label>
-		| <label><<radiobutton "$leftaction" "mmouthstopdildo" autocheck>> Move your hand away</label>
-	<<elseif $leftarm is "mdildomouth">>
-		Your left hand is holding your $_lefttoycolour $_lefttoy in your mouth.
-		<br>
-		| <label><<radiobutton "$leftaction" "mdildopiston" autocheck>> <span class="sub">Move it back and forward</span></label>
-		| <label><<radiobutton "$leftaction" "mmouthstopdildo" autocheck>> Move your hand away</label>
-	<<elseif $leftarm is "mpickupdildo">>
-		You hold your $_lefttoycolour $_lefttoy in your left hand.
-		<br>
-		<<if _playerToys[$currentToyLeft].type.includes("stroker")>>
-			<<if $player.penisExist and ($penisuse is 0 or $penisuse is "stroker")>>
-				| <label><<radiobutton "$leftaction" "mpenisentrancestroker" autocheck>> <span class="sub">Move to your penis</span></label>
-			<</if>>
-		| <label><<radiobutton "$leftaction" "mpenisstopstroker" autocheck>> Move your hand away</label>
-		<<elseif _playerToys[$currentToyLeft].type.includes("breastpump")>>
-			<<if $_breasts_exposed and $player.breastsize gte 1>>
-				| <label><<radiobutton "$leftaction" "mbreastpump" autocheck>> <span class="sub">Move to your <<breasts>></span></label>
-			<</if>>
-			| <label><<radiobutton "$leftaction" "mstopbreastpump" autocheck>> Move your hand away</label>
-		<<else>>
-			<<if $player.vaginaExist>>
-				| <label><<radiobutton "$leftaction" "mvaginaentrancedildo" autocheck>> <span class="sub">Move to your vagina</span></label>
-			<</if>>
-			| <label><<radiobutton "$leftaction" "manusentrancedildo" autocheck>> <span class="sub">Move to your anus</span></label>
-			<<switch _playerToys[$currentToyLeft].name>>
-				<<case "bullet vibe">>
-					<<if $player.penisExist and $penisuse is 0 and !playerChastity("penis")>>
-						| <label><<radiobutton "$leftaction" "mpenisvibrate" autocheck>> <span class="sub">Hold against your penis</span></label>
-					<<elseif !$player.penisExist and !playerChastity("vagina")>>
-						| <label><<radiobutton "$leftaction" "mvaginaclitvibrate" autocheck>> <span class="sub">Hold against your clit</span></label>
-					<</if>>
-					| <label><<radiobutton "$leftaction" "mchestvibrate" autocheck>> <span class="sub">Press against a nipple</span></label>
-				<<case "small dildo" "dildo">>
-					<<if $mouth is 0 and $awareness gte 200>>
-						| <label><<radiobutton "$leftaction" "mdildomouthentrance" autocheck>> <span class="sub">Hold against your mouth</span></label>
-					<</if>>
-			<</switch>>
-			<<if _playerToys[$currentToyLeft].name is "bullet vibe">>
-			<</if>>
-			| <label><<radiobutton "$leftaction" "mvaginastopdildo" autocheck>> Move your hand away</label>
-		<</if>>
-
-	<<elseif $leftarm is "mballs">>
-		You hold <<if $ballssize gte 1>>one of <</if>> your $ballsText with your left hand.
-		<br>
-		| <label><<radiobutton "$leftaction" "mballsfondle" autocheck>> <span class="sub">Fondle</span></label>
-		| <label><<radiobutton "$leftaction" "mballssqueeze" autocheck>> <span class="sub">Squeeze</span></label>
-		| <label><<radiobutton "$leftaction" "mballsstop" autocheck>> Move your hand away</label>
-	<<elseif $leftarm is "bound">>
-		Your left arm is bound.
-		<br>
-	<<elseif $leftarm is "possessed">>
-		<<if $lactating and $breastfeedingdisable is "f">>
-			<<if $leftaction is "mbreastW">>
-				You pinch and squeeze your <<breasts>> with your left hand, unbidden.
-			<<else>>
-				Your left hand hovers over your <<breasts>>.
-			<</if>>
-			<br>
-			| <label><<radiobutton "$leftaction" "mbreastW" autocheck>> <span class="wraith">Fondle your chest</span></label>
-			| <label><<radiobutton "$leftaction" "mbreaststopW" autocheck>> <span class="brat">Hold your arm still</span></label>
-		<<elseif $player.penisExist>>
-			<<if $leftaction is "mpenisW">>
-				You stroke your <<penis>> with your left hand, unbidden.
-			<<else>>
-				Your left hand hovers over your <<penis>>.
-			<</if>>
-			<br>
-			| <label><<radiobutton "$leftaction" "mpenisW" autocheck>> <span class="wraith">Rub the shaft</span></label>
-			| <label><<radiobutton "$leftaction" "mpenisstopW" autocheck>> <span class="brat">Hold your arm still</span></label>
-		<<else>>
-			<<if $leftaction is "mvaginaW">>
-				You stroke your <<pussy>> with your left hand, unbidden.
-			<<else>>
-				Your left hand hovers over your <<pussy>>.
-			<</if>>
-			<br>
-			| <label><<radiobutton "$leftaction" "mvaginaW" autocheck>> <span class="wraith">Fondle your vagina</span></label>
-			| <label><<radiobutton "$leftaction" "mvaginastopW" autocheck>> <span class="brat">Hold your arm still</span></label>
-		<</if>>
-	<</if>>
-	<<if $leftarm isnot "bound">>
-		<<if $worn.over_upper.exposed lte 1>>
-			| <label><<radiobutton "$leftaction" "moverupper" autocheck>> Displace your $worn.over_upper.name</label>
-		<</if>>
-		<<if $worn.upper.exposed lte 1>>
-			| <label><<radiobutton "$leftaction" "mupper" autocheck>> Displace your $worn.upper.name</label>
-		<</if>>
-		<<if $worn.under_upper.exposed lte 0>>
-			| <label><<radiobutton "$leftaction" "munder_upper" autocheck>> Displace your $worn.under_upper.name</label>
-		<</if>>
-
-		<<if $worn.over_lower.exposed lte 1>>
-			| <label><<radiobutton "$leftaction" "moverlower" autocheck>> Displace your $worn.over_lower.name</label>
-		<</if>>
-		<<if $worn.lower.exposed lte 1>>
-			| <label><<radiobutton "$leftaction" "mlower" autocheck>> Displace your $worn.lower.name</label>
-		<</if>>
-		<<if $worn.under_lower.exposed lte 0>>
-			<<if $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked")>>
-				| <label><<radiobutton "$leftaction" "munder" autocheck>> Pull down your $worn.under_lower.name</label>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if !$possessed>>
-		| <label><<radiobutton "$leftaction" "mrest" autocheck>> Rest</label>
-	<</if>>
-
-	<br><br>
-
-	/* Right Arm Actions */
-	<<set $rightaction to $rightactiondefault>>
-	<<if $rightarm is 0>>
-		Your right hand is free.
-		<br>
-		<<if $player.penisExist>>
-			<<if $awareness gte 400 and $masturbationorgasmsemen gte 1 and $rightFingersSemen isnot 1>>
-				| <label><<radiobutton "$rightaction" "msemencover" autocheck>> <span class="sub">Cover your fingers in semen</span> <<combataware 5>></label>
-			<</if>>
-			<<if !playerChastity("penis")>>
-				<<if !($mouth is "mpenis" and $selfsuckDepth is $penisHeight)>>
-					| <label><<radiobutton "$rightaction" "mpenisentrance" autocheck>> <span class="sub">Fondle your penis</span></label>
-				<</if>>
-			<<else>>
-				| <label><<radiobutton "$rightaction" "mchastity" autocheck>> <span class="sub">Try to fondle your penis</span></label>
-			<</if>>
-		<</if>>
-		<<if $player.ballsExist and $_genitals_exposed and $ballssize gte -1 and ($ballssize gte 1 or $leftarm isnot "mballs")>>
-			<<if $_balls_exposed>>
-				| <label><<radiobutton "$rightaction" "mballsentrance" autocheck>> <span class="sub">Fondle your balls</span></label>
-			<</if>>
-		<</if>>
-		<<if $player.vaginaExist>>
-			<<if !playerChastity("vagina")>>
-				| <label><<radiobutton "$rightaction" "mvaginaentrance" autocheck>> <span class="sub">Fondle your pussy</span></label>
-			<<else>>
-				| <label><<radiobutton "$rightaction" "mchastity" autocheck>> <span class="sub">Try to fondle your pussy</span></label>
-			<</if>>
-		<</if>>
-		<<if $awareness gte 100>>
-			| <label><<radiobutton "$rightaction" "mchest" autocheck>> <span class="sub">Fondle your chest</span> <<combataware 2>></label>
-		<</if>>
-		/* <<if $debug is 1>>
-			<<if $awareness gte 100 and $masochism gte 100>>
-				| <label><<radiobutton "$rightaction" "mpinch" autocheck>> <span class="sub">Pinch your nipple</span></label>
-			<</if>>
-		<</if>> */
-		<<if $awareness gte 200 and !playerChastity("anus")>>
-			| <label><<radiobutton "$rightaction" "manusentrance" autocheck>> <span class="sub">Stroke your anus</span> <<combataware 3>></label>
-		<</if>>
-		<<if $awareness gte 200 and (["home","brothel","cafe"].includes($location) or _enableSexToys)>> /* Player sex toys */
-			<<if _playerToys.length gte (_sextoysInUse + 1)>>
-				<<set $_playerToysRight to {}>>
-				<<run _playerToys.forEach((toy,i) => {
-					if (i isnot $currentToyLeft and i isnot $currentToyRight) $_playerToysRight[((toy.colour or "") + " " + toy.name)] = i;
-				})>>
-				| <label><<radiobutton "$rightaction" "mpickupdildo" autocheck>> <span class="green">Use Toy:</span> <<combataware 3>></label>
-				<label>
-					<<listbox "$selectedToyRight" autoselect>>
-						<<optionsfrom $_playerToysRight>>
-					<</listbox>>
-				</label>
-			<</if>>
-		<</if>>
-
-	<<elseif $rightarm is "mpenisentrance">>
-		You hold your <<penis>> <<if $player.penissize gte 0>>in your right hand.<<else>>with your right thumb and fingers.<</if>>
-		<br>
-		<<if $mouth isnot "mpenis">>
-			| <label><<radiobutton "$rightaction" "mpenisglans" autocheck>> <span class="sub">Fondle the glans</span></label>
-		<</if>>
-		<<if !($mouth is "mpenis" and $selfsuckDepth is $penisHeight)>>
-			| <label><<radiobutton "$rightaction" "mpenisshaft" autocheck>> <span class="sub">Rub the shaft</span></label>
-		<</if>>
-		| <label><<radiobutton "$rightaction" "mpenisstop" autocheck>> Move your hand away</label>
-
-	<<elseif $rightarm is "mvaginaentrance">>
-		You rub your <<pussy>> with your right hand.
-		<br>
-		<<if $_genitals_exposed>>
-			<<if $leftarm is 0 or !$leftarm.startsWith("mvagina") or $leftarm is "mvaginaentrance">>
-				<<if $vaginaFingerLimit gte 3 and currentSkillValue("vaginalskill") gte 300>>
-					| <label><<radiobutton "$rightaction" "mvaginafingerstarttwo" autocheck>> <span class="sub">Push two fingers in</span></label>
-				<</if>>
-				| <label><<radiobutton "$rightaction" "mvagina" autocheck>> <span class="sub">Push a finger in</span></label>
-			<</if>>
-			| <label><<radiobutton "$rightaction" "mvaginaclit" autocheck>> <span class="sub">Play with your clit</span></label>
-		<</if>>
-		| <label><<radiobutton "$rightaction" "mvaginarub" autocheck>> <span class="sub">Rub your vulva</span></label>
-		| <label><<radiobutton "$rightaction" "mvaginastop" autocheck>> Move your hand away</label>
-
-	<<elseif $rightarm is "mvagina">>
-		<<set $_fingers to ($fingersInVagina is 1 ? "finger" : "fingers")>>
-		You have <<number $fingersInVagina>> $_fingers in your <<pussy>>. <<if $fingersInVagina is $vaginaFingerLimit>>You cannot fit any more.<</if>>
-		<br>
-		<<if $fingersInVagina lt $vaginaFingerLimit-1 and $fingersInVagina lt 4 and currentSkillValue("vaginalskill") gte 300>>
-			| <label><<radiobutton "$rightaction" "mvaginafingeraddtwo" autocheck>> <span class="sub">Push another two fingers in</span></label>
-		<</if>>
-		<<if $fingersInVagina lt $vaginaFingerLimit>>
-			<<if $fingersInVagina is 4>>
-				| <label><<radiobutton "$rightaction" "mvaginafistadd" autocheck>> <span class="sub">Push your hand in</span></label>
-			<<else>>
-				| <label><<radiobutton "$rightaction" "mvaginafingeradd" autocheck>> <span class="sub">Push another finger in</span></label>
-			<</if>>
-		<</if>>
-		<<if $fingersInVagina gte 1>>
-			| <label><<radiobutton "$rightaction" "mvaginafingerremove" autocheck>> <span class="sub">Take one finger out</span></label>
-		<</if>>
-		| <label><<radiobutton "$rightaction" "mvaginatease" autocheck>> <span class="sub">Finger your vagina</span></label>
-		| <label><<radiobutton "$rightaction" "mvaginastop" autocheck>> Move your hand away</label>
-
-	<<elseif $rightarm is "mvaginafist">>
-		Your entire hand is inside your <<pussy>>. You can feel the tightness around your fist.
-		<br>
-		| <label><<radiobutton "$rightaction" "mvaginafist" autocheck>> <span class="sub">Fist your vagina</span></label>
-		| <label><<radiobutton "$rightaction" "mvaginafingerremove" autocheck>> <span class="sub">Take one finger out</span></label>
-		<<if currentSkillValue("vaginalskill") gte 700>>
-			| <label><<radiobutton "$rightaction" "mvaginafistremove" autocheck>> <span class="sub">Pull your hand out</span></label>
-		<</if>>
-
-	<<elseif $rightarm is "mvaginaentrancedildo">>
-		<<if $currentToyRight is "none" or $currentToyRight is undefined>>
-			Your right hand is free as you do not have a toy selected.
-			<br>
-			| <label><<radiobutton "$rightaction" "mvaginastopdildo" autocheck>> Move your hand away</label>
-		<<else>>
-			You rub your <<pussy>> with the $_righttoycolour $_righttoy in your right hand.
-			<<if $currentToyRight is "anal beads" or $_righttoy is "butt plug">>It feels unusual, but you enjoy it anyway.<</if>>
-			<br>
-			<<if $_genitals_exposed and !playerChastity("vagina")>>
-				<<if ($rightarm isnot "mvagina" and $rightarm isnot "mvaginadildo")>>
-					| <label><<radiobutton "$rightaction" "mvaginadildo" autocheck>> <span class="sub">Push your $_righttoycolour $_righttoy in</span></label>
-				<</if>>
-				| <label><<radiobutton "$rightaction" "mvaginaclitdildo" autocheck>> <span class="sub">Play with your clit</span></label>
-				/*| <label><<radiobutton "$rightaction" "mvaginarub_dildo" autocheck>> <span class="sub">Rub your labia</span></label>*/
-			<<else>>
-				Your chastity is in the way.
-				<br>
-			<</if>>
-			| <label><<radiobutton "$rightaction" "mvaginastopdildo" autocheck>> Move your hand away</label>
-		<</if>>
-
-	<<elseif $rightarm is "mvaginadildo">>
-		You fuck your pussy with the $_righttoycolour $_righttoy.
-		<br>
-		<<if $fingersInVagina gte 1>>
-			| <label><<radiobutton "$rightaction" "mvaginadildoremove" autocheck>> <span class="sub">Take the $_righttoycolour $_righttoy out</span></label>
-		<</if>>
-		| <label><<radiobutton "$rightaction" "mvaginateasedildo" autocheck>> <span class="sub">Tease</span></label>
-		| <label><<radiobutton "$rightaction" "mvaginastopdildo" autocheck>> Move your hand away</label>
-
-	<<elseif $rightarm is "manusentrance">>
-		You tease your anus with your right hand.
-		<br>
-		<<if $worn.over_lower.anus_exposed gte 1 and $worn.lower.anus_exposed gte 1 and $worn.under_lower.anus_exposed gte 1>>
-			| <label><<radiobutton "$rightaction" "manus" autocheck>> <span class="sub">Push a finger in</span></label>
-		<</if>>
-		| <label><<radiobutton "$rightaction" "manusrub" autocheck>> <span class="sub">Tease your anus</span></label>
-		| <label><<radiobutton "$rightaction" "manusstop" autocheck>> Move your hand away</label>
-
-	<<elseif $rightarm is "manus">>
-		You tease your anus with your right hand.
-		<br>
-		| <label><<radiobutton "$rightaction" "manustease" autocheck>> <span class="sub">Tease</span></label>
-		<<if $player.penisExist>>
-			| <label><<radiobutton "$rightaction" "manusprostate" autocheck>> <span class="sub">Tease your prostate</span></label>
-		<</if>>
-		| <label><<radiobutton "$rightaction" "manusstop" autocheck>> Move your hand away</label>
-	<<elseif $rightarm is "manusentrancedildo">>
-		You tease your anus with the $_righttoycolour $_righttoy in your right hand.
-		<br>
-		<<if $worn.over_lower.anus_exposed gte 1 and $worn.lower.anus_exposed gte 1 and $worn.under_lower.anus_exposed gte 1 and !playerChastity("anus")>>
-			| <label><<radiobutton "$rightaction" "manusdildo" autocheck>> <span class="sub">Push your $_righttoycolour $_righttoy in</span></label>
-		<</if>>
-		| <label><<radiobutton "$rightaction" "manusrubdildo" autocheck>> <span class="sub">Tease your anus with your $_righttoycolour $_righttoy</span></label>
-		| <label><<radiobutton "$rightaction" "manusstopdildo" autocheck>> Move your hand away</label>
-
-	<<elseif $rightarm is "manusdildo">>
-		You tease your anus with the $_righttoycolour $_righttoy in your right hand.
-		<br>
-		| <label><<radiobutton "$rightaction" "manusteasedildo" autocheck>> <span class="sub">Tease</span></label>
-		<<if $player.penisExist>>
-			| <label><<radiobutton "$rightaction" "manusprostatedildo" autocheck>> <span class="sub">Tease your prostate</span></label>
-		<</if>>
-		| <label><<radiobutton "$rightaction" "manusstopdildo" autocheck>> Move your hand away</label>
-
-	<<elseif $rightarm is "mpenisentrancestroker">>
-		You tease your glans with the $_righttoycolour $_righttoy your right hand.
-		<br>
-		<<if $worn.over_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1 and $worn.under_lower.vagina_exposed gte 1>>
-			| <label><<radiobutton "$rightaction" "mpenisstroker" autocheck>> <span class="sub">Penetrate your $_righttoycolour $_righttoy</span></label>
-			| <label><<radiobutton "$rightaction" "mpenisentrancestroker" autocheck>> <span class="sub">Tease your glans with your $_righttoycolour $_righttoy</span></label>
-		<</if>>
-		| <label><<radiobutton "$rightaction" "mpenisstopstroker" autocheck>> Move your hand away</label>
-
-	<<elseif $rightarm is "mpenisstroker">>
-		Your <<penis>> penetrates the $_righttoycolour $_righttoy in your left hand.
-		<br>
-		| <label><<radiobutton "$rightaction" "mpenisstroker" autocheck>> <span class="sub">Masturbate</span></label>
-		| <label><<radiobutton "$rightaction" "mpenisstopstroker" autocheck>> Move your hand away</label>
-	<<elseif $rightarm is "mbreastpump">>
-		You hold your $_righttoycolour $_righttoy against your <<breasts>>.
-		<br>
-		| <label><<radiobutton "$rightaction" "mbreastpumppump" autocheck>> <span class="sub">Milk your <<breasts>></span></label>
-		| <label><<radiobutton "$rightaction" "mstopbreastpump" autocheck>> Move your hand away</label>
-	<<elseif $rightarm is "mdildomouthentrance">>
-		Your $_righttoycolour $_righttoy is in your right hand by your mouth.
-		<br>
-		| <label><<radiobutton "$rightaction" "mdildomouth" autocheck>> <span class="sub">Push into your mouth</span></label>
-		| <label><<radiobutton "$rightaction" "mmouthstopdildo" autocheck>> Move your hand away</label>
-	<<elseif $rightarm is "mdildomouth">>
-		Your right hand is holding your $_righttoycolour $_righttoy in your mouth.
-		<br>
-		| <label><<radiobutton "$rightaction" "mdildopiston" autocheck>> <span class="sub">Move it back and forward</span></label>
-		| <label><<radiobutton "$rightaction" "mmouthstopdildo" autocheck>> Move your hand away</label>
-	<<elseif $rightarm is "mpickupdildo">>
-		You hold your $_righttoycolour $_righttoy in your right hand.
-		<br>
-		<<if _playerToys[$currentToyRight].type.includes("stroker")>>
-			<<if $player.penisExist and ($penisuse is 0 or $penisuse is "stroker")>>
-				| <label><<radiobutton "$rightaction" "mpenisentrancestroker" autocheck>> <span class="sub">Move to your penis</span></label>
-			<</if>>
-			| <label><<radiobutton "$rightaction" "mpenisstopstroker" autocheck>> Move your hand away</label>
-		<<elseif _playerToys[$currentToyRight].type.includes("breastpump")>>
-			<<if $_breasts_exposed and $player.breastsize gte 1>>
-				| <label><<radiobutton "$rightaction" "mbreastpump" autocheck>> <span class="sub">Move to your <<breasts>></span></label>
-			<</if>>
-			| <label><<radiobutton "$rightaction" "mstopbreastpump" autocheck>> Move your hand away</label>
-		<<else>>
-			<<if $player.vaginaExist>>
-				| <label><<radiobutton "$rightaction" "mvaginaentrancedildo" autocheck>> <span class="sub">Move to your vagina</span></label>
-			<</if>>
-			| <label><<radiobutton "$rightaction" "manusentrancedildo" autocheck>> <span class="sub">Move to your anus</span></label>
-			<<switch _playerToys[$currentToyRight].name>>
-				<<case "bullet vibe">>
-					<<if $player.penisExist and $penisuse is 0 and !playerChastity("penis")>>
-						| <label><<radiobutton "$rightaction" "mpenisvibrate" autocheck>> <span class="sub">Hold against your penis</span></label>
-					<<elseif !$player.penisExist and !playerChastity("vagina")>>
-						| <label><<radiobutton "$rightaction" "mvaginaclitvibrate" autocheck>> <span class="sub">Hold against your clit</span></label>
-					<</if>>
-					| <label><<radiobutton "$rightaction" "mchestvibrate" autocheck>> <span class="sub">Press against a nipple</span></label>
-				<<case "small dildo" "dildo">>
-					<<if $mouth is 0 and $awareness gte 200>>
-						| <label><<radiobutton "$rightaction" "mdildomouthentrance" autocheck>> <span class="sub">Hold against your mouth</span></label>
-					<</if>>
-			<</switch>>
-			| <label><<radiobutton "$rightaction" "mvaginastopdildo" autocheck>> Move your hand away</label>
-		<</if>>
-
-	<<elseif $rightarm is "mballs">>
-		You hold <<if $ballssize gte 1>>one of <</if>> your $ballsText with your right hand.
-		<br>
-		| <label><<radiobutton "$rightaction" "mballsfondle" autocheck>> <span class="sub">Fondle</span></label>
-		| <label><<radiobutton "$rightaction" "mballssqueeze" autocheck>> <span class="sub">Squeeze</span></label>
-		| <label><<radiobutton "$rightaction" "mballsstop" autocheck>> Move your hand away</label>
-	<<elseif $rightarm is "bound">>
-		Your right arm is bound.
-		<br>
-	<<elseif $rightarm is "possessed">>
-		<<if $player.penisExist>>
-			<<if $rightaction is "mpenisW">>
-				You stroke your <<penis>> with your right hand, unbidden.
-			<<else>>
-				Your right hand hovers over your <<penis>>.
-			<</if>>
-			<br>
-			| <label><<radiobutton "$rightaction" "mpenisW" autocheck>> <span class="wraith">Rub the shaft</span></label>
-			| <label><<radiobutton "$rightaction" "mpenisstopW" autocheck>> <span class="brat">Hold your arm still</span></label>
-		<<elseif $lactating and $breastfeedingdisable is "f">>
-			<<if $rightaction is "mbreastW">>
-				You pinch and squeeze your <<breasts>> with your right hand, unbidden.
-			<<else>>
-				Your right hand hovers over your <<breasts>>.
-			<</if>>
-			<br>
-			| <label><<radiobutton "$rightaction" "mbreastW" autocheck>> <span class="wraith">Fondle your chest</span></label>
-			| <label><<radiobutton "$rightaction" "mbreaststopW" autocheck>> <span class="brat">Hold your arm still</span></label>
-		<<else>>
-			<<if $rightaction is "mvaginaW">>
-				You stroke your <<pussy>> with your right hand, unbidden.
-			<<else>>
-				Your right hand hovers over your <<pussy>>.
-			<</if>>
-			<br>
-			| <label><<radiobutton "$rightaction" "mvaginaW" autocheck>> <span class="wraith">Fondle your vagina</span></label>
-			| <label><<radiobutton "$rightaction" "mvaginastopW" autocheck>> <span class="brat">Hold your arm still</span></label>
-		<</if>>
-	<</if>>
-	<<if $rightarm isnot "bound">>
-		<<if $worn.over_upper.exposed lte 1>>
-			| <label><<radiobutton "$rightaction" "moverupper" autocheck>> Displace your $worn.over_upper.name</label>
-		<</if>>
-		<<if $worn.upper.exposed lte 1>>
-			| <label><<radiobutton "$rightaction" "mupper" autocheck>> Displace your $worn.upper.name</label>
-		<</if>>
-		<<if $worn.under_upper.exposed lte 0>>
-			| <label><<radiobutton "$rightaction" "munder_upper" autocheck>> Displace your $worn.under_upper.name</label>
-		<</if>>
-
-		<<if $worn.over_lower.exposed lte 1>>
-			| <label><<radiobutton "$rightaction" "moverlower" autocheck>> Displace your $worn.over_lower.name</label>
-		<</if>>
-		<<if $worn.lower.exposed lte 1>>
-			| <label><<radiobutton "$rightaction" "mlower" autocheck>> Displace your $worn.lower.name</label>
-		<</if>>
-		<<if $worn.under_lower.exposed lte 0>>
-			<<if $worn.lower.state isnot setup.clothes.lower[clothesIndex('lower', $worn.lower)].state_base or setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1 or $worn.lower.type.includes("naked")>>
-				| <label><<radiobutton "$rightaction" "munder" autocheck>> Pull down your $worn.under_lower.name</label>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if !$possessed>>
-		| <label><<radiobutton "$rightaction" "mrest" autocheck>> Rest</label>
-	<</if>>
-
-	/* Mouth Actions */
-	<<if $moorPhallusPlant or $awareness gte 200 or $mouth isnot 0>>
-		<<set _corruptionCheck to $corruptionMasturbation and $awareness lt 200>>
-		<<set _awarenessCheck to $corruptionMasturbation or $awareness gte 200>>
-		<<set $mouthaction to $mouthactiondefault>>
-		<<if $mouth is 0>>
-			<br><br>
-			Your mouth is free.
-			<br>
-
-			<<set _items to window.listUniqueCarriedSextoys()>>
-
-			<<for _i to 0; _i < _items.length; _i++>>
-				<<if _items[_i].type.includes("aphrodisiacpill")>>
-					<<set _hasAphrodisiac to true>>
-					<<break>>
-				<</if>>
-			<</for>>
-
-			<<if _hasAphrodisiac is true and $awareness gte 200>>
-				| <label><<radiobutton "$mouthaction" "maphropill" autocheck>> Swallow an aphrodisiac pill <<combataware 3>></label>
-			<</if>>
-
-			<<if $_genitals_exposed and $awareness gte 200>>
-				<<if $canSelfSuckPenis and $penisuse is 0>>
-					| <label><<radiobutton "$mouthaction" "mpenisentrance" autocheck>> <span class="sub">Lick your penis</span> <<combataware 3>></label>
-				<</if>>
-				<<if $canSelfSuckVagina and $vaginause is 0 and $fingersInVagina is 0>>
-					| <label><<radiobutton "$mouthaction" "mvaginaentrance" autocheck>> <span class="sub">Lick your pussy</span> <<combataware 3>></label>
-				<</if>>
-			<</if>>
-			<<if $moorPhallusPlant is 1>>
-				| <label><<radiobutton "$mouthaction" "mpenisflowerlick" autocheck>> <span class="sub">Lick the phallus plant</span></label>
-			<</if>>
-			| <label><<radiobutton "$mouthaction" "mrest" autocheck>> Rest</label>
-
-		<<elseif $mouth is "mpenisentrance">>
-			<br><br>
-			<<if _corruptionCheck>>
-				<span class="red">The slimes in your ear are forcing your mouth to be in front of your penis.</span>
-			<<else>>
-				Your mouth is in front of your penis.
-			<</if>>
-			<br>
-			<<if _awarenessCheck>>
-				| <label><<radiobutton "$mouthaction" "mpenislick" autocheck>> <span class="sub">Lick your penis</span> <<if !_corruptionCheck>><<combataware 3>><</if>></label>
-				| <label><<radiobutton "$mouthaction" "mpenistakein" autocheck>> <span class="sub">Take it into your mouth</span> <<if !_corruptionCheck>><<combataware 3>><</if>></label>
-			<</if>>
-			| <label><<radiobutton "$mouthaction" "mpenisstop" autocheck>> Move your mouth away</label>
-			| <label><<radiobutton "$mouthaction" "mrest" autocheck>> Rest</label>
-
-		<<elseif $mouth is "mvaginaentrance">>
-			<br><br>
-			<<if _corruptionCheck>>
-				<span class="red">The slimes in your ear are forcing you to lick your pussy.</span>
-			<<else>>
-				You're licking your pussy.
-			<</if>>
-			<br>
-			<<if _awarenessCheck>>
-				| <label><<radiobutton "$mouthaction" "mvaginalick" autocheck>> <span class="sub">Lick your pussy</span> <<if !_corruptionCheck>><<combataware 3>><</if>></label>
-				| <label><<radiobutton "$mouthaction" "mvaginaclit" autocheck>> <span class="sub">Focus on your clit</span> <<if !_corruptionCheck>><<combataware 3>><</if>></label>
-			<</if>>
-			| <label><<radiobutton "$mouthaction" "mvaginastop" autocheck>> Move your mouth away</label>
-
-		<<elseif $mouth is "mpenis">>
-			<br><br>
-			<<if _corruptionCheck>>
-				<span class="red">The slimes in your ear are forcing you to suck on your penis.</span>
-			<<else>>
-				You're sucking on your penis.
-			<</if>>
-			<br>
-			<<if $selfsuckDepth is $selfsuckLimit>>
-				You have the whole thing in your mouth<<if $selfsuckDepth gte 2>> and throat<</if>>.
-			<<else>>
-				<<switch $selfsuckDepth>>
-					<<case 0>> You have the head in your mouth.
-					<<case 1>> The head reaches the back of your mouth.
-					<<case 2>> You have the head in your throat.
-					<<default>> <span class="red">Error: Impossible condition.</span> /* Max selfsuckDepth is 3 and is captured by the above condition */
-				<</switch>>
-			<</if>>
-			<br>
-
-			<<if _awarenessCheck>>
-				| <label><<radiobutton "$mouthaction" "mpenissuck" autocheck>> <span class="sub">Suck on your penis</span> <<if !_corruptionCheck>><<combataware 3>><</if>></label>
-				<<if $selfsuckDepth lt $selfsuckLimit>>
-					| <label><<radiobutton "$mouthaction" "mpenisdeepthroat" autocheck>> <span class="sub">Take it deeper</span> <<if !_corruptionCheck>><<combataware 3>><</if>></label>
-				<</if>>
-			<</if>>
-			<<if $selfsuckDepth gte 1>>
-				| <label><<radiobutton "$mouthaction" "mpenispullback" autocheck>> Pull back</label>
-			<<else>>
-				| <label><<radiobutton "$mouthaction" "mpenismouthoff" autocheck>> Take your mouth off it</label>
-			<</if>>
-			<<if $selfsuckDepth lte 1>>
-				| <label><<radiobutton "$mouthaction" "mpenisstop" autocheck>> Move your mouth away</label>
-			<</if>>
-		<<elseif $mouth is "mdildomouthentrance">>
-			<br><br>
-			<<if $leftarm is "mdildomouthentrance">>
-				Your $_lefttoycolour $_lefttoy
-			<<else>>
-				Your $_righttoycolour $_righttoy
-			<</if>>
-			is in front of your mouth.
-			<br>
-			| <label><<radiobutton "$mouthaction" "mdildolick" autocheck>> <span class="sub">Lick</span></label>
-			| <label><<radiobutton "$mouthaction" "mdildokiss" autocheck>> <span class="sub">Kiss</span></label>
-			| <label><<radiobutton "$mouthaction" "mrest" autocheck>> Rest</label>
-		<<elseif $mouth is "mdildomouth">>
-			<br><br>
-			<<if $leftarm is "mdildomouth">>
-				Your $_lefttoycolour $_lefttoy
-			<<else>>
-				Your $_righttoycolour $_righttoy
-			<</if>>
-			is inside of your mouth.
-			<br>
-			| <label><<radiobutton "$mouthaction" "mdildolick" autocheck>> <span class="sub">Lick</span></label>
-			| <label><<radiobutton "$mouthaction" "mdildosuck" autocheck>> <span class="sub">Suck</span></label>
-			| <label><<radiobutton "$mouthaction" "mrest" autocheck>> Rest</label>
-		<<elseif $mouth is "mpenisflowerlick">>
-			<br><br>
-			You're licking the phallus plant.
-			<br>
-			| <label><<radiobutton "$mouthaction" "mpenisflowerlick" autocheck>> <span class="sub">Lick</span></label>
-			| <label><<radiobutton "$mouthaction" "mpenisflowertakein" autocheck>> <span class="sub">Take it into your mouth</span><<oralvirginitywarning>></label>
-			| <label><<radiobutton "$mouthaction" "mpenisflowerstop" autocheck>> Move your mouth away</label>
-
-		<<elseif $mouth is "mpenisflowersuck">>
-			<br><br>
-			You're sucking on the phallus plant.
-			<br>
-			| <label><<radiobutton "$mouthaction" "mpenisflowersuck" autocheck>> <span class="sub">Suck</span></label>
-			| <label><<radiobutton "$mouthaction" "mpenisflowersuckstop" autocheck>> Move your mouth away</label>
-		<</if>>
-	<</if>>
-
-	<<if $moorPhallusPlant>>
-		/* Vagina Actions */
-		<<set $vaginaaction to $vaginaactiondefault>>
-		<<set $_pussy to ($_genitals_exposed ? "pussy" : "crotch")>>
-		<<if !$player.vaginaExist or playerChastity("vagina")>>
-			<!-- do nothin -->
-		<<elseif $vaginause is 0>>
-			<br><br>
-			Your pussy is <<print ($_genitals_exposed ? "free" : "free, but clothed")>>.
-			<br>
-			<<if $moorPhallusPlant is 1>>
-				| <label><<radiobutton "$vaginaaction" "mpenisflowerrub" autocheck>> <span class="sub">Rub against the phallus plant</span></label>
-			<</if>>
-			| <label><<radiobutton "$vaginaaction" "mrest" autocheck>> Rest</label>
-
-		<<elseif $vaginause is "mpenisflowerrub">>
-			<br><br>
-			You're rubbing your $_pussy against the phallus plant.
-			<br>
-			| <label><<radiobutton "$vaginaaction" "mpenisflowerrub" autocheck>> <span class="sub">Rub against the phallus plant</span></label>
-			<<if $_genitals_exposed>>
-				| <label><<radiobutton "$vaginaaction" "mpenisflowerpenetrate" autocheck>> <span class="sub">Lower yourself onto the phallus plant</span><<vaginalvirginitywarning>></label>
-			<</if>>
-			| <label><<radiobutton "$vaginaaction" "mpenisflowerstop" autocheck>> Move your $_pussy away</label>
-
-		<<elseif $vaginause is "mpenisflowerpenetrate">>
-			<br><br>
-			You're bouncing on the phallus plant with your vagina.
-			<br>
-			| <label><<radiobutton "$vaginaaction" "mpenisflowerbounce" autocheck>> <span class="sub">Ride the phallus plant</span></label>
-			| <label><<radiobutton "$vaginaaction" "mpenisflowerpenetratestop" autocheck>> Move your pussy away</label>
-		<</if>>
-
-		/* Anus Actions */
-		<<set $anusaction to $anusactiondefault>>
-		<<set $_anus_exposed to $worn.over_lower.anus_exposed gte 1 and $worn.lower.anus_exposed gte 1 and $worn.under_lower.anus_exposed gte 1>>
-		<<set $_ass to ($_anus_exposed ? "anus" : "ass")>>
-		<<if playerChastity("anus")>>
-			<!-- do nothin -->
-		<<elseif $anususe is 0>>
-			<br><br>
-			Your $_ass is <<print ($_anus_exposed ? "free" : "free, but clothed")>>.
-			<br>
-			<<if $moorPhallusPlant is 1>>
-				| <label><<radiobutton "$anusaction" "mpenisflowerrub" autocheck>> <span class="sub">Rub against the phallus plant</span></label>
-			<</if>>
-			| <label><<radiobutton "$anusaction" "mrest" autocheck>> Rest</label>
-
-		<<elseif $anususe is "mpenisflowerrub">>
-			<br><br>
-			You're rubbing your $_ass against the phallus plant.
-			<br>
-			| <label><<radiobutton "$anusaction" "mpenisflowerrub" autocheck>> <span class="sub">Rub against the phallus plant</span></label>
-			<<if $_anus_exposed>>
-				| <label><<radiobutton "$anusaction" "mpenisflowerpenetrate" autocheck>> <span class="sub">Lower yourself onto the phallus plant</span><<analvirginitywarning>></label>
-			<</if>>
-			| <label><<radiobutton "$anusaction" "mpenisflowerstop" autocheck>> Move your $_ass away</label>
-
-		<<elseif $anususe is "mpenisflowerpenetrate">>
-			<br><br>
-			You're bouncing on the phallus plant with your anus.
-			<br>
-			| <label><<radiobutton "$anusaction" "mpenisflowerbounce" autocheck>> <span class="sub">Ride the phallus plant</span></label>
-			| <label><<radiobutton "$anusaction" "mpenisflowerpenetratestop" autocheck>> Move your anus away</label>
-		<</if>>
-	<</if>>
-
-	<br><br><br><br>
-
-	<<if $arousal gte $arousalmax and !$possessed>>
-		<<orgasm>>
-		<<promiscuity1>>
-		<<set $masturbationorgasmstat += 1>>
-		<<set $masturbationorgasm += 1>>
-		<<if $femaleclimax isnot 1 and $mouth isnot "mpenis">>
-			<<set $masturbationorgasmsemen++>>
-		<</if>>
-		<<purity -1>>
-	<</if>>
-	
-	<<pass 10 seconds>>
-	<<set $secondsSpentMasturbating += 10>>
-
-	<<if $possessed>>
-		/* Updates the control caption at the top of the screen to include any control gained through the rest of the passage */
-		<<run $(()=>{
-			Dynamic.render("control-caption")
-		})>>
-	<</if>>
-<</widget>>
diff --git a/game/special-masturbation/effects.js b/game/special-masturbation/effects.js
index 02ec2dea5a5a32cd4c5f4f201fbe3854022d67cc..9b8545d4845bf24cec200e86234bb4dc3551e43a 100644
--- a/game/special-masturbation/effects.js
+++ b/game/special-masturbation/effects.js
@@ -1,4 +1,6 @@
-// eslint-disable-next-line no-unused-vars
+/*
+	Old version can be found at https://gitgud.io/Vrelnir/degrees-of-lewdity/-/blob/master/game/special-masturbation/effects.twee?ref_type=7f47147b
+*/
 function masturbationEffects() {
 	const fragment = document.createDocumentFragment();
 	const br = () => document.createElement("br");
diff --git a/game/special-masturbation/effects.twee b/game/special-masturbation/effects.twee
deleted file mode 100644
index 06ded5fc86adfd43fdd4749dc55234f2953b6d66..0000000000000000000000000000000000000000
--- a/game/special-masturbation/effects.twee
+++ /dev/null
@@ -1,2729 +0,0 @@
-:: Widgets Masturbation Effects [widget]
-
-<<widget "masturbationeffectsOld">>
-	/*For older saves in existing masturbation scene*/
-	<<if !$masturbation_oralSkill>><<set $masturbation_oralSkill to 0>><</if>>
-
-	<<set _playerToys to window.listUniqueCarriedSextoys().filter(toy => (V.player.penisExist && !playerChastity("penis") && toy.type.includesAny("stroker")) || toy.type.includesAny("dildo","breastpump"))>>
-	<<if $currentToyLeft isnot undefined and $currentToyLeft isnot "none">>
-		<<set $_lefttoy to _playerToys[$currentToyLeft].name>>
-	<</if>>
-	<<if $currentToyRight isnot undefined and $currentToyRight isnot "none">>
-		<<set $_righttoy to _playerToys[$currentToyRight].name>>
-	<</if>>
-
-	<<if $player.vaginaExist>>
-		<<set $_hymenIntact to $player.virginity.vaginal is true and $sexStats.vagina.pregnancy.totalBirthEvents is 0>>
-		<<vaginaWetnessCalculate>>
-	<</if>>
-
-	<<if $corruptionMasturbation>>
-		<<if $leftarm is "bound" and $rightarm is "bound">>
-			The slimes in your ear make you fight against the binds around your arms. You make no progress, <span class="blue">and it gives up.</span>
-			<<arousal 600 "masturbation">><<stress 6>><<gstress>><<garousal>>
-			<br><br>
-			<<set $rightaction to "mrest">><<set $leftaction to "mrest">>
-			<<set $corruptionMasturbation to false>>
-			<<unset $corruptionMasturbationCount>>
-		<<elseif playerHeatMinArousal() + playerRutMinArousal() gte 3000>>
-			The slimes in your ear feel that it's not worth trying to force you to masturbate in your current state, <span class="blue">and it lets you go.</span>
-			<<set $corruptionMasturbation to false>>
-			<<unset $corruptionMasturbationCount>>
-		<<else>>
-			<<if $orgasmdown gte 2>>
-				<<if $corruptionMasturbationCount is undefined or $corruptionMasturbationCount is null>>
-					<<set $corruptionMasturbationCount to random(2,6)>>
-				<</if>>
-				<<set $corruptionMasturbationCount-->>
-				<<if $corruptionMasturbationCount is 0>>
-					<<set $corruptionMasturbation to false>>
-					<<unset $corruptionMasturbationCount>>
-					<<if $awareness lt 200>>
-						/*Prevents the PC from continuing actions that they normally are unable to do yet*/
-						<span class="green">With the loss of the control from the slimes in your ear, you
-							<<if $mouth is "mpenis">>
-								<<set $mouthactiondefault to "mrest">><<set $mouthaction to 0>><<set $mouth to 0>><<set $penisuse to 0>>
-								remove your <<penis>> from your mouth and move away.
-							<<elseif $mouth is "mpenisentrance">>
-								<<set $mouthactiondefault to "mrest">><<set $mouthaction to 0>><<set $mouth to 0>><<set $penisuse to 0>>
-								move away from your <<penis>>.
-							<<elseif $mouth is "mvaginaentrance">>
-								<<set $mouthactiondefault to "mrest">><<set $mouthaction to 0>><<set $mouth to 0>>
-								move away from your <<pussy>>.
-							<</if>>
-						</span>
-					<</if>>
-				<</if>>
-			<</if>>
-			<<if $corruptionMasturbation>>
-				<<masturbationSlimeControl>>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "moverupper" or $rightaction is "moverupper">>
-		<<if $leftaction is "moverupper">>
-			<<set $leftaction to 0>><<set $leftactiondefault to "mrest">>
-		<</if>>
-		<<if $rightaction is "moverupper">>
-			<<set $rightaction to 0>><<set $rightactiondefault to "mrest">>
-		<</if>>
-		<<if $worn.over_upper.open is 1>>
-			<<set $worn.over_upper.exposed to 2>><<set $worn.over_upper.state_top to "midriff">>
-			<<if $player.breastsize gte 3>>
-				You pull down your $worn.over_upper.name, <span class="lewd">exposing your <<breastsaside>>.</span>
-			<<else>>
-				You pull down your $worn.over_upper.name, <span class="lewd">exposing your <<breastsaside>>.</span>
-			<</if>>
-		<<else>>
-			<<set $worn.over_upper.exposed to 2>><<set $worn.over_upper.state to "chest">>
-			<<if $player.breastsize gte 3>>
-				You pull up your $worn.over_upper.name, <span class="lewd">exposing your <<breastsaside>>.</span>
-			<<else>>
-				You pull up your $worn.over_upper.name, <span class="lewd">exposing your <<breastsaside>>.</span>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mupper" or $rightaction is "mupper">>
-		<<if $leftaction is "mupper">>
-			<<set $leftaction to 0>><<set $leftactiondefault to "mrest">>
-		<</if>>
-		<<if $rightaction is "mupper">>
-			<<set $rightaction to 0>><<set $rightactiondefault to "mrest">>
-		<</if>>
-		/* needs work; what if layer above is not exposed? */
-		<<if $worn.upper.open is 1>>
-			<<set $worn.upper.exposed to 2>><<set $worn.upper.state_top to "midriff">>
-			<<if $player.breastsize gte 3>>
-				You pull down your $worn.upper.name, <span class="lewd">exposing your <<breastsaside>>.</span>
-			<<else>>
-				You pull down your $worn.upper.name, <span class="lewd">exposing your <<breastsaside>>.</span>
-			<</if>>
-		<<else>>
-			<<set $worn.upper.exposed to 2>><<set $worn.upper.state to "chest">>
-			<<if $player.breastsize gte 3>>
-				You pull up your $worn.upper.name, <span class="lewd">exposing your <<breastsaside>>.</span>
-			<<else>>
-				You pull up your $worn.upper.name, <span class="lewd">exposing your <<breastsaside>>.</span>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "munder_upper" or $rightaction is "munder_upper">>
-		<<if $leftaction is "munder_upper">>
-			<<set $leftaction to 0>><<set $leftactiondefault to "mrest">>
-		<</if>>
-		<<if $rightaction is "munder_upper">>
-			<<set $rightaction to 0>><<set $rightactiondefault to "mrest">>
-		<</if>>
-		/* needs work; what if layer above is not exposed? */
-		<<if $worn.under_upper.open is 1>>
-			<<set $worn.under_upper.exposed to 2>><<set $worn.under_upper.state_top to "midriff">>
-			<<if $player.breastsize gte 3>>
-				You pull down your $worn.under_upper.name <span class="lewd">and your <<breasts>> flop out.</span>
-			<<else>>
-				You pull down your $worn.under_upper.name, <span class="lewd">exposing your <<breasts>>.</span>
-			<</if>>
-		<<else>>
-			<<set $worn.under_upper.exposed to 2>><<set $worn.under_upper.state to "chest">>
-			<<if $player.breastsize gte 3>>
-				You pull up your $worn.under_upper.name <span class="lewd">and your <<breasts>> flop out.</span>
-			<<else>>
-				You pull up your $worn.under_upper.name, <span class="lewd">exposing your <<breasts>>.</span>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "moverlower" or $rightaction is "moverlower">>
-		<<if $leftaction is "moverlower">>
-			<<set $leftaction to 0>><<set $leftactiondefault to "mrest">>
-		<</if>>
-		<<if $rightaction is "moverlower">>
-			<<set $rightaction to 0>><<set $rightactiondefault to "mrest">>
-		<</if>>
-		<<set $worn.over_lower.anus_exposed to 1>><<set $worn.over_lower.vagina_exposed to 1>><<set $worn.over_lower.exposed to 2>>
-		<<if setup.clothes.over_lower[clothesIndex('over_lower', $worn.over_lower)].skirt is 1>>
-			<<set $worn.over_lower.skirt_down to 0>>
-			You lift up your $worn.over_lower.name, <span class="lewd">exposing your <<exposedlower>>.</span>
-		<<else>>
-			<<set $worn.over_lower.state to "thighs">>
-			You pull down your $worn.over_lower.name, <span class="lewd">exposing your <<exposedlower>>.</span>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mlower" or $rightaction is "mlower">>
-		<<if $leftaction is "mlower">>
-			<<set $leftaction to 0>><<set $leftactiondefault to "mrest">>
-		<</if>>
-		<<if $rightaction is "mlower">>
-			<<set $rightaction to 0>><<set $rightactiondefault to "mrest">>
-		<</if>>
-		<<set $worn.lower.anus_exposed to 1>><<set $worn.lower.vagina_exposed to 1>><<set $worn.lower.exposed to 2>>
-		/* needs work; what if layer above is not exposed? */
-		<<if setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1>>
-			<<set $worn.lower.skirt_down to 0>>
-			You lift up your $worn.lower.name, <span class="lewd">exposing your <<undies>>.</span>
-		<<else>>
-			<<set $worn.lower.state to "thighs">>
-			You pull down your $worn.lower.name, <span class="lewd">exposing your <<undies>>.</span>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "munder" or $rightaction is "munder">>
-		<<if $leftaction is "munder">>
-			<<set $leftaction to 0>><<set $leftactiondefault to "mrest">>
-		<</if>>
-		<<if $rightaction is "munder">>
-			<<set $rightaction to 0>><<set $rightactiondefault to "mrest">>
-		<</if>>
-		<<set $worn.under_lower.anus_exposed to 1>><<set $worn.under_lower.vagina_exposed to 1>>
-		<<set $worn.under_lower.state to "thighs">><<set $worn.under_lower.exposed to 2>>
-		/* needs work; what if layer above is not exposed? */
-		You pull down your $worn.under_lower.name, <span class="lewd">exposing your <<genitals>>.</span>
-	<</if>>
-
-	<<set $_genitals_exposed to $worn.over_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1 and $worn.under_lower.vagina_exposed gte 1>>
-	<<set $_breasts_exposed to $worn.over_upper.exposed gte 1 and $worn.upper.exposed gte 1 and $worn.under_upper.exposed gte 1>>
-
-	<<if $leftaction is "msemencover" and $rightaction is "msemencover">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftFingersSemen to 1>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightFingersSemen to 1>>
-		You gather some of your semen and rub it between your fingers.
-		<<arousal 200 "masturbation">>
-	<<elseif $leftaction is "msemencover">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftFingersSemen to 1>>
-		You gather some of your semen and rub it between your fingers.
-		<<arousal 100 "masturbation">>
-	<<elseif $rightaction is "msemencover">>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightFingersSemen to 1>>
-		You gather some of your semen and rub it between your fingers.
-		<<arousal 100 "masturbation">>
-	<</if>>
-
-	<<if $leftaction is "mchest" or $rightaction is "mchest">>
-		<<set _handsOnBreasts to 0>>
-		<<if $leftaction is "mchest">>
-			<<set _handsOnBreasts += 1>>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-			<<arousal 100 "masturbationBreasts">><<playWithBreasts 1>><<milkvolume 1>><<set _handsCount++>>
-		<</if>>
-		<<if $rightaction is "mchest">>
-			<<set _handsOnBreasts += 1>>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<<arousal 100 "masturbationBreasts">><<playWithBreasts 1>><<milkvolume 1>><<set _handsCount++>>
-		<</if>>
-
-		/* the text output currently does not care which hand is used or if both hands are used */
-		<<if $worn.over_upper.exposed gte 2 and $worn.upper.exposed gte 2 and $worn.under_upper.exposed gte 1>>
-			<<arousal `100 * _handsOnBreasts` "masturbationBreasts">>
-			<<if $player.breastsize lte 2>>
-				<<if $arousal gte ($arousalmax / 5) * 4>>
-					You tease your sensitive nipples as much as you can stand, each brush of your fingers sending jolts of excitement through you.
-				<<elseif $arousal gte ($arousalmax / 5) * 3>>
-					You fondle your <<breasts>> while circling your fingers around the areola, occasionally giving your nipples a little tweak.
-				<<else>>
-					You stroke your <<breasts>> and rub your nipples between your fingers, feeling the lewd warmth grow.
-				<</if>>
-			<<elseif $player.breastsize lte 5>>
-				<<if $arousal gte ($arousalmax / 5) * 4>>
-					You cup your <<breasts>> and tease your sensitive nipples as much as you can stand, each brush of your fingers sending jolts of excitement through you.
-				<<elseif $arousal gte ($arousalmax / 5) * 3>>
-					You fondle your <<breasts>> while circling your fingers around the areola, occasionally giving your nipples a little tweak.
-				<<else>>
-					You stroke your <<breasts>> and rub your nipples between your fingers, feeling the lewd warmth grow.
-				<</if>>
-			<<else>>
-				<<if $arousal gte ($arousalmax / 5) * 4>>
-					You cup your <<breasts>> and tease your sensitive nipples as much as you can stand. Each brush of your fingers sends jolts of excitement through you.
-				<<elseif $arousal gte ($arousalmax / 5) * 3>>
-					You fondle your <<breasts>> while circling your fingers around the areola, occasionally giving your nipples a little tweak.
-				<<else>>
-					You stroke your <<breasts>> and rub your nipples between your fingers, feeling the lewd warmth grow.
-				<</if>>
-			<</if>>
-		<<else>>
-			<<if $player.breastsize lte 2>>
-				<<if $arousal gte ($arousalmax / 5) * 4>>
-					Your <<nipples>> stand erect against the fabric of your <<top>>, straining for attention.
-					You tweak and tease them as much as you can bear.
-				<<elseif $arousal gte ($arousalmax / 5) * 3>>
-					You fondle your <<breasts>> and tweak your nipples through your <<top>>.
-				<<else>>
-					You stroke your <<breasts>> and rub your nipples between your fingers. It feels good, even with your <<topaside>> in the way.
-				<</if>>
-			<<elseif $player.breastsize lte 5>>
-				<<if $arousal gte ($arousalmax / 5) * 4>>
-					Your nipples stand erect against the fabric of your <<top>>, straining for attention.
-					You cup your <<breasts>> and play with your sensitive buds as much as you can bear.
-				<<elseif $arousal gte ($arousalmax / 5) * 3>>
-					You fondle your <<breasts>> and tweak your nipples through your <<top>>.
-				<<else>>
-					You stroke your <<breasts>> and rub your nipples between your fingers. It feels good, even with your <<topaside>> in the way.
-				<</if>>
-			<<else>>
-				<<if $arousal gte ($arousalmax / 5) * 4>>
-					Your nipples stand erect against the fabric of your <<top>>, straining for attention.
-					You cup your <<breasts>> and play with your sensitive buds as much as you can bear.
-				<<elseif $arousal gte ($arousalmax / 5) * 3>>
-					You fondle your <<breasts>> and tweak your nipples through your <<top>>.
-				<<else>>
-					You stroke your <<breasts>> and rub your nipples between your fingers. It feels good, even with your <<topaside>> in the way.
-				<</if>>
-			<</if>>
-		<</if>>
-		<<if $lactating is 1 and $breastfeedingdisable is "f" and _handsOnBreasts gte 0>>
-			<<if $milk_amount gte 1>>
-				<<if $worn.over_upper.exposed is 0 or $worn.upper.exposed is 0 or $worn.under_upper.exposed is 0>>
-					<span class="lewd">Milk leaks from your buds, flowing into your top.</span>
-					<<if $masturbation_bowl is 1>><i>You should remove your top if you want to gather any.</i><</if>>
-				<<else>>
-					<span class="lewd">Milk leaks from your buds.</span>
-				<</if>>
-				<<breastfeed _handsOnBreasts>>
-			<<else>>
-				No milk leaks from your buds. You must be dry.
-			<</if>>
-		<</if>>
-	<</if>>
-
-
-	<<if $leftaction is "mchastity" or $rightaction is "mchastity">>
-		<<set _stress to 0>>
-		<<if $leftaction is "mchastity">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>><<set _stress++>>
-		<</if>>
-		<<if $rightaction is "mchastity">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>><<set _stress++>>
-		<</if>>
-		You try to dig your fingers beneath your $worn.genitals.name, but to no avail.
-		Your <<genitals 1>> aches for your touch, but there's nothing you can do.
-		<<gstress>><<stress _stress>>
-	<</if>>
-
-	<<if $leftaction is "mpenisentrance" or $rightaction is "mpenisentrance">>
-		<<if $leftaction is "mpenisentrance">>
-			<<set $leftactiondefault to "mpenisglans">><<set $leftarm to "mpenisentrance">><<set $leftaction to 0>>
-			<<arousal 100 "masturbationGenital">>
-		<</if>>
-		<<if $rightaction is "mpenisentrance">>
-			<<set $rightactiondefault to "mpenisglans">><<set $rightarm to "mpenisentrance">><<set $rightaction to 0>>
-			<<arousal 100 "masturbationGenital">>
-		<</if>>
-
-		/* the text output currently does not care which hand is used or if both hands are used */
-		<<if $worn.under_lower.vagina_exposed is 1 and $worn.lower.vagina_exposed is 1>>
-			<span class="blue">You run your fingers over your <<penis>> and shiver in anticipation.</span>
-		<<elseif $worn.under_lower.vagina_exposed is 1>>
-			<span class="blue">You run your fingers over your <<penis>>, feeling the bulge beneath your $worn.lower.name.</span>
-		<<elseif $worn.lower.vagina_exposed is 1>>
-			<span class="blue">You run your fingers over your <<penis>>, feeling the bulge beneath your $worn.under_lower.name.</span>
-		<</if>>
-	<</if>>
-
-	/* if your mouth is on your penis, your hands should not have access to your glans */
-	<<if $mouth is "mpenis" or $mouthaction is "mpenistakein" or $mouthaction is "mpenissuck">>
-		<<if $leftaction is "mpenisglans">>
-			<<set $leftaction to "mpenisshaft">>
-		<</if>>
-		<<if $rightaction is "mpenisglans">>
-			<<set $rightaction to "mpenisshaft">>
-		<</if>>
-	<</if>>
-
-	<<if $vaginaaction is "mpenisflowerpenetrate" or $vaginause is "mpenisflowerpenetrate">>
-		<<if $leftaction is "mvagina">>
-			<<if $player.penisExist>>
-				<<set $leftaction to "mvaginarub">>
-			<<else>>
-				<<set $leftaction to "mvaginaclit">>
-			<</if>>
-		<</if>>
-		<<if $rightaction is "mvagina">>
-			<<if $player.penisExist>>
-				<<set $rightaction to "mvaginarub">>
-			<<else>>
-				<<set $rightaction to "mvaginaclit">>
-			<</if>>
-		<</if>>
-
-		<<if $mouthaction is "mvaginaentrance">>
-			<<set $mouthactiondefault to "mrest">><<set $mouthaction to 0>>
-		<</if>>
-		<<if $mouth is "mvaginaentrance">>
-			<<set $mouthactiondefault to "mrest">><<set $mouthaction to 0>><<set $mouth to 0>>
-			You move your mouth away from your pussy.
-		<</if>>
-
-		<<if $leftaction is "mvaginatease" and $rightaction is "mvaginatease">>
-			<<set $leftactiondefault to "rest">><<set $leftaction to 0>><<set $rightactiondefault to "rest">><<set $rightaction to 0>><<set $leftarm to 0>><<set $rightarm to 0>>
-			You remove your fingers from your vagina.
-		<<elseif $leftaction is "mvaginatease">>
-			<<set $leftactiondefault to "rest">><<set $leftaction to 0>><<set $leftarm to 0>>
-			You remove your finger from your vagina.
-		<<elseif $rightaction is "mvaginatease">>
-			<<set $rightactiondefault to "rest">><<set $rightaction to 0>><<set $rightarm to 0>>
-			You remove your finger from your vagina.
-		<</if>>
-	<</if>>
-
-	<<if $anusaction is "mpenisflowerpenetrate" or $anususe is "mpenisflowerpenetrate">>
-		<<if $leftaction is "manus">>
-			<<set $leftaction to "manusrub">>
-		<</if>>
-		<<if $rightaction is "manus">>
-			<<set $rightaction to "manusrub">>
-		<</if>>
-
-		<<if ($leftaction is "manustease" or $leftaction is "manusprostate") and ($rightaction is "manustease" or $rightaction is "manusprostate")>>
-			<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-			<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-			You remove your fingers from your anus.
-		<<elseif $leftaction is "manustease" or $leftaction is "manusprostate">>
-			<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-			You remove your finger from your anus.
-		<<elseif $rightaction is "manustease" or $rightaction is "manusprostate">>
-			<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-			You remove your finger from your anus.
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mpenisglans" and $rightaction is "mpenisglans">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 400 "masturbationPenis">>
-		<<if $player.virginity.penile is true>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You rub your virgin foreskin with increasing speed. Strange feelings emanate from the tip and through your body.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You rub your virgin foreskin with your thumb and play with the tip. It's sensitive even though you can't pull it back.
-			<<else>>
-				You hold your tip of your virgin penis in your palm and gently rub the foreskin with your thumb.
-			<</if>>
-		<<else>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You retract and relax your foreskin, rubbing it over your glans again and again.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You rub your foreskin against your glans and tease your frenulum.
-			<<else>>
-				You hold your <<penis>> in your palm and rub your foreskin against your glans.
-			<</if>>
-		<</if>>
-	<<elseif $leftaction is "mpenisglans" or $rightaction is "mpenisglans">>
-		<<if $leftaction is "mpenisglans">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<</if>>
-		<<if $rightaction is "mpenisglans">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<</if>>
-		<<arousal 200 "masturbationPenis">>
-		<<if $player.virginity.penile is true>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You rub your virgin foreskin with increasing speed. Strange feelings emanate from the tip and through your body.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You rub your virgin foreskin with your thumb and play with the tip. It's sensitive even though you can't pull it back.
-			<<else>>
-				You hold your tip of your virgin penis in your palm and gently rub the foreskin with your thumb.
-			<</if>>
-		<<else>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You retract and relax your foreskin, rubbing it over your glans again and again.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You rub your foreskin against your glans and tease your frenulum.
-			<<else>>
-				You hold your <<penis>> in your palm and rub your foreskin against your glans.
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mpenisshaft" and $rightaction is "mpenisshaft">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 400 "masturbationPenis">>
-		<<if $player.virginity.penile is true>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You run your fingers up and down your virgin penis as roughly as your foreskin will allow.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You run your fingers up and down the length of your virgin penis.
-			<<else>>
-				You run your fingers against the underside of your <<penis>>, enjoying the sensation.
-			<</if>>
-		<<else>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You pump up and down the length of your <<penis>>.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You run your fingers up and down your shaft, tickling slightly and generating a lewd warmth.
-			<<else>>
-				You gently caress the length of your <<penis>>.
-			<</if>>
-		<</if>>
-	<<elseif $leftaction is "mpenisshaft" or $rightaction is "mpenisshaft">>
-		<<if $leftaction is "mpenisshaft">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-			<<arousal 200 "masturbationPenis">>
-		<</if>>
-		<<if $rightaction is "mpenisshaft">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<<arousal 200 "masturbationPenis">>
-		<</if>>
-		<<if $player.virginity.penile is true>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You run your fingers up and down your virgin penis as roughly as your foreskin will allow.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You run your fingers up and down the length of your virgin penis.
-			<<else>>
-				You run your fingers against the underside of your <<penis>>, enjoying the sensation.
-			<</if>>
-		<<else>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You pump up and down the length of your <<penis>>.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You run your fingers up and down your shaft, tickling slightly and generating a lewd warmth.
-			<<else>>
-				You gently caress the length of your <<penis>>.
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mpenisstop" and $rightaction is "mpenisstop">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="lblue">You move your hands away from your <<penis>>.</span>
-	<<elseif $leftaction is "mpenisstop">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<span class="lblue">You move your left hand away from your <<penis>>.</span>
-	<<elseif $rightaction is "mpenisstop">>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="lblue">You move your right hand away from your <<penis>>.</span>
-	<</if>>
-
-	/* tiny balls are too small for both hands */
-	<<if $ballssize lte 0 and (($leftarm is "mballs" and $rightarm is "mballs") or ($leftaction is "mballsentrance" and $rightaction is "mballsentrance"))>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-	<</if>>
-
-	<<silently>>
-		/* describe the balls consistently if they are referred to multiple times */
-		<<ballsize>><<set $_balls to _text_output + " ">>
-		<<testicles>><<set $_balls += _text_output>>
-	<</silently>>
-
-	<<if $leftaction is "mballsstop" and $rightaction is "mballsstop">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="lblue">You move your hands away from your balls.</span>
-	<<elseif $leftaction is "mballsstop">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<span class="lblue">You move your left hand away from your balls.</span>
-	<<elseif $rightaction is "mballsstop">>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="lblue">You move your right hand away from your balls.</span>
-	<</if>>
-
-	<<if $leftaction is "mballsfondle" and $rightaction is "mballsfondle">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 200 "masturbationPenis">>
-
-		<<if $arousal gte $arousalmax * (4/5)>>
-			You grope your $_balls with both of your hands and enjoy the feeling of tightness as they clench up against the base of your penis.
-		<<elseif $arousal gte $arousalmax * (3/5)>>
-			You fondle your $_balls with both of your hands and enjoy the tickling feeling.
-		<<elseif $arousal gte $arousalmax * (2/5)>>
-			You jiggle your $_balls around in your hands and enjoy the feeling of gravity on them.
-		<<else>>
-			You roll your $_balls around in your hands.
-		<</if>>
-	<<elseif $leftaction is "mballsfondle" or $rightaction is "mballsfondle">>
-		<<if $leftaction is "mballsfondle">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-			<<set $_hand to "left hand">>
-		<<else>>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<<set $_hand to "right hand">>
-		<</if>>
-		<<arousal 100 "masturbationPenis">>
-		/* if both hands are on their balls, say "the other" when referring to the second */
-		<<set $_oneofyourballs to ($ballssize lte 0 ? "both of your $_balls" : ($_oneofyourballs is undefined ? "one of your $_balls" : "the other"))>>
-
-		<<if $arousal gte $arousalmax * (4/5)>>
-			You grope $_oneofyourballs with your $_hand and enjoy the feeling of tightness as your balls clench up against the base of your penis.
-		<<elseif $arousal gte $arousalmax * (3/5)>>
-			You fondle $_oneofyourballs with your $_hand and enjoy the tickling feeling.
-		<<elseif $arousal gte $arousalmax * (2/5)>>
-			You jiggle $_oneofyourballs in your $_hand and enjoy the feeling of gravity on it.
-		<<else>>
-			You stroke $_oneofyourballs with your $_hand.
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mballssqueeze" and $rightaction is "mballssqueeze">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 400 "masturbationPenis">>
-		<<set $_gently to ($arousal gte $arousalmax * (4/5) ? "urgently" : ($arousal gte $arousalmax * (3/5) ? "" : "gently"))>>
-
-		<<switch $ballssize>>
-			<<case -2 -1 0>> <span class="red">This text should be unreachable.</span>
-			<<case 1 2>> You cup your $_balls with your hands and $_gently squeeze them.
-			<<case 3>> You cup your $_balls with your hands and $_gently squeeze them.
-			<<case 4>> You $_gently squeeze your $_balls with your hands.
-		<</switch>>
-
-		<<set _ballplayeffects to true>>
-
-	<<elseif $leftaction is "mballssqueeze" or $rightaction is "mballssqueeze">>
-		<<if $leftaction is "mballssqueeze">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-			<<set $_hand to "left hand">>
-		<<else>>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<<set $_hand to "right hand">>
-		<</if>>
-		<<arousal 200 "masturbationPenis">>
-		/* if both hands are on their balls, say "the other" when referring to the second */
-		<<set $_oneofyourballs to ($ballssize lte 0 ? "your $_balls" : ($_oneofyourballs is undefined ? "one of your $_balls" : "the other"))>>
-		<<set $_gently to ($arousal gte $arousalmax * (4/5) ? "urgently" : ($arousal gte $arousalmax * (3/5) ? "" : "gently"))>>
-
-		<<switch $ballssize>>
-			<<case -2 -1 0>> You cup your $_balls with your $_hand and $_gently squeeze them.
-			<<case 1 2>> You cup $_oneofyourballs with your $_hand and $_gently squeeze it.
-			<<case 3>> You cup $_oneofyourballs with your $_hand and $_gently squeeze it.
-			<<case 4>> You $_gently squeeze $_oneofyourballs with your $_hand.
-		<</switch>>
-
-		<<set _ballplayeffects to true>>
-
-	<</if>>
-
-	<<if $leftaction is "mballsentrance" and $rightaction is "mballsentrance">>
-		<<set $leftactiondefault to "mballsfondle">><<set $leftaction to 0>><<set $leftarm to "mballs">>
-		<<set $rightactiondefault to "mballsfondle">><<set $rightaction to 0>><<set $rightarm to "mballs">>
-		<<arousal 200 "masturbationPenis">>
-
-		<<switch $ballssize>>
-			<<case -2 -1 0>> <span class="red">This text should be unreachable.</span>
-			<<case 1 2>> <span class="blue">You take one of your $_balls in each hand.</span>
-			<<case 3>> <span class="blue">You take one of your $_balls in each hand. They fill your palms nicely.</span>
-			<<case 4>> <span class="blue">You take one of your $_balls in each hand. You can barely get your hands around them.</span>
-		<</switch>>
-
-		<<set _ballplayeffects to true>>
-
-	<<elseif $leftaction is "mballsentrance" or $rightaction is "mballsentrance">>
-		<<if $leftaction is "mballsentrance">>
-			<<set $leftactiondefault to "mballsfondle">><<set $leftaction to 0>><<set $leftarm to "mballs">>
-			<<set $_hand to "left hand">><<set $_otherHandOnBalls to $rightarm is "mballs">>
-		<<else>>
-			<<set $rightactiondefault to "mballsfondle">><<set $rightaction to 0>><<set $rightarm to "mballs">>
-			<<set $_hand to "right hand">><<set $_otherHandOnBalls to $leftarm is "mballs">>
-		<</if>>
-		<<arousal 100 "masturbationPenis">>
-		/* if both hands are on their balls, say "the other" when referring to the second */
-		<<set $_oneofyourballs to ($ballssize lte 0 ? "both of your $_balls" : ($_oneofyourballs is undefined ? "one of your $_balls" : "the other"))>>
-
-		<<switch $ballssize>>
-			<<case -2 -1 0>> <span class="blue">You easily grab both of your $_balls with your $_hand.</span>
-			<<case 1 2>> <span class="blue">You take $_oneofyourballs in your $_hand.</span>
-			<<case 3>> <span class="blue">You take $_oneofyourballs in your $_hand. It fills your palm nicely.</span>
-			<<case 4>> <span class="blue">You take $_oneofyourballs in your $_hand. You can barely get your hand around it.</span>
-		<</switch>>
-
-		<<set _ballplayeffects to true>>
-	<</if>>
-
-	<<if _ballplayeffects>>
-		<<if $worn.over_lower.vagina_exposed is 0>>
-			<<set _highestclothinglower to $worn.over_lower.name>>
-		<<elseif $worn.lower.vagina_exposed is 0>>
-			<<set _highestclothinglower to $worn.lower.name>>
-		<<elseif $worn.under_lower.vagina_exposed is 0>>
-			<<set _highestclothinglower to $worn.under_lower.name>>
-		<<else>>
-			<<set $_genitals_exposed to true>>
-		<</if>>
-		<<if $arousal gte $arousalmax * (4/5)>>
-			Your <<penis>> bucks eagerly, and
-			<<if $_genitals_exposed>>
-				precum leaps from the tip.
-			<<else>>
-				precum seeps through your _highestclothinglower.
-			<</if>>
-		<<elseif $arousal gte $arousalmax * (3/5)>>
-			Your <<penis>> bucks eagerly, and
-			<<if $_genitals_exposed>>
-				precum beads at the tip.
-			<<else>>
-				your precum creates a dark spot on your _highestclothinglower.
-			<</if>>
-		<<elseif $arousal gte $arousalmax * (2/5)>>
-			The pressure makes your <<penis>> throb.
-		<<else>>
-			The pressure makes your <<penis>> twitch.
-		<</if>>
-	<</if>>
-
-	<!-- Possessed actions -->
-	<<if $possessed>>
-		<<dynamicblock id=control-caption>>
-			<<controlcaption>>
-		<</dynamicblock>>
-
-		<<if $combatBegun is 1>>
-			<<set _mResist to 0>>
-			<<if ["mpenisstopW","mbreaststopW","mvaginastopW"].includes($leftaction)>>
-				<<set _mResist += 2>>
-			<</if>>
-			<<if ["mpenisstopW","mbreaststopW","mvaginastopW"].includes($rightaction)>>
-				<<set _mResist += 2>>
-			<</if>>
-			<<set $leftactiondefault to $leftaction>><<set $rightactiondefault to $rightaction>>
-
-			<<if _mResist is 0>>
-				<span class="pink">You let it take you.</span>
-				<<pain -2>><<stress -12>><<sub 2>><<lpain>><<llstress>><<set $wraith.will += 30>>
-			<<else>>
-				<<set _wraithWill to Math.floor(1 + $wraith.will)>>
-				<<willpowerdifficulty 1 _wraithWill true>>
-				<<if $willpowerSuccess>>
-					<<set _resistSuccess to 1>>
-					<span class="green">
-						You fight for control.
-						<<if _mResist is 4>>
-							Your arms lock up.
-						<<else>>
-							Your arm locks up.
-						<</if>>
-					</span>
-					<<pain _mResist>><<stress _mResist>><<trauma _mResist>><<def 2>><<gpain>><<gtrauma>><<gstress>><<if _mResist is 4>><<ggcontrol>><<else>><<gcontrol>><</if>><<set $wraith.will -= Math.floor(currentSkillValue('willpower') / 24)*_mResist>>
-					<<control `Math.floor(currentSkillValue('willpower') / 24)*_mResist / 10`>>
-				<<else>>
-					<span class="red">Your body does not obey.</span>
-					<<switch $leftaction>>
-						<<case "mbreastW" "mbreaststopW">><<set $leftaction to "mbreastW">>
-						<<case "mvaginaW" "mvaginastopW">><<set $leftaction to "mvaginaW">>
-						<<case "mpenisW" "mpenisstopW">><<set $leftaction to "mpenisW">>
-						<<default>>
-					<</switch>>
-					<<switch $rightaction>>
-						<<case "mbreastW" "mbreaststopW">><<set $rightaction to "mbreastW">>
-						<<case "mvaginaW" "mvaginastopW">><<set $rightaction to "mvaginaW">>
-						<<case "mpenisW" "mpenisstopW">><<set $rightaction to "mpenisW">>
-						<<default>>
-					<</switch>>
-					<<stress 6>><<trauma 6>><<willpower 1>><<def 1>><<gtrauma>><<gstress>><<gwillpower>><<set $wraith.will -= Math.floor(currentSkillValue('willpower') / 40)*_mResist>>
-				<</if>>
-			<</if>>
-			<br><br>
-		<<else>>
-			<<set $combatBegun to 1>>
-		<</if>>
-
-		<<if $leftaction is "mpenisW" and $rightaction is "mpenisW">>
-			<<arousal 400 "masturbationPenis">><<set $leftaction to 0>><<set $rightaction to 0>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				Your hands wildly pump up and down the length of your <<penis>>.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				Your hands run their fingers up and down your shaft, tickling slightly and generating a lewd warmth.
-			<<else>>
-				Your hands caress the length of your <<penis>> with jerky motions.
-			<</if>>
-		<</if>>
-
-		<<if $leftaction is "mpenisW" or $rightaction is "mpenisW">>
-			<<arousal 200 "masturbationPenis">>
-			<<set $_hand to $leftaction is "mpenisW" ? "left" : "right">>
-			<<if $leftaction is "mpenisW">>
-				<<set $leftaction to 0>>
-			<<else>>
-				<<set $rightaction to 0>>
-			<</if>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				Your $_hand hand wildly pumps up and down the length of your <<penis>>.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				Your $_hand hand runs their fingers up and down your shaft, tickling slightly and generating a lewd warmth.
-			<<else>>
-				Your $_hand hand caresses the length of your <<penis>> with jerky motions.
-			<</if>>
-		<</if>>
-
-		<<if $leftaction is "mbreastW" or $rightaction is "mbreastW">>
-			<<if $leftaction is "mbreastW" and $rightaction is "mbreastW">>
-				<<set $leftaction to 0>><<set $rightaction to 0>>
-				<<arousal 400 "masturbationBreasts">><<playWithBreasts 2>><<set _handsOnBreasts to 2>>
-
-				<<if $player.breastsize lte 2>>
-					<<if $arousal gte ($arousalmax / 5) * 4>>
-						Your hands tease your sensitive nipples more than you can stand, each brush of your fingers sending jolts of excitement through you.
-					<<elseif $arousal gte ($arousalmax / 5) * 3>>
-						Your hands fondle your <<breasts>> while circling your fingers around the areola, occasionally giving your nipples a little tweak.
-					<<else>>
-						Your hands stroke your <<breasts>> and rub your nipples between your fingers, making a lewd warmth grow.
-					<</if>>
-				<<elseif $player.breastsize lte 5>>
-					<<if $arousal gte ($arousalmax / 5) * 4>>
-						Your hands cup your <<breasts>> and tease your sensitive nipples more than you can stand, each brush of your fingers sending jolts of excitement through you.
-					<<elseif $arousal gte ($arousalmax / 5) * 3>>
-						Your hands fondle your <<breasts>> while circling your fingers around the areola, occasionally giving your nipples a little tweak.
-					<<else>>
-						Your hands stroke your <<breasts>> and rub your nipples between your fingers, making a lewd warmth grow.
-					<</if>>
-				<<else>>
-					<<if $arousal gte ($arousalmax / 5) * 4>>
-						Your hands cup your <<breasts>> and tease your sensitive nipples more than you can stand. Each brush of your fingers sends jolts of excitement through you.
-					<<elseif $arousal gte ($arousalmax / 5) * 3>>
-						Your hands fondle your <<breasts>> while circling your fingers around the areola, occasionally giving your nipples a little tweak.
-					<<else>>
-						Your hands stroke your <<breasts>> and rub your nipples between your fingers, feeling the lewd warmth grow.
-					<</if>>
-				<</if>>
-			<<else>>
-				<<if $leftaction is "mbreastW">>
-					<<set $leftaction to 0>>
-					<<arousal 200 "masturbationBreasts">><<playWithBreasts 1>>
-					<<set $_hand to "left hand">>
-				<</if>>
-				<<if $rightaction is "mbreastW">>
-					<<set $rightaction to 0>>
-					<<arousal 200 "masturbationBreasts">><<playWithBreasts 1>>
-					<<set $_hand to "right hand">>
-				<</if>>
-				<<set _handsOnBreasts to 1>>
-
-				<<if $player.breastsize lte 2>>
-					<<if $arousal gte ($arousalmax / 5) * 4>>
-						Your $_hand teases your sensitive nipples more than you can stand, each brush of your fingers sending jolts of excitement through you.
-					<<elseif $arousal gte ($arousalmax / 5) * 3>>
-						Your $_hand fondles your <<breasts>> while circling your fingers around the areola, occasionally giving your nipples a little tweak.
-					<<else>>
-						Your $_hand strokes your <<breasts>> and rub your nipples between your fingers, making a lewd warmth grow.
-					<</if>>
-				<<elseif $player.breastsize lte 5>>
-					<<if $arousal gte ($arousalmax / 5) * 4>>
-						Your $_hand cup yours <<breasts>> and tease your sensitive nipples more than you can stand, each brush of your fingers sending jolts of excitement through you.
-					<<elseif $arousal gte ($arousalmax / 5) * 3>>
-						Your $_hand fondles your <<breasts>> while circling your fingers around the areola, occasionally giving your nipples a little tweak.
-					<<else>>
-						Your $_hand strokes your <<breasts>> and rub your nipples between your fingers, making a lewd warmth grow.
-					<</if>>
-				<<else>>
-					<<if $arousal gte ($arousalmax / 5) * 4>>
-						Your $_hand cups your <<breasts>> and tease your sensitive nipples more than you can stand. Each brush of your fingers sends jolts of excitement through you.
-					<<elseif $arousal gte ($arousalmax / 5) * 3>>
-						Your $_hand fondles your <<breasts>> while circling your fingers around the areola, occasionally giving your nipples a little tweak.
-					<<else>>
-						Your $_hand strokes your <<breasts>> and rub your nipples between your fingers, making a lewd warmth grow.
-					<</if>>
-				<</if>>
-			<</if>>
-			<<if $milk_amount gte 1>>
-				<span class="lewd">Milk leaks from your buds.</span>
-				<<breastfeed _handsOnBreasts>>
-			<</if>>
-		<</if>>
-
-		<<if $leftaction is "mvaginaW" and $rightaction is "mvaginaW">>
-			<<arousal 400 "masturbationVagina">><<set $leftaction to 0>><<set $rightaction to 0>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				<<switch random(1, 3)>>
-					<<case 3>>Your fingers writhe in and out of your <<pussy>>, violating you with sudden, sharp thrusts.
-					<<case 2>>Your clit is rubbed raw between your fingers, refusing to grant even a second for recovery.
-					<<case 1>>Your fingers quake within your <<pussy>>, wracking your whole body with lewd vibrations.
-				<</switch>>
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				<<switch random(1, 3)>>
-					<<case 3>>Your hands probe your <<pussy>>, jerking against each other to push through.
-					<<case 2>>Your hands roughly palm your <<pussy>>, one shuddering over the other.
-					<<case 1>>Your hands prod your clitoris in alternation.
-				<</switch>>
-			<<else>>
-				<<switch random(1, 3)>>
-					<<case 3>>Your fingers tease your <<pussy>>, each one sailing across your slit in succession.
-					<<case 2>>Your hands knead your labia, fingers twitching against your entrance.
-					<<case 1>>Your hands caress your thighs, slowly prying them apart.
-				<</switch>>
-			<</if>>
-		<</if>>
-
-		<<if $leftaction is "mvaginaW" or $rightaction is "mvaginaW">>
-			<<arousal 200 "masturbationVagina">>
-			<<set $_hand to $leftaction is "mvaginaW" ? "left" : "right">>
-			<<if $leftaction is "mvaginaW">>
-				<<set $leftaction to 0>>
-			<<else>>
-				<<set $rightaction to 0>>
-			<</if>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				<<switch random(1, 3)>>
-					<<case 3>>Your $_hand hand writhes in and out of your <<pussy>>, violating you with sudden, sharp thrusts.
-					<<case 2>>Your $_hand hand rams itself up your <<pussy>>, deeper than you thought possible.
-					<<case 1>>Your $_hand hand quakes within your <<pussy>>, wracking your whole body with lewd vibrations.
-				<</switch>>
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				<<switch random(1, 3)>>
-					<<case 3>>Your $_hand hand probes your <<pussy>>, threatening to push through.
-					<<case 2>>Your clitoris is twisted and tweaked between your $_hand hand.
-					<<case 1>>Your $_hand hand grinds its palm into your <<pussy>>.
-				<</switch>>
-			<<else>>
-				<<switch random(1, 3)>>
-					<<case 3>>Your $_hand hand rubs against your labia, fingers twitching against your entrance.
-					<<case 2>>Your $_hand hand trails a finger up your slit, sending a shiver up your spine.
-					<<case 1>>Your $_hand hand circles your clit with jerky motions.
-				<</switch>>
-			<</if>>
-		<</if>>
-
-		<<if $leftaction is "mpenisstopW">>
-			<<set $leftaction to 0>>
-			You remove your left hand from your <<penis>>. It shakes.
-		<</if>>
-		<<if $rightaction is "mpenisstopW">>
-			<<set $rightaction to 0>>
-			You remove your right hand from your <<penis>>. It shakes.
-		<</if>>
-
-		<<if $leftaction is "mbreaststopW">>
-			<<set $leftaction to 0>>
-			You remove your left hand from your <<breasts>>. It shakes.
-		<</if>>
-		<<if $rightaction is "mbreaststopW">>
-			<<set $rightaction to 0>>
-			You remove your right hand from your <<breasts>>. It shakes.
-		<</if>>
-
-		<<if $leftaction is "mvaginastopW">>
-			<<set $leftaction to 0>>
-			You remove your left hand from your <<pussy>>. It shakes.
-		<</if>>
-		<<if $rightaction is "mvaginastopW">>
-			<<set $rightaction to 0>>
-			You remove your right hand from your <<pussy>>. It shakes.
-		<</if>>
-	<</if>>
-
-	<!-- Mouth actions -->
-
-	<<if $mouthaction is "mpenisentrance" and $penisuse is 0>>
-		<<set $mouthactiondefault to "mpenislick">><<set $mouthaction to 0>><<arousal 100 "masturbationGenital">><<set $mouth to "mpenisentrance">>
-		<<if $awareness lt 200 and $corruptionMasturbation>><span class="red">The slime in your ear forces you to bend down. You're not sure if you're going to like what's coming.</span><<awareness 1>><<gawareness>><</if>>
-		<<if $worn.under_lower.vagina_exposed is 1 and $worn.lower.vagina_exposed is 1>>
-			<span class="blue">You get close enough to your <<penis>> to reach out and lick the tip with your tongue.</span>
-			<<arousal 100 "masturbationGenital">>
-		<<elseif $worn.under_lower.vagina_exposed is 1>>
-			/* this shouldn't be reachable. i think the action is not available unless the player's penis is completely uncovered. */
-			<span class="blue">You run your tongue over your <<penis>>, feeling the bulge beneath your $worn.lower.name.</span>
-		<<elseif $worn.lower.vagina_exposed is 1>>
-			<span class="blue">You run your tongue over your <<penis>>, feeling the bulge beneath your $worn.under_lower.name.</span>
-		<</if>>
-		<<set $penisuse to "mouth">>
-	<</if>>
-
-	<<if $mouthaction is "mpenislick">>
-		<<set $mouthactiondefault to "mpenislick">><<set $mouthaction to 0>><<arousal 100 "masturbationGenital">>
-		<<if $worn.under_lower.vagina_exposed is 1 and $worn.lower.vagina_exposed is 1>>
-			<<arousal 100 "masturbationGenital">>
-			<<if $arousal gte $arousalmax * (4/5)>>
-				Your <<penis>> twitches every time you lick it, but you don't stop.
-			<<elseif $arousal gte $arousalmax * (3/5)>>
-				You run your tongue over your <<penis>> head, mixing your saliva with your precum.
-			<<else>>
-				You run your tongue over your <<penis>> head, focusing on your sensitive spots.
-			<</if>>
-		<<elseif $worn.under_lower.vagina_exposed is 1>>
-			/* this shouldn't be reachable. i think the action is not available unless the player's penis is completely uncovered. */
-			You run your tongue over your <<penis>>, feeling the bulge beneath your $worn.lower.name.
-		<<elseif $worn.lower.vagina_exposed is 1>>
-			You run your tongue over your <<penis>>, feeling the bulge beneath your $worn.under_lower.name.
-		<</if>>
-	<</if>>
-
-	<<if $mouthaction is "mpenistakein">>
-		<<set $selfsuckDepth to 0>>
-		<<set $_actiondefault to ($penisHeight is 0 ? "mpenissuck" : "mpenisdeepthroat")>>
-		<<set $mouthactiondefault to $_actiondefault>><<set $mouthaction to 0>><<set $mouth to "mpenis">>
-		<<arousal 200 "masturbationGenital">>
-		<<if $penisHeight is 0>>
-			<span class="blue">You take your <<penis>> into your mouth, sending a lewd tingle up your spine.</span>
-		<<else>>
-			<span class="blue">You take the head of your <<penis>> into your mouth, sending a lewd tingle up your spine.</span>
-		<</if>>
-		<<set $mouthstate to "penetrated">>
-	<</if>>
-
-	<<if $mouthaction is "mpenisdeepthroat">>
-		<<set $selfsuckDepth += 1>>
-		<<set $_actiondefault to ($selfsuckDepth lt $selfsuckLimit ? $mouthaction : "mpenissuck")>>
-		<<set $mouthactiondefault to $_actiondefault>><<set $mouthaction to 0>><<set $masturbation_oralSkill++>>
-		<<set $_arousalGain to 200 + 50*$selfsuckDepth>>
-		<<arousal $_arousalGain "masturbationGenital">>
-
-		You push your <<penis>> deeper into your mouth.
-		/* dev note: add willpower to check if the player can get their penis down their throat? */
-
-		<<if $selfsuckDepth is $penisHeight>>
-			<<if $leftarm is "mpenisentrance" and $rightarm is "mpenisentrance">>
-				<<set $leftarm to 0>><<set $leftactiondefault to "mrest">>
-				<<set $rightarm to 0>><<set $rightactiondefault to "mrest">>
-				<span class="lblue">You take your hands off your penis to make room.</span>
-			<<elseif $leftarm is "mpenisentrance">>
-				<<set $leftarm to 0>><<set $leftactiondefault to "mrest">>
-				<span class="lblue">You move your left hand away from your penis to make room.</span>
-			<<elseif $rightarm is "mpenisentrance">>
-				<<set $rightarm to 0>><<set $rightactiondefault to "mrest">>
-				<span class="lblue">You move your right hand away from your penis to make room.</span>
-			<</if>>
-		<</if>>
-		<<set _deepthroateffects to true>>
-	<</if>>
-
-	<<if $mouthaction is "mpenispullback">>
-		<<set $selfsuckDepth -= 1>>
-		<<set $_arousalGain to 200 + 50*$selfsuckDepth>>
-		<<arousal $_arousalGain "masturbationGenital">>
-
-		<<if $selfsuckDepth gte 2>>
-			<<set $mouthactiondefault to $mouthaction>><<set $mouthaction to 0>>
-			<span class="lblue">You pull back hard on your <<penis>> and extract some of it from your throat.</span>
-			<<set _deepthroateffects to true>>
-		<<elseif $selfsuckDepth is 1>>
-			<<set $mouthactiondefault to $mouthaction>><<set $mouthaction to 0>>
-			<span class="lblue">You pull back on your <<penis>> and free it from your throat.</span>
-			<<set _deepthroateffects to true>>
-		<<else>>
-			<<set $mouthactiondefault to "mpenisstop">><<set $mouthaction to 0>>
-			<span class="lblue">You pull back until only the head of your <<penis>> remains in your mouth.</span>
-		<</if>>
-	<</if>>
-
-	<<if _deepthroateffects>>
-		<<switch $penisHeight>>
-		<<case 0>>
-			<span class="red">Error: Impossible condition.</span>
-		<<case 1>>
-			<<switch $selfsuckDepth>>
-			<<case 1>>Your lips touch the base of your <<penis>> and the head pokes at the back of your mouth.
-			<<default>><span class="red">Error: Impossible condition.</span>
-			<</switch>>
-		<<case 2>>
-			<<switch $selfsuckDepth>>
-			<<case 1>>The head of your penis is poking at the entrance to your throat.
-			<<case 2>>Your lips touch the base of your <<penis>> as the head pushes into your throat.
-			<<default>><span class="red">Error: Impossible condition.</span>
-			<</switch>>
-		<<case 3>>
-			<<switch $selfsuckDepth>>
-			<<case 1>>The head of your penis is poking at the entrance to your throat.
-			<<case 2>>Your <<penis>> is stretching the walls of your throat.
-			<<case 3>>Your lips touch the base of your <<penis>> as the shaft fills your throat.
-			<<default>><span class="red">Error: Impossible condition.</span>
-			<</switch>>
-		<<default>>
-			<span class="red">Error: Impossible condition.</span>
-		<</switch>>
-		<<if $selfsuckDepth is $penisHeight>>
-			You've reached the bottom.
-		<<elseif $selfsuckDepth is $selfsuckLimit>>
-			You are not flexible enough to get any lower.
-		<</if>>
-	<</if>>
-
-	<<if $mouthaction is "mpenismouthoff">>
-		<<set $mouthactiondefault to "mrest">><<set $mouthaction to 0>><<set $mouth to "mpenisentrance">>
-		<span class="lblue">You take your mouth off of your <<penis>>.</span>
-		<<set $mouthstate to 0>>
-	<</if>>
-
-	<<if $mouthaction is "mpenissuck">>
-		<<set $mouthactiondefault to "mpenissuck">><<set $mouthaction to 0>><<set $masturbation_oralSkill++>>
-		<<arousal 200 "masturbationGenital">>
-
-		<<set $_eagerly to ($arousal gte $arousalmax * (2/5) ? "eagerly" : "slowly")>>
-
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			<<if $selfsuckDepth lte 1>>
-				You drink down precum as it flows into your mouth while you move your head back and forth on your <<penis>>.
-			<<else>>
-				Precum flows down your throat as you move your head back and forth on your <<penis>>.
-			<</if>>
-		<<else>>
-			<<if $penisHeight is $selfsuckDepth>>
-				/* mouth is at base of penis */
-				<<if $selfsuckDepth gte 2>>
-					You lick the base of your <<penis>> while your throat massages the shaft.
-				<<else>>
-					You $_eagerly suck on your <<penis>> while licking the base.
-				<</if>>
-			<<elseif $selfsuckDepth gte 1>>
-				You $_eagerly suck on your <<penis>> while licking along the shaft.
-			<<else>>
-				You $_eagerly suck on your <<penis>> while licking around the tip.
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $mouthaction is "mpenisstop">>
-		<<set $mouthactiondefault to "mrest">><<set $mouthaction to 0>><<set $mouth to 0>><<set $penisuse to 0>>
-		<span class="lblue">You move your mouth away from your <<penis>>.</span>
-	<</if>>
-
-	<<if $mouthaction is "mvaginaentrance">>
-		<<set $mouthactiondefault to "mvaginalick">><<set $mouthaction to 0>><<arousal 100 "masturbationGenital">><<set $mouth to "mvaginaentrance">><<set $vaginause to "mouth">>
-		<<if $awareness lt 200 and $corruptionMasturbation>><span class="red">The slime in your ear forces you to bend down. You're not sure if you're going to like what's coming.</span><<awareness 1>><<gawareness>><</if>>
-		<<if $_genitals_exposed>>
-			<span class="blue">You run your tongue over your exposed clit and shiver in anticipation.</span>
-			<<arousal 100 "masturbationGenital">>
-		<<elseif $worn.under_lower.vagina_exposed is 1>>
-			<span class="blue">You run your tongue over your <<pussy>>, feeling it beneath your $worn.lower.name.</span>
-		<<elseif $worn.lower.vagina_exposed is 1>>
-			<span class="blue">You run your tongue over your <<pussy>>, feeling it beneath your $worn.under_lower.name.</span>
-		<</if>>
-	<</if>>
-
-	<<if $mouthaction is "mvaginalick">>
-		<<set $mouthactiondefault to "mvaginalick">><<set $mouthaction to 0>><<arousal 100 "masturbationGenital">>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You shiver in anticipation as you lick up the fluid coming from your <<pussy>>.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You lick your <<pussy>>, trying to reach the more difficult spots.
-		<<else>>
-			You lick your <<pussy>>.
-		<</if>>
-	<</if>>
-	<<if $mouthaction is "mvaginaclit">>
-		<<set $mouthactiondefault to "mvaginaclit">><<set $mouthaction to 0>><<arousal 200 "masturbationGenital">>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You shiver in anticipation as you suck and gently rub your clit against your teeth.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You lick and suck your clit.
-		<<else>>
-			You lick your clit.
-		<</if>>
-	<</if>>
-	<<if $mouthaction is "mvaginastop">>
-		<<set $mouthactiondefault to "mrest">><<set $mouthaction to 0>><<set $mouth to 0>><<set $vaginause to 0>>
-		<span class="lblue">You move your mouth away from your <<pussy>>.</span>
-	<</if>>
-
-	<<if $player.penisExist>>
-		<<if $arousal gte $arousalmax * (3/5) and $mouth isnot "mpenis" and not _ballplayeffects>>
-			<<if $worn.over_lower.vagina_exposed is 0>>
-				<<set _highestclothinglower to $worn.over_lower.name>>
-			<<elseif $worn.lower.vagina_exposed is 0>>
-				<<set _highestclothinglower to $worn.lower.name>>
-			<<elseif $worn.under_lower.vagina_exposed is 0>>
-				<<set _highestclothinglower to $worn.under_lower.name>>
-			<<else>>
-				<<set $_genitals_exposed to true>>
-			<</if>>
-			<<if $arousal gte $arousalmax * (4/5)>>
-				Your <<penis "strap-on">> bucks eagerly, and
-				<<if $_genitals_exposed>>
-					precum leaps from the tip.
-				<<else>>
-					precum seeps through your _highestclothinglower.
-				<</if>>
-			<<else>>
-				Your <<penis "strap-on">> bucks eagerly, and
-				<<if $_genitals_exposed>>
-					precum beads at the tip.
-				<<else>>
-					your precum creates a dark spot on your _highestclothinglower.
-				<</if>>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $mouthaction is "mpenisflowerlick">>
-		<<set $mouthactiondefault to "mpenisflowerlick">><<set $mouthaction to 0>><<set $mouth to "mpenisflowerlick">><<arousal 200 "mouth">><<drugs 10>><<set $moorPhallusPlant to 2>><<set $masturbation_oralSkill++>>
-		<<print either(
-			"You almost take the phallus plant into your mouth, but suddenly feel apprehensive.",
-			"You lick the phallus plant's tip and swallow the sweet liquid.",
-			"You lick the phallus plant's tip.",
-		)>>
-		<<if $vaginaaction is "mpenisflowerrub">>
-			<<set $vaginaaction to 0>><<set $vaginaactiondefault to "mrest">>
-		<</if>>
-		<<if $anusaction is "mpenisflowerrub">>
-			<<set $anusaction to 0>><<set $anusactiondefault to "mrest">>
-		<</if>>
-	<</if>>
-
-	<<if $mouthaction is "mpenisflowertakein">>
-		<<set $mouthactiondefault to "mpenisflowersuck">><<set $mouthaction to 0>><<set $mouth to "mpenisflowersuck">><<arousal 300 "oral">><<drugs 10>>
-		<<if $player.virginity.oral is true>><<takeVirginity "phallus plant" "oral">><</if>>
-		You suck on the plant. It tastes very sweet, and you feel yourself heating up.
-		<<set $mouthstate to "penetrated">>
-	<</if>>
-
-	<<if $mouthaction is "mpenisflowerstop">>
-		<<set $mouthactiondefault to "mrest">><<set $mouthaction to 0>><<set $mouth to 0>><<set $moorPhallusPlant to 1>>
-		<span class="lblue">You stop licking the plant.</span>
-	<</if>>
-
-	<<if $mouthaction is "mpenisflowersuck">>
-		<<set $mouthactiondefault to "mpenisflowersuck">><<set $mouthaction to 0>><<arousal 500 "oral">><<drugs 10>><<set $masturbation_oralSkill++>>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You shiver as you drink down the fluid while sucking and moving your head back and forward.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You're sucking on the plant while lapping up its fluid.
-		<<else>>
-			You're sucking on the phallus plant.
-		<</if>>
-	<</if>>
-
-	<<if $mouthaction is "mpenisflowersuckstop">>
-		<<set $mouthactiondefault to "mpenisflowersuck">><<set $mouthaction to 0>><<arousal 300 "oral">><<drugs 10>>
-		<span class="red">Your head keeps bobbing up and down, sucking on the phallus plant. Try as you might, you just can't will yourself to stop.</span>
-	<</if>>
-
-	<<if $mouthaction is "maphropill">>
-		<<set $mouthactiondefault to "mrest">><<set $mouthaction to 0>><<set $mouth to 0>>
-		<<set $_pills to $player.inventory.sextoys["aphrodisiac pills"][0]>>
-		<<set $_pills.uses -= 1>>
-		<<if $_pills.uses lte 0>>
-			<<run V.player.inventory.sextoys["aphrodisiac pills"].splice(0,1)>>
-		<</if>>
-		<<if $drugged gt 0>>
-			<br>
-			You pop an aphrodisiac pill into your mouth and swallow. The lewd warmth within you intensifies.
-			<br>
-		<<else>>
-			<br>
-			You pop an aphrodisiac pill into your mouth and swallow. A lewd warmth begins to spread in your belly.
-			<br>
-		<</if>>
-		<<drugs 300>>
-	<</if>>
-
-	<!-- Vagina actions -->
-
-	<<if $vaginaaction is "mpenisflowerrub">>
-		<<set $vaginaactiondefault to "mpenisflowerrub">><<set $vaginaaction to 0>><<set $vaginause to "mpenisflowerrub">><<set $moorPhallusPlant to 2>>
-		<<if !$_genitals_exposed>>
-			<<arousal 100 "vaginal">>
-			You grind your crotch against the plant, although your clothing gets in the way.
-		<<else>>
-			<<arousal 200 "vaginal">>
-			<<print either(
-				"You nearly impale yourself on the plant, as a sudden burst of desire hits you. You stop yourself at the last moment, and gently circle the plant around your entrance.",
-				"You rub your <<if $player.penisExist>><<penis>><<else>>clit<</if>> against the plant.",
-				"You rub your vulva against the phallus plant.",
-			)>>
-		<</if>>
-		<<if $anusaction is "mpenisflowerrub">>
-			<<set $anusaction to 0>><<set $anusactiondefault to "mrest">>
-		<</if>>
-	<</if>>
-
-	<<if $vaginaaction is "mpenisflowerpenetrate">>
-		<<set $vaginaactiondefault to "mpenisflowerbounce">><<set $vaginaaction to 0>><<set $vaginause to "mpenisflowerpenetrate">>
-		<<arousal 1000 "vaginal">><<vaginalstat>>
-		You lower yourself down, allowing the plant to penetrate you.
-		<<vaginaraped>>
-		<<if $player.virginity.vaginal is true>>
-			<<takeVirginity "a phallus plant" "vaginal">>
-			You almost scream out as your vagina struggles to accommodate the plant, but the pain is gone within moments.
-		<<else>>
-			You've never felt anything quite like it before.
-		<</if>>
-		<<set $vaginastate to "penetrated">>
-	<</if>>
-
-	<<if $vaginaaction is "mpenisflowerstop">>
-		<<set $vaginaactiondefault to "mrest">><<set $vaginaaction to 0>><<set $vaginause to 0>><<set $moorPhallusPlant to 1>>
-		<span class="lblue">You stop rubbing your vagina against the phallus plant.</span>
-	<</if>>
-
-	<<if $vaginaaction is "mpenisflowerbounce">>
-		<<set $vaginaactiondefault to "mpenisflowerbounce">><<set $vaginaaction to 0>><<arousal 500 "vaginal">><<drugs 10>>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You hungrily ride the plant, rubbing it as quickly as you can. The sensation threatens to drive you mad.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You bounce on the phallus plant. The sensation threatens to drive you mad.
-		<<else>>
-			You gently bounce on the phallus plant, each poke sending a wave of pleasure through your body.
-		<</if>>
-	<</if>>
-
-	<<if $vaginaaction is "mpenisflowerpenetratestop">>
-		<<set $vaginaactiondefault to "mpenisflowerbounce">><<set $vaginaaction to 0>><<arousal 300 "vaginal">><<drugs 10>>
-		<span class="red">Your legs fail to lift you off of the plant, as if your body isn't obeying you.</span>
-	<</if>>
-
-	<!-- Anus actions -->
-
-	<<if $anusaction is "mpenisflowerrub">>
-		<<set $anusactiondefault to "mpenisflowerrub">><<set $anusaction to 0>><<set $anususe to "mpenisflowerrub">><<set $moorPhallusPlant to 2>>
-		<<if !$_genitals_exposed>>
-			<<arousal 100 "anal">>
-			You grind your ass against the plant, although your clothes get in the way.
-		<<else>>
-			<<arousal 200 "anal">>
-			<<print either(
-				"You nearly let yourself take the whole plant into your anus, but stop yourself at the last moment. You gently circle the plant around the entrance.",
-				"You rub the phallus plant between your <<bottom>> cheeks.",
-				"You rub your anus against the phallus plant.",
-			)>>
-		<</if>>
-	<</if>>
-
-	<<if $anusaction is "mpenisflowerpenetrate">>
-		<<set $anusactiondefault to "mpenisflowerbounce">><<set $anusaction to 0>><<set $anususe to "mpenisflowerpenetrate">>
-		<<arousal 1000 "anal">><<analstat>>
-		You lower yourself down, allowing the plant to penetrate you.
-		<<if $player.virginity.anal is true>>
-			<<takeVirginity "a phallus plant" "anal">>
-			You almost scream out as <span class="red">your no longer virgin</span> anus struggles to accommodate the plant, but the pain is gone within moments.
-		<<else>>
-			You've never felt anything quite like it before.
-		<</if>>
-	<</if>>
-
-	<<if $anusaction is "mpenisflowerstop">>
-		<<set $anusactiondefault to "mrest">><<set $anusaction to 0>><<set $anususe to 0>><<set $moorPhallusPlant to 1>>
-		<span class="lblue">You stop rubbing your anus against the phallus plant.</span>
-	<</if>>
-
-	<<if $anusaction is "mpenisflowerbounce">>
-		<<set $anusactiondefault to "mpenisflowerbounce">><<set $anusaction to 0>><<arousal 500 "anal">><<drugs 10>>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You roughly ride the plant, rubbing it as quickly as you can. It's unlike anything you've felt before.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You ride the plant<<if $player.penisExist>>, trying to get it to hit your prostate<</if>>. It's unlike anything you've felt before.
-		<<else>>
-			You gently ride the phallus plant, each poke sending a wave of pleasure through your body.
-		<</if>>
-	<</if>>
-
-	<<if $anusaction is "mpenisflowerpenetratestop">>
-		<<set $anusactiondefault to "mpenisflowerbounce">><<set $anusaction to 0>><<arousal 300 "anal">><<drugs 10>>
-		<span class="red">Your legs fail to lift you off of the plant, as if your body isn't obeying you.</span>
-	<</if>>
-
-	/* Sex toy pick up actions */
-	<<if $leftaction is "mpickupdildo" and $rightaction is "mpickupdildo" and $selectedToyLeft is $selectedToyRight>>
-		<<set $rightaction to 0>>
-	<</if>>
-
-	<<if $leftaction is "mpickupdildo" or $rightaction is "mpickupdildo">>
-		<<set $_actiondefault to ($player.vaginaExist ? "mvaginaentrancedildo" : "manusentrancedildo")>>
-		<<set $_actiondefaultstroker to "mpenisentrancestroker">>
-		<<set $_actiondefaultbreastpump to "mbreastpump">>
-
-		<<if $leftaction is "mpickupdildo" and $rightaction is "mpickupdildo">>
-			<<set $currentToyLeft to $selectedToyLeft>>
-			<<if _playerToys[$currentToyLeft].type.includes("stroker")>>
-				<<set $leftactiondefault to $_actiondefaultstroker>>
-			<<elseif _playerToys[$currentToyLeft].type.includes("breastpump")>>
-				<<set $leftactiondefault to $_actiondefaultbreastpump>>
-			<<else>>
-				<<set $leftactiondefault to $_actiondefault>>
-			<</if>>
-			<<set $leftaction to 0>><<set $leftarm to "mpickupdildo">>
-			<<arousal 200 "masturbation">>
-			You pick up your <<print _playerToys[$currentToyLeft].colour or "">> _playerToys[$currentToyLeft].name with your left hand.
-
-			<<set $currentToyRight to $selectedToyRight>>
-			<<if _playerToys[$currentToyRight].type.includes("stroker")>>
-				<<set $rightactiondefault to $_actiondefaultstroker>>
-			<<elseif _playerToys[$currentToyRight].type.includes("breastpump")>>
-				<<set $rightactiondefault to $_actiondefaultbreastpump>>
-			<<else>>
-				<<set $rightactiondefault to $_actiondefault>>
-			<</if>>
-			<<set $rightaction to 0>><<set $rightarm to "mpickupdildo">>
-			<<arousal 200 "masturbation">>
-			You pick up your <<print _playerToys[$currentToyRight].colour or "">> _playerToys[$currentToyRight].name with your right hand.
-
-		<<elseif $leftaction is "mpickupdildo">>
-			<<set $currentToyLeft to $selectedToyLeft>>
-			<<if _playerToys[$currentToyLeft].type.includes("stroker")>>
-				<<set $leftactiondefault to $_actiondefaultstroker>>
-			<<elseif _playerToys[$currentToyLeft].type.includes("breastpump")>>
-				<<set $leftactiondefault to $_actiondefaultbreastpump>>
-			<<else>>
-				<<set $leftactiondefault to $_actiondefault>>
-			<</if>>
-			<<set $leftaction to 0>><<set $leftarm to "mpickupdildo">>
-			<<arousal 200 "masturbation">>
-			You pick up your <<print _playerToys[$currentToyLeft].colour or "">> _playerToys[$currentToyLeft].name with your left hand.
-
-		<<elseif $rightaction is "mpickupdildo">>
-			<<set $currentToyRight to $selectedToyRight>>
-			<<if _playerToys[$currentToyRight].type.includes("stroker")>>
-				<<set $rightactiondefault to $_actiondefaultstroker>>
-			<<elseif _playerToys[$currentToyRight].type.includes("breastpump")>>
-				<<set $rightactiondefault to $_actiondefaultbreastpump>>
-			<<else>>
-				<<set $rightactiondefault to $_actiondefault>>
-			<</if>>
-			<<set $rightaction to 0>><<set $rightarm to "mpickupdildo">>
-			<<arousal 200 "masturbation">>
-			You pick up your <<print _playerToys[$currentToyRight].colour or "">> _playerToys[$currentToyRight].name with your right hand.
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mdildostop" and $rightaction is "mdildostop">>
-		<<set $fingersInVagina to 0>>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="lblue">You let go of the <<toyName $currentToyLeft>> and <<toyName $currentToyRight>>.</span>
-		<span class="lblue">You let go of the <<toyName $currentToyLeft>> and <<toyName $currentToyRight>>.</span>
-		<<set $currentToyRight to "none">><<set $currentToyLeft to "none">>
-	<<elseif $leftaction is "mdildostop">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<span class="lblue">You let go of the <<toyName $currentToyLeft>> in your left hand.</span>
-		<<set $currentToyLeft to "none">>
-	<<elseif $rightaction is "mdildostop">>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="lblue">You let go of the <<toyName $currentToyRight>> in your right hand.</span>
-		<<set $currentToyRight to "none">>
-	<</if>>
-
-	/* Stroker actions*/
-
-	<<if $penisuse isnot 0 and $penisuse isnot "stroker">>
-	<<elseif $leftaction is "mpenisentrancestroker" and $rightaction is "mpenisentrancestroker">>
-		<<set $_actiondefault to "mpenisentrancestroker">>
-		<<set $leftactiondefault to $_actiondefault>><<set $leftaction to 0>><<set $leftarm to "mpenisentrancestroker">>
-		<<set $rightactiondefault to $_actiondefault>><<set $rightaction to 0>><<set $rightarm to "mpenisentrancestroker">>
-		<<arousal 50 "masturbationPenis">>
-		<<if $_genitals_exposed and $worn.genitals.vagina_exposed gte 1>>
-			<span class="blue">You run your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your exposed <<penis>> and shiver in anticipation.</span>
-		<<elseif $worn.genitals.vagina_exposed is 0>>
-			<span class="blue">You run your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your <<penis>>, feeling its shape beneath your $worn.genitals.name.</span>
-		<<elseif $worn.under_lower.vagina_exposed is 0>>
-			<span class="blue">You run your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your <<penis>>, feeling its shape beneath your $worn.lower.name.</span>
-		<<elseif $worn.lower.vagina_exposed is 0>>
-			<span class="blue">You run your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your <<penis>>, feeling its shape beneath your $worn.under_lower.name.</span>
-		<<else>>
-			<span class="blue">You run your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your <<penis>>, feeling its shape beneath your clothing.</span>
-		<</if>>
-		<<set $penisuse to "stroker">>
-	<<elseif $leftaction is "mpenisentrancestroker">>
-		<<set $_actiondefault to "mpenisentrancestroker">>
-		<<if $leftaction is "mpenisentrancestroker">>
-			<<set $leftactiondefault to $_actiondefault>><<set $leftaction to 0>><<set $leftarm to "mpenisentrancestroker">>
-		<</if>>
-		<<arousal 50 "masturbationPenis">>
-		<span class="blue">You pick up your <<toyName $currentToyLeft>> and run it over your <<penis>>,
-			<<if $_genitals_exposed>>
-				shivering in anticipation.
-			<<elseif $worn.lower.vagina_exposed is 0>>
-				feeling its shape beneath your $worn.lower.name.
-			<<elseif $worn.under_lower.vagina_exposed is 0>>
-				feeling its shape beneath your $worn.under_lower.name.
-			<<else>>
-				feeling its shape beneath your clothing.
-			<</if>>
-		</span>
-		<<set $penisuse to "stroker">>
-	<<elseif $rightaction is "mpenisentrancestroker">>
-		<<set $_actiondefault to "mpenisentrancestroker">>
-		<<if $rightaction is "mpenisentrancestroker">>
-			<<set $rightactiondefault to $_actiondefault>><<set $rightaction to 0>><<set $rightarm to "mpenisentrancestroker">>
-		<</if>>
-		<<arousal 50 "masturbationPenis">>
-		<span class="blue">You pick up your <<toyName $currentToyRight>> and run it over your <<penis>>,
-			<<if $_genitals_exposed>>
-				shivering in anticipation.
-			<<elseif $worn.lower.vagina_exposed is 0>>
-				feeling its shape beneath your $worn.lower.name.
-			<<elseif $worn.under_lower.vagina_exposed is 0>>
-				feeling its shape beneath your $worn.under_lower.name.
-			<<else>>
-				feeling its shape beneath your clothing.
-			<</if>>
-		</span>
-		<<set $penisuse to "stroker">>
-	<</if>>
-
-	<<if $leftaction is "mpenisstroker" or $rightaction is "mpenisstroker">>
-		<<if $leftaction is "mpenisstroker">>
-			<<set $_toy to getToyName($currentToyLeft)>>
-			<<set $leftactiondefault to "mpenisstroker">><<set $leftaction to 0>><<set $leftarm to "mpenisstroker">>
-		<</if>>
-		<<if $rightaction is "mpenisstroker">>
-			<<set $_toy to getToyName($currentToyRight)>>
-			<<set $rightactiondefault to "mpenisstroker">><<set $rightaction to 0>><<set $rightarm to "mpenisstroker">>
-		<</if>>
-		<<if $rightarm is "mpenisstroker" and $leftarm is "mpenisstroker">>
-			<<set $_toy to getToyName($currentToyLeft) + " and " + getToyName($currentToyRight)>>
-			<<arousal 50 "masturbationPenis">>
-		<</if>>
-		<<arousal 400 "masturbationPenis">>
-		<span class="purple">You fuck your <<penis>> with the $_toy.</span>
-		<<set $penisuse to "stroker">>
-	<</if>>
-
-	<<if $leftaction is "mpenisstopstroker" and $rightaction is "mpenisstopstroker">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>><<set $penisuse to 0>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="purple">You move your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> away from your <<penis>>.</span>
-	<<elseif $leftaction is "mpenisstopstroker">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<<if !["mpenisentrancestroker","mpenisstroker"].includes($rightarm)>><<set $penisuse to 0>><</if>>
-		<span class="purple">You move your _playerToys[$currentToyLeft].name in your left hand away from your <<penis>>.</span>
-	<<elseif $rightaction is "mpenisstopstroker">>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>><<set $penisuse to 0>>
-		<<if !["mpenisentrancestroker","mpenisstroker"].includes($leftarm)>><<set $penisuse to 0>><</if>>
-		<span class="purple">You move your _playerToys[$currentToyRight].name in your right hand away from your <<penis>>.</span>
-	<</if>>
-
-	/* Breast pump actions*/
-
-	<<if $leftaction is "mbreastpump" and $rightaction is "mbreastpump">>
-		<<set $_actiondefault to "mbreastpumppump">>
-		<<set $leftactiondefault to $_actiondefault>><<set $leftaction to 0>><<set $leftarm to "mbreastpump">>
-		<<set $rightactiondefault to $_actiondefault>><<set $rightaction to 0>><<set $rightarm to "mbreastpump">>
-		<span class="blue">You seal your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your <<breasts>>, preparing to milk them.</span>
-	<<elseif $leftaction is "mbreastpump">>
-		<<set $_actiondefault to "mbreastpumppump">>
-		<<set $leftactiondefault to $_actiondefault>><<set $leftaction to 0>><<set $leftarm to "mbreastpump">>
-		<span class="blue">You seal your <<toyName $currentToyLeft>> over your <<breasts>>, preparing to milk them.</span>
-	<<elseif $rightaction is "mbreastpump">>
-		<<set $_actiondefault to "mbreastpumppump">>
-		<<set $rightactiondefault to $_actiondefault>><<set $rightaction to 0>><<set $rightarm to "mbreastpump">>
-		<span class="blue">You seal your <<toyName $currentToyRight>> over your <<breasts>>, preparing to milk them.</span>
-	<</if>>
-
-	<<set _pumpsOnBreasts to 0>>
-	<<if $leftaction is "mbreastpumppump">>
-		<<set $leftactiondefault to "mbreastpumppump">>
-		<<arousal 75 "masturbationNipples">><<playWithBreasts 3>>
-		<<set _pumpsOnBreasts++>>
-	<</if>>
-	<<if $rightaction is "mbreastpumppump">>
-		<<set $rightactiondefault to "mbreastpumppump">>
-		<<arousal 75 "masturbationNipples">><<playWithBreasts 3>>
-		<<set _pumpsOnBreasts++>>
-	<</if>>
-
-	<<if _pumpsOnBreasts>>
-		You attempt to use your <<if $_lefttoy>><<toyName $currentToyLeft>><</if>><<if $_lefttoy and $_righttoy>> and <</if>><<if $_righttoy>><<toyName $currentToyRight>><</if>> on your <<breasts>>
-		<<if $lactating is 1 and $breastfeedingdisable is "f">>
-			<<if $milk_amount gte 1>>
-				<span class="lewd">and milk flows from your buds into the bottle.</span>
-				<<breastfeed `Math.floor(_pumpsOnBreasts * 3.5)`>>
-			<<else>>
-				but no milk flows from your buds. You must be dry.
-			<</if>>
-		<<else>>
-			but no milk flows from your buds. You must not be producing milk yet.
-			<<if (!$daily.lactatingPressure or $daily.lactatingPressure lte 5) and random(0,100) gte 90>>
-				<<if !$daily.lactatingPressure>><<set $daily.lactatingPressure to 0>><</if>>
-				<<set $daily.lactatingPressure++>>
-				<<milkvolume _pumpsOnBreasts>>
-			<</if>>
-		<</if>>
-		<<if $leftaction is "mbreastpumppump">><<set $leftaction to 0>><</if>>
-		<<if $rightaction is "mbreastpumppump">><<set $rightaction to 0>><</if>>
-	<</if>>
-
-	<<if $leftaction is "mstopbreastpump" and $rightaction is "mstopbreastpump">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="purple">You move your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> away from your <<breasts>>.</span>
-	<<elseif $leftaction is "mstopbreastpump">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<span class="purple">You move your _playerToys[$currentToyLeft].name in your left hand away from your <<breasts>>.</span>
-	<<elseif $rightaction is "mstopbreastpump">>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="purple">You move your _playerToys[$currentToyRight].name in your right hand away from your <<breasts>>.</span>
-	<</if>>
-
-	/* Bullet vibrator actions*/
-
-	<<if $leftaction is "mchestvibrate" or $rightaction is "mchestvibrate">>
-		<<set _toysOnBreasts to 0>>
-		<<if $leftaction is "mchestvibrate">>
-			<<set _toysOnBreasts += 1>>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-			<<arousal 200 "masturbationNipples">><<playWithBreasts 2>><<set _toysCount++>>
-			<<set _nippleToyName to _playerToys[$currentToyLeft].name>>
-			<<set _toyHand to 'your left hand'>>
-		<</if>>
-		<<if $rightaction is "mchestvibrate">>
-			<<set _toysOnBreasts += 1>>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<<arousal 200 "masturbationNipples">><<playWithBreasts 2>><<set _toysCount++>>
-			<<if _nippleToyName>>
-				<<set _nippleToyName += " and  " + _playerToys[$currentToyRight].name>>
-				<<set _toyHand to 'both hands'>>
-			<<else>>
-				<<set _nippleToyName to _playerToys[$currentToyRight].name>>
-				<<set _toyHand to 'your right hand'>>
-			<</if>>
-		<</if>>
-
-		<<if $worn.over_upper.exposed gte 2 and $worn.upper.exposed gte 2 and $worn.under_upper.exposed gte 1>>
-			<<arousal `200 * _toysOnBreasts` "masturbationNipples">>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				Your nipples stand erect despite the _nippleToyName being rubbed against them as hard as you can stand, vibrations sending a constant feeling of pleasure through you.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You rub your _nippleToyName against your hardening nipples with _toyHand.
-			<<else>>
-				You press your _nippleToyName against your nipples with _toyHand, feeling the lewd warmth grow as it continues to vibrate.
-			<</if>>
-		<<else>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				Your nipples stand erect against your <<topaside>>, despite the _nippleToyName being rubbed against them through the fabric.
-				Your nipples stand erect against despite the _nippleToyName being rubbed and vibrated against them below your <<topaside>>.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You rub your _nippleToyName against your hardening nipples through your <<topaside>> with _toyHand.
-			<<else>>
-				You press your _nippleToyName against your nipples with _toyHand. It feels good, even with your <<topaside>> in the way.
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mpenisvibrate" or $rightaction is "mpenisvibrate" and $penisuse is 0>>
-		<<set _toysOnPenis to 0>>
-		<<if $leftaction is "mpenisvibrate">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-			<<arousal 200 "masturbationPenis">><<set _toysOnPenis++>>
-			<<set _penisToyName to _playerToys[$currentToyLeft].name>>
-		<</if>>
-		<<if $rightaction is "mpenisvibrate">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<<arousal 200 "masturbationPenis">><<set _toysOnPenis++>>
-			<<if _penisToyName>>
-				<<set _penisToyName += " and  " + _playerToys[$currentToyRight].name>>
-			<<else>>
-				<<set _penisToyName to _playerToys[$currentToyRight].name>>
-			<</if>>
-		<</if>>
-		<<if $worn.over_upper.exposed lte 1 and $worn.upper.exposed lte 1 and $worn.under_upper.exposed is 0>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You rub your _penisToyName up and down your <<penis>> through your <<bottomaside>>.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You rub your _penisToyName up and down your <<penis>>, its vibrations quickly making you aroused even through your <<bottomaside>>.
-			<<else>>
-				You gently hold your _penisToyName against the underside of your <<penis>>, enjoying the sensation despite your <<bottomaside>> being in the way.
-			<</if>>
-		<<elseif $player.virginity.penile is true>>
-			<<arousal `200 * _toysOnPenis` "masturbationPenis">>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You rub your vibrating _penisToyName up and down your virgin penis as roughly as your foreskin will allow.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You rub your _penisToyName up and down your virgin penis, its vibrations quickly making you aroused.
-			<<else>>
-				You gently hold your vibrating _penisToyName against the underside of your <<penis>>, enjoying the sensation.
-			<</if>>
-		<<else>>
-			<<arousal `200 * _toysOnPenis` "masturbationPenis">>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You rub your vibrating _penisToyName up and down your <<penis>>.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You rub your _penisToyName up and down your <<penis>>, its vibrations generating a quickly-growing lewd warmth.
-			<<else>>
-				You hold your vibrating _penisToyName against the underside of your <<penis>>, enjoying the sensation.
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mvaginaclitvibrate" or $rightaction is "mvaginaclitvibrate">>
-		<<set _toysOnClit to 0>>
-		<<if $leftaction is "mvaginaclitvibrate">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-			<<arousal 200 "masturbationVagina">><<set _toysOnClit++>>
-			<<set _clitToyName to _playerToys[$currentToyLeft].name>>
-		<</if>>
-		<<if $rightaction is "mvaginaclitvibrate">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<<arousal 200 "masturbationVagina">><<set _toysOnClit++>>
-			<<if _clitToyName>>
-				<<set _clitToyName += " and  " + _playerToys[$currentToyRight].name>>
-			<<else>>
-				<<set _clitToyName to _playerToys[$currentToyRight].name>>
-			<</if>>
-		<</if>>
-		<<if $_genitals_exposed and $bugsinside is 1>>
-			<<arousal `200 * _toysOnClit` "masturbationVagina">>
-			<span class="blue">You gently press your _clitToyNameagainst against your <<clit>>, the vibrations combined with the sensation of the insects crawling around within you making your toes curl.</span>
-			<<addVaginalWetness 4>>
-		<<elseif $_genitals_exposed>>
-			<<arousal `200 * _toysOnClit` "masturbationVagina">>
-			<span class="blue">
-				You gently press your _clitToyName against your <<clit>>,
-				<<if $mouth is "mdildomouth">>
-					the soft moans elicited by the sensation muffled by the
-					<<if $worn.face.type.includes("gag")>>
-						<<print $worn.face.name>>
-					<<elseif $leftarm is "mdildomouth">>
-						<<print _playerToys[$currentToyLeft].name>>
-					<<else>>
-						<<print _playerToys[$currentToyRight].name>>
-					<</if>>
-					obstructing your mouth.
-				<<else>>
-					moaning softly at the sensation.
-				<</if>>
-			</span>
-			<<addVaginalWetness 4>>
-		<<elseif $worn.under_lower.vagina_exposed is 1>>
-			<span class="blue">You press your _clitToyName against your <<clit>> through your $worn.lower.name, enjoying the way it feels even through the fabric.</span>
-			<<addVaginalWetness 2>>
-		<<elseif $worn.lower.vagina_exposed is 1>>
-			<span class="blue">You press your _clitToyName against your <<clit>> through your $worn.under_lower.name, enjoying the way it feels even through the fabric.</span>
-			<<addVaginalWetness 1>>
-		<<else>>
-			<span class="blue">You firmly press your _clitToyName against your <<clit>> through your clothes, enjoying the way it feels despite the layers of fabric in the way.</span>
-			<<addVaginalWetness 0>>
-		<</if>>
-	<</if>>
-
-	/* Small Dildo and dildo actions*/
-
-	<<if $leftaction is "mdildomouthentrance" and $mouth is 0 and ($rightaction isnot "mdildomouthentrance" or random(0,100) gte 50)>>
-		<<set $leftactiondefault to "mdildomouth">><<set $leftaction to 0>><<set $leftarm to "mdildomouthentrance">><<set $mouth to "mdildomouthentrance">>
-		<<set $mouthactiondefault to "mdildolick">>
-		<<arousal 100 "masturbationMouth">>
-		You bring your <<print _playerToys[$currentToyLeft].name>> up to your mouth,
-		<<if currentSkillValue("oralskill") lt 100>>
-			eager for some practice.
-		<<else>>
-			enjoying the sensation of it against your lips.
-		<</if>>
-	<</if>>
-
-	<<if $rightaction is "mdildomouthentrance" and $mouth is 0>>
-		<<set $rightactiondefault to "mdildomouth">><<set $rightaction to 0>><<set $rightarm to "mdildomouthentrance">><<set $mouth to "mdildomouthentrance">>
-		<<set $mouthactiondefault to "mdildolick">>
-		<<arousal 100 "masturbationMouth">>
-		You bring your <<print _playerToys[$currentToyRight].name>> up to your mouth,
-		<<if currentSkillValue("oralskill") lt 100>>
-			eager for some practice.
-		<<else>>
-			enjoying the sensation of it against your lips.
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mdildopiston" or $rightaction is "mdildopiston">>
-		<<if $leftaction is "mdildopiston">><<set $leftactiondefault to $leftaction>><<set $leftaction to 0>><<set $_mouthDildo to $currentToyLeft>><</if>>
-		<<if $rightaction is "mdildopiston">><<set $rightactiondefault to $rightaction>><<set $rightaction to 0>><<set $_mouthDildo to $currentToyRight>><</if>>
-		<<if _playerToys[$_mouthDildo].name.includes("small")>><<set $_smallDildo to true>><</if>>
-		<<arousal 100 "masturbationOral">><<set $masturbation_oralSkill++>>
-		<<if currentSkillValue("oralskill") lt 100>>
-			You carefully move the <<print _playerToys[$_mouthDildo].name>> back and forth in your mouth,
-			<<if $_smallDildo>>
-				its modest size perfect for a beginner like you.
-			<<else>>
-				careful not to push it in too deep.
-			<</if>>
-		<<elseif currentSkillValue("oralskill") lt 200>>
-			<<arousal 100 "masturbationOral">>
-			You bob your head back and forth on the <<print _playerToys[$_mouthDildo].name>>, enjoying the sensation of it rubbing against your lips and tongue.
-		<<else>>
-			<<arousal 200 "masturbationOral">>
-			You skilfully lick and tease the <<print _playerToys[$_mouthDildo].name>> as you quickly bob your head back and forth along it, reveling in the lewd sensations it provides.
-		<</if>>
-	<</if>>
-
-	<<if $mouthaction is "mdildolick">>
-		<<set $mouthactiondefault to $mouthaction>>
-		<<set $mouthaction to 0>>
-		<<if $leftarm is $mouth>><<set $_mouthDildo to $currentToyLeft>><</if>>
-		<<if $rightarm is $mouth>><<set $_mouthDildo to $currentToyRight>><</if>>
-		<<if _playerToys[$_mouthDildo].name.includes("small")>><<set $_smallDildo to true>><</if>>
-		<<arousal 100 "masturbationOral">><<set $masturbation_oralSkill++>>
-		<<if $mouth is "mdildomouthentrance">>
-			<<if currentSkillValue("oralskill") lt 100>>
-				You gingerly lick the <<print _playerToys[$_mouthDildo].name>>'s tip, trying your best to tease it with your tongue.
-			<<elseif currentSkillValue("oralskill") lt 200>>
-				<<arousal 100 "masturbationOral">>
-				You eagerly lick the <<print _playerToys[$_mouthDildo].name>>'s tip, doing your best to tease it with your tongue.
-			<<else>>
-				<<arousal 200 "masturbationOral">>
-				You skilfully kiss and lick the <<print _playerToys[$_mouthDildo].name>>'s tip, lavishing attention upon it with your lips and tongue.
-			<</if>>
-		<<else>>
-			<<if currentSkillValue("oralskill") lt 100>>
-				<<if $_smallDildo>>
-					You awkwardly wiggle your tongue along the bottom of the <<print _playerToys[$_mouthDildo].name>> in your mouth.
-				<<else>>
-					You struggle to lick along the <<print _playerToys[$_mouthDildo].name>>, its girth pinning your tongue to the bottom of your mouth.
-				<</if>>
-			<<elseif currentSkillValue("oralskill") lt 200>>
-				<<arousal 100 "masturbationOral">>
-				You wriggle your tongue along the <<print _playerToys[$_mouthDildo].name>> in your mouth, trying your best to reach as much of the toy as you can.
-			<<else>>
-				<<arousal 200 "masturbationOral">>
-				You skillfully wriggle your tongue along the <<print _playerToys[$_mouthDildo].name>> in your mouth, occasionally adjusting your angle to reach as much of it as possible.
-			<</if>>
-		<</if>>
-	<<elseif $mouthaction is "mdildokiss">>
-		<<set $mouthactiondefault to $mouthaction>><<set $mouthaction to 0>>
-		<<if $leftarm is $mouth>><<set $_mouthDildo to $currentToyLeft>><</if>>
-		<<if $rightarm is $mouth>><<set $_mouthDildo to $currentToyRight>><</if>>
-		<<arousal 100 "masturbationMouth">><<set $masturbation_oralSkill++>>
-		<<if currentSkillValue("oralskill") lt 100>>
-			You clumsily kiss along the <<print _playerToys[$_mouthDildo].name>>'s length.
-		<<elseif currentSkillValue("oralskill") lt 200>>
-			<<arousal 100 "masturbationMouth">>
-			You kiss along the <<print _playerToys[$_mouthDildo].name>>'s length, a lewd warmth growing within you.
-		<<else>>
-			<<arousal 200 "masturbationMouth">>
-			You lovingly plant a series of kisses along the <<print _playerToys[$_mouthDildo].name>>'s length,
-			<<if $player.virginity.oral is true>>
-				hoping you'll get to experience the real thing soon.
-			<<else>>
-				a lewd warmth growing within you as you treat it like the real thing.
-			<</if>>
-		<</if>>
-	<<elseif $mouthaction is "mdildosuck">>
-		<<set $mouthactiondefault to $mouthaction>><<set $mouthaction to 0>>
-		<<if $leftarm is $mouth>><<set $_mouthDildo to $currentToyLeft>><</if>>
-		<<if $rightarm is $mouth>><<set $_mouthDildo to $currentToyRight>><</if>>
-		<<arousal 100 "masturbationOral">><<set $masturbation_oralSkill++>>
-		<<if currentSkillValue("oralskill") lt 100>>
-			You try your best to suck on the <<print _playerToys[$_mouthDildo].name>>.
-		<<elseif currentSkillValue("oralskill") lt 200>>
-			<<arousal 100 "masturbationOral">>
-			You eagerly suck on the <<print _playerToys[$_mouthDildo].name>>.
-		<<else>>
-			<<arousal 200 "masturbationOral">>
-			You skillfully suck on and tease the <<print _playerToys[$_mouthDildo].name>>,
-			<<if $player.virginity.oral is true>>
-				wondering how different a real penis would feel.
-			<<elseif $ejactrait>>
-				a little disappointed you won't be getting your reward when you're done.
-			<<else>>
-				pretending it's the real thing.
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mdildomouth" or $rightaction is "mdildomouth">>
-		<<if $leftaction is "mdildomouth">><<set $leftactiondefault to "mdildopiston">><<set $leftaction to 0>><<set $leftarm to "mdildomouth">><<set $mouth to "mdildomouth">><<set $_mouthDildo to $currentToyLeft>><</if>>
-		<<if $rightaction is "mdildomouth">><<set $rightactiondefault to "mdildopiston">><<set $rightaction to 0>><<set $rightarm to "mdildomouth">><<set $mouth to "mdildomouth">><<set $_mouthDildo to $currentToyRight>><</if>>
-		<<if $mouthactiondefault is "mdildokiss">>
-			<<set $mouthactiondefault to "mdildosuck">>
-		<</if>>
-		<<arousal 200 "masturbationOral">>
-		You take the <<print _playerToys[$_mouthDildo].name>> into your mouth, briefly running your tongue along it as you thrust it between your lips.
-	<</if>>
-
-
-	/* Hand on Vagina Actions */
-
-	<<if $leftaction is "mvaginaentrance" and $rightaction is "mvaginaentrance">>
-		<<set $_actiondefault to ($player.penisExist ? "mvaginarub" : "mvaginaclit")>>
-		<<set $leftactiondefault to $_actiondefault>><<set $leftaction to 0>><<set $leftarm to "mvaginaentrance">>
-		<<set $rightactiondefault to $_actiondefault>><<set $rightaction to 0>><<set $rightarm to "mvaginaentrance">>
-		<<arousal 400 "masturbationVagina">>
-		<<if $_genitals_exposed and $bugsinside is 1>>
-			<span class="blue">You run your fingers over your exposed <<pussy>>, and feel some bugs running around.</span>
-			<<addVaginalWetness 2>>
-		<<elseif $_genitals_exposed>>
-			<span class="blue">You run your fingers over your exposed <<pussy>> and shiver in anticipation.</span>
-			<<addVaginalWetness 2>>
-		<<elseif $worn.under_lower.vagina_exposed is 1>>
-			<span class="blue">You run your fingers over your <<pussy>>, feeling its shape beneath your $worn.lower.name.</span>
-			<<addVaginalWetness 1>>
-		<<elseif $worn.lower.vagina_exposed is 1>>
-			<span class="blue">You run your fingers over your <<pussy>>, feeling its shape beneath your $worn.under_lower.name.</span>
-			<<addVaginalWetness 1>>
-		<<else>>
-			<span class="blue">You run your fingers over your <<pussy>>, feeling its shape beneath your clothing.</span>
-			<<addVaginalWetness 0>>
-		<</if>>
-	<<elseif $leftaction is "mvaginaentrance" or $rightaction is "mvaginaentrance">>
-		<<set $_actiondefault to ($player.penisExist ? "mvaginarub" : "mvaginaclit")>>
-		<<if $leftaction is "mvaginaentrance">>
-			<<set $leftactiondefault to $_actiondefault>><<set $leftaction to 0>><<set $leftarm to "mvaginaentrance">>
-		<</if>>
-		<<if $rightaction is "mvaginaentrance">>
-			<<set $rightactiondefault to $_actiondefault>><<set $rightaction to 0>><<set $rightarm to "mvaginaentrance">>
-		<</if>>
-		<<arousal 200 "masturbationVagina">>
-		<<if $_genitals_exposed and $bugsinside is 1>>
-			<span class="blue">You run your fingers over your exposed <<pussy>>, and feel some bugs running around.</span>
-			<<addVaginalWetness 2>>
-		<<elseif $_genitals_exposed>>
-			<span class="blue">You run your fingers over your exposed <<pussy>> and shiver in anticipation.</span>
-			<<addVaginalWetness 2>>
-		<<elseif $worn.lower.vagina_exposed is 0>>
-			<span class="blue">You run your fingers over your <<pussy>>, feeling its shape beneath your $worn.lower.name.</span>
-			<<addVaginalWetness 0>>
-		<<elseif $worn.under_lower.vagina_exposed is 0>>
-			<span class="blue">You run your fingers over your <<pussy>>, feeling its shape beneath your $worn.under_lower.name.</span>
-			<<addVaginalWetness 1>>
-		<<else>>
-			<span class="blue">You run your fingers over your <<pussy>>, feeling its shape beneath your clothing.</span>
-			<<addVaginalWetness 0>>
-		<</if>>
-	<</if>>
-
-	<<set $mVaginaFingerAdd to 1>>
-	<<if $leftaction is "mvaginafingerstarttwo" or $leftaction is "mvaginafingeraddtwo">>
-		<<set $leftaction to ($leftaction is "mvaginafingeraddtwo" ? "mvaginafingeradd" : "mvagina")>>
-		<<set $mVaginaFingerAdd to 2>>
-	<</if>>
-	<<if $rightaction is "mvaginafingerstarttwo" or $rightaction is "mvaginafingeraddtwo">>
-		<<set $rightaction to ($rightaction is "mvaginafingeraddtwo" ? "mvaginafingeradd" : "mvagina")>>
-		<<set $mVaginaFingerAdd to 2>>
-	<</if>>
-
-	/* the player can only finger themself with one hand */
-	<<if $leftaction is "mvagina" and $rightaction is "mvagina">>
-		<<set $rightaction to "mvaginarub">>
-	<</if>>
-
-	<<if $leftaction is "mvagina" or $rightaction is "mvagina">>
-		<<set $fingersInVagina += $mVaginaFingerAdd>>
-		<<if $leftaction is "mvagina">>
-			<<set $leftactiondefault to ($mVaginaFingerAdd is 2 and $fingersInVagina lt $vaginaFingerLimit-1 and $fingersInVagina lt 4 ? "mvaginafingeraddtwo" : "mvaginafingeradd")>>
-			<<set $leftaction to 0>><<set $leftarm to "mvagina">>
-			<<set $semenInVagina to ($leftFingersSemen gte 1)>>
-			<<set _lubricated to ($leftFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<</if>>
-		<<if $rightaction is "mvagina">>
-			<<set $rightactiondefault to ($mVaginaFingerAdd is 2 and $fingersInVagina lt $vaginaFingerLimit-1 and $fingersInVagina lt 4 ? "mvaginafingeraddtwo" : "mvaginafingeradd")>>
-			<<set $rightaction to 0>><<set $rightarm to "mvagina">>
-			<<set $semenInVagina to ($rightFingersSemen gte 1)>>
-			<<set _lubricated to ($rightFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<</if>>
-		<<set _afinger to ($mVaginaFingerAdd is 2 ? "two _lubricated fingers" : "a _lubricated finger")>>
-		<<set $_arousal to ($mVaginaFingerAdd is 2 ? 250 : 200)>>
-		<<arousal $_arousal "masturbationVagina">>
-		<<if $_hymenIntact>>
-			<span class="purple">You push _afinger into your <<pussy>> until you poke your unblemished hymen.</span>
-		<<elseif $bugsinside is 1>>
-			<span class="purple">You push _afinger into your <<pussy>>. You feel insects crawling inside.</span>
-		<<else>>
-			<span class="purple">You push _afinger into your <<pussy>> which parts to allow the intrusion.</span>
-		<</if>>
-
-		<<addVaginalWetness 1>>
-		<<set _fingeringEffects to true>>
-	<</if>>
-
-	<<if $leftaction is "mvaginafingeradd" or $rightaction is "mvaginafingeradd">>
-		<<set $fingersInVagina += $mVaginaFingerAdd>>
-		<<if $leftaction is "mvaginafingeradd">>
-			<<set $leftactiondefault to ($fingersInVagina is $vaginaFingerLimit ? "mvaginatease" : $leftaction)>><<set $leftaction to 0>>
-			<<set $semenInVagina to ($leftFingersSemen gte 1)>>
-			<<set _lubricated to ($leftFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<</if>>
-		<<if $rightaction is "mvaginafingeradd">>
-			<<set $rightactiondefault to ($fingersInVagina is $vaginaFingerLimit ? "mvaginatease" : $rightaction)>><<set $rightaction to 0>>
-			<<set $semenInVagina to ($rightFingersSemen gte 1)>>
-			<<set _lubricated to ($rightFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<</if>>
-		<<set _anotherfinger to ($mVaginaFingerAdd is 2 ? "two more _lubricated fingers" : "another _lubricated finger")>>
-
-		<<set $_arousalGain to 200 + 50*$fingersInVagina>>
-		<<arousal $_arousalGain "masturbationVagina">>
-		<<if $bugsinside is 1>>
-			<<if $fingersInVagina is $vaginaFingerLimit>>
-				<span class="lblue">You gasp as you fit one last _lubricated finger inside yourself. You feel insects crawling inside.</span>
-			<<else>>
-				<span class="lblue">You stretch yourself further as you push _anotherfinger into your <<pussy>>. You feel insects crawling inside.</span>
-			<</if>>
-		<<else>>
-			<<if $fingersInVagina is $vaginaFingerLimit>>
-				<span class="lblue">You gasp as you fit one last _lubricated finger inside yourself.</span>
-			<<else>>
-				<span class="lblue">You stretch yourself further as you push _anotherfinger into your <<pussy>>.</span>
-			<</if>>
-		<</if>>
-
-		<<addVaginalWetness $fingersInVagina>>
-		<<set _fingeringEffects to true>>
-	<</if>>
-
-	<<if _fingeringEffects>>
-		<<if $fingersInVagina is $vaginaFingerLimit-1>>
-			<span class="purple">It's a tight fit.</span>
-		<<elseif $fingersInVagina is $vaginaFingerLimit>>
-			<<if $_hymenIntact>>
-				<span class="pink">You can't fit any more without tearing your hymen.</span>
-			<<else>>
-				<span class="pink">You've reached your limit.</span>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mvaginafistadd" or $rightaction is "mvaginafistadd">>
-		<<set $fingersInVagina to 5>>
-		<<if $leftaction is "mvaginafistadd">>
-			<<set $leftactiondefault to "mvaginafist">><<set $leftaction to 0>><<set $leftarm to "mvaginafist">>
-			<<set $semenInVagina to ($leftFingersSemen gte 1)>>
-			<<set _lubricated to ($leftFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<</if>>
-		<<if $rightaction is "mvaginafistadd">>
-			<<set $rightactiondefault to "mvaginafist">><<set $rightaction to 0>><<set $rightarm to "mvaginafist">>
-			<<set $semenInVagina to ($rightFingersSemen gte 1)>>
-			<<set _lubricated to ($rightFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<</if>>
-		<<arousal 650 "masturbationVagina">>
-		<span class="lblue">With a final push, you're able to shove all five fingers into your pussy.</span>
-		You feel your muscles part for the intrusion and pulse around your hand.
-		<<set $vaginastate to "penetrated">>
-	<</if>>
-
-	<<if $leftaction is "mvaginatease" or $rightaction is "mvaginatease">>
-		<<if $leftaction is "mvaginatease">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<</if>>
-		<<if $rightaction is "mvaginatease">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<</if>>
-		<<set $_arousalGain to 300 + 50*$fingersInVagina>>
-		<<arousal $_arousalGain "masturbationVagina">>
-		<<set $_fingers to ($fingersInVagina is 1 ? "finger" : "fingers")>>
-		<<addVaginalWetness $fingersInVagina>>
-		<<if $bugsinside is 1>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				<<if $vaginaArousalWetness gte 60>>
-					<<vaginaFluidActive>>
-					You pump <<number $fingersInVagina>> $_fingers in and out of your <<pussy>>, coaxing out lewd fluid, along with some bugs and insects.
-				<<else>>
-					You pump <<number $fingersInVagina>> $_fingers in and out of your <<pussy>>, coaxing out some bugs and insects.
-				<</if>>
-			<<elseif $arousal gte ($arousalmax / 5) * 2>>
-				You push <<number $fingersInVagina>> $_fingers in and out of your <<pussy>>, feeling the insects and bugs inside of you.
-			<<else>>
-				You gently fuck the entrance of your <<pussy>> with <<number $fingersInVagina>> $_fingers, pushing some of the bugs around.
-			<</if>>
-		<<else>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				<<if $vaginaArousalWetness gte 60>>
-					<<vaginaFluidActive>>
-					You pump <<number $fingersInVagina>> $_fingers in and out of your <<pussy>>, coaxing out lewd fluid.
-				<<else>>
-					You pump <<number $fingersInVagina>> $_fingers in and out of your <<pussy>>, pushing as deep as you can reach.
-				<</if>>
-			<<elseif $arousal gte ($arousalmax / 5) * 2>>
-				You push <<number $fingersInVagina>> $_fingers in and out of your <<pussy>>, feeling a thrill even without going too deep.
-			<<else>>
-				You gently fuck the entrance of your <<pussy>> with <<number $fingersInVagina>> $_fingers.
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mvaginafist" or $rightaction is "mvaginafist">>
-		<<if $leftaction is "mvaginafist">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<</if>>
-		<<if $rightaction is "mvaginafist">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<</if>>
-		<<arousal 500 "masturbationVagina">>
-		<<addVaginalWetness 5>>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			<<if $vaginaArousalWetness gte 60>>
-				<<vaginaFluidActive>>
-				You forcibly pound your tingling pussy with your entire hand. Your fluids drip down your wrist.
-			<<else>>
-				You forcibly pound your tingling pussy with your entire hand.
-			<</if>>
-		<<elseif $arousal gte ($arousalmax / 5) * 2>>
-			You thrust your entire hand inside your pussy. Your inner walls twitch around it.
-		<<else>>
-			You gently move your fist inside your pussy, feeling your muscles repeatedly stretch around it.
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mvaginaclit" and $rightaction is "mvaginaclit">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 400 "masturbationVagina">>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You press down on your clit with your thumb and rub it in a circular motion.
-			You gently brush the tip with your fingers, but it becomes harder to do as you become more sensitive.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You tease the tip of your clit with your fingers.
-		<<else>>
-			You rub your clit with your fingers, developing a lewd feeling.
-		<</if>>
-		<<addVaginalWetness 3>>
-	<<elseif $leftaction is "mvaginaclit" or $rightaction is "mvaginaclit">>
-		<<if $leftaction is "mvaginaclit">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<</if>>
-		<<if $rightaction is "mvaginaclit">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<</if>>
-		<<arousal 200 "masturbationVagina">>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You press down on your clit with your thumb and rub it in a circular motion, feeling your arousal build.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You tease the tip of your clit with your fingers.
-		<<else>>
-			You rub your clit with your fingers, developing a lewd feeling.
-		<</if>>
-		<<addVaginalWetness 2>>
-	<</if>>
-
-	<<if $leftaction is "mvaginarub" and $rightaction is "mvaginarub">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 400 "masturbationVagina">>
-		<<if $_genitals_exposed and $bugsinside is 1>>
-			You run your fingers over your exposed <<pussy>>, and feel some bugs running around.
-			<<addVaginalWetness 2>>
-		<<elseif $_genitals_exposed>>
-			You run your fingers over your exposed <<pussy>> and shiver in anticipation.
-			<<addVaginalWetness 2>>
-		<<elseif $worn.under_lower.vagina_exposed is 1>>
-			You run your fingers over your <<pussy>>, feeling its shape beneath your $worn.lower.name.
-			<<addVaginalWetness 1>>
-		<<elseif $worn.lower.vagina_exposed is 1>>
-			You run your fingers over your <<pussy>>, feeling its shape beneath your $worn.under_lower.name.
-			<<addVaginalWetness 2>>
-		<<else>>
-			You run your fingers over your <<pussy>>, feeling its shape beneath your clothing.
-			<<addVaginalWetness 0>>
-		<</if>>
-	<<elseif $leftaction is "mvaginarub" or $rightaction is "mvaginarub">>
-		<<if $leftaction is "mvaginarub">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<</if>>
-		<<if $rightaction is "mvaginarub">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<</if>>
-		<<arousal 200 "masturbationVagina">>
-		<<if $_genitals_exposed and $bugsinside is 1>>
-			You run your finger over your exposed <<pussy>>, and feel some bugs running around.
-			<<addVaginalWetness 2>>
-		<<elseif $_genitals_exposed>>
-			You run your finger over your exposed <<pussy>> and shiver in anticipation.
-			<<addVaginalWetness 2>>
-		<<elseif $worn.under_lower.vagina_exposed is 1>>
-			You run your finger over your <<pussy>>, feeling its shape beneath your $worn.lower.name.
-			<<addVaginalWetness 0>>
-		<<elseif $worn.lower.vagina_exposed is 1>>
-			You run your finger over your <<pussy>>, feeling its shape beneath your $worn.under_lower.name.
-			<<addVaginalWetness 1>>
-		<<else>>
-			You run your finger over your <<pussy>>, feeling its shape beneath your clothing.
-			<<addVaginalWetness 0>>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mvaginastop" and $rightaction is "mvaginastop">>
-		<<set $fingersInVagina to 0>>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="lblue">You move your hands away from your <<pussy>>.</span>
-	<<elseif $leftaction is "mvaginastop">>
-		<<if $leftarm is "mvagina">> <<set $fingersInVagina to 0>> <</if>>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<span class="lblue">You move your left hand away from your <<pussy>>.</span>
-	<<elseif $rightaction is "mvaginastop">>
-		<<if $rightarm is "mvagina">> <<set $fingersInVagina to 0>> <</if>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="lblue">You move your right hand away from your <<pussy>>.</span>
-	<</if>>
-
-	<<if $leftaction is "mvaginafingerremove" or $rightaction is "mvaginafingerremove">>
-		<<set $fingersInVagina -= 1>>
-		<<if $fingersInVagina gte 1>>
-			<<if $leftaction is "mvaginafingerremove">>
-				<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-			<<else>>
-				<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<</if>>
-			<span class="lblue">You take one finger out of your <<pussy>>.</span>
-		<<else>>
-			<<if $leftaction is "mvaginafingerremove">>
-				<<set $leftactiondefault to "mvaginarub">><<set $leftaction to 0>><<set $leftarm to "mvaginaentrance">>
-			<<else>>
-				<<set $rightactiondefault to "mvaginarub">><<set $rightaction to 0>><<set $rightarm to "mvaginaentrance">>
-			<</if>>
-			<span class="lblue">You take your finger out of your <<pussy>>.</span>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mvaginafistremove" or $rightaction is "mvaginafistremove">>
-		<<set $fingersInVagina to 0>>
-		<<if $leftaction is "mvaginafistremove">>
-			<<set $leftactiondefault to "mvaginarub">><<set $leftaction to 0>><<set $leftarm to "mvaginaentrance">>
-		<<else>>
-			<<set $rightactiondefault to "mvaginarub">><<set $rightaction to 0>><<set $rightarm to "mvaginaentrance">>
-		<</if>>
-		<<arousal 1000 "masturbationVagina">>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			<span class="lblue">You slide your whole hand out of your <<pussy>>. You feel your muscles twitching in protest as fluids drip out.</span>
-		<<elseif $arousal gte ($arousalmax / 5) * 2>>
-			<span class="lblue">You slide your whole hand out of your <<pussy>>, leaving you feeling empty.</span>
-		<<else>>
-			<span class="lblue">You slide your whole hand out of your <<pussy>>. You feel your muscles relax.</span>
-		<</if>>
-		<<set $vaginastate to 0>>
-	<</if>>
-
-	<<if $leftaction is "mvaginaentrancedildo" and $rightaction is "mvaginaentrancedildo">>
-		<<set $_actiondefault to "mvaginadildo">>
-		<<set $leftactiondefault to $_actiondefault>><<set $leftaction to 0>><<set $leftarm to "mvaginadildo">>
-		<<set $rightactiondefault to $_actiondefault>><<set $rightaction to 0>><<set $rightarm to "mvaginadildo">>
-		<<arousal 400 "masturbationVagina">>
-		<<if $_genitals_exposed and $worn.genitals.vagina_exposed gte 1>>
-			<span class="blue">You run your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your exposed <<pussy>> and shiver in anticipation.</span>
-			<<addVaginalWetness 2>>
-		<<elseif $worn.genitals.vagina_exposed is 0>>
-			<span class="blue">You run your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your <<pussy>>, feeling its shape beneath your $worn.genitals.name.</span>
-			<<addVaginalWetness 1>>
-		<<elseif $worn.under_lower.vagina_exposed is 0>>
-			<span class="blue">You run your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your <<pussy>>, feeling its shape beneath your $worn.lower.name.</span>
-			<<addVaginalWetness 1>>
-		<<elseif $worn.lower.vagina_exposed is 0>>
-			<span class="blue">You run your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your <<pussy>>, feeling its shape beneath your $worn.under_lower.name.</span>
-			<<addVaginalWetness 1>>
-		<<else>>
-			<span class="blue">You run your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> over your <<pussy>>, feeling its shape beneath your clothing.</span>
-			<<addVaginalWetness 0>>
-		<</if>>
-	<<elseif $leftaction is "mvaginaentrancedildo">>
-		<<set $_actiondefault to "mvaginadildo">>
-		<<set $leftactiondefault to $_actiondefault>><<set $leftaction to 0>><<set $leftarm to "mvaginaentrancedildo">>
-		<<arousal 200 "masturbationVagina">>
-		<span class="blue">You pick up your <<toyName $currentToyLeft>> and run it over your exposed <<pussy>>,
-			<<if $_genitals_exposed>>
-				shivering in anticipation.
-				<<addVaginalWetness 2>>
-			<<elseif $worn.lower.vagina_exposed is 0>>
-				feeling its shape beneath your $worn.lower.name.
-				<<addVaginalWetness 0>>
-			<<elseif $worn.under_lower.vagina_exposed is 0>>
-				feeling its shape beneath your $worn.under_lower.name.
-				<<addVaginalWetness 1>>
-			<<else>>
-				feeling its shape beneath your clothing.
-				<<addVaginalWetness 0>>
-			<</if>>
-		</span>
-	<<elseif $rightaction is "mvaginaentrancedildo">>
-		<<set $_actiondefault to "mvaginadildo">>
-		<<set $rightactiondefault to $_actiondefault>><<set $rightaction to 0>><<set $rightarm to "mvaginaentrancedildo">>
-		<<arousal 200 "masturbationVagina">>
-		<span class="blue">You pick up your <<toyName $currentToyRight>> and run it over your exposed <<pussy>>,
-			<<if $_genitals_exposed>>
-				shivering in anticipation.
-				<<addVaginalWetness 2>>
-			<<elseif $worn.lower.vagina_exposed is 0>>
-				feeling its shape beneath your $worn.lower.name.
-				<<addVaginalWetness 0>>
-			<<elseif $worn.under_lower.vagina_exposed is 0>>
-				feeling its shape beneath your $worn.under_lower.name.
-				<<addVaginalWetness 1>>
-			<<else>>
-				feeling its shape beneath your clothing.
-				<<addVaginalWetness 0>>
-			<</if>>
-		</span>
-	<</if>>
-
-	<<if $leftaction is "mvaginadildo" or $rightaction is "mvaginadildo">>
-		<<if $leftaction is "mvaginadildo">>
-			<<set $_toy to getToyName($currentToyLeft)>>
-			<<set $leftactiondefault to "mvaginateasedildo">><<set $leftaction to 0>><<set $leftarm to "mvaginadildo">>
-			<<set $semenInVagina to ($leftFingersSemen gte 1)>>
-			<<set _lubricated to ($leftFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<</if>>
-		<<if $rightaction is "mvaginadildo">>
-			<<set $_toy to getToyName($currentToyRight)>>
-			<<set $rightactiondefault to "mvaginateasedildo">><<set $rightaction to 0>><<set $rightarm to "mvaginadildo">>
-			<<set $semenInVagina to ($rightFingersSemen gte 1)>>
-			<<set _lubricated to ($rightFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<</if>>
-		<<if $rightarm is "mvaginadildo" and $leftarm is "mvaginadildo">>
-			<<set $_toy to getToyName($currentToyLeft) + " and " + getToyName($currentToyRight)>>
-			<<arousal 50 "masturbationVagina">>
-		<</if>>
-		<<arousal 250 "masturbationVagina">>
-		<<if $_hymenIntact>>
-			<span class="purple">You push the _lubricated $_toy into your <<pussy>> until you poke your unblemished hymen.</span>
-		<<elseif $bugsinside is 1>>
-			<span class="purple">You push the _lubricated $_toy into your <<pussy>>. You feel insects crawling inside.</span>
-		<<else>>
-			<span class="purple">You push the _lubricated $_toy into your <<pussy>> which parts to allow the intrusion.</span>
-		<</if>>
-
-		<<addVaginalWetness 1>>
-	<</if>>
-
-	<<if $leftaction is "mvaginateasedildo" or $rightaction is "mvaginateasedildo">>
-		/* set toy or toys */
-		<<if $leftaction is "mvaginateasedildo" and $rightaction is "mvaginateasedildo">>
-			<<set $_toy to ($currentToyLeft is $currentToyRight ? _playerToys[$currentToyLeft].name+"s" : _playerToys[$currentToyLeft].name + " and " + _playerToys[$currentToyRight].name)>>
-		<<elseif $rightaction is "mvaginateasedildo">>
-			<<set $_toy to _playerToys[$currentToyRight].name>>
-		<<elseif $leftaction is "mvaginateasedildo">>
-			<<set $_toy to _playerToys[$currentToyLeft].name>>
-		<</if>>
-		/* set actions */
-		<<if $leftaction is "mvaginateasedildo">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<</if>>
-		<<if $rightaction is "mvaginateasedildo">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<</if>>
-		/* arousal gains */
-		<<set $_toypleasure to 2>>
-		<<if $leftaction is "mvaginateasedildo" and $rightaction isnot "mvaginateasedildo">>
-			<<if $currentToyLeft is "dildo">>
-				<<set $_toypleasure to 3>>
-			<<elseif $currentToyLeft.includes("vibe")>>
-				<<set $_toypleasure to 5>>
-			<</if>>
-		<<elseif $rightaction is "mvaginateasedildo" and $leftaction isnot "mvaginateasedildo">>
-			<<if $currentToyRight is "dildo">>
-				<<set $_toypleasure to 3>>
-			<<elseif $currentToyRight.includes("vibe")>>
-				<<set $_toypleasure to 5>>
-			<</if>>
-		<</if>>
-		<<set $_arousalGain to 300 + 50*$_toypleasure>>
-		<<arousal $_arousalGain "masturbationVagina">>
-		<<addVaginalWetness $_toypleasure>>
-		/* set vaginal wetness text */
-		<<set $_wet to "">>
-		<<if $vaginaArousalWetness gte 40>>
-			<<set $_wet to "wet">>
-		<<elseif $vaginaArousalWetness gte 20>>
-			<<set $_wet to "slick">>
-		<</if>>
-		/* display action text */
-
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			<<if $vaginaArousalWetness gte 60>>
-				<<vaginaFluidActive>>
-				You pump your $_toy in and out of your $_wet <<pussy>>, coaxing out lewd fluid.
-			<<else>>
-				You pump your $_toy in and out of your $_wet <<pussy>>, pushing as deep as you can reach.
-			<</if>>
-		<<elseif $arousal gte ($arousalmax / 5) * 2>>
-			You push your $_toy in and out of your $_wet <<pussy>>, feeling a thrill even without going too deep.
-		<<else>>
-			You gently fuck the entrance of your $_wet <<pussy>> with your $_toy.
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "mvaginaclitdildo" and $rightaction is "mvaginaclitdildo">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<if $_lefttoy.includes("vibe") or $_righttoy.includes("vibe")>>
-			<<arousal 50 "masturbationVagina">>
-		<<elseif $_lefttoy.includes("vibe") and $_righttoy.includes("vibe")>>
-			<<arousal 100 "masturbationVagina">>
-		<</if>>
-		<<arousal 400 "masturbationVagina">>
-		<<set $_toys to getToyName($currentToyLeft) + " and " + getToyName($currentToyRight)>>
-		<<if $currentToyLeft is $currentToyRight>>
-			<!-- Get a function to standardise this -->
-			<<set $_toys to getToyName($currentToyLeft) + "s">>
-		<</if>>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You press down on your clit with your $_toys and rub it in a circular motion.
-			You gently brush the tip with your $_toys, but it becomes harder to do as you become more sensitive.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You tease the tip of your clit with your $_toys.
-		<<else>>
-			You rub your clit with your $_toys, developing a lewd feeling.
-		<</if>>
-		<<addVaginalWetness 3>>
-	<<elseif $leftaction is "mvaginaclitdildo" or $rightaction is "mvaginaclitdildo">>
-		<<if $leftaction is "mvaginaclitdildo">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You press down on your clit with your <<toyName $currentToyLeft>> and rub it in a circular motion, feeling your arousal build.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You tease the tip of your clit with your <<toyName $currentToyLeft>>.
-			<<else>>
-				You rub your clit with your <<toyName $currentToyLeft>>, developing a lewd feeling.
-			<</if>>
-		<</if>>
-		<<if $rightaction is "mvaginaclitdildo">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<<if $arousal gte ($arousalmax / 5) * 4>>
-				You press down on your clit with your <<toyName $currentToyRight>> and rub it in a circular motion, feeling your arousal build.
-			<<elseif $arousal gte ($arousalmax / 5) * 3>>
-				You tease the tip of your clit with your <<toyName $currentToyRight>>.
-			<<else>>
-				You rub your clit with your <<toyName $currentToyRight>>, developing a lewd feeling.
-			<</if>>
-		<</if>>
-		<<if $_lefttoy isnot undefined and $_lefttoy.includes("vibe") or $_righttoy isnot undefined and $_righttoy.includes("vibe")>>
-			<<arousal 50 "masturbationVagina">>
-		<</if>>
-		<<arousal 200 "masturbationVagina">>
-		<<addVaginalWetness 2>>
-	<</if>>
-
-	<<if $leftaction is "mvaginastopdildo" and $rightaction is "mvaginastopdildo">>
-		<<set $fingersInVagina to 0>>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="lblue">You move the <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> away from your <<pussy>>.</span>
-		<<set $currentToyRight to "none">><<set $currentToyLeft to "none">>
-	<<elseif $leftaction is "mvaginastopdildo">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<span class="lblue">You move the <<print _playerToys[$currentToyLeft].colour or "">> _playerToys[$currentToyLeft].name in your left hand away from your <<pussy>>.</span>
-		<<set $currentToyLeft to "none">>
-	<<elseif $rightaction is "mvaginastopdildo">>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="lblue">You move the <<print _playerToys[$currentToyRight].colour or "">> _playerToys[$currentToyRight].name in your right hand away from your <<pussy>>.</span>
-		<<set $currentToyRight to "none">>
-	<</if>>
-
-	<<if $player.vaginaExist>>
-		<<if $vaginaArousalWetness gte 60>>
-			<<if $worn.under_lower.vagina_exposed is 1 and $worn.lower.vagina_exposed is 1>>
-				<<vaginaFluidPassive>>
-				<<if _lube_released gt 0>>
-					<span class="pink">Juices leak from your <<pussy>>.</span>
-				<</if>>
-			<<elseif $worn.under_lower.vagina_exposed is 0 and $underlowerwetstage lt 3>>
-				<span class="pink">Juices leak from your <<pussy>> and dampen your $worn.under_lower.name.</span>
-				<<underlowerwet 1>>
-			<<elseif $worn.lower.vagina_exposed is 0>>
-				<span class="pink">Juices leak from your <<pussy>><<if $underlowerwet gte 60>>, soak through your $worn.under_lower.name,<</if>> and dampen your $worn.lower.name.</span>
-			<<else>>
-				<span class="pink">Juices leak from your <<pussy>> and dampen your clothing.</span>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	/* Anus */
-	<<if $leftaction is "manusentrance" and $rightaction is "manusentrance">>
-		<<set $leftactiondefault to "manusrub">><<set $leftaction to 0>><<set $leftarm to "manusentrance">>
-		<<set $rightactiondefault to "manusrub">><<set $rightaction to 0>><<set $rightarm to "manusentrance">>
-		<<arousal 200 "masturbationAss">>
-		<<if $worn.under_lower.anus_exposed is 1 and $worn.lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your exposed <<bottom>> and gently press your fingers against your anus.</span>
-		<<elseif $worn.under_lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your <<bottom>> and gently press your fingers against your anus through your $worn.lower.name.</span>
-		<<elseif $worn.lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your <<bottom>> and gently press your fingers against your anus through your $worn.under_lower.name.</span>
-		<</if>>
-	<<elseif $leftaction is "manusentrance" or $rightaction is "manusentrance">>
-		<<if $leftaction is "manusentrance">>
-			<<set $leftactiondefault to "manusrub">><<set $leftaction to 0>><<set $leftarm to "manusentrance">>
-		<</if>>
-		<<if $rightaction is "manusentrance">>
-			<<set $rightactiondefault to "manusrub">><<set $rightaction to 0>><<set $rightarm to "manusentrance">>
-		<</if>>
-		<<arousal 200 "masturbationAss">>
-		<<if $worn.under_lower.anus_exposed is 1 and $worn.lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your exposed <<bottom>> and gently press a finger against your anus.</span>
-		<<elseif $worn.under_lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your <<bottom>> and gently press a finger against your anus through your $worn.lower.name.</span>
-		<<elseif $worn.lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your <<bottom>> and gently press a finger against your anus through your $worn.under_lower.name.</span>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "manus" and $rightaction is "manus">>
-		<<set $leftactiondefault to "manustease">><<set $leftaction to 0>><<set $leftarm to "manus">>
-		<<set $rightactiondefault to "manustease">><<set $rightaction to 0>><<set $rightarm to "manus">>
-		<<arousal 200 "masturbationAnal">>
-		<<set _lubricated to ($leftFingersSemen gte 1 or $rightFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<<if _lubricated.length>><<set $semenInAnus to true>><</if>>
-		<span class="purple">You push two _lubricated fingers into your <<bottom>>.</span>
-	<<elseif $leftaction is "manus" or $rightaction is "manus">>
-		<<if $leftaction is "manus">>
-			<<set $leftactiondefault to "manustease">><<set $leftaction to 0>><<set $leftarm to "manus">>
-			<<set $semenInAnus to ($leftFingersSemen gte 1)>>
-			<<set _lubricated to ($leftFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<<elseif $rightaction is "manus">>
-			<<set $rightactiondefault to "manustease">><<set $rightaction to 0>><<set $rightarm to "manus">>
-			<<set $semenInAnus to ($rightFingersSemen gte 1)>>
-			<<set _lubricated to ($rightFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<</if>>
-		<<arousal 200 "masturbationAnal">>
-		<span class="purple">You push a _lubricated finger into your <<bottom>>.</span>
-	<</if>>
-
-	<<if $leftaction is "manusrub" and $rightaction is "manusrub">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 400 "masturbationAnal">>
-		<<print either(
-			"You keep your fingers pressed between your <<bottom>> cheeks and gently prod your anus.",
-			"You rub your anus in a circular motion.",
-			"You push your fingers against your anus. You feel it open a little bit."
-		)>>
-	<<elseif $leftaction is "manusrub" or $rightaction is "manusrub">>
-		<<if $leftaction is "manus">>
-			<<set $leftactiondefault to "manustease">><<set $leftaction to 0>><<set $leftarm to "manus">>
-		<<elseif $rightaction is "manus">>
-			<<set $rightactiondefault to "manustease">><<set $rightaction to 0>><<set $rightarm to "manus">>
-		<</if>>
-		<<arousal 200 "masturbationAnal">>
-		<<print either(
-			"You keep your fingers pressed between your <<bottom>> cheeks and gently prod your anus.",
-			"You rub your anus in a circular motion.",
-			"You push your fingers against your anus. You feel it open a little bit."
-		)>>
-	<</if>>
-
-	<<if $leftaction is "manustease" and $rightaction is "manustease">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 400 "masturbationAnal">>
-		<<print either(
-			"You gently explore inside your <<bottom>> with your fingers.",
-			"You slowly push your fingers into and out of your anus.",
-			"You fuck your <<bottom>> with your fingers. You feel naughty about playing with such a place."
-		)>>
-	<<elseif $leftaction is "manustease" or $rightaction is "manustease">>
-		<<if $leftaction is "manustease">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<</if>>
-		<<if $rightaction is "manustease">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<</if>>
-		<<arousal 200 "masturbationAnal">>
-		<<print either(
-			"You gently explore inside your <<bottom>> with your finger.",
-			"You slowly push your finger into and out of your anus.",
-			"You fuck your <<bottom>> with your fingers. You feel naughty about playing with such a place."
-		)>>
-	<</if>>
-
-	<<if $leftaction is "manusprostate" and $rightaction is "manusprostate">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 600 "masturbationAnal">>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You stroke your prostate, milking it of semen and making you shudder.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You press against your prostate, causing an almost unbearably pleasurable feeling of vulnerability.
-		<<else>>
-			You gently prod your prostate, each poke sending a wave of pleasure through your body.
-		<</if>>
-	<<elseif $leftaction is "manusprostate" or $rightaction is "manusprostate">>
-		<<if $leftaction is "manusprostate">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<</if>>
-		<<if $rightaction is "manusprostate">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<</if>>
-		<<arousal 300 "masturbationAnal">>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You stroke your prostate, milking it of semen and making you shudder.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You press against your prostate, causing an almost unbearably pleasurable feeling of vulnerability.
-		<<else>>
-			You gently prod your prostate, each poke sending a wave of pleasure through your body.
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "manusstop" and $rightaction is "manusstop">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="purple">You move your hands away from your <<bottom>>.</span>
-
-	<<elseif $leftaction is "manusstop">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<span class="purple">You move your left hand away from your <<bottom>>.</span>
-
-	<<elseif $rightaction is "manusstop">>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="purple">You move your right hand away from your <<bottom>>.</span>
-	<</if>>
-
-	<<if $leftaction is "manusentrancedildo" and $rightaction is "manusentrancedildo">>
-		<<set $leftactiondefault to "manusrubdildo">><<set $leftaction to 0>><<set $leftarm to "manusentrancedildo">>
-		<<set $rightactiondefault to "manusrubdildo">><<set $rightaction to 0>><<set $rightarm to "manusentrancedildo">>
-		<<arousal 300 "masturbationAss">>
-		<<if $worn.under_lower.anus_exposed is 1 and $worn.lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your exposed <<bottom>> and gently press your <<toyName $currentToyLeft>> and your <<toyName $currentToyRight>> against your anus.</span>
-		<<elseif $worn.under_lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your <<bottom>> and gently press your <<toyName $currentToyLeft>> and your <<toyName $currentToyRight>> against your anus through your $worn.lower.name.</span>
-		<<elseif $worn.lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your <<bottom>> and gently press your <<toyName $currentToyLeft>> and your <<toyName $currentToyRight>> against your anus through your $worn.under_lower.name.</span>
-		<</if>>
-	<<elseif $leftaction is "manusentrancedildo">>
-		<<set $leftactiondefault to "manusrubdildo">><<set $leftaction to 0>><<set $leftarm to "manusentrancedildo">>
-		<<arousal 200 "masturbationAss">>
-		<<if $worn.under_lower.anus_exposed is 1 and $worn.lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your exposed <<bottom>> and gently press your <<toyName $currentToyLeft>> against your anus.</span>
-		<<elseif $worn.under_lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your <<bottom>> and gently press your <<toyName $currentToyLeft>> against your anus through your $worn.lower.name.</span>
-		<<elseif $worn.lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your <<bottom>> and gently press your <<toyName $currentToyLeft>> against your anus through your $worn.under_lower.name.</span>
-		<</if>>
-	<<elseif $rightaction is "manusentrancedildo">>
-		<<set $rightaction to 0>><<set $rightarm to "manusentrancedildo">>
-		<<set $rightactiondefault to "manusrubdildo">><<set $rightaction to 0>><<set $rightarm to "manusentrancedildo">>
-		<<arousal 200 "masturbationAss">>
-		<<if $worn.under_lower.anus_exposed is 1 and $worn.lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your exposed <<bottom>> and gently press your <<toyName $currentToyRight>> against your anus.</span>
-		<<elseif $worn.under_lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your <<bottom>> and gently press your <<toyName $currentToyRight>> against your anus through your $worn.lower.name.</span>
-		<<elseif $worn.lower.anus_exposed is 1>>
-			<span class="blue">You reach down to your <<bottom>> and gently press your <<toyName $currentToyRight>> against your anus through your $worn.under_lower.name.</span>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "manusdildo" and $rightaction is "manusdildo">>
-		<<set $leftactiondefault to "manusteasedildo">><<set $leftaction to 0>><<set $leftarm to "manusdildo">>
-		<<set $rightactiondefault to "manusteasedildo">><<set $rightaction to 0>><<set $rightarm to "manusdildo">>
-		<<arousal 500 "masturbationAnal">>
-		<<set _lubricated to ($leftFingersSemen gte 1 or $rightFingersSemen gte 1 ? "semen-lubricated" : "")>>
-		<<if _lubricated.length>><<set $semenInAnus to true>><</if>>
-		<span class="purple">You push your _lubricated <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> into your <<bottom>>.</span>
-	<<elseif $leftaction is "manusdildo" or $rightaction is "manusdildo">>
-		<<if $leftaction is "manusdildo">>
-			<<set $leftactiondefault to "manusteasedildo">><<set $leftaction to 0>><<set $leftarm to "manusdildo">>
-			<<set $semenInAnus to ($leftFingersSemen gte 1)>>
-			<<set _lubricated to ($leftFingersSemen gte 1 ? "semen-lubricated" : "")>>
-			<span class="purple">You push your _lubricated <<toyName $currentToyLeft>> into your <<bottom>>.</span>
-		<<elseif $rightaction is "manusdildo">>
-			<<set $rightactiondefault to "manusteasedildo">><<set $rightaction to 0>><<set $rightarm to "manusdildo">>
-			<<set $semenInAnus to ($rightFingersSemen gte 1)>>
-			<<set _lubricated to ($rightFingersSemen gte 1 ? "semen-lubricated" : "")>>
-			<span class="purple">You push your _lubricated <<toyName $currentToyRight>> into your <<bottom>>.</span>
-		<</if>>
-		<<arousal 250 "masturbationAnal">>
-	<</if>>
-
-	<<if $leftaction is "manusrubdildo" and $rightaction is "manusrubdildo">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 500 "masturbationAnal">>
-		<<print either(
-			"You keep your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> between your <<bottom>> cheeks and gently prod your anus.",
-			"You rub your anus in a circular motion with your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>>.",
-			"You push your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> against your anus. You feel it open a little bit."
-		)>>
-	<<elseif $leftaction is "manusrubdildo" or $rightaction is "manusrubdildo">>
-		<<if $leftaction is "manusrubdildo">>
-			<<set $leftactiondefault to "manusrubdildo">><<set $leftaction to 0>><<set $leftarm to "manusentrancedildo">>
-			<<arousal 250 "masturbationAnal">>
-			<<print either(
-				"You keep your <<toyName $currentToyLeft>> pressed between your <<bottom>> cheeks and gently prod your anus.",
-				"You rub your anus in a circular motion with your <<toyName $currentToyLeft>>.",
-				"You push your <<toyName $currentToyLeft>> against your anus. You feel it open a little bit."
-			)>>
-		<<elseif $rightaction is "manusrubdildo">>
-			<<set $rightactiondefault to "manusrubdildo">><<set $rightaction to 0>><<set $rightarm to "manusentrancedildo">>
-			<<print either(
-				"You keep your <<toyName $currentToyRight>> pressed between your <<bottom>> cheeks and gently prod your anus.",
-				"You rub your anus in a circular motion with your <<toyName $currentToyRight>>.",
-				"You push your <<toyName $currentToyRight>> against your anus. You feel it open a little bit."
-			)>>
-			<<arousal 250 "masturbationAnal">>
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "manusteasedildo" and $rightaction is "manusteasedildo">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 500 "masturbationAnal">>
-		<<print either(
-			"You gently explore inside your <<bottom>> with your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>>.",
-			"You slowly push your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>>colour $_righttoy into and out of your anus.",
-			"You fuck your <<bottom>> with your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>>. You feel naughty about playing with such a place."
-		)>>
-	<<elseif $leftaction is "manusteasedildo" or $rightaction is "manusteasedildo">>
-		<<if $leftaction is "manusteasedildo">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-			<<print either(
-				"You gently explore inside your <<bottom>> with your <<toyName $currentToyLeft>>.",
-				"You slowly push your <<toyName $currentToyLeft>> into and out of your anus.",
-				"You fuck your <<bottom>> with your <<toyName $currentToyLeft>>. You feel naughty about playing with such a place."
-			)>>
-		<</if>>
-		<<if $rightaction is "manusteasedildo">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<<print either(
-				"You gently explore inside your <<bottom>> with your <<toyName $currentToyRight>>.",
-				"You slowly push your <<toyName $currentToyRight>> into and out of your anus.",
-				"You fuck your <<bottom>> with your <<toyName $currentToyRight>>. You feel naughty about playing with such a place."
-			)>>
-		<</if>>
-		<<arousal 250 "masturbationAnal">>
-	<</if>>
-
-	<<if $leftaction is "manusprostatedildo" and $rightaction is "manusprostatedildo">>
-		<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-		<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-		<<arousal 700 "masturbationAnal">>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You stroke your prostate with your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>>, milking it of semen and making you shudder.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You press against your prostate with your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>>, causing an almost unbearably pleasurable feeling of vulnerability.
-		<<else>>
-			You gently prod your prostate with your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>>, each poke sending a wave of pleasure through your body.
-		<</if>>
-	<<elseif $leftaction is "manusprostatedildo" or $rightaction is "manusprostatedildo">>
-		<<if $leftaction is "manusprostatedildo">>
-			<<set $leftactiondefault to $leftaction>><<set $leftaction to 0>>
-			<<set $_toy to getToyName($currentToyLeft)>>
-		<</if>>
-		<<if $rightaction is "manusprostatedildo">>
-			<<set $rightactiondefault to $rightaction>><<set $rightaction to 0>>
-			<<set $_toy to getToyName($currentToyRight)>>
-		<</if>>
-		<<arousal 350 "masturbationAnal">>
-		<<if $arousal gte ($arousalmax / 5) * 4>>
-			You stroke your prostate with your $_toy, milking it of semen and making you shudder.
-		<<elseif $arousal gte ($arousalmax / 5) * 3>>
-			You press against your prostate with your $_toy, causing an almost unbearably pleasurable feeling of vulnerability.
-		<<else>>
-			You gently prod your prostate with your $_toy, each poke sending a wave of pleasure through your body.
-		<</if>>
-	<</if>>
-
-	<<if $leftaction is "manusstopdildo" and $rightaction is "manusstopdildo">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="purple">You move your <<toyName $currentToyLeft>> and <<toyName $currentToyRight>> away from your <<bottom>>.</span>
-
-	<<elseif $leftaction is "manusstopdildo">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>>
-		<span class="purple">You move your _playerToys[$currentToyLeft].name in your left hand away from your <<bottom>>.</span>
-
-	<<elseif $rightaction is "manusstopdildo">>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>>
-		<span class="purple">You move your _playerToys[$currentToyRight].name in your right hand away from your <<bottom>>.</span>
-	<</if>>
-
-	<<if $leftaction is "mmouthstopdildo">>
-		<<set $leftactiondefault to "mrest">><<set $leftaction to 0>><<set $leftarm to 0>><<set $mouth to 0>>
-		<span class="purple">You move your _playerToys[$currentToyLeft].name in your left hand away from your mouth.</span>
-	<<elseif $rightaction is "mmouthstopdildo">>
-		<<set $rightactiondefault to "mrest">><<set $rightaction to 0>><<set $rightarm to 0>><<set $mouth to 0>>
-		<span class="purple">You move your _playerToys[$currentToyRight].name in your right hand away from your mouth.</span>
-	<</if>>
-
-
-	<<rng>>
-	<<if $leftaction is "mrest">>
-		<<set $leftactiondefault to 0>>
-		<<if $rng gte 91 and $earSlime.corruption gt (currentSkillValue('willpower') / 10) and $corruptionMasturbation is undefined>>
-			<<set $corruptionMasturbation to true>>
-			<<set $corruptionMasturbationCount to random(2,6)>>
-			<span class="red">The slime in your ear decides that it will continue for you.</span>
-		<<else>>
-			<<set $leftactiondefault to "mrest">>
-			<<set $leftaction to 0>>
-		<</if>>
-	<</if>>
-	<<rng>>
-	<<if $rightaction is "mrest">>
-		<<set $rightactiondefault to 0>>
-		<<if $rng gte 91 and $earSlime.corruption gt (currentSkillValue('willpower') / 10) and $corruptionMasturbation is undefined>>
-			<<set $corruptionMasturbation to true>>
-			<<set $corruptionMasturbationCount to random(2,6)>>
-			<span class="red">The slime in your ear decides that it will continue for you.</span>
-		<<else>>
-			<<set $rightactiondefault to "mrest">>
-			<<set $rightaction to 0>>
-		<</if>>
-	<</if>>
-	<<rng>>
-	<<if $rng gte Math.clamp(135 - ($earSlime.corruption / 2),80,98) and $earSlime.corruption gt (currentSkillValue('willpower') / 10) and $corruptionMasturbation is undefined>>
-		<<set $corruptionMasturbation to true>>
-		<<set $corruptionMasturbationCount to random(1,4)>>
-		<span class="red">The slime in your ear decides that it wants you to have more fun.</span>
-	<</if>>
-	<br><br>
-<</widget>>
diff --git a/game/special-masturbation/slime-control.js b/game/special-masturbation/slime-control.js
index de733d3b7b9cfd0376b0b082b91a20314d5d10b6..320fbbec414aafdb1b56a6f777817f0adfefd9f1 100644
--- a/game/special-masturbation/slime-control.js
+++ b/game/special-masturbation/slime-control.js
@@ -1,3 +1,7 @@
+/*
+	Old version can be found at https://gitgud.io/Vrelnir/degrees-of-lewdity/-/blob/master/game/special-masturbation/slimeControl.twee?ref_type=a2cb7190
+*/
+
 // eslint-disable-next-line no-unused-vars
 function masturbationSlimeControl() {
 	const redText = text => {
diff --git a/game/special-masturbation/slimeControl.twee b/game/special-masturbation/slimeControl.twee
deleted file mode 100644
index e8e736c625eb2e2ef8be5647eeee16c59d554ac0..0000000000000000000000000000000000000000
--- a/game/special-masturbation/slimeControl.twee
+++ /dev/null
@@ -1,312 +0,0 @@
-:: Widgets Masturbation Slime Control [widget]
-<<widget "masturbationSlimeControl">>
-	<<set $_genitals_exposed to $worn.over_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1 and $worn.under_lower.vagina_exposed gte 1>>
-	<<if !_playerToys>>
-		<<set _playerToys to window.listUniqueCarriedSextoys().filter(toy => (V.player.penisExist && !playerChastity("penis") && toy.type.includesAny("stroker")) || toy.type.includesAny("dildo","breastpump"))>>
-	<</if>>
-	<<set $_toysId to Array.from(Array(_playerToys.length).keys())>>
-	/*Stroker doesn't exactly have many ways to play with it, too boring for the ear slimes*/
-	<<set $_toysId to $_toysId.filter(i => !_playerToys[i].type.includes("stroker"))>>
-
-	<<if $leftaction is 0 or $leftaction is "mrest">>
-		<<set $leftaction to "slime">>
-	<</if>>
-
-	<<if $rightaction is 0 or $rightaction is "mrest">>
-		<<set $rightaction to "slime">>
-	<</if>>
-
-	<<if ($leftaction is "mpenisstop" and !($mouth is "mpenis" and $selfsuckDepth is $penisHeight)) or $leftaction is "mvaginastop" or $leftaction is "manusstop">>
-		<span class="red">The slime prevents you from moving your left hand away.</span>
-		<<set $leftaction to "slime">>
-	<</if>>
-
-	<<if ($rightaction is "mpenisstop" and !($mouth is "mpenis" and $selfsuckDepth is $penisHeight)) or $rightaction is "mvaginastop" or $rightaction is "manusstop">>
-		<span class="red">The slime prevents you from moving your right hand away.</span>
-		<<set $rightaction to "slime">>
-	<</if>>
-
-	<<if $mouthaction is "mpenisstop" or $mouthaction is "mpenismouthoff">>
-		<span class="red">The slime prevents you from moving your mouth away from your <<penis>>.</span>
-		<<set $mouthaction to "slime">>
-	<<elseif $mouthaction is "mpenispullback">>
-		<span class="red">The slime prevents you from pulling back from sucking your <<penis>> as deep as you currently are.</span>
-		<<set $mouthaction to "slime">>
-	<<elseif $mouthaction is "mvaginastop">>
-		<span class="red">The slime prevents you from moving your mouth away from your vagina.</span>
-		<<set $mouthaction to "slime">>
-	<</if>>
-
-	<<if ["mdildostop","mvaginastopdildo","manusstopdildo","mpenisstopstroker","mmouthstopdildo"].includes($leftaction) and !($mouth isnot 0 and _playerToys[$currentToyLeft].type.includes("stroker"))>>
-		<span class="red">The slime prevents you from putting the sex toy in your left hand down.</span>
-		<<set $leftaction to "slime">>
-	<</if>>
-
-	<<if ["mdildostop","mvaginastopdildo","manusstopdildo","mpenisstopstroker","mmouthstopdildo"].includes($rightaction) and !($mouth isnot 0 and _playerToys[$currentToyRight].type.includes("stroker"))>>
-		<span class="red">The slime prevents you from putting the sex toy in your right hand down.</span>
-		<<set $rightaction to "slime">>
-	<</if>>
-
-	<<if $corruptionMasturbation>>
-		<span class="red">It continues to force you to play with yourself.</span>
-	<</if>>
-	<<unset _force>>
-	<<arousal 100>>
-
-	/*Left Arm*/
-
-	<<if $worn.over_lower.exposed is 0 and ($leftaction is "slime" is 0 and random(0,100) gte 25)>>
-		<<set $leftaction to "moverlower">>
-	<<elseif $worn.lower.exposed is 0 and ($leftaction is "slime" or (random(0,100) gte 50 and $worn.over_lower.exposed gt 0))>>
-		<<set $leftaction to "mlower">>
-	<<elseif $worn.under_lower.exposed is 0 and ($leftaction is "slime" or (random(0,100) gte 50 and $worn.lower.exposed gt 0))>>
-		<<set $leftaction to "munder">>
-	<</if>>
-
-	<<if ["moverlower","mlower","munder"].includes($leftaction)>>
-	<<elseif $leftarm is 0>>
-		<<if (random(0,100) gte 80) and $_toysId.length gt 0 and (["home","brothel","cafe"].includes($location) or _enableSexToys)>>
-			<<if $leftaction is "mpickupdildo">>
-				<<set $_toysId to $_toysId.filter(e => e !== T.selectedToyRight)>>
-			<</if>>
-			<<set $leftaction to "mpickupdildo">>
-			<<set $selectedToyLeft to $_toysId.pluck()>>
-		<<elseif $player.penisExist and ($leftaction is "slime" or ($leftaction is "mchest" and random(0,100) gte 97)) and !($mouth is "mpenis" and $selfsuckDepth is $penisHeight) and !playerChastity("penis")>>
-			<<set $leftaction to "mpenisentrance">>
-		<<elseif !playerChastity("anus") and ((random(0, 100) lt 25 and $rightaction is "slime") or ($rightaction is "mchest" and random(0,100) gte 97))>>
-			<<set $leftaction to "manusentrance">>
-		<<elseif $leftaction is "slime">>
-			<<set $leftaction to "mchest">>
-		<</if>>
-	<<elseif $leftarm is "mpenisentrance">>
-		<<set $leftaction to "mpenisshaft">>
-	<<elseif $leftarm is "mvaginaentrance">>
-		<<if random(0,100) gte 50>>
-			<<set $leftaction to "mvaginaclit">>
-		<<else>>
-			<<set $leftaction to "mvaginarub">>
-		<</if>>
-	<<elseif $leftarm is "manusentrance">>
-		<<set $leftaction to "manus">>
-	<<elseif $leftarm is "manus" and $player.penisExist>>
-		<<set $leftaction to "manusprostate">>
-	<<elseif $leftarm is "mpickupdildo" and $currentToyLeft and (["home","brothel","cafe"].includes($location) or _enableSexToys)>>
-		<<if _playerToys[$currentToyLeft].type.includes("stroker")>>
-			<<if $penisuse isnot 0>>
-				/*When no action is avaliable*/
-				<<set $leftaction to "mdildostop">>
-			<<elseif $player.penisExist and random(0,100) gte 50>>
-				<<set $leftaction to "mpenisentrancestroker">>
-			<<elseif $leftaction isnot "mpenisentrancestroker">>
-				<<set $leftaction to "mpenisentrancestroker">>
-			<</if>>
-		<<elseif _playerToys[$currentToyLeft].type.includes("breastpump")>>
-			<<set $leftaction to "mbreastpump">>
-		<<elseif _playerToys[$currentToyLeft].type.includes("dildo")>>
-			<<if $player.vaginaExist and random(0,100) gte 75>>
-				<<set $leftaction to "mvaginaentrancedildo">>
-			<<elseif random(0,100) gte 75>>
-				<<set $leftaction to "manusentrancedildo">>
-			<<elseif ["small dildo","dildo"].includes(_playerToys[$currentToyLeft].name) and random(0,100) gte 75 and $mouth is 0 and !($canSelfSuckPenis and $penisuse is 0)>>
-				<<set $leftaction to "mdildomouthentrance">>
-			<<elseif !["mvaginaentrancedildo","manusentrancedildo"].includes($leftaction) and _playerToys[$currentToyLeft].name is "bullet vibe">>
-				<<set _actions to ["mchestvibrate"]>>
-				<<if $player.penisExist and $penisuse is 0 and !playerChastity("penis")>>
-					<<run _actions.push("mpenisvibrate")>>
-				<</if>>
-				<<if !$player.penisExist and !playerChastity("vagina")>>
-					<<run _actions.push("mvaginaclitvibrate")>>
-				<</if>>
-				<<set $leftaction to _actions.pluck()>>
-			<<else>>
-				/*To ensure there is a default action, not a duplicate*/
-				<<set $leftaction to "manusentrancedildo">>
-			<</if>>
-		<</if>>
-	<<elseif $leftarm is "mpenisentrancestroker">>
-		<<if $worn.over_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1 and $worn.under_lower.vagina_exposed gte 1 and $penisuse is 0>>
-			<<if random(0,100) gte 50>>
-				<<set $leftaction to "mpenisstroker">>
-			<<elseif $leftaction isnot "mpenisstroker">>
-				<<set $leftaction to "mpenisentrancestroker">>
-			<</if>>
-		<</if>>
-	<<elseif $leftarm is "mpenisstroker">>
-		<<set $leftaction to "mpenisstroker">>
-	<<elseif $leftarm is "mbreastpump">>
-		<<set $leftaction to "mbreastpumppump">>
-	<<elseif $leftarm is "manusentrancedildo">>
-		<<if $worn.over_lower.anus_exposed gte 1 and $worn.lower.anus_exposed gte 1 and $worn.under_lower.anus_exposed gte 1 and !playerChastity("anus")>>
-			<<set $leftaction to "manusdildo">>
-		<<elseif $leftaction isnot "manusdildo">>
-			<<set $leftaction to "manusrubdildo">>
-		<</if>>
-	<<elseif $leftarm is "manusdildo">>
-		<<if $player.penisExist and random(0,100) gte 50>>
-			<<set $leftaction to "manusprostatedildo">>
-		<<elseif $leftaction isnot "manusprostatedildo">>
-			<<set $leftaction to "manusteasedildo">>
-		<</if>>
-	<<elseif $leftarm is "mvaginaentrancedildo">>
-		<<if ($rightarm isnot "mvagina" and $rightarm isnot "mvaginadildo") and random(0,100) gte 50>>
-			<<set $leftaction to "mvaginadildo">>
-		<<elseif $leftaction isnot "mvaginadildo">>
-			<<set $leftaction to "mvaginaclitdildo">>
-		<</if>>
-	<<elseif $leftarm is "mvaginadildo">>
-		<<set $leftaction to "mvaginateasedildo">>
-	<<elseif $leftarm is "mdildomouthentrance">>
-		<<set $leftaction to "mdildomouth">>
-	<<elseif $leftarm is "mdildomouth">>
-		<<set $leftaction to "mdildopiston">>
-	<</if>>
-
-	/*Right Arm*/
-
-	<<if $worn.over_upper.exposed is 0 and ($rightaction is "slime" is 0 and random(0,100) gte 25)>>
-		<<set $rightaction to "moverupper">>
-	<<elseif $worn.upper.exposed is 0 and ($rightaction is "slime" or (random(0,100) gte 50 and $worn.over_upper.exposed gt 0))>>
-		<<set $rightaction to "mupper">>
-	<<elseif $worn.under_upper.exposed is 0 and ($rightaction is "slime" or (random(0,100) gte 50 and $worn.upper.exposed gt 0))>>
-		<<set $rightaction to "munder_upper">>
-	<</if>>
-
-	<<if ["moverupper","mupper","munder_upper"].includes($rightaction)>>
-	<<elseif $rightarm is 0>>
-		<<if (random(0,100) gte 80) and $_toysId.length gt 0 and (["home","brothel","cafe"].includes($location) or _enableSexToys)>>
-			<<if $rightaction is "mpickupdildo">>
-				<<set $_toysId to $_toysId.filter(e => e !== T.selectedToyLeft)>>
-			<</if>>
-			<<set $rightaction to "mpickupdildo">>
-			<<set $selectedToyRight to $_toysId.pluck()>>
-		<<elseif $player.vaginaExist and !playerChastity("vagina") and ($rightaction is "slime" or ($rightaction is "mchest" and random(0,100) lte 3))>>
-			<<set $rightaction to "mvaginaentrance">>
-		<<elseif !playerChastity("anus") and ((random(0, 100) lt 25 and $rightaction is "slime") or ($rightaction is "mchest" and random(0,100) lte 3))>>
-			<<set $rightaction to "manusentrance">>
-		<<elseif $rightaction is "slime">>
-			<<set $rightaction to "mchest">>
-		<</if>>
-	<<elseif $rightarm is "mpenisentrance">>
-		<<set $rightaction to "mpenisshaft">>
-	<<elseif $rightarm is "mvaginaentrance">>
-		<<if random(0,100) gte 50>>
-			<<set $rightaction to "mvaginaclit">>
-		<<else>>
-			<<set $rightaction to "mvaginarub">>
-		<</if>>
-	<<elseif $rightarm is "manusentrance">>
-		<<set $rightaction to "manus">>
-	<<elseif $rightarm is "manus" and $player.penisExist>>
-		<<set $rightaction to "manusprostate">>
-	<<elseif $rightarm is "mpickupdildo" and $currentToyRight and (["home","brothel","cafe"].includes($location) or _enableSexToys)>>
-		<<if _playerToys[$currentToyRight].type.includes("stroker")>>
-			<<if $penisuse isnot 0>>
-				/*When no action is avaliable*/
-				<<set $rightaction to "mdildostop">>
-			<<elseif $player.penisExist and random(0,100) gte 50>>
-				<<set $rightaction to "mpenisentrancestroker">>
-			<<elseif $rightaction isnot "mpenisentrancestroker">>
-				<<set $rightaction to "mpenisentrancestroker">>
-			<</if>>
-		<<elseif _playerToys[$currentToyRight].type.includes("breastpump")>>
-			<<set $rightaction to "mbreastpump">>
-		<<elseif _playerToys[$currentToyRight].type.includes("dildo")>>
-			<<if $player.vaginaExist and random(0,100) gte 75>>
-				<<set $rightaction to "mvaginaentrancedildo">>
-			<<elseif random(0,100) gte 75>>
-				<<set $rightaction to "manusentrancedildo">>
-			<<elseif ["small dildo","dildo"].includes(_playerToys[$currentToyRight].name) and random(0,100) gte 75 and $mouth is 0 and !($canSelfSuckPenis and $penisuse is 0)>>
-				<<set $rightaction to "mdildomouthentrance">>
-			<<elseif !["mvaginaentrancedildo","manusentrancedildo"].includes($rightaction) and _playerToys[$currentToyRight].name is "bullet vibe">>
-				<<set _actions to ["mchestvibrate"]>>
-				<<if $player.penisExist and $penisuse is 0 and !playerChastity("penis")>>
-					<<run _actions.push("mpenisvibrate")>>
-				<</if>>
-				<<if !$player.penisExist and !playerChastity("vagina")>>
-					<<run _actions.push("mvaginaclitvibrate")>>
-				<</if>>
-				<<set $rightaction to _actions.pluck()>>
-			<<else>>
-				/*To ensure there is a default action, not a duplicate*/
-				<<set $rightaction to "manusentrancedildo">>
-			<</if>>
-		<</if>>
-	<<elseif $rightarm is "mpenisentrancestroker">>
-		<<if $worn.over_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1 and $worn.under_lower.vagina_exposed gte 1 and $penisuse is 0>>
-			<<if random(0,100) gte 50>>
-				<<set $rightaction to "mpenisstroker">>
-			<<elseif $rightaction isnot "mpenisstroker">>
-				<<set $rightaction to "mpenisentrancestroker">>
-			<</if>>
-		<</if>>
-	<<elseif $rightarm is "mpenisstroker">>
-		<<set $rightaction to "mpenisstroker">>
-	<<elseif $rightarm is "mbreastpump">>
-		<<set $rightaction to "mbreastpumppump">>
-	<<elseif $rightarm is "manusentrancedildo">>
-		<<if $worn.over_lower.anus_exposed gte 1 and $worn.lower.anus_exposed gte 1 and $worn.under_lower.anus_exposed gte 1 and !playerChastity("anus")>>
-			<<set $rightaction to "manusdildo">>
-		<<elseif $rightaction isnot "manusdildo">>
-			<<set $rightaction to "manusrubdildo">>
-		<</if>>
-	<<elseif $rightarm is "manusdildo">>
-		<<if $player.penisExist and random(0,100) gte 50>>
-			<<set $rightaction to "manusprostatedildo">>
-		<<elseif $rightaction isnot "manusprostatedildo">>
-			<<set $rightaction to "manusteasedildo">>
-		<</if>>
-	<<elseif $rightarm is "mvaginaentrancedildo">>
-		<<if ($rightarm isnot "mvagina" and $rightarm isnot "mvaginadildo") and random(0,100) gte 50>>
-			<<set $rightaction to "mvaginadildo">>
-		<<elseif $rightaction isnot "mvaginadildo">>
-			<<set $rightaction to "mvaginaclitdildo">>
-		<</if>>
-	<<elseif $rightarm is "mvaginadildo">>
-		<<set $rightaction to "mvaginateasedildo">>
-	<<elseif $rightarm is "mdildomouthentrance">>
-		<<set $rightaction to "mdildomouth">>
-	<<elseif $rightarm is "mdildomouth">>
-		<<set $rightaction to "mdildopiston">>
-	<</if>>
-
-	/*Mouth*/
-	<<if $_genitals_exposed>>
-		<<if $mouth is 0>>
-			<<if $canSelfSuckPenis and $penisuse is 0 and (random(0,100) gte 50 or !($canSelfSuckVagina and $vaginause is 0 and $fingersInVagina is 0))>>
-				<<set $mouthaction to "mpenisentrance">>
-			<<elseif $canSelfSuckVagina and $vaginause is 0 and $fingersInVagina is 0>>
-				<<set $mouthaction to "mvaginaentrance">>
-			<</if>>
-		<<elseif $mouth is "mpenisentrance">>
-			<<if random(0,100) gte 50>>
-				<<set $mouthaction to "mpenistakein">>
-			<<elseif $mouthaction isnot "mpenistakein">>
-				<<set $mouthaction to "mpenislick">>
-			<</if>>
-		<<elseif $mouth is "mpenis">>
-			<<if $selfsuckDepth lt $selfsuckLimit and random(0,100) gte 50>>
-				<<set $mouthaction to "mpenisdeepthroat">>
-			<<elseif $mouthaction isnot "mpenisdeepthroat">>
-				<<set $mouthaction to "mpenissuck">>
-			<</if>>
-		<<elseif $mouth is "mvaginaentrance">>
-			<<if random(0,100) gte 50>>
-				<<set $mouthaction to "mvaginaclit">>
-			<<else>>
-				<<set $mouthaction to "mvaginalick">>
-			<</if>>
-		<<elseif $mouth is "mdildomouthentrance">>
-			<<if random(0,100) gte 50>>
-				<<set $mouthaction to "mdildolick">>
-			<<else>>
-				<<set $mouthaction to "mdildokiss">>
-			<</if>>
-		<<elseif $mouth is "mdildomouth">>
-			<<if random(0,100) gte 50>>
-				<<set $mouthaction to "mdildolick">>
-			<<else>>
-				<<set $mouthaction to "mdildosuck">>
-			<</if>>
-		<</if>>
-	<</if>>
-<</widget>>
\ No newline at end of file
diff --git a/img/clothes/upper/openshoulderlolitaclassic/5_gray.png b/img/clothes/face/bandanna/frayed_gray.png
similarity index 70%
rename from img/clothes/upper/openshoulderlolitaclassic/5_gray.png
rename to img/clothes/face/bandanna/frayed_gray.png
index 75d24f7f1782a038daaa7302b02fb5ad01ab881d..41aa92f3c07995c28ded1b2cdba1393f7f961191 100644
Binary files a/img/clothes/upper/openshoulderlolitaclassic/5_gray.png and b/img/clothes/face/bandanna/frayed_gray.png differ
diff --git a/img/clothes/upper/openshoulderlolitaclassic/6_gray.png b/img/clothes/face/bandanna/tattered_gray.png
similarity index 70%
rename from img/clothes/upper/openshoulderlolitaclassic/6_gray.png
rename to img/clothes/face/bandanna/tattered_gray.png
index 75d24f7f1782a038daaa7302b02fb5ad01ab881d..41aa92f3c07995c28ded1b2cdba1393f7f961191 100644
Binary files a/img/clothes/upper/openshoulderlolitaclassic/6_gray.png and b/img/clothes/face/bandanna/tattered_gray.png differ
diff --git a/img/clothes/upper/haremvest/2_gray.png b/img/clothes/face/bandanna/torn_gray.png
similarity index 68%
rename from img/clothes/upper/haremvest/2_gray.png
rename to img/clothes/face/bandanna/torn_gray.png
index 813b929e12565670c9ba23871811bce7a42a5f3a..41aa92f3c07995c28ded1b2cdba1393f7f961191 100644
Binary files a/img/clothes/upper/haremvest/2_gray.png and b/img/clothes/face/bandanna/torn_gray.png differ
diff --git a/img/clothes/under_upper/bikini/1_gray.png b/img/clothes/under_upper/bikini/1_gray.png
deleted file mode 100644
index dcacf616035d4582d7ae7ca621df1f37c365452c..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/bikini/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/bikini/6_gray.png b/img/clothes/under_upper/bikini/6_gray.png
deleted file mode 100644
index 07b621cc63b114e28ff1d8bd519b57882c7abcb5..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/bikini/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/buntiebikinitop/0_gray.png b/img/clothes/under_upper/buntiebikinitop/0_gray.png
deleted file mode 100644
index e0db6a1e6a886f0e65588b3e44241e7478567207..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/buntiebikinitop/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/buntiebikinitop/1_gray.png b/img/clothes/under_upper/buntiebikinitop/1_gray.png
deleted file mode 100644
index ec398bedd8ef2cd54dd9865d5e1ce26482a9a25e..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/buntiebikinitop/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/buntiebikinitop/6_gray.png b/img/clothes/under_upper/buntiebikinitop/6_gray.png
deleted file mode 100644
index 5fc301588580ccbffd4d027c5ca644e025c53fdf..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/buntiebikinitop/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/camisole/0_gray.png b/img/clothes/under_upper/camisole/0_gray.png
deleted file mode 100644
index f42849177719f4ee1135f4be267dca45ed5603f5..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/camisole/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/camisole/1_gray.png b/img/clothes/under_upper/camisole/1_gray.png
deleted file mode 100644
index 96de696e0185840f904a5c0a1d5287f61a5408e4..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/camisole/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/camisole/2_gray.png b/img/clothes/under_upper/camisole/2_gray.png
deleted file mode 100644
index 1401c5de41a356fafe195d8c09da20918b9543f7..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/camisole/2_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/camisole/3_gray.png b/img/clothes/under_upper/camisole/3_gray.png
deleted file mode 100644
index 3762aa882162dbb8f9ca7fc11665e38e355488ac..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/camisole/3_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/camisole/6_gray.png b/img/clothes/under_upper/camisole/6_gray.png
deleted file mode 100644
index 2b97f416d1225d1f03e3cd37fac3af557ade9e48..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/camisole/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/catgirlbra/1_gray.png b/img/clothes/under_upper/catgirlbra/1_gray.png
deleted file mode 100644
index 86b1202e32b38dd68cf9879dd955f00e9c53ad5d..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/catgirlbra/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/catgirlbra/5_gray.png b/img/clothes/under_upper/catgirlbra/5_gray.png
deleted file mode 100644
index f1c7c154cf477d135de75ba2ff9bb7d67b6b243d..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/catgirlbra/5_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/catgirlbra/6_gray.png b/img/clothes/under_upper/catgirlbra/6_gray.png
deleted file mode 100644
index f1c7c154cf477d135de75ba2ff9bb7d67b6b243d..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/catgirlbra/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/chestbinder/0_gray.png b/img/clothes/under_upper/chestbinder/0_gray.png
deleted file mode 100644
index 89d609b3c1895504731344091113b3c835b1124a..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/chestbinder/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/chestbinder/1_gray.png b/img/clothes/under_upper/chestbinder/1_gray.png
deleted file mode 100644
index 89d609b3c1895504731344091113b3c835b1124a..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/chestbinder/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/chestwrap/0.png b/img/clothes/under_upper/chestwrap/0.png
deleted file mode 100644
index b56201b1d55faffe9d62ae88ccc3cbddfbd439d9..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/chestwrap/0.png and /dev/null differ
diff --git a/img/clothes/under_upper/chestwrap/6.png b/img/clothes/under_upper/chestwrap/6.png
deleted file mode 100644
index 65b737a18a23083deb1dd51b063247e76aa6cc99..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/chestwrap/6.png and /dev/null differ
diff --git a/img/clothes/under_upper/corset/0_gray.png b/img/clothes/under_upper/corset/0_gray.png
deleted file mode 100644
index 51109ad8ac047d1738ab663af0e9dfccb05e0727..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/corset/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/corset/5_gray.png b/img/clothes/under_upper/corset/5_gray.png
deleted file mode 100644
index 6aa24ffcc2111278625f4d588382c9f784540ea4..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/corset/5_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/cow/0.png b/img/clothes/under_upper/cow/0.png
deleted file mode 100644
index 8071aec32e2adeb2dbb0fb8e214484b8831c2b75..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/cow/0.png and /dev/null differ
diff --git a/img/clothes/under_upper/cow/1.png b/img/clothes/under_upper/cow/1.png
deleted file mode 100644
index 8071aec32e2adeb2dbb0fb8e214484b8831c2b75..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/cow/1.png and /dev/null differ
diff --git a/img/clothes/under_upper/cow/6.png b/img/clothes/under_upper/cow/6.png
deleted file mode 100644
index 206acf5293a2e3255b19fad215e001244c39b4d9..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/cow/6.png and /dev/null differ
diff --git a/img/clothes/under_upper/lacebra/0_gray.png b/img/clothes/under_upper/lacebra/0_gray.png
deleted file mode 100644
index d455ec8980b55fbaf4097c8e2eff397b9e962c55..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/lacebra/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/lacebra/1_gray.png b/img/clothes/under_upper/lacebra/1_gray.png
deleted file mode 100644
index d455ec8980b55fbaf4097c8e2eff397b9e962c55..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/lacebra/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/lacebra/5_gray.png b/img/clothes/under_upper/lacebra/5_gray.png
deleted file mode 100644
index dc2ca3145ea81ee3c3498146b1113d0c5419ace5..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/lacebra/5_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/lacebra/6_gray.png b/img/clothes/under_upper/lacebra/6_gray.png
deleted file mode 100644
index dc2ca3145ea81ee3c3498146b1113d0c5419ace5..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/lacebra/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/leotard/0_gray.png b/img/clothes/under_upper/leotard/0_gray.png
deleted file mode 100644
index a7d1dba32cdc2f696cd541d7c31f3179a4dc1a8a..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/leotard/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/leotard/6_gray.png b/img/clothes/under_upper/leotard/6_gray.png
deleted file mode 100644
index caea5c18741b99bb725c849e44ed627bcd340b00..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/leotard/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/leotardbunny/0_gray.png b/img/clothes/under_upper/leotardbunny/0_gray.png
deleted file mode 100644
index fcfa8bd5ebbd79065f1758f1ccd6d3ac76669662..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/leotardbunny/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/leotardbunny/1_gray.png b/img/clothes/under_upper/leotardbunny/1_gray.png
deleted file mode 100644
index fcfa8bd5ebbd79065f1758f1ccd6d3ac76669662..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/leotardbunny/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/leotardbunny/6_gray.png b/img/clothes/under_upper/leotardbunny/6_gray.png
deleted file mode 100644
index f5b7609ba1976be5fd3cce1a48e547827568c40c..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/leotardbunny/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/leotardskimpy/6_gray.png b/img/clothes/under_upper/leotardskimpy/6_gray.png
deleted file mode 100644
index ff561bc34b31b1d5c836f7b749cff192a52ab209..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/leotardskimpy/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/leotardturtleneck/0_gray.png b/img/clothes/under_upper/leotardturtleneck/0_gray.png
deleted file mode 100644
index 5031ab9bb1c611ddc7d62b1cb54b0167f600e4f6..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/leotardturtleneck/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/leotardturtleneck/1_gray.png b/img/clothes/under_upper/leotardturtleneck/1_gray.png
deleted file mode 100644
index fcadc1c2684f16916e7797873ce5765284535374..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/leotardturtleneck/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/leotardturtleneck/6_gray.png b/img/clothes/under_upper/leotardturtleneck/6_gray.png
deleted file mode 100644
index 4513e4fba11e45153b71c4a4b609eaf041ab7602..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/leotardturtleneck/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/microkini/0_gray.png b/img/clothes/under_upper/microkini/0_gray.png
deleted file mode 100644
index 6490325c4421d649b5ad510b86858a28bf7ae80c..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/microkini/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/microkini/4_gray.png b/img/clothes/under_upper/microkini/4_gray.png
deleted file mode 100644
index 90c4eae4fb724d54cdca467a18fd623833cc1859..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/microkini/4_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/microkini/5_gray.png b/img/clothes/under_upper/microkini/5_gray.png
deleted file mode 100644
index 49869cbe42a11475ab29dbfdbc759b70007a301c..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/microkini/5_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/microkini/6_gray.png b/img/clothes/under_upper/microkini/6_gray.png
deleted file mode 100644
index 49869cbe42a11475ab29dbfdbc759b70007a301c..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/microkini/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/plainbra/0_gray.png b/img/clothes/under_upper/plainbra/0_gray.png
deleted file mode 100644
index eefc7da69bd655bf68625033b503b673f14c46ba..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/plainbra/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/plainbra/4_gray.png b/img/clothes/under_upper/plainbra/4_gray.png
deleted file mode 100644
index 2e215be0b1c560a5b3083d4b0ca9b6607443db22..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/plainbra/4_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/plainbra/6_gray.png b/img/clothes/under_upper/plainbra/6_gray.png
deleted file mode 100644
index 2e215be0b1c560a5b3083d4b0ca9b6607443db22..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/plainbra/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/pushupbra/0_gray.png b/img/clothes/under_upper/pushupbra/0_gray.png
deleted file mode 100644
index 6cceaca036b2783830343a9b4aa464d1f972bac8..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/pushupbra/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/pushupbra/5_gray.png b/img/clothes/under_upper/pushupbra/5_gray.png
deleted file mode 100644
index 48407333718b028aeea759951d8df73733ea028b..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/pushupbra/5_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/pushupbra/6_gray.png b/img/clothes/under_upper/pushupbra/6_gray.png
deleted file mode 100644
index 48407333718b028aeea759951d8df73733ea028b..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/pushupbra/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimsuit/0_gray.png b/img/clothes/under_upper/schoolswimsuit/0_gray.png
deleted file mode 100644
index 2e34cdd5f979048742d0ac11ccdcf505cd93406f..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimsuit/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimsuit/1_gray.png b/img/clothes/under_upper/schoolswimsuit/1_gray.png
deleted file mode 100644
index 2e34cdd5f979048742d0ac11ccdcf505cd93406f..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimsuit/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimsuit/2_gray.png b/img/clothes/under_upper/schoolswimsuit/2_gray.png
deleted file mode 100644
index 4dd91ebe6a53a0f3add0aca4cf8e5a021fde42fd..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimsuit/2_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimsuit/6_gray.png b/img/clothes/under_upper/schoolswimsuit/6_gray.png
deleted file mode 100644
index 895ef9c1212b329ac37c96a331536113e198adf7..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimsuit/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimsuitj/0_gray.png b/img/clothes/under_upper/schoolswimsuitj/0_gray.png
deleted file mode 100644
index 2e34cdd5f979048742d0ac11ccdcf505cd93406f..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimsuitj/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimsuitj/1_gray.png b/img/clothes/under_upper/schoolswimsuitj/1_gray.png
deleted file mode 100644
index 2e34cdd5f979048742d0ac11ccdcf505cd93406f..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimsuitj/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimsuitj/2_gray.png b/img/clothes/under_upper/schoolswimsuitj/2_gray.png
deleted file mode 100644
index 4dd91ebe6a53a0f3add0aca4cf8e5a021fde42fd..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimsuitj/2_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimsuitj/6_gray.png b/img/clothes/under_upper/schoolswimsuitj/6_gray.png
deleted file mode 100644
index 895ef9c1212b329ac37c96a331536113e198adf7..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimsuitj/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimtop/0_gray.png b/img/clothes/under_upper/schoolswimtop/0_gray.png
deleted file mode 100644
index e4bcf6b41e7db3abe9acb601a5fbb3c7c59036bb..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimtop/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimtop/1_gray.png b/img/clothes/under_upper/schoolswimtop/1_gray.png
deleted file mode 100644
index e4bcf6b41e7db3abe9acb601a5fbb3c7c59036bb..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimtop/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimtop/5_gray.png b/img/clothes/under_upper/schoolswimtop/5_gray.png
deleted file mode 100644
index aad84e4f8c9a9316b9f37d0c680eb703a9d2a43a..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimtop/5_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/schoolswimtop/6_gray.png b/img/clothes/under_upper/schoolswimtop/6_gray.png
deleted file mode 100644
index 8d2a43a8f4a5db8fcfa125cade75fd013c7d22a6..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/schoolswimtop/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/seethroughswimsuit/0_gray.png b/img/clothes/under_upper/seethroughswimsuit/0_gray.png
deleted file mode 100644
index 1bf31184035103f87c3570c7dbea6920ac693914..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/seethroughswimsuit/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/seethroughswimsuit/6_gray.png b/img/clothes/under_upper/seethroughswimsuit/6_gray.png
deleted file mode 100644
index 90601570e9c818c2864fc38bf8078721b3d40afe..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/seethroughswimsuit/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/sportsbra/0_gray.png b/img/clothes/under_upper/sportsbra/0_gray.png
deleted file mode 100644
index 2de26f06b7a6faa96d5a9623fa90577941894ae0..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/sportsbra/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/sportsbra/1_gray.png b/img/clothes/under_upper/sportsbra/1_gray.png
deleted file mode 100644
index 4f5184498f068ba3826ec9793640de53ead4ee70..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/sportsbra/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/sportsbra/6_gray.png b/img/clothes/under_upper/sportsbra/6_gray.png
deleted file mode 100644
index 12dc2b1e23cf05bd9be24b5e1bccceb8d7f4c67f..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/sportsbra/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/straplessbra/0_gray.png b/img/clothes/under_upper/straplessbra/0_gray.png
deleted file mode 100644
index c24d20b21d55de2b90f3da72167c5f8099d43ea8..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/straplessbra/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/straplessbra/6_gray.png b/img/clothes/under_upper/straplessbra/6_gray.png
deleted file mode 100644
index 64c27dc3a634c7f6f555b9cebe4e66cece837e0f..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/straplessbra/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/stripedbra/1_acc_gray.png b/img/clothes/under_upper/stripedbra/1_acc_gray.png
deleted file mode 100644
index ab2df23e77880aed263c38f57612131fe66c1345..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/stripedbra/1_acc_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/stripedbra/1_gray.png b/img/clothes/under_upper/stripedbra/1_gray.png
deleted file mode 100644
index dcacf616035d4582d7ae7ca621df1f37c365452c..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/stripedbra/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/stripedbra/6_acc_gray.png b/img/clothes/under_upper/stripedbra/6_acc_gray.png
deleted file mode 100644
index 299383f34d34a360a289089c5d724a97e3fe7ef5..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/stripedbra/6_acc_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/stripedbra/6_gray.png b/img/clothes/under_upper/stripedbra/6_gray.png
deleted file mode 100644
index 07b621cc63b114e28ff1d8bd519b57882c7abcb5..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/stripedbra/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/swimsuit/0_gray.png b/img/clothes/under_upper/swimsuit/0_gray.png
deleted file mode 100644
index 2e34cdd5f979048742d0ac11ccdcf505cd93406f..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/swimsuit/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/swimsuit/1_gray.png b/img/clothes/under_upper/swimsuit/1_gray.png
deleted file mode 100644
index 2e34cdd5f979048742d0ac11ccdcf505cd93406f..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/swimsuit/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/swimsuit/2_gray.png b/img/clothes/under_upper/swimsuit/2_gray.png
deleted file mode 100644
index 4dd91ebe6a53a0f3add0aca4cf8e5a021fde42fd..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/swimsuit/2_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/swimsuit/5_gray.png b/img/clothes/under_upper/swimsuit/5_gray.png
deleted file mode 100644
index 595c658891db4b590ce992892167b4f38f63743c..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/swimsuit/5_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/swimsuit/6_gray.png b/img/clothes/under_upper/swimsuit/6_gray.png
deleted file mode 100644
index 90eb437a447f0a32d304be4b44eae50ca2cbec58..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/swimsuit/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/tape/0_gray.png b/img/clothes/under_upper/tape/0_gray.png
deleted file mode 100644
index 8bde6708a22fabcaa40af66ee6539ebbc4bd7714..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/tape/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/tape/1_gray.png b/img/clothes/under_upper/tape/1_gray.png
deleted file mode 100644
index 361e0197af824d9c1e044beb6f2cb6cb2d10bd97..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/tape/1_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/tape/6_gray.png b/img/clothes/under_upper/tape/6_gray.png
deleted file mode 100644
index f83888fbce3c630feef89f9fef504acdcbcd3f04..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/tape/6_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/unitard/0_gray.png b/img/clothes/under_upper/unitard/0_gray.png
deleted file mode 100644
index 0e148e6ab5d2c0cd511187476ddaa64734cd692b..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/unitard/0_gray.png and /dev/null differ
diff --git a/img/clothes/under_upper/unitard/6_gray.png b/img/clothes/under_upper/unitard/6_gray.png
deleted file mode 100644
index ab640c2d1372beda43ea2838c18302fc750ff960..0000000000000000000000000000000000000000
Binary files a/img/clothes/under_upper/unitard/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/ao dai/0_gray.png b/img/clothes/upper/ao dai/0_gray.png
deleted file mode 100644
index 2081efe1f0a08ca52e44029b43948b39098c54e0..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/ao dai/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/ao dai/6_gray.png b/img/clothes/upper/ao dai/6_gray.png
deleted file mode 100644
index 7149115af20a075d8c6c4a7d8456c36f535660d5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/ao dai/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/argyle/0_gray.png b/img/clothes/upper/argyle/0_gray.png
deleted file mode 100644
index f42849177719f4ee1135f4be267dca45ed5603f5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/argyle/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/argyle/1_gray.png b/img/clothes/upper/argyle/1_gray.png
deleted file mode 100644
index 96de696e0185840f904a5c0a1d5287f61a5408e4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/argyle/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/argyle/2_gray.png b/img/clothes/upper/argyle/2_gray.png
deleted file mode 100644
index 1401c5de41a356fafe195d8c09da20918b9543f7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/argyle/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/argyle/3_gray.png b/img/clothes/upper/argyle/3_gray.png
deleted file mode 100644
index 7f6e7adcadd5156e662519ced3272d1f399dc6d0..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/argyle/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/babydoll/0_gray.png b/img/clothes/upper/babydoll/0_gray.png
deleted file mode 100644
index df47afe27f8e4dc2feeb6d11a59ce38f7bc0dc21..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/babydoll/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/babydoll/1_gray.png b/img/clothes/upper/babydoll/1_gray.png
deleted file mode 100644
index df47afe27f8e4dc2feeb6d11a59ce38f7bc0dc21..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/babydoll/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/babydoll/6_gray.png b/img/clothes/upper/babydoll/6_gray.png
deleted file mode 100644
index b2e4f16b2a35c840fb123e5c7b70a43545aa2c2d..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/babydoll/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/babydolllingerie/0_gray.png b/img/clothes/upper/babydolllingerie/0_gray.png
deleted file mode 100644
index 53a6b4e340cc409ffa230446a99e236681da18ea..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/babydolllingerie/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/babydolllingerie/1_gray.png b/img/clothes/upper/babydolllingerie/1_gray.png
deleted file mode 100644
index 53a6b4e340cc409ffa230446a99e236681da18ea..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/babydolllingerie/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/babydolllingerie/6_gray.png b/img/clothes/upper/babydolllingerie/6_gray.png
deleted file mode 100644
index 63a3ff7eab7fd1a2b6cac677fb37b6e8ccd5e6af..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/babydolllingerie/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/ballgown/0_gray.png b/img/clothes/upper/ballgown/0_gray.png
deleted file mode 100644
index 6aea93e829a3227a64ace5406105cc225b8748d2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/ballgown/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/ballgown/6_gray.png b/img/clothes/upper/ballgown/6_gray.png
deleted file mode 100644
index 7998364f492c77d2e42a7cd02c140a1aecc6498b..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/ballgown/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/band tee/0_gray.png b/img/clothes/upper/band tee/0_gray.png
deleted file mode 100644
index 5031ab9bb1c611ddc7d62b1cb54b0167f600e4f6..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/band tee/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/band tee/1_gray.png b/img/clothes/upper/band tee/1_gray.png
deleted file mode 100644
index 5031ab9bb1c611ddc7d62b1cb54b0167f600e4f6..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/band tee/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/band tee/2_gray.png b/img/clothes/upper/band tee/2_gray.png
deleted file mode 100644
index 5031ab9bb1c611ddc7d62b1cb54b0167f600e4f6..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/band tee/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/band tee/6_gray.png b/img/clothes/upper/band tee/6_gray.png
deleted file mode 100644
index b5cfdc68e1fb0702b3471498470a14a7fc413a8b..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/band tee/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/bathrobe/0.png b/img/clothes/upper/bathrobe/0.png
deleted file mode 100644
index f0ecefa7e706861c7b0df95809387e182308f559..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/bathrobe/0.png and /dev/null differ
diff --git a/img/clothes/upper/bathrobe/6.png b/img/clothes/upper/bathrobe/6.png
deleted file mode 100644
index 2bd22ee50996f8e1643dd4a3ee9ad8d9af8a5c81..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/bathrobe/6.png and /dev/null differ
diff --git a/img/clothes/upper/beatnik/0.png b/img/clothes/upper/beatnik/0.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/beatnik/0.png and /dev/null differ
diff --git a/img/clothes/upper/beatnik/1.png b/img/clothes/upper/beatnik/1.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/beatnik/1.png and /dev/null differ
diff --git a/img/clothes/upper/beatnik/2.png b/img/clothes/upper/beatnik/2.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/beatnik/2.png and /dev/null differ
diff --git a/img/clothes/upper/beatnik/3.png b/img/clothes/upper/beatnik/3.png
deleted file mode 100644
index c69f7d3addecb32e1bb3dc8970a67beff84591da..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/beatnik/3.png and /dev/null differ
diff --git a/img/clothes/upper/blackleather/0_alt_gray.png b/img/clothes/upper/blackleather/0_alt_gray.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blackleather/0_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blackleather/0_gray.png b/img/clothes/upper/blackleather/0_gray.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blackleather/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blackleather/1_alt_gray.png b/img/clothes/upper/blackleather/1_alt_gray.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blackleather/1_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blackleather/1_gray.png b/img/clothes/upper/blackleather/1_gray.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blackleather/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blackleather/2_alt_gray.png b/img/clothes/upper/blackleather/2_alt_gray.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blackleather/2_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blackleather/2_gray.png b/img/clothes/upper/blackleather/2_gray.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blackleather/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blackleather/3_alt_gray.png b/img/clothes/upper/blackleather/3_alt_gray.png
deleted file mode 100644
index 4ce7af4e53ba82d547812510921afd4a46e947ae..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blackleather/3_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blackleather/3_gray.png b/img/clothes/upper/blackleather/3_gray.png
deleted file mode 100644
index 16c9dd15a51a3619cd60d85e4b04c2debb4a8065..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blackleather/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blackleather/6_alt_gray.png b/img/clothes/upper/blackleather/6_alt_gray.png
deleted file mode 100644
index a25b01164b82ec3ebc47e12e2dbffaa4c1d25563..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blackleather/6_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blackleather/6_gray.png b/img/clothes/upper/blackleather/6_gray.png
deleted file mode 100644
index 576a28238acadf55fd9681f7094de6560144a767..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blackleather/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blazershirt/0_acc_gray.png b/img/clothes/upper/blazershirt/0_acc_gray.png
deleted file mode 100644
index a8bab0d406587db87840aee93215e2f1a55aa4b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blazershirt/0_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blazershirt/0_gray.png b/img/clothes/upper/blazershirt/0_gray.png
deleted file mode 100644
index f0e61142165590766445c7d7b65b5d30f5136f40..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blazershirt/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blazershirt/6_acc_gray.png b/img/clothes/upper/blazershirt/6_acc_gray.png
deleted file mode 100644
index 9c94ded4a3b3902c56676a20fe5cb7ce91fc7093..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blazershirt/6_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blazershirt/6_gray.png b/img/clothes/upper/blazershirt/6_gray.png
deleted file mode 100644
index 821d5e07553e2cdfb664d79c4467cdfd14f1ab31..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blazershirt/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blouse/5_gray.png b/img/clothes/upper/blouse/5_gray.png
deleted file mode 100644
index f3730f31b62cc785899edfdf16d55ca9d88c6316..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blouse/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/blouse/6_gray.png b/img/clothes/upper/blouse/6_gray.png
deleted file mode 100644
index f3730f31b62cc785899edfdf16d55ca9d88c6316..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/blouse/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/boxy/0_gray.png b/img/clothes/upper/boxy/0_gray.png
deleted file mode 100644
index 5031ab9bb1c611ddc7d62b1cb54b0167f600e4f6..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/boxy/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/boxy/1_gray.png b/img/clothes/upper/boxy/1_gray.png
deleted file mode 100644
index 5031ab9bb1c611ddc7d62b1cb54b0167f600e4f6..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/boxy/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/boxy/6_gray.png b/img/clothes/upper/boxy/6_gray.png
deleted file mode 100644
index aa17df63476be1f1a7dfc17050d5d28154291cbf..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/boxy/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/brownleather/0_alt_gray.png b/img/clothes/upper/brownleather/0_alt_gray.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/brownleather/0_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/brownleather/0_gray.png b/img/clothes/upper/brownleather/0_gray.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/brownleather/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/brownleather/1_alt_gray.png b/img/clothes/upper/brownleather/1_alt_gray.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/brownleather/1_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/brownleather/1_gray.png b/img/clothes/upper/brownleather/1_gray.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/brownleather/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/brownleather/2_alt_gray.png b/img/clothes/upper/brownleather/2_alt_gray.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/brownleather/2_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/brownleather/2_gray.png b/img/clothes/upper/brownleather/2_gray.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/brownleather/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/brownleather/3_alt_gray.png b/img/clothes/upper/brownleather/3_alt_gray.png
deleted file mode 100644
index 21c54482dfdd0198f409f8960d2801d85c5a6f93..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/brownleather/3_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/brownleather/3_gray.png b/img/clothes/upper/brownleather/3_gray.png
deleted file mode 100644
index 0d96396319e47ea43cafa6c941a41b5d4ece1295..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/brownleather/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/brownleather/6_alt_gray.png b/img/clothes/upper/brownleather/6_alt_gray.png
deleted file mode 100644
index 270dfefe00874b4e6e090ea458a045c69f409d26..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/brownleather/6_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/brownleather/6_gray.png b/img/clothes/upper/brownleather/6_gray.png
deleted file mode 100644
index 89a44400631ed660c43b694b13489dccb3bfe844..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/brownleather/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/buttondown/0_gray.png b/img/clothes/upper/buttondown/0_gray.png
deleted file mode 100644
index a8bab0d406587db87840aee93215e2f1a55aa4b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/buttondown/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/buttondown/6_gray.png b/img/clothes/upper/buttondown/6_gray.png
deleted file mode 100644
index 9a0f44d5bf894e6f67f89277aca43cdf83c5a281..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/buttondown/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cable/0_gray.png b/img/clothes/upper/cable/0_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cable/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cable/1_gray.png b/img/clothes/upper/cable/1_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cable/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cable/2_gray.png b/img/clothes/upper/cable/2_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cable/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cable/3_gray.png b/img/clothes/upper/cable/3_gray.png
deleted file mode 100644
index ecf2bea98f8cec0dfe26882c888621dbd50da962..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cable/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cableknitcardigan/0_gray.png b/img/clothes/upper/cableknitcardigan/0_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cableknitcardigan/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cableknitcardigan/1_gray.png b/img/clothes/upper/cableknitcardigan/1_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cableknitcardigan/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cableknitcardigan/2_gray.png b/img/clothes/upper/cableknitcardigan/2_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cableknitcardigan/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cableknitcardigan/6_gray.png b/img/clothes/upper/cableknitcardigan/6_gray.png
deleted file mode 100644
index 7927793db3f6d71139e085f06ffc43335661815f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cableknitcardigan/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cat hoodie/0_gray.png b/img/clothes/upper/cat hoodie/0_gray.png
deleted file mode 100644
index 923577e311abc40d258784a1fe02f33bf513d81f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cat hoodie/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cat hoodie/1_gray.png b/img/clothes/upper/cat hoodie/1_gray.png
deleted file mode 100644
index 923577e311abc40d258784a1fe02f33bf513d81f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cat hoodie/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cat hoodie/2_gray.png b/img/clothes/upper/cat hoodie/2_gray.png
deleted file mode 100644
index 923577e311abc40d258784a1fe02f33bf513d81f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cat hoodie/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cat hoodie/6_gray.png b/img/clothes/upper/cat hoodie/6_gray.png
deleted file mode 100644
index be54861aa407a383106147807bc0e31ab9e7865e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cat hoodie/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/catsuit/0_gray.png b/img/clothes/upper/catsuit/0_gray.png
deleted file mode 100644
index 09026fc12cd6db6080753f6d62ccba4bc1162e32..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/catsuit/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/catsuit/6_gray.png b/img/clothes/upper/catsuit/6_gray.png
deleted file mode 100644
index 69d16a28f13980ac45e59e02e098f7eee2176a90..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/catsuit/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cheongsam/0_gray.png b/img/clothes/upper/cheongsam/0_gray.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cheongsam/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cheongsam/6_gray.png b/img/clothes/upper/cheongsam/6_gray.png
deleted file mode 100644
index 1618fdde0689e213e46ab42463ab4933f1c7528f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cheongsam/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cheongsamshort/0_gray.png b/img/clothes/upper/cheongsamshort/0_gray.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cheongsamshort/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/cheongsamshort/6_gray.png b/img/clothes/upper/cheongsamshort/6_gray.png
deleted file mode 100644
index 1618fdde0689e213e46ab42463ab4933f1c7528f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/cheongsamshort/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/christmas/0.png b/img/clothes/upper/christmas/0.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/christmas/0.png and /dev/null differ
diff --git a/img/clothes/upper/christmas/1.png b/img/clothes/upper/christmas/1.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/christmas/1.png and /dev/null differ
diff --git a/img/clothes/upper/christmas/2.png b/img/clothes/upper/christmas/2.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/christmas/2.png and /dev/null differ
diff --git a/img/clothes/upper/christmas/4.png b/img/clothes/upper/christmas/4.png
deleted file mode 100644
index 969eb3997af375623d7e0ec7f89beab9de1e7448..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/christmas/4.png and /dev/null differ
diff --git a/img/clothes/upper/christmasdress/0.png b/img/clothes/upper/christmasdress/0.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/christmasdress/0.png and /dev/null differ
diff --git a/img/clothes/upper/christmasdress/1.png b/img/clothes/upper/christmasdress/1.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/christmasdress/1.png and /dev/null differ
diff --git a/img/clothes/upper/christmasdress/2.png b/img/clothes/upper/christmasdress/2.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/christmasdress/2.png and /dev/null differ
diff --git a/img/clothes/upper/christmasdress/4.png b/img/clothes/upper/christmasdress/4.png
deleted file mode 100644
index 969eb3997af375623d7e0ec7f89beab9de1e7448..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/christmasdress/4.png and /dev/null differ
diff --git a/img/clothes/upper/classyvampire/0.png b/img/clothes/upper/classyvampire/0.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/classyvampire/0.png and /dev/null differ
diff --git a/img/clothes/upper/classyvampire/1.png b/img/clothes/upper/classyvampire/1.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/classyvampire/1.png and /dev/null differ
diff --git a/img/clothes/upper/classyvampire/2.png b/img/clothes/upper/classyvampire/2.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/classyvampire/2.png and /dev/null differ
diff --git a/img/clothes/upper/classyvampire/3.png b/img/clothes/upper/classyvampire/3.png
deleted file mode 100644
index 90683b10b97479dde0d7722478fdaa1b8762d50a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/classyvampire/3.png and /dev/null differ
diff --git a/img/clothes/upper/colour block crop/0_acc_gray.png b/img/clothes/upper/colour block crop/0_acc_gray.png
deleted file mode 100644
index 5031ab9bb1c611ddc7d62b1cb54b0167f600e4f6..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/colour block crop/0_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/colour block crop/0_gray.png b/img/clothes/upper/colour block crop/0_gray.png
deleted file mode 100644
index 5031ab9bb1c611ddc7d62b1cb54b0167f600e4f6..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/colour block crop/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/colour block crop/6_acc_gray.png b/img/clothes/upper/colour block crop/6_acc_gray.png
deleted file mode 100644
index fab4e787b2f7a18d809c337a5237769a28f503ba..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/colour block crop/6_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/colour block crop/6_gray.png b/img/clothes/upper/colour block crop/6_gray.png
deleted file mode 100644
index af3a5c01f78320a84fde3ff4ca2f954e19aa8953..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/colour block crop/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/croptop/0_gray.png b/img/clothes/upper/croptop/0_gray.png
deleted file mode 100644
index b4f674417c5778757358cdc67eb65109bf7069f7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/croptop/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/croptop/1_gray.png b/img/clothes/upper/croptop/1_gray.png
deleted file mode 100644
index 25a1ae690be2422934a8f0d034456f3641333cad..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/croptop/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/croptop/6_gray.png b/img/clothes/upper/croptop/6_gray.png
deleted file mode 100644
index bd1b904a2996b0f9302f441ba675a90e4ffa05d4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/croptop/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/doublebreasted/0_gray.png b/img/clothes/upper/doublebreasted/0_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/doublebreasted/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/doublebreasted/1_gray.png b/img/clothes/upper/doublebreasted/1_gray.png
deleted file mode 100644
index f132ba0ba94901d6982ea10d51a5207b924afdac..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/doublebreasted/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/doublebreasted/5_gray.png b/img/clothes/upper/doublebreasted/5_gray.png
deleted file mode 100644
index 2197c9c9006d61e85b273df52d0987a0fc0595eb..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/doublebreasted/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/dress/0_alt_gray.png b/img/clothes/upper/dress/0_alt_gray.png
deleted file mode 100644
index a8bab0d406587db87840aee93215e2f1a55aa4b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/dress/0_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/dress/0_gray.png b/img/clothes/upper/dress/0_gray.png
deleted file mode 100644
index a8bab0d406587db87840aee93215e2f1a55aa4b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/dress/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/dress/6_alt_gray.png b/img/clothes/upper/dress/6_alt_gray.png
deleted file mode 100644
index d762595b757e65930f475cdcb4667e12da39a415..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/dress/6_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/dress/6_gray.png b/img/clothes/upper/dress/6_gray.png
deleted file mode 100644
index 4b605b3cb9d02438946f9395cbddf48d500396b5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/dress/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/eveninggown/0_gray.png b/img/clothes/upper/eveninggown/0_gray.png
deleted file mode 100644
index 96de696e0185840f904a5c0a1d5287f61a5408e4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/eveninggown/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/eveninggown/1_gray.png b/img/clothes/upper/eveninggown/1_gray.png
deleted file mode 100644
index 96de696e0185840f904a5c0a1d5287f61a5408e4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/eveninggown/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/eveninggown/2_gray.png b/img/clothes/upper/eveninggown/2_gray.png
deleted file mode 100644
index 1401c5de41a356fafe195d8c09da20918b9543f7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/eveninggown/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/eveninggown/5_gray.png b/img/clothes/upper/eveninggown/5_gray.png
deleted file mode 100644
index 08d2dd993272cd31f7c741d399ef3359d9ca5c7e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/eveninggown/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/futuresuit/6_acc_gray.png b/img/clothes/upper/futuresuit/6_acc_gray.png
deleted file mode 100644
index 6abf7b33e0c4f54e965f21c4fd14416cba192b2c..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/futuresuit/6_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/futuresuit/6_gray.png b/img/clothes/upper/futuresuit/6_gray.png
deleted file mode 100644
index c5de9058b77dc39d6c0081158f0bb6694c8debb2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/futuresuit/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/gothicjacket/0.png b/img/clothes/upper/gothicjacket/0.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/gothicjacket/0.png and /dev/null differ
diff --git a/img/clothes/upper/gothicjacket/1.png b/img/clothes/upper/gothicjacket/1.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/gothicjacket/1.png and /dev/null differ
diff --git a/img/clothes/upper/gothicjacket/2.png b/img/clothes/upper/gothicjacket/2.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/gothicjacket/2.png and /dev/null differ
diff --git a/img/clothes/upper/gothicjacket/3.png b/img/clothes/upper/gothicjacket/3.png
deleted file mode 100644
index ddf4063effcee20ea8a4af70db1beb2fc3fdd923..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/gothicjacket/3.png and /dev/null differ
diff --git a/img/clothes/upper/gymshirt/0.png b/img/clothes/upper/gymshirt/0.png
deleted file mode 100644
index bf87e294286e50a52d0d388072a3cd8680b3fdfd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/gymshirt/0.png and /dev/null differ
diff --git a/img/clothes/upper/gymshirt/6.png b/img/clothes/upper/gymshirt/6.png
deleted file mode 100644
index 5ab2aeee8d7bc8055b2c6a95b24537a2e4a4908b..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/gymshirt/6.png and /dev/null differ
diff --git a/img/clothes/upper/haltersundress/0_gray.png b/img/clothes/upper/haltersundress/0_gray.png
deleted file mode 100644
index f42849177719f4ee1135f4be267dca45ed5603f5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/haltersundress/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/haltersundress/1_gray.png b/img/clothes/upper/haltersundress/1_gray.png
deleted file mode 100644
index 96de696e0185840f904a5c0a1d5287f61a5408e4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/haltersundress/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/haltersundress/2_gray.png b/img/clothes/upper/haltersundress/2_gray.png
deleted file mode 100644
index 1401c5de41a356fafe195d8c09da20918b9543f7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/haltersundress/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/haltersundress/6_gray.png b/img/clothes/upper/haltersundress/6_gray.png
deleted file mode 100644
index c07aa7813f76fed631c6b8ee4f97ada92da26389..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/haltersundress/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hanfu/0_acc_gray.png b/img/clothes/upper/hanfu/0_acc_gray.png
deleted file mode 100644
index 4fa91356e9af34d7b86ef1b34fb7e6603a329e41..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hanfu/0_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hanfu/0_gray.png b/img/clothes/upper/hanfu/0_gray.png
deleted file mode 100644
index e5fb8b9a93bbea2bc3b08bdd0cfb1115e1195d17..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hanfu/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hanfu/2_acc_gray.png b/img/clothes/upper/hanfu/2_acc_gray.png
deleted file mode 100644
index 4fa91356e9af34d7b86ef1b34fb7e6603a329e41..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hanfu/2_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hanfu/2_gray.png b/img/clothes/upper/hanfu/2_gray.png
deleted file mode 100644
index 65ce3c60eccd8f56ecc5e224e8b882957586164e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hanfu/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hanfu/4_acc_gray.png b/img/clothes/upper/hanfu/4_acc_gray.png
deleted file mode 100644
index 2f745b833976007a89f023a479107c1295743641..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hanfu/4_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hanfu/4_gray.png b/img/clothes/upper/hanfu/4_gray.png
deleted file mode 100644
index 23c586a3690027d505624317bb436eaaf5f2f88a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hanfu/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hanfu/6_acc_gray.png b/img/clothes/upper/hanfu/6_acc_gray.png
deleted file mode 100644
index 2f745b833976007a89f023a479107c1295743641..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hanfu/6_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hanfu/6_gray.png b/img/clothes/upper/hanfu/6_gray.png
deleted file mode 100644
index 23c586a3690027d505624317bb436eaaf5f2f88a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hanfu/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/haremvest/0_gray.png b/img/clothes/upper/haremvest/0_gray.png
deleted file mode 100644
index baf15cd60467ed75bd32b99da723a338e49cc6cd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/haremvest/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/haremvest/4_gray.png b/img/clothes/upper/haremvest/4_gray.png
deleted file mode 100644
index 9a051274ef070813c57d7c17e40207242efa7b4a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/haremvest/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/haremvest/6_gray.png b/img/clothes/upper/haremvest/6_gray.png
deleted file mode 100644
index f6418e872231a15f6ef230d0c5707c0741df3bf8..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/haremvest/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hoodie/0_gray.png b/img/clothes/upper/hoodie/0_gray.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hoodie/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hoodie/6_gray.png b/img/clothes/upper/hoodie/6_gray.png
deleted file mode 100644
index 9563de8787d461ff61c237839353293abf1dafbe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hoodie/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hunt/0_gray.png b/img/clothes/upper/hunt/0_gray.png
deleted file mode 100644
index 4488b3aac07b1dd4473ea06b5f153e7509f647a5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hunt/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hunt/1_gray.png b/img/clothes/upper/hunt/1_gray.png
deleted file mode 100644
index 35ab62db3ef1b1b81cf0361cca611c5e7a454e06..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hunt/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hunt/2_gray.png b/img/clothes/upper/hunt/2_gray.png
deleted file mode 100644
index 552deaf9ae54f680e949f1341918970eb42ae942..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hunt/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/hunt/3_gray.png b/img/clothes/upper/hunt/3_gray.png
deleted file mode 100644
index 6219aa2b93477a4b8dba5b7c15fa929990d8332a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/hunt/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jingledress/0.png b/img/clothes/upper/jingledress/0.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledress/0.png and /dev/null differ
diff --git a/img/clothes/upper/jingledress/1.png b/img/clothes/upper/jingledress/1.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledress/1.png and /dev/null differ
diff --git a/img/clothes/upper/jingledress/2.png b/img/clothes/upper/jingledress/2.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledress/2.png and /dev/null differ
diff --git a/img/clothes/upper/jingledress/4.png b/img/clothes/upper/jingledress/4.png
deleted file mode 100644
index 906922583c7548cd46ba5ef274289de52447adb0..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledress/4.png and /dev/null differ
diff --git a/img/clothes/upper/jingledress/6.png b/img/clothes/upper/jingledress/6.png
deleted file mode 100644
index 81ed7662aae300a48508362ed3ca7133932fc7bb..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledress/6.png and /dev/null differ
diff --git a/img/clothes/upper/jingledresssleeveless/0.png b/img/clothes/upper/jingledresssleeveless/0.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledresssleeveless/0.png and /dev/null differ
diff --git a/img/clothes/upper/jingledresssleeveless/1.png b/img/clothes/upper/jingledresssleeveless/1.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledresssleeveless/1.png and /dev/null differ
diff --git a/img/clothes/upper/jingledresssleeveless/2.png b/img/clothes/upper/jingledresssleeveless/2.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledresssleeveless/2.png and /dev/null differ
diff --git a/img/clothes/upper/jingledresssleeveless/4.png b/img/clothes/upper/jingledresssleeveless/4.png
deleted file mode 100644
index 906922583c7548cd46ba5ef274289de52447adb0..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledresssleeveless/4.png and /dev/null differ
diff --git a/img/clothes/upper/jingledresssleeveless/6.png b/img/clothes/upper/jingledresssleeveless/6.png
deleted file mode 100644
index 81ed7662aae300a48508362ed3ca7133932fc7bb..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledresssleeveless/6.png and /dev/null differ
diff --git a/img/clothes/upper/jingledresssleeveless/hold.png b/img/clothes/upper/jingledresssleeveless/hold.png
deleted file mode 100644
index aabc1a7f5ba7c9a173cca22e7abeb277bec6dfa8..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jingledresssleeveless/hold.png and /dev/null differ
diff --git a/img/clothes/upper/jumper/0_gray.png b/img/clothes/upper/jumper/0_gray.png
deleted file mode 100644
index 83117cf999fd8002c73183f65caf257d07f9ecfc..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumper/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumper/6_gray.png b/img/clothes/upper/jumper/6_gray.png
deleted file mode 100644
index beb8f536e3c2f4a7a04e177fbde84902d7a67068..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumper/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumperghost/0_gray.png b/img/clothes/upper/jumperghost/0_gray.png
deleted file mode 100644
index 83117cf999fd8002c73183f65caf257d07f9ecfc..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumperghost/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumperghost/6_gray.png b/img/clothes/upper/jumperghost/6_gray.png
deleted file mode 100644
index beb8f536e3c2f4a7a04e177fbde84902d7a67068..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumperghost/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumperheart/0_gray.png b/img/clothes/upper/jumperheart/0_gray.png
deleted file mode 100644
index 83117cf999fd8002c73183f65caf257d07f9ecfc..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumperheart/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumperheart/6_gray.png b/img/clothes/upper/jumperheart/6_gray.png
deleted file mode 100644
index beb8f536e3c2f4a7a04e177fbde84902d7a67068..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumperheart/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumperskull/0_gray.png b/img/clothes/upper/jumperskull/0_gray.png
deleted file mode 100644
index 83117cf999fd8002c73183f65caf257d07f9ecfc..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumperskull/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumperskull/5_gray.png b/img/clothes/upper/jumperskull/5_gray.png
index c3610d371b61dec6a2991ff6676c988f8c8c50f1..beb8f536e3c2f4a7a04e177fbde84902d7a67068 100644
Binary files a/img/clothes/upper/jumperskull/5_gray.png and b/img/clothes/upper/jumperskull/5_gray.png differ
diff --git a/img/clothes/upper/jumperskull/6_gray.png b/img/clothes/upper/jumperskull/6_gray.png
deleted file mode 100644
index beb8f536e3c2f4a7a04e177fbde84902d7a67068..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumperskull/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumperxmas/0_gray.png b/img/clothes/upper/jumperxmas/0_gray.png
deleted file mode 100644
index 83117cf999fd8002c73183f65caf257d07f9ecfc..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumperxmas/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumperxmas/6_gray.png b/img/clothes/upper/jumperxmas/6_gray.png
deleted file mode 100644
index beb8f536e3c2f4a7a04e177fbde84902d7a67068..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumperxmas/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumpsuit/0.png b/img/clothes/upper/jumpsuit/0.png
deleted file mode 100644
index b0ec5a62695887e248bcf0bf1120f65b9b40f914..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumpsuit/0.png and /dev/null differ
diff --git a/img/clothes/upper/jumpsuit/1.png b/img/clothes/upper/jumpsuit/1.png
deleted file mode 100644
index 89d609b3c1895504731344091113b3c835b1124a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumpsuit/1.png and /dev/null differ
diff --git a/img/clothes/upper/jumpsuit/5.png b/img/clothes/upper/jumpsuit/5.png
deleted file mode 100644
index a35fd6e8fcdc7ae5c4715491536388f60b9a4f68..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumpsuit/5.png and /dev/null differ
diff --git a/img/clothes/upper/jumpsuit/6.png b/img/clothes/upper/jumpsuit/6.png
deleted file mode 100644
index a35fd6e8fcdc7ae5c4715491536388f60b9a4f68..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumpsuit/6.png and /dev/null differ
diff --git a/img/clothes/upper/jumpsuitstylish/0_gray.png b/img/clothes/upper/jumpsuitstylish/0_gray.png
deleted file mode 100644
index 6aea93e829a3227a64ace5406105cc225b8748d2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumpsuitstylish/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumpsuitstylish/1_gray.png b/img/clothes/upper/jumpsuitstylish/1_gray.png
deleted file mode 100644
index 6aea93e829a3227a64ace5406105cc225b8748d2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumpsuitstylish/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumpsuitstylish/2_gray.png b/img/clothes/upper/jumpsuitstylish/2_gray.png
deleted file mode 100644
index 6aea93e829a3227a64ace5406105cc225b8748d2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumpsuitstylish/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumpsuitstylish/4_gray.png b/img/clothes/upper/jumpsuitstylish/4_gray.png
deleted file mode 100644
index b1639c46523167b44d7f3dbd2b0dd41f2d755045..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumpsuitstylish/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/jumpsuitstylish/6_gray.png b/img/clothes/upper/jumpsuitstylish/6_gray.png
deleted file mode 100644
index 5fc0cee5c1403f6942efb712f0fd8da29807f82b..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/jumpsuitstylish/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/keyhole/0_gray.png b/img/clothes/upper/keyhole/0_gray.png
deleted file mode 100644
index 26b149e211d095f996afb9f175db66d10a76c7d1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/keyhole/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/keyhole/3_gray.png b/img/clothes/upper/keyhole/3_gray.png
index c9b13bc4bea43c843a654bf5d312cf849470a4c1..c27df2dab42facf5fb6c2baa2d7995e1f38c082f 100644
Binary files a/img/clothes/upper/keyhole/3_gray.png and b/img/clothes/upper/keyhole/3_gray.png differ
diff --git a/img/clothes/upper/keyhole/4_gray.png b/img/clothes/upper/keyhole/4_gray.png
deleted file mode 100644
index c27df2dab42facf5fb6c2baa2d7995e1f38c082f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/keyhole/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/keyhole/6_gray.png b/img/clothes/upper/keyhole/6_gray.png
deleted file mode 100644
index 14bb9609f9a05c6fa2f610748f3e00a7a64967b9..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/keyhole/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/kimono/0_alt_gray.png b/img/clothes/upper/kimono/0_alt_gray.png
deleted file mode 100644
index e40d1d5ca7ad1faa7e7d4583483b9b3d776c477e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/kimono/0_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/kimono/0_gray.png b/img/clothes/upper/kimono/0_gray.png
deleted file mode 100644
index 3d58536326347ecb41c8e4db5fb5390e74bc9e0d..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/kimono/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/kimono/2_alt_gray.png b/img/clothes/upper/kimono/2_alt_gray.png
deleted file mode 100644
index e40d1d5ca7ad1faa7e7d4583483b9b3d776c477e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/kimono/2_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/kimono/2_gray.png b/img/clothes/upper/kimono/2_gray.png
deleted file mode 100644
index 3d58536326347ecb41c8e4db5fb5390e74bc9e0d..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/kimono/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/kimonomini/0_alt_gray.png b/img/clothes/upper/kimonomini/0_alt_gray.png
deleted file mode 100644
index e40d1d5ca7ad1faa7e7d4583483b9b3d776c477e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/kimonomini/0_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/kimonomini/0_gray.png b/img/clothes/upper/kimonomini/0_gray.png
deleted file mode 100644
index 3d58536326347ecb41c8e4db5fb5390e74bc9e0d..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/kimonomini/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/kimonomini/2_alt_gray.png b/img/clothes/upper/kimonomini/2_alt_gray.png
deleted file mode 100644
index e40d1d5ca7ad1faa7e7d4583483b9b3d776c477e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/kimonomini/2_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/kimonomini/2_gray.png b/img/clothes/upper/kimonomini/2_gray.png
deleted file mode 100644
index 3d58536326347ecb41c8e4db5fb5390e74bc9e0d..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/kimonomini/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/lacegown/0.png b/img/clothes/upper/lacegown/0.png
deleted file mode 100644
index cfdd26ee0f4137a4d717b2799794b0a075340804..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/lacegown/0.png and /dev/null differ
diff --git a/img/clothes/upper/lacegown/1.png b/img/clothes/upper/lacegown/1.png
deleted file mode 100644
index 8631e015afe80755dc87a22a41632dadf5265542..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/lacegown/1.png and /dev/null differ
diff --git a/img/clothes/upper/lacegown/6.png b/img/clothes/upper/lacegown/6.png
deleted file mode 100644
index 7c5f7b7e1c9594d6a260b01ffdb12be4d1f18450..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/lacegown/6.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/0_alt_gray.png b/img/clothes/upper/leathercropjacket/0_alt_gray.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/0_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/0_gray.png b/img/clothes/upper/leathercropjacket/0_gray.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/1_alt_gray.png b/img/clothes/upper/leathercropjacket/1_alt_gray.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/1_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/1_gray.png b/img/clothes/upper/leathercropjacket/1_gray.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/2_alt_gray.png b/img/clothes/upper/leathercropjacket/2_alt_gray.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/2_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/2_gray.png b/img/clothes/upper/leathercropjacket/2_gray.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/3_alt_gray.png b/img/clothes/upper/leathercropjacket/3_alt_gray.png
deleted file mode 100644
index 3ab565168feb25c4c91f704089078d07ac0bc7a5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/3_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/3_gray.png b/img/clothes/upper/leathercropjacket/3_gray.png
deleted file mode 100644
index 7ebc3e995bcf3d96ef9211859fb31d794f9fd199..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/4_alt_gray.png b/img/clothes/upper/leathercropjacket/4_alt_gray.png
deleted file mode 100644
index 3049458c05d186b2d5859e7c73231bd7edc40378..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/4_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/5_alt_gray.png b/img/clothes/upper/leathercropjacket/5_alt_gray.png
deleted file mode 100644
index 14e943e1bf029553a02a2f2b2d66b9e1df64ffb9..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/5_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/6_alt_gray.png b/img/clothes/upper/leathercropjacket/6_alt_gray.png
deleted file mode 100644
index 420808360a6f3d548eec435b99b7633f344ae897..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/6_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercropjacket/6_gray.png b/img/clothes/upper/leathercropjacket/6_gray.png
deleted file mode 100644
index 9d7181cf893d7623bd41a74b1e41ef6c377c5f95..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercropjacket/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercroptop/0_gray.png b/img/clothes/upper/leathercroptop/0_gray.png
deleted file mode 100644
index baf15cd60467ed75bd32b99da723a338e49cc6cd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercroptop/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercroptop/1_gray.png b/img/clothes/upper/leathercroptop/1_gray.png
deleted file mode 100644
index baf15cd60467ed75bd32b99da723a338e49cc6cd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercroptop/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercroptop/2_gray.png b/img/clothes/upper/leathercroptop/2_gray.png
deleted file mode 100644
index baf15cd60467ed75bd32b99da723a338e49cc6cd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercroptop/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercroptop/3_gray.png b/img/clothes/upper/leathercroptop/3_gray.png
deleted file mode 100644
index 7c504ad16dd22419b7292294c45783b90551ae07..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercroptop/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercroptop/6_gray.png b/img/clothes/upper/leathercroptop/6_gray.png
deleted file mode 100644
index e71e5b39b4c3d5d6a1877e0a4d35d897ee6c8bf0..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercroptop/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercroptopzip/0_gray.png b/img/clothes/upper/leathercroptopzip/0_gray.png
deleted file mode 100644
index baf15cd60467ed75bd32b99da723a338e49cc6cd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercroptopzip/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercroptopzip/1_gray.png b/img/clothes/upper/leathercroptopzip/1_gray.png
deleted file mode 100644
index baf15cd60467ed75bd32b99da723a338e49cc6cd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercroptopzip/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercroptopzip/2_gray.png b/img/clothes/upper/leathercroptopzip/2_gray.png
deleted file mode 100644
index baf15cd60467ed75bd32b99da723a338e49cc6cd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercroptopzip/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercroptopzip/3_gray.png b/img/clothes/upper/leathercroptopzip/3_gray.png
deleted file mode 100644
index 7c504ad16dd22419b7292294c45783b90551ae07..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercroptopzip/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathercroptopzip/6_gray.png b/img/clothes/upper/leathercroptopzip/6_gray.png
deleted file mode 100644
index e71e5b39b4c3d5d6a1877e0a4d35d897ee6c8bf0..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathercroptopzip/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leatherdress/0_gray.png b/img/clothes/upper/leatherdress/0_gray.png
deleted file mode 100644
index 201434f1faa4115669ad6a1fb13389af899ba6e7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leatherdress/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathertop/0_gray.png b/img/clothes/upper/leathertop/0_gray.png
deleted file mode 100644
index baf15cd60467ed75bd32b99da723a338e49cc6cd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathertop/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathertop/1_gray.png b/img/clothes/upper/leathertop/1_gray.png
deleted file mode 100644
index baf15cd60467ed75bd32b99da723a338e49cc6cd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathertop/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathertop/2_gray.png b/img/clothes/upper/leathertop/2_gray.png
deleted file mode 100644
index baf15cd60467ed75bd32b99da723a338e49cc6cd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathertop/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathertop/3_gray.png b/img/clothes/upper/leathertop/3_gray.png
deleted file mode 100644
index 59cf39409c3671914405fbcabc95945223deb088..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathertop/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathertop/6_gray.png b/img/clothes/upper/leathertop/6_gray.png
deleted file mode 100644
index 500f039e9e9458e11ed8cee0e3347366f47c2c85..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathertop/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathertopzip/0_gray.png b/img/clothes/upper/leathertopzip/0_gray.png
deleted file mode 100644
index f42849177719f4ee1135f4be267dca45ed5603f5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathertopzip/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathertopzip/1_gray.png b/img/clothes/upper/leathertopzip/1_gray.png
deleted file mode 100644
index 96de696e0185840f904a5c0a1d5287f61a5408e4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathertopzip/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathertopzip/2_gray.png b/img/clothes/upper/leathertopzip/2_gray.png
deleted file mode 100644
index 1401c5de41a356fafe195d8c09da20918b9543f7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathertopzip/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathertopzip/3_gray.png b/img/clothes/upper/leathertopzip/3_gray.png
deleted file mode 100644
index bdda1ce4de86d2193d769442741e1a9b60e6647b..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathertopzip/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/leathertopzip/6_gray.png b/img/clothes/upper/leathertopzip/6_gray.png
deleted file mode 100644
index 81353cbcfb7066d66708d65777465b5481fb4470..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/leathertopzip/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/letterman/0_gray.png b/img/clothes/upper/letterman/0_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/letterman/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/letterman/1_gray.png b/img/clothes/upper/letterman/1_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/letterman/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/letterman/2_gray.png b/img/clothes/upper/letterman/2_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/letterman/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/letterman/3_gray.png b/img/clothes/upper/letterman/3_gray.png
deleted file mode 100644
index e0e9f9cabbe1c763a8c52084b4642622ba5e31c2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/letterman/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/maid/2.png b/img/clothes/upper/maid/2.png
deleted file mode 100644
index c5960af233862a5691017b0872eda67e57206d64..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/maid/2.png and /dev/null differ
diff --git a/img/clothes/upper/maid/6.png b/img/clothes/upper/maid/6.png
deleted file mode 100644
index 863e94cf73c4ecaf64a25045bc97af2c98886ee9..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/maid/6.png and /dev/null differ
diff --git a/img/clothes/upper/monk/0.png b/img/clothes/upper/monk/0.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/monk/0.png and /dev/null differ
diff --git a/img/clothes/upper/monk/1.png b/img/clothes/upper/monk/1.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/monk/1.png and /dev/null differ
diff --git a/img/clothes/upper/monk/6.png b/img/clothes/upper/monk/6.png
deleted file mode 100644
index 91dc2537e52a18eb11dde74964e673b1f703709e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/monk/6.png and /dev/null differ
diff --git a/img/clothes/upper/monklewd/0.png b/img/clothes/upper/monklewd/0.png
deleted file mode 100644
index 26a5db980b4d1b0e089de0a865434b7d5467f73c..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/monklewd/0.png and /dev/null differ
diff --git a/img/clothes/upper/monklewd/1.png b/img/clothes/upper/monklewd/1.png
deleted file mode 100644
index 19ba0917a15d55aa41b5f42d62143d1810398a7d..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/monklewd/1.png and /dev/null differ
diff --git a/img/clothes/upper/monklewd/3.png b/img/clothes/upper/monklewd/3.png
deleted file mode 100644
index 8bacb85748a2396f0ed84f00fbcf4821cc8078c4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/monklewd/3.png and /dev/null differ
diff --git a/img/clothes/upper/monklewd/6.png b/img/clothes/upper/monklewd/6.png
deleted file mode 100644
index ce2aeb8d07b1a4fce10f065ee1555e128d310b3e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/monklewd/6.png and /dev/null differ
diff --git a/img/clothes/upper/monster/0_gray.png b/img/clothes/upper/monster/0_gray.png
deleted file mode 100644
index 263b2373807f26fd8158a84a334a75fdf906d37c..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/monster/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/monster/5_gray.png b/img/clothes/upper/monster/5_gray.png
deleted file mode 100644
index 9096c7abed61343e99e71166a68aa97716c418c2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/monster/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/monster/6_gray.png b/img/clothes/upper/monster/6_gray.png
deleted file mode 100644
index 9096c7abed61343e99e71166a68aa97716c418c2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/monster/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/nun/0.png b/img/clothes/upper/nun/0.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/nun/0.png and /dev/null differ
diff --git a/img/clothes/upper/nun/1.png b/img/clothes/upper/nun/1.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/nun/1.png and /dev/null differ
diff --git a/img/clothes/upper/nun/6.png b/img/clothes/upper/nun/6.png
deleted file mode 100644
index 23eec48b319d1dae98e882a972726f4ea6bf24d7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/nun/6.png and /dev/null differ
diff --git a/img/clothes/upper/nunlewd/0.png b/img/clothes/upper/nunlewd/0.png
deleted file mode 100644
index 14cda7896f13eb624b8deba456c47edc7d95ed5a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/nunlewd/0.png and /dev/null differ
diff --git a/img/clothes/upper/nunlewd/2.png b/img/clothes/upper/nunlewd/2.png
deleted file mode 100644
index 703e070ae1c4c2744d2f026728ddf9cd5c81d170..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/nunlewd/2.png and /dev/null differ
diff --git a/img/clothes/upper/nunlewd/6.png b/img/clothes/upper/nunlewd/6.png
deleted file mode 100644
index 9f12ede7a856a8d8e881f631a79b85b4a986548b..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/nunlewd/6.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderlolita/0_gray.png b/img/clothes/upper/openshoulderlolita/0_gray.png
deleted file mode 100644
index f42849177719f4ee1135f4be267dca45ed5603f5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderlolita/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderlolita/1_gray.png b/img/clothes/upper/openshoulderlolita/1_gray.png
deleted file mode 100644
index 96de696e0185840f904a5c0a1d5287f61a5408e4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderlolita/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderlolita/2_gray.png b/img/clothes/upper/openshoulderlolita/2_gray.png
deleted file mode 100644
index 1401c5de41a356fafe195d8c09da20918b9543f7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderlolita/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderlolita/3_gray.png b/img/clothes/upper/openshoulderlolita/3_gray.png
deleted file mode 100644
index 60d9dcada3a2580ca0196f06afd1d3297f8ad055..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderlolita/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderlolitaclassic/0_gray.png b/img/clothes/upper/openshoulderlolitaclassic/0_gray.png
deleted file mode 100644
index 83117cf999fd8002c73183f65caf257d07f9ecfc..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderlolitaclassic/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderlolitaclassic/1_gray.png b/img/clothes/upper/openshoulderlolitaclassic/1_gray.png
deleted file mode 100644
index eabac7be092a85dd84c016839f76235819cf13ca..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderlolitaclassic/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderlolitaclassic/2_gray.png b/img/clothes/upper/openshoulderlolitaclassic/2_gray.png
deleted file mode 100644
index 38feb3bdd67c95fbeb5de692ddcde6ce2ee7c619..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderlolitaclassic/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderlolitaclassic/4_gray.png b/img/clothes/upper/openshoulderlolitaclassic/4_gray.png
deleted file mode 100644
index 932896d801161f0806313a9e1cd88a163ad87df5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderlolitaclassic/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderscrop/0_gray.png b/img/clothes/upper/openshoulderscrop/0_gray.png
deleted file mode 100644
index f958e4635b2c7f92766d9c4650e5a0a4e84e3845..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderscrop/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderscrop/1_gray.png b/img/clothes/upper/openshoulderscrop/1_gray.png
deleted file mode 100644
index 3657b7ae61b248eb841fda263544854804b77116..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderscrop/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshoulderscrop/6_gray.png b/img/clothes/upper/openshoulderscrop/6_gray.png
deleted file mode 100644
index 10d9e414bb7b8d35fd34cc2e33fc9c2b2b1dd33f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshoulderscrop/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshouldersweater/0_gray.png b/img/clothes/upper/openshouldersweater/0_gray.png
deleted file mode 100644
index 2049d080be1ba2178d4e49b0dd658561bd8d966b..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshouldersweater/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/openshouldersweater/1_gray.png b/img/clothes/upper/openshouldersweater/1_gray.png
deleted file mode 100644
index 35e6f7e27a957c96e3ebb9497f8d72e5adfcbc89..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/openshouldersweater/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/oversizedbuttondown/0_gray.png b/img/clothes/upper/oversizedbuttondown/0_gray.png
deleted file mode 100644
index a8bab0d406587db87840aee93215e2f1a55aa4b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/oversizedbuttondown/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/oversizedbuttondown/6_gray.png b/img/clothes/upper/oversizedbuttondown/6_gray.png
deleted file mode 100644
index 9a0f44d5bf894e6f67f89277aca43cdf83c5a281..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/oversizedbuttondown/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/peacoat/0_acc_gray.png b/img/clothes/upper/peacoat/0_acc_gray.png
deleted file mode 100644
index ca558421aba4d69ed754b227310816ba13e6c548..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/peacoat/0_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/peacoat/0_gray.png b/img/clothes/upper/peacoat/0_gray.png
deleted file mode 100644
index f42849177719f4ee1135f4be267dca45ed5603f5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/peacoat/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/peacoat/2_acc_gray.png b/img/clothes/upper/peacoat/2_acc_gray.png
deleted file mode 100644
index b7bfad88c2bb2016fc4a489e82d1fd08086078e7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/peacoat/2_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/peacoat/2_gray.png b/img/clothes/upper/peacoat/2_gray.png
deleted file mode 100644
index 1401c5de41a356fafe195d8c09da20918b9543f7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/peacoat/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/peacoat/4_acc_gray.png b/img/clothes/upper/peacoat/4_acc_gray.png
deleted file mode 100644
index f85bdeb35d3317d4430b74bb58ef7b8a6de66212..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/peacoat/4_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/peacoat/4_gray.png b/img/clothes/upper/peacoat/4_gray.png
deleted file mode 100644
index 6a4103eb2f5e9913f82c0afa5e70ae261113ece6..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/peacoat/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/peacoat/6_acc_gray.png b/img/clothes/upper/peacoat/6_acc_gray.png
deleted file mode 100644
index 3ff24aba5db18a22bca0b2f44122b456fc6d4554..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/peacoat/6_acc_gray.png and /dev/null differ
diff --git a/img/clothes/upper/peacoat/6_gray.png b/img/clothes/upper/peacoat/6_gray.png
deleted file mode 100644
index c622333881f937e515f32adba3a7f1acf6d8cf1a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/peacoat/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/pinknurse/0.png b/img/clothes/upper/pinknurse/0.png
deleted file mode 100644
index 918422987b763b4458c0cc89b8635fa606f6622a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/pinknurse/0.png and /dev/null differ
diff --git a/img/clothes/upper/pinknurse/6.png b/img/clothes/upper/pinknurse/6.png
deleted file mode 100644
index ae16349c9315c13f57bc7e1a749b48db12b8ef23..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/pinknurse/6.png and /dev/null differ
diff --git a/img/clothes/upper/pjsmoon/0_gray.png b/img/clothes/upper/pjsmoon/0_gray.png
deleted file mode 100644
index 4488b3aac07b1dd4473ea06b5f153e7509f647a5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/pjsmoon/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/pjsmoon/1_gray.png b/img/clothes/upper/pjsmoon/1_gray.png
deleted file mode 100644
index 35ab62db3ef1b1b81cf0361cca611c5e7a454e06..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/pjsmoon/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/pjsmoon/2_gray.png b/img/clothes/upper/pjsmoon/2_gray.png
deleted file mode 100644
index 552deaf9ae54f680e949f1341918970eb42ae942..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/pjsmoon/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/pjsmoon/3_gray.png b/img/clothes/upper/pjsmoon/3_gray.png
deleted file mode 100644
index 0980f8299836ddffb0771165e6ebbb2df13384f6..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/pjsmoon/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/pjsstar/0_gray.png b/img/clothes/upper/pjsstar/0_gray.png
deleted file mode 100644
index 4488b3aac07b1dd4473ea06b5f153e7509f647a5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/pjsstar/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/pjsstar/1_gray.png b/img/clothes/upper/pjsstar/1_gray.png
deleted file mode 100644
index 35ab62db3ef1b1b81cf0361cca611c5e7a454e06..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/pjsstar/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/pjsstar/2_gray.png b/img/clothes/upper/pjsstar/2_gray.png
deleted file mode 100644
index 552deaf9ae54f680e949f1341918970eb42ae942..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/pjsstar/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/pjsstar/3_gray.png b/img/clothes/upper/pjsstar/3_gray.png
deleted file mode 100644
index 0980f8299836ddffb0771165e6ebbb2df13384f6..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/pjsstar/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/plasticnurse/0.png b/img/clothes/upper/plasticnurse/0.png
deleted file mode 100644
index daf1643789fc5f3f8473d30a37d3b4b1855b1427..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/plasticnurse/0.png and /dev/null differ
diff --git a/img/clothes/upper/plasticnurse/6.png b/img/clothes/upper/plasticnurse/6.png
deleted file mode 100644
index 0d90b4f4bfece5bdb3e8b48e5726029c859f643c..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/plasticnurse/6.png and /dev/null differ
diff --git a/img/clothes/upper/polo/0_gray.png b/img/clothes/upper/polo/0_gray.png
deleted file mode 100644
index 2fdedfbbfb17288c079320df5daacedd9b894168..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/polo/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/polo/5_gray.png b/img/clothes/upper/polo/5_gray.png
deleted file mode 100644
index ba48b9f9602566d853eaac88799d25123caeb80e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/polo/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/polo/6_gray.png b/img/clothes/upper/polo/6_gray.png
deleted file mode 100644
index ba48b9f9602566d853eaac88799d25123caeb80e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/polo/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/regularshirt/0_gray.png b/img/clothes/upper/regularshirt/0_gray.png
deleted file mode 100644
index 14cda7896f13eb624b8deba456c47edc7d95ed5a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/regularshirt/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/regularshirt/1_gray.png b/img/clothes/upper/regularshirt/1_gray.png
deleted file mode 100644
index 9d82f44cb5c1a13384eaebb07dd9bc8d7b146bd9..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/regularshirt/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/regularshirt/3_gray.png b/img/clothes/upper/regularshirt/3_gray.png
deleted file mode 100644
index eebc7f960d214defe0b7ba60dfad71550a18b18e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/regularshirt/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/regularshirt/6_gray.png b/img/clothes/upper/regularshirt/6_gray.png
deleted file mode 100644
index d1a1309ae765c06fd3047ed2fab370f559bfa8b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/regularshirt/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/sailor/0_gray.png b/img/clothes/upper/sailor/0_gray.png
deleted file mode 100644
index 73ad7eb8069bdebd1a7d8895c047f731516ce42a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/sailor/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/sailor/5_gray.png b/img/clothes/upper/sailor/5_gray.png
deleted file mode 100644
index 825623b3bc9603803592489fffee9f2f81e628db..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/sailor/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/sailor/6_gray.png b/img/clothes/upper/sailor/6_gray.png
deleted file mode 100644
index 825623b3bc9603803592489fffee9f2f81e628db..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/sailor/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/sailorshort/0_gray.png b/img/clothes/upper/sailorshort/0_gray.png
deleted file mode 100644
index 73ad7eb8069bdebd1a7d8895c047f731516ce42a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/sailorshort/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/sailorshort/5_gray.png b/img/clothes/upper/sailorshort/5_gray.png
deleted file mode 100644
index 0c3fa3c6dfe1c92edf93fe6d0bde546918d5f62e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/sailorshort/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/sailorshort/6_gray.png b/img/clothes/upper/sailorshort/6_gray.png
deleted file mode 100644
index 0c3fa3c6dfe1c92edf93fe6d0bde546918d5f62e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/sailorshort/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolblouse/0_gray.png b/img/clothes/upper/schoolblouse/0_gray.png
deleted file mode 100644
index b55ddc98318583b58fd2b92816b98e4a2f68feda..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolblouse/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolblouse/6_gray.png b/img/clothes/upper/schoolblouse/6_gray.png
deleted file mode 100644
index ab390b6cbff9fc764c4982be7b5130e1db35f56e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolblouse/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolcardigan/0_alt_gray.png b/img/clothes/upper/schoolcardigan/0_alt_gray.png
deleted file mode 100644
index b55ddc98318583b58fd2b92816b98e4a2f68feda..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolcardigan/0_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolcardigan/0_gray.png b/img/clothes/upper/schoolcardigan/0_gray.png
deleted file mode 100644
index b55ddc98318583b58fd2b92816b98e4a2f68feda..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolcardigan/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolcardigan/6_alt_gray.png b/img/clothes/upper/schoolcardigan/6_alt_gray.png
deleted file mode 100644
index ab390b6cbff9fc764c4982be7b5130e1db35f56e..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolcardigan/6_alt_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolcardigan/6_gray.png b/img/clothes/upper/schoolcardigan/6_gray.png
deleted file mode 100644
index ba306db259155a26b34c7ee73403887e1e65d325..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolcardigan/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolshirt/0_gray.png b/img/clothes/upper/schoolshirt/0_gray.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolshirt/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolshirt/1_gray.png b/img/clothes/upper/schoolshirt/1_gray.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolshirt/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolshirt/2_gray.png b/img/clothes/upper/schoolshirt/2_gray.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolshirt/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolshirt/4_gray.png b/img/clothes/upper/schoolshirt/4_gray.png
deleted file mode 100644
index c182ab5cc2385424933977f0be365baff23d0abf..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolshirt/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolvest/0_gray.png b/img/clothes/upper/schoolvest/0_gray.png
deleted file mode 100644
index a8bab0d406587db87840aee93215e2f1a55aa4b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolvest/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/schoolvest/6_gray.png b/img/clothes/upper/schoolvest/6_gray.png
deleted file mode 100644
index efd7bf454a6d02aac6594b2f68390694515d242f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/schoolvest/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/serafuku/1_gray.png b/img/clothes/upper/serafuku/1_gray.png
deleted file mode 100644
index 8bc1d9f6a25d84c1a7f20b94e96ef9e7dd99dafd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/serafuku/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/serafuku/5_gray.png b/img/clothes/upper/serafuku/5_gray.png
deleted file mode 100644
index ee74ef9f183e0eef457f12d571548171b4f1fcf4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/serafuku/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/serafuku/6_gray.png b/img/clothes/upper/serafuku/6_gray.png
deleted file mode 100644
index ee74ef9f183e0eef457f12d571548171b4f1fcf4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/serafuku/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/serafuku_new/0_gray.png b/img/clothes/upper/serafuku_new/0_gray.png
deleted file mode 100644
index 0cab61ad2fa462aae88456fbc58d180cba14d819..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/serafuku_new/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/serafuku_new/1_gray.png b/img/clothes/upper/serafuku_new/1_gray.png
deleted file mode 100644
index 0cab61ad2fa462aae88456fbc58d180cba14d819..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/serafuku_new/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/serafuku_new/2_gray.png b/img/clothes/upper/serafuku_new/2_gray.png
deleted file mode 100644
index 0cab61ad2fa462aae88456fbc58d180cba14d819..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/serafuku_new/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/serafuku_new/3_gray.png b/img/clothes/upper/serafuku_new/3_gray.png
deleted file mode 100644
index 0cab61ad2fa462aae88456fbc58d180cba14d819..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/serafuku_new/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/shadbelly/0.png b/img/clothes/upper/shadbelly/0.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shadbelly/0.png and /dev/null differ
diff --git a/img/clothes/upper/shadbelly/1.png b/img/clothes/upper/shadbelly/1.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shadbelly/1.png and /dev/null differ
diff --git a/img/clothes/upper/shadbelly/2.png b/img/clothes/upper/shadbelly/2.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shadbelly/2.png and /dev/null differ
diff --git a/img/clothes/upper/shadbelly/4.png b/img/clothes/upper/shadbelly/4.png
deleted file mode 100644
index b9d225bdbe548256ebcd1b49353d6312ff76a594..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shadbelly/4.png and /dev/null differ
diff --git a/img/clothes/upper/shadbelly/6.png b/img/clothes/upper/shadbelly/6.png
deleted file mode 100644
index 2b7166810502ea69da258efadf27cbbe9b5390fc..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shadbelly/6.png and /dev/null differ
diff --git a/img/clothes/upper/shortballgown/0_gray.png b/img/clothes/upper/shortballgown/0_gray.png
deleted file mode 100644
index 4488b3aac07b1dd4473ea06b5f153e7509f647a5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shortballgown/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/shortballgown/1_gray.png b/img/clothes/upper/shortballgown/1_gray.png
deleted file mode 100644
index 35ab62db3ef1b1b81cf0361cca611c5e7a454e06..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shortballgown/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/shortballgown/2_gray.png b/img/clothes/upper/shortballgown/2_gray.png
deleted file mode 100644
index 552deaf9ae54f680e949f1341918970eb42ae942..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shortballgown/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/shortballgown/4_gray.png b/img/clothes/upper/shortballgown/4_gray.png
deleted file mode 100644
index 0e2ffbb22a9e1b471765883945a982d1ec4e45c5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shortballgown/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/shortballgown/6_gray.png b/img/clothes/upper/shortballgown/6_gray.png
deleted file mode 100644
index 6b95e3dd18300980c9735b40f9dcb91a460465c5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shortballgown/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/shrinemaiden/0.png b/img/clothes/upper/shrinemaiden/0.png
deleted file mode 100644
index 0af02c34645fe810b303dc63900d0c879b993648..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shrinemaiden/0.png and /dev/null differ
diff --git a/img/clothes/upper/shrinemaiden/1.png b/img/clothes/upper/shrinemaiden/1.png
deleted file mode 100644
index 0af02c34645fe810b303dc63900d0c879b993648..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shrinemaiden/1.png and /dev/null differ
diff --git a/img/clothes/upper/shrinemaiden/2.png b/img/clothes/upper/shrinemaiden/2.png
deleted file mode 100644
index 0af02c34645fe810b303dc63900d0c879b993648..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shrinemaiden/2.png and /dev/null differ
diff --git a/img/clothes/upper/shrinemaiden/6.png b/img/clothes/upper/shrinemaiden/6.png
deleted file mode 100644
index 2bfff4028d0908cdab696f81e0956c02fe54d6fb..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/shrinemaiden/6.png and /dev/null differ
diff --git a/img/clothes/upper/singlebreasted/0_gray.png b/img/clothes/upper/singlebreasted/0_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/singlebreasted/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/singlebreasted/1_gray.png b/img/clothes/upper/singlebreasted/1_gray.png
deleted file mode 100644
index f132ba0ba94901d6982ea10d51a5207b924afdac..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/singlebreasted/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/singlebreasted/5_gray.png b/img/clothes/upper/singlebreasted/5_gray.png
deleted file mode 100644
index 2197c9c9006d61e85b273df52d0987a0fc0595eb..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/singlebreasted/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/skimpylolita/0_gray.png b/img/clothes/upper/skimpylolita/0_gray.png
deleted file mode 100644
index 1e1ed470f4945637aa9414c3bc2106fd4a314210..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/skimpylolita/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/skimpylolita/1_gray.png b/img/clothes/upper/skimpylolita/1_gray.png
deleted file mode 100644
index 38b4be22947c7d66a9ca5d14e92ca6bf5034e654..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/skimpylolita/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/skimpylolita/6_gray.png b/img/clothes/upper/skimpylolita/6_gray.png
deleted file mode 100644
index ffa59de33857f03a5be3f074f92643a31d3d652a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/skimpylolita/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/slut/0_gray.png b/img/clothes/upper/slut/0_gray.png
deleted file mode 100644
index 0e2ffd003595a00a1ada0bad6110d62687ad8d8d..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/slut/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/slut/6_gray.png b/img/clothes/upper/slut/6_gray.png
deleted file mode 100644
index 260ae21435514981aa8efa8fb78c5718db2eed76..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/slut/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/slutler/0.png b/img/clothes/upper/slutler/0.png
deleted file mode 100644
index 9823a40b7c9ed7015d47b24080640617d1c36dce..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/slutler/0.png and /dev/null differ
diff --git a/img/clothes/upper/slutler/1.png b/img/clothes/upper/slutler/1.png
deleted file mode 100644
index 95f6342a6558d5b558a71f9f57ca298758495bfc..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/slutler/1.png and /dev/null differ
diff --git a/img/clothes/upper/slutler/2.png b/img/clothes/upper/slutler/2.png
deleted file mode 100644
index 9770a7d233a72bbbe54bb18fd96e2be29e5e1735..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/slutler/2.png and /dev/null differ
diff --git a/img/clothes/upper/slutler/3.png b/img/clothes/upper/slutler/3.png
deleted file mode 100644
index 69a50d86fd25fcc316a8377ad7fba78c456cc9fd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/slutler/3.png and /dev/null differ
diff --git a/img/clothes/upper/slutler/6.png b/img/clothes/upper/slutler/6.png
deleted file mode 100644
index f9210a68378dbacacf1e33a76e1697bc8b44d037..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/slutler/6.png and /dev/null differ
diff --git a/img/clothes/upper/split/0_gray.png b/img/clothes/upper/split/0_gray.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/split/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/split/1_gray.png b/img/clothes/upper/split/1_gray.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/split/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/split/6_gray.png b/img/clothes/upper/split/6_gray.png
deleted file mode 100644
index 43e5c250c5fea7b8dccb8c6512f107fdc72e6244..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/split/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/sundress/1_gray.png b/img/clothes/upper/sundress/1_gray.png
deleted file mode 100644
index 88605657fe50fb1fbe0be4114df0d0b5f6f21e79..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/sundress/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/sundress/2_gray.png b/img/clothes/upper/sundress/2_gray.png
deleted file mode 100644
index 88605657fe50fb1fbe0be4114df0d0b5f6f21e79..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/sundress/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/sundress/6_gray.png b/img/clothes/upper/sundress/6_gray.png
deleted file mode 100644
index a4976259022b93c98dd5a82d55b77a0d71f44476..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/sundress/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/tanktop/0_gray.png b/img/clothes/upper/tanktop/0_gray.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tanktop/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/tanktop/1_gray.png b/img/clothes/upper/tanktop/1_gray.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tanktop/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/tanktop/2_gray.png b/img/clothes/upper/tanktop/2_gray.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tanktop/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/tanktop/3_gray.png b/img/clothes/upper/tanktop/3_gray.png
deleted file mode 100644
index 016686810fec36ceec6e1bf8fac93dfd6d611c32..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tanktop/3_gray.png and /dev/null differ
diff --git a/img/clothes/upper/tiefronttop/0_gray.png b/img/clothes/upper/tiefronttop/0_gray.png
deleted file mode 100644
index bb2e0fae7d8a7e230f636403dde90313214c7795..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tiefronttop/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/tiefronttop/6_gray.png b/img/clothes/upper/tiefronttop/6_gray.png
deleted file mode 100644
index 47b42fba82bc4f06e477d262e57a474f98a39bfe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tiefronttop/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/towel/0_gray.png b/img/clothes/upper/towel/0_gray.png
deleted file mode 100644
index 653b9f169fcedd2e49a89c9688dcfd8db0ace347..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/towel/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/towel/1_gray.png b/img/clothes/upper/towel/1_gray.png
deleted file mode 100644
index be9153502515c298deb7474ca113fa78e460488f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/towel/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/towel/2_gray.png b/img/clothes/upper/towel/2_gray.png
deleted file mode 100644
index 2cf3800f6b1de454213fba972494f8aba58c3964..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/towel/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/towel/6_gray.png b/img/clothes/upper/towel/6_gray.png
deleted file mode 100644
index de9ede607e49f5b22a63a9c582e32a5ba1cb96f8..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/towel/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/towellarge/0_gray.png b/img/clothes/upper/towellarge/0_gray.png
deleted file mode 100644
index f42849177719f4ee1135f4be267dca45ed5603f5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/towellarge/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/towellarge/1_gray.png b/img/clothes/upper/towellarge/1_gray.png
deleted file mode 100644
index 96de696e0185840f904a5c0a1d5287f61a5408e4..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/towellarge/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/towellarge/2_gray.png b/img/clothes/upper/towellarge/2_gray.png
deleted file mode 100644
index 1401c5de41a356fafe195d8c09da20918b9543f7..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/towellarge/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/towellarge/6_gray.png b/img/clothes/upper/towellarge/6_gray.png
deleted file mode 100644
index ae94b03e93d921c50e9487df798c4c17ea7f82ad..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/towellarge/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/traditionalmaid/0.png b/img/clothes/upper/traditionalmaid/0.png
deleted file mode 100644
index 7f6b001e5ed10f5a62869604624d9a3512888ec0..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/traditionalmaid/0.png and /dev/null differ
diff --git a/img/clothes/upper/traditionalmaid/1.png b/img/clothes/upper/traditionalmaid/1.png
deleted file mode 100644
index 7f6b001e5ed10f5a62869604624d9a3512888ec0..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/traditionalmaid/1.png and /dev/null differ
diff --git a/img/clothes/upper/traditionalmaid/2.png b/img/clothes/upper/traditionalmaid/2.png
deleted file mode 100644
index 7f6b001e5ed10f5a62869604624d9a3512888ec0..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/traditionalmaid/2.png and /dev/null differ
diff --git a/img/clothes/upper/traditionalmaid/3.png b/img/clothes/upper/traditionalmaid/3.png
deleted file mode 100644
index 05a0ce32699bfaabac12ad41af2d79f9a89e2044..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/traditionalmaid/3.png and /dev/null differ
diff --git a/img/clothes/upper/tubetop/0_gray.png b/img/clothes/upper/tubetop/0_gray.png
deleted file mode 100644
index 89d609b3c1895504731344091113b3c835b1124a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tubetop/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/tubetop/1_gray.png b/img/clothes/upper/tubetop/1_gray.png
deleted file mode 100644
index 89d609b3c1895504731344091113b3c835b1124a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tubetop/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/tubetop/2_gray.png b/img/clothes/upper/tubetop/2_gray.png
index 72dc914d0d134b69af135f2d708210fc5751e123..20b221b7059db944db886a8baf0147e7d05ef35b 100644
Binary files a/img/clothes/upper/tubetop/2_gray.png and b/img/clothes/upper/tubetop/2_gray.png differ
diff --git a/img/clothes/upper/tubetop/3_gray.png b/img/clothes/upper/tubetop/3_gray.png
index 2503c4ee45758e76f6c85fe204fa83f8057097c7..9913283aa41f6f3cbb36b1eb5c09079d5c65b385 100644
Binary files a/img/clothes/upper/tubetop/3_gray.png and b/img/clothes/upper/tubetop/3_gray.png differ
diff --git a/img/clothes/upper/tubetop/4_gray.png b/img/clothes/upper/tubetop/4_gray.png
index afcdea082c106014ee11b68b7b5aab2ab2263b87..e1d7d7ed066ac90d9030bbb574c2adaf162c1270 100644
Binary files a/img/clothes/upper/tubetop/4_gray.png and b/img/clothes/upper/tubetop/4_gray.png differ
diff --git a/img/clothes/upper/tubetop/5_gray.png b/img/clothes/upper/tubetop/5_gray.png
index afcdea082c106014ee11b68b7b5aab2ab2263b87..cde4cab59a99022b9da3c3678dab5146ef623617 100644
Binary files a/img/clothes/upper/tubetop/5_gray.png and b/img/clothes/upper/tubetop/5_gray.png differ
diff --git a/img/clothes/upper/tubetop/6_gray.png b/img/clothes/upper/tubetop/6_gray.png
deleted file mode 100644
index afcdea082c106014ee11b68b7b5aab2ab2263b87..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tubetop/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/tubetop/frayed_gray.png b/img/clothes/upper/tubetop/frayed_gray.png
index fe22c1f781027174f7691cc37c3dd43450db94d5..e8dd719f8c71632d543aac02e2a7b5e21191bf4e 100644
Binary files a/img/clothes/upper/tubetop/frayed_gray.png and b/img/clothes/upper/tubetop/frayed_gray.png differ
diff --git a/img/clothes/upper/tubetop/full_gray.png b/img/clothes/upper/tubetop/full_gray.png
index fd34e780964c6061728dd8cb3068aeae40593b69..5820fa888e2aa58d0e267a4de951f040a7b28dea 100644
Binary files a/img/clothes/upper/tubetop/full_gray.png and b/img/clothes/upper/tubetop/full_gray.png differ
diff --git a/img/clothes/upper/tubetop/tattered_gray.png b/img/clothes/upper/tubetop/tattered_gray.png
index fd88b4ff1997784995fcaaeac1f1a1e41b6c54bb..bdea5dd8dd06e0d04c1bc7ab46575b567f9f6c76 100644
Binary files a/img/clothes/upper/tubetop/tattered_gray.png and b/img/clothes/upper/tubetop/tattered_gray.png differ
diff --git a/img/clothes/upper/tubetop/torn_gray.png b/img/clothes/upper/tubetop/torn_gray.png
index e3703295e206dfae2157a9907bd553cf26a16c69..d647f03846a0d71ae32a01cc944cdde0ce833436 100644
Binary files a/img/clothes/upper/tubetop/torn_gray.png and b/img/clothes/upper/tubetop/torn_gray.png differ
diff --git a/img/clothes/upper/turtleneck/0_gray.png b/img/clothes/upper/turtleneck/0_gray.png
deleted file mode 100644
index 89d609b3c1895504731344091113b3c835b1124a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/turtleneck/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/turtleneck/1_gray.png b/img/clothes/upper/turtleneck/1_gray.png
deleted file mode 100644
index 89d609b3c1895504731344091113b3c835b1124a..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/turtleneck/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/turtleneck/2_gray.png b/img/clothes/upper/turtleneck/2_gray.png
index 6e1b572c15c81639bfe56ae31d62f594146dc16a..ebfcfc55d09883bbf046359e603d8409e5fc39e4 100644
Binary files a/img/clothes/upper/turtleneck/2_gray.png and b/img/clothes/upper/turtleneck/2_gray.png differ
diff --git a/img/clothes/upper/turtleneck/3_gray.png b/img/clothes/upper/turtleneck/3_gray.png
index 2e880ea5ac7d59ab8ed4a9dab6858d92463f8061..bad5263866ad0d62f8364557242a94d5840f8d3d 100644
Binary files a/img/clothes/upper/turtleneck/3_gray.png and b/img/clothes/upper/turtleneck/3_gray.png differ
diff --git a/img/clothes/upper/turtleneck/4_gray.png b/img/clothes/upper/turtleneck/4_gray.png
index 4c6165bb8e86ab83ac05cbca5889071ca69efd3e..98e4c49a2112a11832acf6de9fab85e42daa95e5 100644
Binary files a/img/clothes/upper/turtleneck/4_gray.png and b/img/clothes/upper/turtleneck/4_gray.png differ
diff --git a/img/clothes/upper/turtleneck/5_gray.png b/img/clothes/upper/turtleneck/5_gray.png
index 044ed3770ae1131f1b38eb63751591c493b268e9..04904bcbef0213887608497369a3ffa4e1ec9545 100644
Binary files a/img/clothes/upper/turtleneck/5_gray.png and b/img/clothes/upper/turtleneck/5_gray.png differ
diff --git a/img/clothes/upper/turtleneck/6_gray.png b/img/clothes/upper/turtleneck/6_gray.png
deleted file mode 100644
index 044ed3770ae1131f1b38eb63751591c493b268e9..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/turtleneck/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/turtleneck/frayed_gray.png b/img/clothes/upper/turtleneck/frayed_gray.png
index d3ade7cb5ab79bc9412c534da102812ad47b57e6..686ba1a73394711a09697b82ed0b430a8969b580 100644
Binary files a/img/clothes/upper/turtleneck/frayed_gray.png and b/img/clothes/upper/turtleneck/frayed_gray.png differ
diff --git a/img/clothes/upper/turtleneck/full_gray.png b/img/clothes/upper/turtleneck/full_gray.png
index d3ade7cb5ab79bc9412c534da102812ad47b57e6..039a8da2b05058d0a055bd2b53e82f06217e29f4 100644
Binary files a/img/clothes/upper/turtleneck/full_gray.png and b/img/clothes/upper/turtleneck/full_gray.png differ
diff --git a/img/clothes/upper/turtleneck/tattered_gray.png b/img/clothes/upper/turtleneck/tattered_gray.png
index d3ade7cb5ab79bc9412c534da102812ad47b57e6..59dad4f8e088793f2e12b95fc15d2e4bb5572868 100644
Binary files a/img/clothes/upper/turtleneck/tattered_gray.png and b/img/clothes/upper/turtleneck/tattered_gray.png differ
diff --git a/img/clothes/upper/turtleneck/torn_gray.png b/img/clothes/upper/turtleneck/torn_gray.png
index d3ade7cb5ab79bc9412c534da102812ad47b57e6..42f95031279bcaa2cb30d403fdf4ea64ada23a85 100644
Binary files a/img/clothes/upper/turtleneck/torn_gray.png and b/img/clothes/upper/turtleneck/torn_gray.png differ
diff --git a/img/clothes/upper/turtleneckjumper/0_gray.png b/img/clothes/upper/turtleneckjumper/0_gray.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/turtleneckjumper/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/turtleneckjumper/4_gray.png b/img/clothes/upper/turtleneckjumper/4_gray.png
deleted file mode 100644
index 6703e805b04fc2fb7aeadda9091bf0b4430373ca..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/turtleneckjumper/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/tuxedo/0.png b/img/clothes/upper/tuxedo/0.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tuxedo/0.png and /dev/null differ
diff --git a/img/clothes/upper/tuxedo/1.png b/img/clothes/upper/tuxedo/1.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tuxedo/1.png and /dev/null differ
diff --git a/img/clothes/upper/tuxedo/2.png b/img/clothes/upper/tuxedo/2.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tuxedo/2.png and /dev/null differ
diff --git a/img/clothes/upper/tuxedo/3.png b/img/clothes/upper/tuxedo/3.png
deleted file mode 100644
index 3319d305e5ef756cd51000b2413cce84e2c09911..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/tuxedo/3.png and /dev/null differ
diff --git a/img/clothes/upper/utility/0_gray.png b/img/clothes/upper/utility/0_gray.png
deleted file mode 100644
index b898ff72ad41551767d60181dd5abee665ee66bf..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/utility/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/utility/1_gray.png b/img/clothes/upper/utility/1_gray.png
deleted file mode 100644
index 5568997d878b3a33046951ef85d3fdb617628e87..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/utility/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/utility/4_gray.png b/img/clothes/upper/utility/4_gray.png
deleted file mode 100644
index 39c5ef2d9ee254de0c1b672a27b4be260c42a7de..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/utility/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/utility/6_gray.png b/img/clothes/upper/utilityshirt/5_acc_gray.png
similarity index 100%
rename from img/clothes/upper/utility/6_gray.png
rename to img/clothes/upper/utilityshirt/5_acc_gray.png
diff --git a/img/clothes/upper/utility/2_gray.png b/img/clothes/upper/utilityshirt/5_gray.png
similarity index 60%
rename from img/clothes/upper/utility/2_gray.png
rename to img/clothes/upper/utilityshirt/5_gray.png
index 00b89b137a5f7bce895d741472dfeb2d92581be8..03af2ee0917df6e20a2b6990c7cb238a76a47e07 100644
Binary files a/img/clothes/upper/utility/2_gray.png and b/img/clothes/upper/utilityshirt/5_gray.png differ
diff --git a/img/clothes/upper/winterjacket/5_gray.png b/img/clothes/upper/utilityshirt/acc_frayed_gray.png
similarity index 51%
rename from img/clothes/upper/winterjacket/5_gray.png
rename to img/clothes/upper/utilityshirt/acc_frayed_gray.png
index 2959e5d87e6f6ee7d12e87f8637687e4b42d318d..9ec53f0dc7a499f77f3d592f4dcba3f3667bbc9b 100644
Binary files a/img/clothes/upper/winterjacket/5_gray.png and b/img/clothes/upper/utilityshirt/acc_frayed_gray.png differ
diff --git a/img/clothes/upper/utility/3_gray.png b/img/clothes/upper/utilityshirt/acc_full_gray.png
similarity index 53%
rename from img/clothes/upper/utility/3_gray.png
rename to img/clothes/upper/utilityshirt/acc_full_gray.png
index 0783df0af8ac91cbec140ae25cc70e6026b092fd..97f5879385104c2cd133577e70b2a093ab4a1f4c 100644
Binary files a/img/clothes/upper/utility/3_gray.png and b/img/clothes/upper/utilityshirt/acc_full_gray.png differ
diff --git a/img/clothes/upper/utilityshirt/acc_tattered_gray.png b/img/clothes/upper/utilityshirt/acc_tattered_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf672455190513b4f08b0e0048fc3a210df67a86
Binary files /dev/null and b/img/clothes/upper/utilityshirt/acc_tattered_gray.png differ
diff --git a/img/clothes/upper/utilityshirt/acc_torn_gray.png b/img/clothes/upper/utilityshirt/acc_torn_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..714d6f76f0b2ca4b59034bcd7914586ccce201c0
Binary files /dev/null and b/img/clothes/upper/utilityshirt/acc_torn_gray.png differ
diff --git a/img/clothes/upper/utilityshirt/frayed_gray.png b/img/clothes/upper/utilityshirt/frayed_gray.png
index cc6db8d247f92c124bd36ae3b5d223990157c8a4..442f3437a7dd2b350262525745e2cb0b2bcf8b9d 100644
Binary files a/img/clothes/upper/utilityshirt/frayed_gray.png and b/img/clothes/upper/utilityshirt/frayed_gray.png differ
diff --git a/img/clothes/upper/utilityshirt/full_gray.png b/img/clothes/upper/utilityshirt/full_gray.png
index 359313e9698bb2f460d22839f9088070dff91dd6..7f25c39b065eaccb8189d0061dcd8d018f0b0d8c 100644
Binary files a/img/clothes/upper/utilityshirt/full_gray.png and b/img/clothes/upper/utilityshirt/full_gray.png differ
diff --git a/img/clothes/upper/utilityshirt/tattered_gray.png b/img/clothes/upper/utilityshirt/tattered_gray.png
index 9b3978db2abfe1501c90b67aa453663d141df7b9..308d0d5ea76d59dd38ffa7a21c83fbbcb05a332d 100644
Binary files a/img/clothes/upper/utilityshirt/tattered_gray.png and b/img/clothes/upper/utilityshirt/tattered_gray.png differ
diff --git a/img/clothes/upper/utilityshirt/torn_gray.png b/img/clothes/upper/utilityshirt/torn_gray.png
index 9900c79452e83fb8ee0ba555b9fedd01fed2ba3c..5f109d81d294c68bcd306a4f9b7d2bd180c81361 100644
Binary files a/img/clothes/upper/utilityshirt/torn_gray.png and b/img/clothes/upper/utilityshirt/torn_gray.png differ
diff --git a/img/clothes/upper/vampire/4_gray.png b/img/clothes/upper/vampire/4_gray.png
deleted file mode 100644
index bad01caca3cba6ba9321aa10a06803a405025d68..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/vampire/4_gray.png and /dev/null differ
diff --git a/img/clothes/upper/victorianmaid/0.png b/img/clothes/upper/victorianmaid/0.png
deleted file mode 100644
index 923577e311abc40d258784a1fe02f33bf513d81f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/victorianmaid/0.png and /dev/null differ
diff --git a/img/clothes/upper/victorianmaid/1.png b/img/clothes/upper/victorianmaid/1.png
deleted file mode 100644
index 923577e311abc40d258784a1fe02f33bf513d81f..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/victorianmaid/1.png and /dev/null differ
diff --git a/img/clothes/upper/victorianmaid/6.png b/img/clothes/upper/victorianmaid/6.png
deleted file mode 100644
index 8f8da027b33efcae3c785b029254771cb2dde5ec..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/victorianmaid/6.png and /dev/null differ
diff --git a/img/clothes/upper/virginkiller/0_gray.png b/img/clothes/upper/virginkiller/0_gray.png
deleted file mode 100644
index e11eac9c55e4ad12279f5788c41a9ce0ba073406..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/virginkiller/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/virginkiller/5_gray.png b/img/clothes/upper/virginkiller/5_gray.png
deleted file mode 100644
index ab4e7ece0a40660a3742cf069f09eb1095f8f892..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/virginkiller/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/virginkiller/6_gray.png b/img/clothes/upper/virginkiller/6_gray.png
deleted file mode 100644
index ab4e7ece0a40660a3742cf069f09eb1095f8f892..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/virginkiller/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/virginkillerdress/0_gray.png b/img/clothes/upper/virginkillerdress/0_gray.png
deleted file mode 100644
index e11eac9c55e4ad12279f5788c41a9ce0ba073406..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/virginkillerdress/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/virginkillerdress/5_gray.png b/img/clothes/upper/virginkillerdress/5_gray.png
deleted file mode 100644
index ab4e7ece0a40660a3742cf069f09eb1095f8f892..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/virginkillerdress/5_gray.png and /dev/null differ
diff --git a/img/clothes/upper/virginkillerdress/6_gray.png b/img/clothes/upper/virginkillerdress/6_gray.png
deleted file mode 100644
index ab4e7ece0a40660a3742cf069f09eb1095f8f892..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/virginkillerdress/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/vneck/0_gray.png b/img/clothes/upper/vneck/0_gray.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/vneck/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/vneck/6_gray.png b/img/clothes/upper/vneck/6_gray.png
deleted file mode 100644
index e131b2a535cb22dff6a97116c084508e7aba26be..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/vneck/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waistcoat/0_gray.png b/img/clothes/upper/waistcoat/0_gray.png
deleted file mode 100644
index a8bab0d406587db87840aee93215e2f1a55aa4b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waistcoat/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waistcoat/6_gray.png b/img/clothes/upper/waistcoat/6_gray.png
deleted file mode 100644
index 369e7b89b792d417d244a3a5e32819a75f371371..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waistcoat/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waistcoatlapel/0_gray.png b/img/clothes/upper/waistcoatlapel/0_gray.png
deleted file mode 100644
index a8bab0d406587db87840aee93215e2f1a55aa4b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waistcoatlapel/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waistcoatlapel/6_gray.png b/img/clothes/upper/waistcoatlapel/6_gray.png
deleted file mode 100644
index 369e7b89b792d417d244a3a5e32819a75f371371..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waistcoatlapel/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waistcoatlong/0_gray.png b/img/clothes/upper/waistcoatlong/0_gray.png
deleted file mode 100644
index a8bab0d406587db87840aee93215e2f1a55aa4b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waistcoatlong/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waistcoatlong/6_gray.png b/img/clothes/upper/waistcoatlong/6_gray.png
deleted file mode 100644
index 369e7b89b792d417d244a3a5e32819a75f371371..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waistcoatlong/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waistcoatlonglapel/0_gray.png b/img/clothes/upper/waistcoatlonglapel/0_gray.png
deleted file mode 100644
index a8bab0d406587db87840aee93215e2f1a55aa4b2..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waistcoatlonglapel/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waistcoatlonglapel/6_gray.png b/img/clothes/upper/waistcoatlonglapel/6_gray.png
deleted file mode 100644
index 369e7b89b792d417d244a3a5e32819a75f371371..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waistcoatlonglapel/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waiter/0.png b/img/clothes/upper/waiter/0.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waiter/0.png and /dev/null differ
diff --git a/img/clothes/upper/waiter/1.png b/img/clothes/upper/waiter/1.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waiter/1.png and /dev/null differ
diff --git a/img/clothes/upper/waiter/2.png b/img/clothes/upper/waiter/2.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waiter/2.png and /dev/null differ
diff --git a/img/clothes/upper/waiter/3.png b/img/clothes/upper/waiter/3.png
deleted file mode 100644
index c62a1ce9ef0a5623f375a5a6984b2be25a3a6813..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waiter/3.png and /dev/null differ
diff --git a/img/clothes/upper/waitress/0_gray.png b/img/clothes/upper/waitress/0_gray.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waitress/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waitress/1_gray.png b/img/clothes/upper/waitress/1_gray.png
deleted file mode 100644
index 5903f168d5e2dd0b3fd1b06b3c32bc2cb31d21c1..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waitress/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/waitress/6_gray.png b/img/clothes/upper/waitress/6_gray.png
deleted file mode 100644
index b1aa395aa169e518256fc54d43b900d3b88bfe97..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/waitress/6_gray.png and /dev/null differ
diff --git a/img/clothes/upper/winterjacket/0_gray.png b/img/clothes/upper/winterjacket/0_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/winterjacket/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/winterjacket/1_gray.png b/img/clothes/upper/winterjacket/1_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/winterjacket/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/winterjacket/2_gray.png b/img/clothes/upper/winterjacket/2_gray.png
deleted file mode 100644
index 255b297ec0b4927753b841072ec0360fbe1e42fe..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/winterjacket/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/witch/0_gray.png b/img/clothes/upper/witch/0_gray.png
deleted file mode 100644
index 4488b3aac07b1dd4473ea06b5f153e7509f647a5..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/witch/0_gray.png and /dev/null differ
diff --git a/img/clothes/upper/witch/1_gray.png b/img/clothes/upper/witch/1_gray.png
deleted file mode 100644
index 35ab62db3ef1b1b81cf0361cca611c5e7a454e06..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/witch/1_gray.png and /dev/null differ
diff --git a/img/clothes/upper/witch/2_gray.png b/img/clothes/upper/witch/2_gray.png
deleted file mode 100644
index 552deaf9ae54f680e949f1341918970eb42ae942..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/witch/2_gray.png and /dev/null differ
diff --git a/img/clothes/upper/witch/6_gray.png b/img/clothes/upper/witch/6_gray.png
deleted file mode 100644
index f5711728ad8f7a94ac1d908d9a043dae997486fd..0000000000000000000000000000000000000000
Binary files a/img/clothes/upper/witch/6_gray.png and /dev/null differ
diff --git a/img/dolls/DollHouse.js b/img/dolls/DollHouse.js
deleted file mode 100644
index 3d8d2cef5a2c7cb5d84b878d47e432a6815ba04f..0000000000000000000000000000000000000000
--- a/img/dolls/DollHouse.js
+++ /dev/null
@@ -1,294 +0,0 @@
-var docHead = document.querySelector("head");
-
-
-DollHouse = function (context) {
-    context["DoLHouse"] = this;
-    currentlyLoadingMap = {};
-    this.dirContentMap = {};
-    this.reificationRequired = true;
-    this.isBlocked = false;
-    this.blockedQueue = [];
-    this.loadCount = 0;
-
-    this.getTemplate = async (filePath, dollName, whenFinished, infoDiv) => {
-        if (infoDiv != null)
-            this.infoDiv = infoDiv
-
-        //await this.whenReady(defer());
-        var deferred = this.whenReady(async () => {
-            var result = await this.loadFile(filePath);
-            if (this.reificationRequired) {
-                this.preify();
-                this.postReify();
-            }
-            whenFinished(
-                {
-                    basePath: result.basePath,
-                    fileName: result.fileName,
-                    content: result.content[dollName]
-                });
-        });
-    }
-
-    this.unblock = () => {
-        this.isBlocked = false;
-        this.runblockedQueue();
-    }
-
-    this.runblockedQueue = () => {
-        for (var k of this.blockedQueue) {
-            var awaiting = this.blockedQueue.shift();
-            awaiting();
-        }
-    }
-
-    this.whenReady = async (callback) => {
-        if (this.isBlocked) {
-            //var waiter = defer();
-            this.blockedQueue.push(callback);
-            //var result = await callback;
-            //return result;
-        }
-        else
-            callback();
-    }
-
-    this.updateLoadStatus = () => {
-        if (this.infoDiv != null) {
-            var loadString = "";
-            for (var k of Object.keys(this.dirContentMap)) {
-                var statusString = "";
-                if (this.dirContentMap[k].status == "loaded") {
-                    statusString = `<span style="background: green">` + this.dirContentMap[k].status + `</span>`;
-                }
-                else {
-                    statusString = `<span style="background: yellow">` + this.dirContentMap[k].status + `</span>`;
-                }
-                loadString += k + ` : ` + statusString + `<br/>`;
-            }
-            this.infoDiv.innerHTML = loadString;
-        }
-    }
-
-    this.updateBuildStatus = (line) => {
-        if (this.infoDiv != null) {
-            var textInfo = document.createElement("div");
-            textInfo.innerText = line;
-            this.infoDiv.appendChild(textInfo);
-            this.infoDiv.scrollTop = this.infoDiv.scrollHeight;
-        }
-    }
-
-    this.loadFile = async (filePath, skipTraversal, d) => {
-        if (this.dirContentMap[filePath] != null) {
-            if (this.dirContentMap[filePath].status == "loaded") {
-                var dirInfo = splitPath(filePath);
-                return {
-                    basePath: dirInfo.directory,
-                    fileName: dirInfo.fileName,
-                    content: this.dirContentMap[filePath].content
-                };
-            }
-            else {
-                alert("Something confusing and shameful happened.");
-                return null;
-            }
-        }
-
-        //if(currentlyLoading == null) {
-        this.reificationRequired = true;
-        var dirInfo = splitPath(filePath);
-        var awaiter = defer();
-        this.dirContentMap[filePath] = {
-            status: "in progress",
-            content: {},
-            promise: awaiter
-        };
-        this.loadCount++;
-        var scriptElem = document.createElement("script");
-        scriptElem.id = "script_" + this.loadCount
-        currentlyLoadingMap["script_" + this.loadCount] = {
-            filePath: dirInfo.directory,
-            fileName: dirInfo.fileName,
-            fullPath: filePath,
-            promise: awaiter
-        }
-        this.updateLoadStatus();
-        scriptElem.setAttribute("src", filePath);
-        this.isBlocked = true;
-        docHead.appendChild(scriptElem);
-        var result = await awaiter;
-
-
-        if (!skipTraversal) {
-            var d = selfOr(d, "");
-            await this.buildMap(result, dirInfo.directory, filePath, d);
-        }
-
-        return {
-            basePath: dirInfo.directory,
-            fileName: selfOr(dirInfo.fileName, ""),
-            content: this.dirContentMap[filePath].content
-        };
-    }
-
-    this.add = (dolls) => {
-
-        var script = document.currentScript;
-        var loader = currentlyLoadingMap[script.id];
-        var awaiter = loader.promise;
-        console.log("add called");
-        this.dirContentMap[loader.fullPath].content = dolls;
-        this.dirContentMap[loader.fullPath].status = "loaded";
-        awaiter.resolve(dolls);
-
-        delete currentlyLoadingMap[script.id];
-        this.updateLoadStatus();
-
-    }
-    this.unloadedReferences = {};
-    this.discoveredValues = {};
-
-
-    /**
-     * Logic: We import via two passes. First, we load the contents of any js files specified in any import
-     * statements of the given object into a directory->variable map. 
-     * 
-     * Then we go through the elements of the completed map, and replace the contents of any import statements 
-     * with a referemce to the object which was imported. 
-     */
-    this.buildMap = async (obj, basePath, inFile) => {
-        var currentPath = basePath;
-        var fullPathName = inFile;
-        for (var k of Object.keys(obj)) {
-            if (k == "import") {
-                if (obj.import.filepath != null) {
-                    fullPathName = basePath + obj.import.filepath;
-                    currentPath = splitPath(fullPathName).directory;
-                    var pathAndObj = await this.loadFile(fullPathName, true);
-                    var subObjects = pathAndObj.content;
-                    await this.buildMap(subObjects, currentPath, fullPathName);
-                }
-            } else if (isObj(obj[k])) {
-                await this.buildMap(obj[k], basePath, inFile);
-            }
-        }
-    }
-
-    /**goes through all elements of the dir content map and replaces the contents of any import keys with 
-     * the object requested for import. 
-     * once all requested things are placed in the import value, the contents of the object are pulled keywise 
-     * into the parent object and the import key is deleted*/
-
-    this.preify = () => {
-        for (var k of Object.keys(this.dirContentMap)) {
-            var reified = this.dirContentMap[k].reified;
-            var cont = this.dirContentMap[k].content;
-            if (reified != true) {
-                for (var ek of Object.keys(cont)) {
-                    //cont[ek].basePath = splitPath(k).directory;
-                    this.reify(cont[ek], k);
-                }
-                this.dirContentMap[k].reified = true;
-            }
-        }
-    }
-
-    this.reify = (fromObj, currentfile) => {
-        for (var ok of Object.keys(fromObj)) {
-            if (ok == "import") {
-                var importInfo = fromObj.import;
-                if (!isObj(importInfo.fDollTempContent)) {
-                    if (importInfo.filepath == null) {
-                        importInfo.filepath = currentfile;
-                    } else {
-                        var dirInfo = splitPath(currentfile);
-                        importInfo.filepath = dirInfo.directory + importInfo.filepath;
-                    }
-                    fromObj.import.fDollTempContent = this.dirContentMap[importInfo.filepath].content[importInfo.variable];
-                    this.updateBuildStatus("reifying : " + importInfo.variable + " in " + fromObj.import.filepath);
-                    this.reify(fromObj.import.fDollTempContent, fromObj.import.filepath);
-                }
-            } else {
-                var elem = fromObj[ok];
-                if (isObj(elem)) {
-                    this.reify(elem, currentfile);
-                }
-            }
-        }
-        if (fromObj.variants != null || fromObj.accessories != null) {
-            fromObj.basePath = splitPath(currentfile).directory;
-        }
-
-    }
-
-
-    this.postReify = () => {
-        for (var k of Object.keys(this.dirContentMap)) {
-            var cont = this.dirContentMap[k].content;
-            for (var ek of Object.keys(cont)) {
-                this.pullUp(cont[ek]);
-            }
-        }
-        this.reificationRequired = false;
-        if (Object.keys(currentlyLoadingMap).length == 0) {
-            this.unblock();
-        }
-    }
-
-    /**pulls up the contents of any import objects recursively (depth first)*/
-    this.pullUp = (fromObj) => {
-        if (fromObj.import != null) {
-            if (fromObj.import.fDollTempContent != null) {
-                for (var k of Object.keys(fromObj.import.fDollTempContent)) {
-                    fromObj[k] = fromObj.import.fDollTempContent[k];
-                }
-            }
-            delete fromObj.import;
-        }
-        for (var k of Object.keys(fromObj)) {
-            var recurse = fromObj[k];
-            if (isObj(recurse)) {
-                this.pullUp(recurse);
-            }
-        }
-    }
-
-};
-
-
-/**returns true if the input is a javascript object and not an array */
-isObj = (elem) => {
-    return elem != null && Array.isArray(elem) == false && typeof elem == "object";
-}
-
-
-/**
-* splits the input string into a directory component and a file component.
-* @param {String} pathString 
-*/
-splitPath = (pathString) => {
-    var jsSplit = pathString.split(".js");
-    if (jsSplit.length > 1) {
-        var dir = jsSplit[0].split("/");
-        var filename = dir[dir.length - 1] + ".js";
-        var dirString = "";
-        for (var i = 0; i < dir.length - 1; i++)
-            dirString += dir[i] + "/"
-        return { directory: dirString, fileName: filename };
-    } else {
-        return { directory: pathString, fileName: null };
-    }
-}
-
-/**Convenience function to resume code until after completing a request to load some file**/
-defer = () => {
-    var res, rej;
-    var promise = new Promise((resolve, reject) => {
-        res = resolve;
-        rej = reject;
-    });
-    promise.resolve = res;
-    promise.reject = rej;
-    return promise;
-}
diff --git a/img/dolls/FDoll.js b/img/dolls/FDoll.js
deleted file mode 100644
index 45766aec7451cbd65b936ab66380af3480c4a1db..0000000000000000000000000000000000000000
--- a/img/dolls/FDoll.js
+++ /dev/null
@@ -1,1361 +0,0 @@
-const DoLHouse = new DollHouse(window);
-var loadedDollCount = 0;
-var idMap = {};
-
-
-class FDoll {
-
-    
-    blockedQueue = [];
-
-
-    /** 
-     * @param {String}  dollFile  a path to the .js file declaring the doll template, or otherwise an javascript object 
-     * of the template
-     * @param {*} dollName name of the doll specified in the given js file. Alternatively, the doll object itself. 
-     */
-    constructor(filePath, dollName, anAwaiter, parentFDoll, infoDiv, dollObj) {
-        //ancestors looking for anchors
-        //the passthrough doesn't get passed along if this 
-        //accessory attaches to it. 
-        this.attachPassthrough = {
-            /**anchorname : ancestorreference */
-        };
-        this.loopSpeed = parentFDoll == null ? 500 : parentFDoll.loopSpeed;
-        loadedDollCount += 1;
-        this.isBlocked = true;
-        this.nameAs(dollName);
-        var getDoll = async (result) => {
-            this.parent = parentFDoll;
-            if (result.scale != null) {
-                console.log("strange");
-            }
-            var hold = await this.constructFrom(result);
-            if (anAwaiter != null) {
-                if (anAwaiter instanceof Promise)
-                    this.whenReady(anAwaiter);
-                else
-                    anAwaiter();
-            }
-        };
-        if (dollObj == null) {
-            DoLHouse.getTemplate(filePath, dollName, getDoll, infoDiv);
-        } else {
-            //var clean1 = splitPath(selfOr(dollName.specifier,"")).directory; 
-            //var clean2 = splitPath(selfOr(dollName.data.specifier,"")).directory; 
-            this.attach = dollObj.attach;
-            this.to = dollObj.to;
-            /*var tempscale = this.copyObj(selfOr(dollName.scale, { x: 1, y: 1 }));
-            var temptranslate = this.copyObj(selfOr(dollName.translate, { x: 0, y: 0, depth: 0 }));
-
-            var thisTranslate = { x: 0, y: 0, depth: 0 };
-            thisTranslate.x *= tempscale.x;
-            thisTranslate.y *= tempscale.y;
-            thisTranslate.x += temptranslate.x;
-            thisTranslate.y += temptranslate.y;
-            thisTranslate.depth += temptranslate.depth;
-            this.translate = thisTranslate;
-            this.scale = tempscale;*/
-            getDoll(
-                {
-                    basePath: dollObj.basePath == null ? filePath : dollObj.basePath,
-                    content: dollObj
-                });
-        }
-    }
-    unblock = () => {
-        this.isBlocked = false;
-        this.runblockedQueue();
-    }
-
-    runblockedQueue = () => {
-        for (var k of this.blockedQueue) {
-            var awaiting = this.blockedQueue.shift();
-            awaiting.resolve();
-        }
-    }
-
-    whenReady = async (callback) => {
-        if (this.isBlocked) {
-            var waiter = defer();
-            this.blockedQueue.push(waiter);
-            var result = await waiter;
-            return callback.resolve();
-        }
-        else
-            return callback.resolve();
-    }
-
-
-    /**
-     * sets the loop speed for this doll and its descendants
-    */
-    setLoopSpeed(newSpeed) {
-        this.loopSpeed = newSpeed; 
-        for(var k of Object.keys(this.accessories)) {
-            this.accessories[k].setLoopSpeed(newSpeed);
-        }
-        if(this.selected_variant != null) {
-            this.selected_variant.setLoopSpeed(newSpeed);
-        }
-        //this.computeGlobals()
-        //this._forceRestyle(true);
-    }
-
-
-    /**
-     * creates array of whatever length is required to create subframes for all frames in 
-     * this global_sequence_array to all subframes in the parent_global_subframe_array. 
-     * The elements of the returned array will be JSON objects specifying 
-     * {
-     * this_play_idx: //the index of the played frame from which this subframe was created
-     * par_subframe_idx: //the index of the parent played subframe to which this subframe maps
-     * play_t: //the percentage of the loop at which this frame should play
-     * spriteframe: //the sprite frame to which this subframe corresponds
-     * } 
-     * the inputs should be array of floats, where each float specifies the percentage
-     * of the loop at which the frame starts
-     */
-    setSubFrameSplit = () => {
-        var result = [];
-        var ftemp = [];
-
-        var from_arr = this.global_play_sequence;
-        var to_arr = this.parent == null ? [] : this.parent.global_subframe_sequence;
-        for (var i = 0; i < from_arr.length; i++) {
-            ftemp.push({
-                type: "from",
-                play_t: from_arr[i].play_t,
-                idx: i
-            });
-        }
-        for (var i = 0; i < to_arr.length; i++) {
-            ftemp.push({
-                type: "to",
-                play_t: to_arr[i].play_t,
-                idx: i
-            });
-        }
-
-        var sortedPreTemp = ftemp.sort((a, b) => { return a.play_t - b.play_t });
-        var sortedTemp = [];
-        for (var i = 0; i < sortedPreTemp.length; i++) {
-            if (i == 0) {
-                sortedTemp.push(sortedPreTemp[i]);
-            } else if (sortedPreTemp[i].play_t != sortedTemp[sortedTemp.length - 1].play_t) {
-                sortedTemp.push(sortedPreTemp[i]);
-            }
-        }
-
-        var lastT = 0;
-        var lastF = 0;
-        for (var i = 0; i < sortedTemp.length; i++) {
-            var ob = sortedTemp[i];
-            if (ob.type == "from")
-                lastF = ob.idx;
-            if (ob.type == "to")
-                lastT = ob.idx;
-            result.push({
-                this_play_idx: lastF,
-                par_subframe_idx: lastT,
-                play_t: ob.play_t,
-                spriteframe: this.global_play_sequence[lastF].spriteframe
-            }
-            )
-        }
-        this.global_subframe_sequence = result;
-    }
-
-    /**
-   * creates an array of JSON objects specifiyng frame index and play_time
-   * from the selected_sequence specified on this doll.
-   * if a selected_sequence wasn't specified, creates a default one*/
-    ensureSeq = () => {
-        if (this.phase == null) this.phase = 0;
-        this.globalPhase = this.phase;
-        if (this.resolvedParent != null) {
-            this.globalPhase += this.resolvedParent.globalPhase;
-        }
-        var baseSeq = this.selected_sequence;
-        if (baseSeq == null) {
-            baseSeq = [];
-            for (var i = 0; i < this.frames; i++) {
-                baseSeq.push(i);
-            }
-            this.selected_sequence = baseSeq;
-        }
-        this.global_play_sequence = [];
-
-        for (var i = 0.0; i < this.selected_sequence.length; i++) {
-            this.global_play_sequence.push({
-                spriteframe: this.selected_sequence[mod(i + this.globalPhase, this.selected_sequence.length)],
-                play_t: i / this.selected_sequence.length
-            });
-        }
-    }
-
-    ensureMagnets = () => {
-        this.playSeqMagnets = {};
-        this.globalPlaySeqMagnets = {};
-        if (this.magnets == null || Object.keys(this.magnets).length == 0) {
-            this.magnets = { origin: { x: 0, y: 0, depth: 0 } };
-        }
-        if (this.magnets.origin == null) {
-            this.magnets.origin = { x: 0, y: 0, depth: 0 };
-        }
-        for (var k of Object.keys(this.magnets)) {
-            if (this.magnets[k].depth == null)
-                this.magnets[k].depth = 0;
-            this.magnets[k] = this.redundifyMagnet(this.magnets[k]);
-        }
-
-        if (this.parent != null && this.magnets[this.parent.attachPassthrough.pending] != null) {
-            this.resolvedParent = this.parent.attachPassthrough.doll;
-            this.anchorName = this.parent.attachPassthrough.pending;
-            this.anchorTarget = this.parent.attachPassthrough.to;
-        }
-        if (this.attach != null) {
-            if (this.magnets[this.attach] == null) {
-                this.attachPassthrough = {
-                    pending: this.attach,
-                    doll: this.magnets[this.to] == null ? this.parent.getFirstAncestorContainingMag(this.to) : this,
-                    to: this.to
-                };
-            } else {
-                this.resolvedParent = this.parent.getFirstAncestorContainingMag(this.to);
-                this.anchorName = this.attach;
-                this.anchorTarget = this.to;
-            }
-        } else if (
-            this.parent != null &&
-            this.parent.attachPassthrough.pending != null
-        ) {
-            this.attachPassthrough = {
-                pending: this.parent.attachPassthrough.pending,
-                doll: this.parent.attachPassthrough.doll,
-                to: this.parent.attachPassthrough.to
-            }
-        }
-
-    }
-
-    setupMagnets = () => {
-        for (var k of Object.keys(this.magnets)) {
-            this.playSeqMagnets[k] = this.getPlaySeqMappedMagnetsFor(this.magnets[k]);
-            if (this.playSeqMagnets[k].length == 0) this.playSeqMagnets[k] = this.copyObj(this.magnets[k]);
-        }
-
-        /*
-        if (this.parent != null && this.magnets[this.parent.attachPassthrough.pending] != null) {
-            this.magParent = this.parent.attachPassthrough.doll;
-            this.anchorName = this.parent.attachPassthrough.pending;
-            this.anchorTarget = this.parent.attachPassthrough.to;
-        }
-        if (this.attach != null) {
-            this.attachPassthrough = {
-                pending: this.attach,
-                doll: this.magnets[this.to] == null ? this.parent : this,
-                to: this.to
-            };
-        } else if (
-            this.parent != null &&
-            this.parent.attachPassthrough.pending != null
-        ) {
-            this.attachPassthrough = {
-                pending: this.parent.attachPassthrough.pending,
-                doll: this.parent.attachPassthrough.doll,
-                to: this.parent.attachPassthrough.to
-            }
-        }*/
-    }
-
-    /**
-     * returns an array with as many duplicate instances of the last magnet instance as required to 
-     * match the number of frames on the spritesheet
-     * if the input magnet is not specified as an array, wraps it inside of one. 
-     * @param {*} m 
-     */
-    redundifyMagnet = (m) => {
-        var result = m;
-        if (!Array.isArray(m)) {
-            result = [m]
-        }
-        var count = result.length;
-        for (var i = count; i < this.frames; i++) {
-            result[i] = this.copyObj(result[count - 1]);
-        }
-        return result;
-    }
-
-    /**given an array of magnets ordered such that each magnet index corresponds to a frame on the spritesheet
-     * returns an array of magnets such that each magnet corresponds to the appropriate occurrence of that frame 
-     * on the spritesheet in the global_subframe_sequence
-     */
-    getPlaySeqMappedMagnetsFor = (m) => {
-        var result = [];
-        for (var i = 0; i < this.global_subframe_sequence.length; i++) {
-            result.push(m[this.global_subframe_sequence[i].spriteframe]);
-        }
-        return result;
-    }
-
-    /**
-     * returns the first ancestor of this acessory (inclusive with this accessory) containing a magnet 
-     * with the given name.
-     */
-    getFirstAncestorContainingMag = (magName) => {
-        if (this.magnets[magName] != null) return this;
-        else if (this.parent != null) return this.parent.getFirstAncestorContainingMag(magName);
-        else return null;
-    }
-
-    setPhase(phase) {
-        if (phase != null)
-            this.phase = phase;
-        this.ensureMagnets();
-        this.ensureSeq();
-        this.setSubFrameSplit();
-        this.setupMagnets();
-
-        for (var k of Object.keys(this.variants)) {
-            this.variants[k].setPhase();
-        }
-        for (var k of Object.keys(this.accessories)) {
-            this.accessories[k].setPhase();
-        }
-    }
-
-    /**stores some of the default parameters loaded from the file for easier resetting */
-    storeDefaults() {
-        this.default_params = {};
-        this.default_params.scale = this.copyObj(selfOr(this.scale, { x: 1, y: 1 }));
-        this.default_params.translate = this.copyObj(selfOr(this.translate, { x: 1, y: 1, depth: 0 }));
-        this.default_params.filter = this.filter;
-        this.default_params.phase = this.phase
-        this.default_params.selected_sequence = this.selected_sequence;
-    }
-    inheritSequencesIfNecessary() {
-
-        if (this.parent != null && this.parent.promulgate_sequence_info) {
-            this.promulgate_sequence_info = true;
-            if (!(this.inherit_sequence_info === false || this.inherit_sequence_info === "false")) {
-                this.inherit_sequence_info = true;
-            }
-        }
-
-        if (this.parent != null && this.inherit_sequence_info) {
-            this.sequences = { ...this.parent.playSequencePassThrough.sequences, ...this.sequences };
-            if (this.selected_sequence == null) {
-                this.selected_sequence = this.parent.playSequencePassThrough.selected_sequence;
-            }
-        }
-        this.playSequencePassThrough = {
-            sequences: this.sequences,
-            selected_sequence: this.selected_sequence
-        }
-        if (this.sequences != null && typeof this.selected_sequence == "string")
-            this.selected_sequence = this.sequences[this.selected_sequence];
-    }
-
-    constructFrom = async (dollInfoContainer) => {
-        var dollInfo = dollInfoContainer.content;
-        dollInfo = dollInfo.data != null ? dollInfo.data : dollInfo;
-        this.dollInfo = dollInfo;
-        this.basePath = dollInfoContainer.basePath;
-        this.sequences = {};
-        for (var k of Object.keys(dollInfo)) {
-            this[k] = this.copyObj(dollInfo[k]);
-        }
-        this.translate = this.copyObj(selfOr(this.translate, { x: 0, y: 0, depth: 0 }));
-        this.scale = this.copyObj(selfOr(this.scale, { x: 1, y: 1 }));
-        this.storeDefaults();
-        this.inheritSequencesIfNecessary();
-        this.accessories = {};
-        this.variants = {};
-
-        this.spritesheet = dollInfo.spritesheet;
-        this.phase = selfOr(dollInfo.phase, 0);
-        if (this.width == null && this.parent != null) {
-            this.width = this.parent.width;
-        }
-        if (this.frames == null && this.parent != null) {
-            this.frames = this.parent.frames;
-        } else if (this.parent == null && this.frames == null) {
-            this.frames = 0;
-        }
-        this.ensureMagnets();
-        //this.resolvedParent = this.getFirstAncestorContainingMag(this.to);
-        //if(this.resolvedParent == null) this.getFirstAncestorContainingMag("origin"); 
-        //if(this.resolvedParent == this) this.resolvedParent = null;
-        this.ensureSeq();
-        this.setSubFrameSplit();
-        this.setupMagnets();
-        if (this.filter == null) this.filter = "";
-        if (this.inherit_filter && this.parent != null) {
-            if (this.parent.postfilter != null) {
-                this.postfilter = this.parent.postfilter + " ";
-            }
-            this.filter = this.parent.filter + " " + this.filter;
-        }
-
-        var holdOff = await this.instantiateSubdollsOf(dollInfo);
-        this.idString = "fdoll_accessory_" + loadedDollCount;
-        var plus = 0;
-        while (idMap[this.idString] != null) {
-            plus++;
-            this.idString = "fdoll_accessory_" + (loadedDollCount + plus);
-        }
-        idMap[this.idString] = [];
-        idMap[this.idString].push(this);
-        //var existingSprite = document.querySelector("#" + this.idString);
-        this.ensureSpriteElems();
-        if (this.scale == null) {
-            this.scale = { x: 1, y: 1 };
-        }
-        // var complete = await anAwaiter;
-        this.unblock();
-    }
-
-
-    ensureSpriteElems = () => {
-        var filterString = "";
-        if (this.filter != null) {
-            filterString += this.filter;
-        }
-        if (this.postfilter != null) {
-            filterString += this.postfilter;
-        }
-
-        if (this.spritesheet != null) {
-            if (this.spriteElem == null) {
-                this.spriteElem = document.createElement("div");
-
-                this.spriteElem.id = this.idString;
-                this.spriteElem.forDoll = this;
-            }
-
-            if (this.imageElem == null) {
-                this.imageElem = document.createElement("img");
-            }
-            this.imageElem.style.filter = filterString;
-            this.spriteElem.classList.add("spritesheet_container");
-            if (this.keyFrameElem == null) {
-                this.keyFrameElem = document.createElement("style");
-                this.keyFrameElem.id = "for_" + this.spriteElem.id;
-            }
-            if (this.spriteFrameElems == null) {
-                this.spriteFrameElem = document.createElement("style");
-                this.spriteFrameElem.id = "for_outer_" + this.spriteElem.id;
-            }
-
-            //docHead.appendChild(this.keyFrameElem);
-            //docHead.appendChild(this.spriteFrameElem);
-
-            if (this.spritesheet != null) {
-                this.imageElem.setAttribute("src", this.basePath + this.spritesheet);
-                this.spriteElem.appendChild(this.imageElem);
-            }
-        }
-
-    }
-
-    nameAs = (name) => {
-        if (this.spriteElem != null)
-            this.spriteElem.setAttribute("data-name", name);
-        this.named = name;
-        this.amnamed = name;
-        //this.activeVariantMap = this.getRootDollActiveVariantMapMapFor(this.getAccessPath());
-    }
-
-
-    /**
-     * recursively adds any js files specified in the given dollInfo 
-     * if they have not been loaded already and adds 
-     * them to the cache to avoid reloading existing files
-     */
-    instantiateSubdollsOf = async (dollInfo) => {
-
-        if (dollInfo.variants != null) {
-            //for (var k of Object.keys(dollInfo.variants)) {
-
-            //this.variants[k].hide();
-            //}
-            if (dollInfo.selected_variant != null) {
-                this.instantiateVariant(dollInfo.selected_variant);
-                this.selected_variant = this.variants[dollInfo.selected_variant];
-                //this.selected_variant.show();
-            } else if (this.dollInfo.variants != null && Object.keys(this.dollInfo.variants).length > 0) {
-                for (var k of Object.keys(this.dollInfo.variants)) {
-                    this.instantiateVariant(k);
-                    this.selected_variant = this.variants[dollInfo.selected_variant];
-                    break;
-                }
-            }
-        }
-        if (dollInfo.accessories != null) {
-            for (var k of Object.keys(dollInfo.accessories)) {
-                var acc = dollInfo.accessories[k];
-                this.accessories[k] = this.copyObj(acc);
-                var anAwaiter = defer();
-                this.accessories[k] = new FDoll(this.basePath, k, anAwaiter, this, null, acc);
-
-                var wait = await anAwaiter;
-                //this.accessories[k].nameAs(k);
-                //this.accessories[k].setParent(this, attachChild, toChild);
-                //this.accessories[k].show();
-            }
-        }
-    }
-
-    renderTo = async (elem, requestAnimFrame) => {
-        var renderOut = async () => {
-            var waitResult = await this.whenReady(defer());
-            await this.show();
-            var waitResult = await this.computeGlobals();
-            this._forceRender(elem);
-        };
-
-        if(requestAnimFrame == true) window.requestAnimationFrame(()=>{renderOut()}) 
-        else renderOut();
-    }
-
-    _forceRender = (elem) => {
-        //if(this.spriteElem.parentNode != null)
-        this.ensureSpriteElems();
-        if (this.spriteElem != null)
-            this.spriteElem.remove();
-        this._forceRestyle(false);
-
-        for (var k of Object.keys(this.accessories)) {
-            this.accessories[k]._forceRender(elem);
-        }
-        if (this.selected_variant != null) {
-            this.selected_variant._forceRender(elem);
-        }
-        /*for (var k of Object.keys(this.variants)) {
-            await this.variants[k]._forceRender(elem);
-        }*/
-        if (this.spriteElem != null
-            && this.spriteElem.parentNode != elem
-            && this.visible) {
-            if (this.keyFrameElem.parentNode == null)
-                docHead.appendChild(this.keyFrameElem);
-            if (this.spriteFrameElem.parentNode == null)
-                docHead.appendChild(this.spriteFrameElem);
-
-            elem.appendChild(this.spriteElem);
-        }
-    }
-
-    _forceRestyle = (recursive) => {        
-        if (this.visible && this.spritesheet) {
-            this.ensureSpriteElems();
-            this.spriteElem.style.width = this.drawInfo.width;
-            this.spriteElem.style.transform = this.drawInfo.scaling;
-            this.spriteElem.style.transformOrigin = this.drawInfo.transformOrigin;
-            this.spriteElem.style.zIndex = this.drawInfo.depth;
-
-            var animString = `@keyframes ` + this.spriteFrameElem.id + `outer-anim {
-                `;
-
-            for (var i = 0; i < this.global_subframe_sequence.length; i++) {
-                var subframe = this.global_subframe_sequence[i];
-                var percent = (subframe.spriteframe / this.frames) * 100;
-                var time = subframe.play_t;
-                var anchorage = "translate(" + this.drawInfo.framed_transforms[i].x + "px, " + this.drawInfo.framed_transforms[i].y + "px)";
-                var scaleage = "scale(" + this.globalScale.x + ", " + this.globalScale.y + ")";
-                animString += (100 * time) + `% {transform: ` + anchorage + ` ` + scaleage + `;}
-                `;
-            }
-            this.spriteFrameElem.innerText = animString + "}";
-            this.spriteElem.style.animationName = this.spriteFrameElem.id + `outer-anim`
-            this.spriteElem.style.animationDuration = this.loopSpeed + "ms";
-            //this.keyFrameElem.style.animationDuration = FDollGlobals.loopSpeed + "ms";
-            this.spriteElem.style.animationTimingFunction = "steps(1)";
-            this.spriteElem.style.animationIterationCount = "Infinite";
-            this.spriteElem.style.imageRendering = "pixelated";
-
-        }
-
-        if (recursive) {
-            for (var k of Object.keys(this.accessories)) {
-                this.accessories[k]._forceRestyle(true);
-            }
-            if (this.selected_variant != null)
-                this.selected_variant._forceRestyle(true);
-        }
-    }
-
-    /**recursively computes all global space style and anchor information 
-     * on this FDoll and its children
-     * 
-     * Logic:
-     *  1. compute the global locations of each magnet on this accessory at each frame in its spritesheet
-     *      (scale all magnets by parent global scale -> globalMagnets, 
-     *       scale all magnets by this scale -> globalMagnets,
-     *       translate all globalMagnets by amount required to move global anchor to parent global target -> globalMagnets, 
-     *       )
-     *  2. determine the frame correspondence between this accessory and the parent accessory
-    */
-    computeGlobals = () => {
-        var waitResult = this.whenReady(defer());
-
-        /*if (this.parent != null) {
-            this.playSequencePassThrough = {
-                sequence: this.parent.playSequencePassThrough.sequence,
-                frameCount: this.playSequencePassThrough.frameCount
-            }
-        }*/
-        this.computeGlobalTransforms();
-        this.computeGlobalFrameSequence();
-
-        //for (var k of Object.keys(this.variants)) {
-        if (this.selected_variant != null)
-            this.selected_variant.computeGlobals();
-        //}
-        for (var k of Object.keys(this.accessories)) {
-            this.accessories[k].computeGlobals();
-        }
-        /*if(this.selected_variant != null) {
-            this.selected_variant.computeGlobals();
-        }*/
-
-    }
-
-    /**returns the transforms of all descendants that were skipped due to 
-     * magnet passthrough so that scales and translations will still influence
-     * children
-     */
-    getSumOfSkippedTransforms = (upTo) => {
-        var transforms = {
-            scale: { x: this.scale.x, y: this.scale.y },
-            translate: { x: this.translate.x, y: this.translate.y, depth: this.translate.depth }
-        };
-        /*if() {
-            transforms = {
-                scale : {x: 1, y: 1},
-                translate: {x: 0, y:0, depth: 0}
-            }
-        }*/
-        if (upTo == this.parent || this.parent == null) {
-
-        } else if (upTo == this) {
-            transforms = {
-                scale: { x: 1, y: 1 },
-                translate: { x: 0, y: 0, depth: 0 }
-            }
-        }
-        else {
-            var parTransforms = this.parent.getSumOfSkippedTransforms(upTo);
-            transforms.scale.x *= parTransforms.scale.x;
-            transforms.scale.y *= parTransforms.scale.y;
-            transforms.translate.x += parTransforms.scale.x * parTransforms.translate.x
-            transforms.translate.y += parTransforms.scale.y * parTransforms.translate.y
-            transforms.translate.depth += parTransforms.translate.depth;
-
-        }
-        return transforms;
-
-    }
-
-    /**
-     * computes the appropriate translation, scale, and z-index for this elements 
-     * spritesheet for global rendering, 
-     * 
-     * composition order is 
-     * 
-     * first translate, then scale. 
-     */
-    computeGlobalTransforms = () => {
-        this.globalDepth = 0;
-        var resolvedAnchorTarget = this.anchorTarget == null ? "origin" : this.anchorTarget;
-        var resolvedAnchorName = this.anchorName == null ? "origin" : this.anchorName;
-        if (this.parent == null) {
-            var parGlobalScale = { x: 1, y: 1 };
-            var globalParTranslate = { x: 0, y: 0, depth: 0 };
-            //this.globalScale = this.copyObj(this.scale);
-            this.globalPlaySeqMagnets = this.copyObj(this.playSeqMagnets);
-            this.resolvedParent = this;
-            var globalParMagnet = this.copyObj(this.playSeqMagnets[resolvedAnchorTarget]);
-            var parGlobalARMS = this.copyObj(this.playSeqMagnets);
-            this.globalDepth = this.translate.depth;
-            this.globalScale = this.copyObj(this.scale);
-        } else {
-            this.resolvedParent = this.resolvedParent == null ? this.parent : this.resolvedParent;
-            var parGlobalScale = this.resolvedParent.globalScale;
-            var globalParTranslate = this.resolvedParent.globalTranslate;
-            this.globalScale = this.mult(this.scale, parGlobalScale);
-            var globalParMagnet = this.resolvedParent.globalPlaySeqMagnets[resolvedAnchorTarget];
-            var parGlobalARMS = this.resolvedParent.globalARMS;
-            this.globalDepth = this.parent.globalDepth + this.translate.depth;
-        }
-
-
-        //if(this.parent != this.resolvedParent) 
-        this.accruedTransforms = this.getSumOfSkippedTransforms(this.resolvedParent);
-        this.globalScale.x = this.accruedTransforms.scale.x * parGlobalScale.x;
-        this.globalScale.y = this.accruedTransforms.scale.y * parGlobalScale.y;
-
-        this.anchorRelativeMagnets = {};
-        var anchor = this.playSeqMagnets[resolvedAnchorName];
-        for (var k of Object.keys(this.playSeqMagnets)) {
-            var arm = [];
-            for (var frame = 0; frame < this.playSeqMagnets[k].length; frame++) {
-                var anchorFrame = anchor[frame];
-                var magFrame = this.playSeqMagnets[k][frame];
-                var armf = {};
-                armf.x = magFrame.x - anchorFrame.x;
-                armf.y = magFrame.y - anchorFrame.y;
-                armf.depth = magFrame.depth - anchorFrame.depth;
-                arm.push(armf);
-            }
-            this.anchorRelativeMagnets[k] = arm;
-        }
-
-        var localArms = {};
-        for (var k of Object.keys(this.anchorRelativeMagnets)) {
-            var l_arm = [];
-            for (var frame = 0; frame < this.anchorRelativeMagnets[k].length; frame++) {
-                var armf = this.anchorRelativeMagnets[k][frame];
-                var l_armf = {};
-                l_armf.x = (armf.x * this.accruedTransforms.scale.x) + this.accruedTransforms.translate.x;
-                l_armf.y = (armf.y * this.accruedTransforms.scale.y) + this.accruedTransforms.translate.y;
-                l_armf.depth = armf.depth + this.accruedTransforms.translate.depth; //armf.depth;
-                l_arm.push(l_armf);
-            }
-            localArms[k] = l_arm;
-        }
-
-        this.globalPlaySeqMagnets = {};
-
-        for (var k of Object.keys(localArms)) {
-            var g_arm = [];
-            for (var frame = 0; frame < localArms[k].length; frame++) {
-                var targetIdx = this.global_subframe_sequence[frame].par_subframe_idx;
-                if (this.resolvedParent != this)
-                    var targetMagnet = this.resolvedParent.globalPlaySeqMagnets[resolvedAnchorTarget][targetIdx];
-                else
-                    var targetMagnet = { x: 0, y: 0, depth: 0 };
-
-                var l_armf = localArms[k][frame];
-                var g_armf = {};
-                g_armf.x = (l_armf.x * parGlobalScale.x) + targetMagnet.x;
-                g_armf.y = (l_armf.y * parGlobalScale.y) + targetMagnet.y;
-                g_armf.depth = l_armf.depth + targetMagnet.depth;
-                g_arm.push(g_armf);
-            }
-            this.globalPlaySeqMagnets[k] = g_arm;
-        }
-
-        this.drawInfo = {
-            width: (this.width / this.frames) + "px",
-            depth: this.globalPlaySeqMagnets[resolvedAnchorName][0].depth,// + this.translate.depth,
-            scaling: "scale(" + this.globalScale.x + ", " + this.globalScale.y + ")",
-            framed_transforms: this.globalPlaySeqMagnets["origin"], //"translate(" + xDelta + "px, " + yDelta + "px) scale(" + this.globalScale.x + ", " + this.globalScale.y + ")",
-            transformOrigin: "top left"
-        }
-    }
-
-    /**
-     * set a css filter on this accessory or variant 
-     * (note, filter effect does not automatically propogate to children
-     * unless the children have their "inherit_filter" property set to true);
-     * 
-    */
-    setFilter(filter, exclusiveMode) {
-        this.postfilter = filter;
-        if (!exclusiveMode) {
-            if (this.parent != null && Object.keys(this.parent.variants).length != 0) {
-                this.parent.setFilter(filter, true);
-                return;
-            } else {
-                this.setFilter(filter, true);
-            }
-        } else {
-            this.ensureSpriteElems(); /*setting of postfilter handled by ensureSpriteElem*/
-
-            //if (this.spritesheet != null) {
-            //  this.imageElem.style.filter = this.postfilter;
-            //}
-            for (var k of Object.keys(this.accessories)) {
-                var acc = this.accessories[k];
-                if (acc.inherit_filter)
-                    acc.setFilter(filter, true);
-            }
-            for (var k of Object.keys(this.variants)) {
-                var vari = this.variants[k];
-                if (vari.inherit_filter)
-                    vari.setFilter(filter, true);
-            }
-        }
-    }
-
-
-
-    /**
-     * adds the given filter to the filter stack without replacing previous filters
-     * @param {String} filter 
-     * @param {boolean} exclusiveMode 
-     */
-    pushFilter(filter, exclusiveMode) {
-
-    }
-
-    /**
-     * translates the entire doll so that the magnet given magnet on this accessory aligns with 
-     * the given magnet on the target doll accessory. Use this if you want to (for example) make dolls hold hands.
-     * 
-     * @param {*} thisMagnetName 
-     * @param {*} targetDoll
-     * @param {*} targetMagnetName 
-     */
-    dragBy(thisMagnetName, targetDoll, targetMagnetName) {
-        var thisVariant = this.getCurrentVariant();
-        var descendantContainer = thisVariant.magnets[thisMagnetName] == null ? null : thisVariant;
-        if (descendantContainer == null)
-            descendantContainer = thisVariant.findDescendantContainingMagnet(thisMagnetName);
-        this.boundedMove(thisMagnetName, descendantContainer, targetDoll, targetMagnetName, this.findDollRoot());
-    }
-
-    /**
-     * similar to dragBy, but affect only this accessory. 
-     * (meaning you can drag an arm so its hand aligns with a certain spot, without having to drag the entire doll)
-     * @param {*} thisMagnetName 
-     * @param {*} targetDoll 
-     * @param {*} targetMagnetName 
-     */
-    accessoryDragBy(thisMagnetName, targetDoll, targetMagnetName) {
-        var thisVariant = this.getCurrentVariant();
-        var descendantContainer = thisVariant.magnets[thisMagnetName] == null ? null : thisVariant;
-        if (descendantContainer == null)
-            descendantContainer = thisVariant.findDescendantContainingMagnet(thisMagnetName);
-        this.boundedMove(thisMagnetName, descendantContainer, targetDoll, targetMagnetName, this);
-    }
-
-    boundedMove(thisMagnetName, thisMagnetContainer, targetDoll, targetMagnetName, dragAncestor) {
-
-
-        var targetDollVariant = targetDoll.getCurrentVariant()
-        var targetDollMag = targetDollVariant.findDescendantContainingMagnet(targetMagnetName);
-
-        //for(var i=0; i<10; i++) {
-        var magnetLoc = thisMagnetContainer.globalPlaySeqMagnets[thisMagnetName][0];
-        var targetLoc = targetDollMag.globalPlaySeqMagnets[targetMagnetName][0];
-        var magnetDelta = { x: targetLoc.x - magnetLoc.x, y: targetLoc.y - magnetLoc.y }
-        console.log("moving from: (" + dragAncestor.translate.x + ", " + dragAncestor.translate.y + ")");
-        console.log("moving to: (" + (dragAncestor.translate.x + magnetDelta.x) + ", " + (dragAncestor.translate.y + magnetDelta.y) + ")");
-        console.log("moving by: (" + magnetDelta.x + ", " + magnetDelta.y + ")");
-
-        dragAncestor.translate.x += magnetDelta.x;
-        dragAncestor.translate.y += magnetDelta.y;
-        dragAncestor.computeGlobals();
-        magnetLoc = thisMagnetContainer.globalPlaySeqMagnets[thisMagnetName][0];
-        console.log("resulted in: (" + magnetLoc.x + ", " + magnetLoc.y + ")");
-        console.log("-----");
-        //}
-
-        /**todo, figure out why this ends up with precision issues */
-
-        //console.log("-----");
-        //console.log("-----");
-        //console.log("-----");
-
-    }
-
-    /**returns the highest level doll */
-    findDollRoot() {
-        if (this.parent == null) return this;
-        else if (this.rootDoll != null) return this.rootDoll;
-        else return this.parent.findDollRoot();
-    }
-
-    findDescendantContainingMagnet(magnetName) {
-        if (this.magnets[magnetName] != null) {
-            return this;
-        } else {
-            var result = null;
-            for (var k of Object.keys(this.accessories)) {
-                result = this.accessories[k].findDescendantContainingMagnet(magnetName);
-                if (result != null) return result;
-            }
-            if (this.selected_variant != null) {
-                return this.selected_variant.findDescendantContainingMagnet(magnetName);
-            } else {
-                for (var k of Object.keys(this.variants)) {
-                    result = this.variants[k].findDescendantContainingMagnet(magnetName);
-                    if (result != null) return result;
-                }
-            }
-            return null;
-        }
-    }
-
-    /**
-     * (advanced users only) allows you to specify a custom css attribute and value to the 
-     * accessory / its variants. The result will only be applied to the immediate accessories/variants 
-     * that have a spritesheet. 
-     * 
-     * The css attribute must be provided in camelcase.
-     * so something like "background-color" should be given as "backgroundColor"
-     * and any values should be given as strings.
-     * 
-     * @param {String} ruleName the name of the attribute
-     * @param {String} value the value to apply
-     * @param {*} exclusiveMode IGNORE THIS AND DON'T PROVIDE A THIRD ARGUMENT 
-     */
-    customCSSRule(ruleName, value, exclusiveMode) {
-        if (!exclusiveMode) {
-            if (this.parent.variants.length != 0) {
-                this.parent.setFilter(ruleName, value, true);
-                return;
-            }
-        } else {
-            if (this.spritesheet == null) {
-                for (var k of Object.keys(this.accessories)) {
-                    this.accessories[k].setFilter(ruleName, value, true);
-                }
-                for (var k of Object.keys(this.variants)) {
-                    this.variants[k].setFilter(ruleName, value, true);
-                }
-            } else {
-                this.imageElem.style[ruleName] = value;
-            }
-        }
-    }
-
-
-
-
-    /**
-     * returns the active variant of the specified accessory on this doll or accessory. 
-     * (if the accessory is multiple accessories deep, this function will return the first active
-     * instance of that accessory it finds)
-     * if the accessory has no variants, returns the accessory itself. 
-     * if the accessory has variants, returns the accessory itself. 
-     * @param {String} accessory 
-     */
-    getAccessory = (accessory) => {
-        var searched = this.findFirstAccessory(accessory);
-        var result = null;
-        if (searched != null)
-            result = searched.getCurrentVariant();
-        if (result != null) return result;
-        else if (searched != null) {
-            var accessoryPath = searched != null ? searched.generateDebugString() : this.generateDebugString();
-            alert(
-                `Error: No selected_variant specified for: 
-    `+ accessoryPath + `
-
-in directory: 
-    ` + this.basePath + `.`);
-            return null;
-        } else {
-            console.warn("requested accessory: '" + accessory + '" not found on this armature');
-        }
-
-
-        /*var accessoryOfVariant = currentVariant.accessories[accessory];
-        var variantOfAccessoryOfVariant = accessoryOfVariant.getCurrentVariant();
-        return variantOfAccessoryOfVariant;
-        if(Object.keys(this.variants).length == 0) {
-            return this.accessories[accessory].getCurrentVariant(); 
-        } else {
-            return this.selected_variant;
-        }*/
-    }
-
-    generateDebugString = () => {
-        var path = "";
-        if (this.parent != null) {
-            path += this.parent.generateDebugString() + ".";
-        }
-        path += "" + (this.named == undefined ? "_" : this.named);
-        return path;
-    }
-
-
-    /**finds the first instance of the specified accessory
-     * which is a descendant of this variant or accessory. 
-     * (will only search through the chain of selected_variants)
-     */
-    findFirstAccessory = (accessory) => {
-
-        if (Object.keys(this.accessories).length > 0) {
-            if (this.accessories[accessory] != null) {
-                return this.accessories[accessory];
-            } else {
-                for (var k of Object.keys(this.accessories)) {
-                    var result = this.accessories[k].findFirstAccessory(accessory)
-                    if (result != null)
-                        return result;
-                }
-            }
-        } else if (this.selected_variant != null) {
-            return this.selected_variant.findFirstAccessory(accessory);
-        }
-    }
-
-    /**
-     * returns the currently active variant of this accessory. 
-     * if this accessory has no variants, returns this accessory.
-     * if this accessory has variants but none are selected, returns null;
-     */
-    getCurrentVariant = () => {
-        if (this.dollInfo.variants == null || Object.keys(this.dollInfo.variants).length == 0) {
-            return this;
-        } else {
-            return this.selected_variant;
-        }
-    }
-
-
-
-    /**
-     * computes the appropriate css animation for cycling through this spritesheet
-     */
-    computeGlobalFrameSequence = () => {
-        //var waitResult = await this.whenReady(defer());
-
-        if (this.visible && this.spritesheet != null) {
-            var frameWidth = this.width / this.frames;
-            var animString = `@keyframes ` + this.keyFrameElem.id + `-anim {
-                `;
-            for (var i = 0; i < this.global_subframe_sequence.length; i++) {
-                var subframe = this.global_subframe_sequence[i];
-                var percent = (subframe.spriteframe / this.frames) * 100;
-                var time = subframe.play_t;
-                //var anchorage = "translate(" + this.drawInfo.framed_transforms[i].x + "px, " + this.drawInfo.framed_transforms[i].y + "px)";
-                //var scaleage = "scale(" + this.globalScale.x + ", " + this.globalScale.y + ")";
-                animString += (100 * time) + `% {transform: translateX(-` + percent + `%) ;}
-                `;
-            }
-            this.keyFrameElem.innerText = animString + "}";
-            this.imageElem.style.animationName = this.keyFrameElem.id + `-anim`
-            this.imageElem.style.animationDuration = this.loopSpeed + "ms";
-            this.imageElem.style.animationTimingFunction = "steps(1)";
-            this.imageElem.style.animationIterationCount = "Infinite";
-            this.imageElem.style.imageRendering = "pixelated";
-        }
-    }
-
-    addPhase(interp, shiftBy) {
-        var result = [];
-        for (var i = 0; i < interp.length; i++) {
-            var modded = mod((i - shiftBy), interp.length);
-            result.push(interp[modded]);
-        }
-        return result;
-    }
-
-    /**
-     * Given a play sequence for this spritesheet, and a play sequence of an ancestor
-     * spritesheet
-     * @param {*} thisSequence 
-     * @param {*} parentSequence 
-     * @param {*} progress 
-     */
-    getInterpoSnappedSequence = (thisSequence, thisFrameTotal, parentSequence, parFrameTotal) => {
-        var sortedThis = thisSequence.sort((a, b) => a - b);
-        var sortedParent = parentSequence != null ? parentSequence.sort((a, b) => a - b) : null;
-        var grouped = [];
-        var result = [];
-        for (var i = 0; i < thisSequence.length; i++) {
-            grouped.push({ frame: thisSequence[i] / thisFrameTotal, parent: "me" });
-        }
-        if (parentSequence == null) {
-            for (var i = 0; i < thisSequence.length; i++) {
-                result.push(grouped[i].frame);
-            }
-            return result;
-        }
-        for (var i = 0; i < parentSequence.length; i++) {
-            grouped.push({ frame: parentSequence[i] / parFrameTotal, parent: "parent" });
-        }
-        groupedAll.sort((a, b) => a.frame - b.frame);
-
-
-        function pushUntil(val, of, from, direction) {
-            var ct = 0;
-            for (var i = from; ct < groupedAll.length; i += direction) {
-                if (groupedAll[i].frame == val && groupedAll[i].parent == of) {
-                    break;
-                } else {
-                    result.push(groupedAll[i].val);
-                }
-                ct++;
-            }
-        }
-        var lastVal = parentSequence[0];
-        var lastIndex = 0;
-        for (var i = 1; i < parentSequence.length; i++) {
-            var targetVal = parentSequence[i];
-            var direction = targetVal - lastVal > 0 ? 1 : 0;
-            pushUntil(targetVal, "parent", lastIndex, direction);
-            lastIndex = i;
-            lastVal = targetVal;
-        }
-        return result;
-    }
-
-    hide = async () => {
-        var waitResult = await this.whenReady(defer());
-        this.visible = false;
-
-        //this.spriteElem.classList.add("hidden");
-        if (this.spriteElem != null)
-            this.spriteElem.remove();
-        this.spriteElem = null;
-
-        if (this.spriteFrameElem != null)
-            this.spriteFrameElem.remove();
-        this.spriteFrameElem = null;
-
-        if (this.imageElem != null)
-            this.imageElem.remove();
-        this.imageElem = null;
-
-        if (this.keyFrameElem != null)
-            this.keyFrameElem.remove();
-        this.keyFrameElem = null;
-
-        if (this.selected_variant != null) {
-            this.selected_variant.hide();
-        }
-        for (var k of Object.keys(this.accessories)) {
-            this.accessories[k].hide();
-        }
-
-    }
-
-    show = async () => {
-        var waitResult = await this.whenReady(defer());
-        this.visible = true;
-        if (this.spritesheet != null) {
-            this.ensureSpriteElems();
-            this.spriteElem.classList.remove("hidden");
-            //this.spriteElem.appendChild(this.imageElem);
-        }
-        if (this.selected_variant != null) {
-            await this.selected_variant.show();
-        }
-
-        if (this.variants != null) {
-            for (var k of Object.keys(this.variants)) {
-                if (this.variants[k] != this.selected_variant)
-                    this.variants[k].hide();
-            }
-        }
-        for (var k of Object.keys(this.accessories)) {
-            await this.accessories[k].show();
-        }
-    }
-
-    /**
-     * displays the given variant of this FDoll as the active one. 
-     * Unless any descendant accessories wll also have their selected variant 
-     * set to the given variant 
-     * @param {String} variantName the nae of the variant to set on the doll. 
-     * note that by default any descendant accessories that contain a variant of the 
-     * same name will also have that varant selected. To prevent this, set "noRecurse" 
-     * to true
-     * @param {Boolean} noRecurse if set to true, will not attempt to set the variant on
-     * any qualifiying descendants
-     */
-    setVariant = async (variantName, noRecurse, isRecursed) => {
-        //var waitResult = await this.whenReady(defer());
-
-        if (variantName == null) {
-            this.hide();
-        }
-        else if (!isRecursed && this.parent != null && Object.keys(this.parent.variants).length > 0) {
-            await this.parent.setVariant(variantName, noRecurse, true);
-        } else {
-            //this.updateRequestedVariantMap(variantName);
-            await this.ensureVariant(variantName);
-            this.updateRequestedVariantMap(variantName);
-
-            for (var k of Object.keys(this.variants)) {
-                if (!noRecurse) {
-                    await this.variants[k].setVariant(variantName, noRecurse, true);
-                }
-                if (this.variants[variantName] != null)
-                    this.variants[k].hide();
-            }
-            if (!noRecurse) {
-                for (var k of Object.keys(this.accessories)) {
-                    await this.accessories[k].setVariant(variantName, noRecurse, true);
-                }
-            }
-
-        }
-        var chosenVariant = this.variants[variantName];
-        if (this.variants[variantName] != null) {
-            this.selected_variant = this.variants[variantName];
-            this.a_selected_variant_name = variantName;
-            if (this.visible)
-                this.selected_variant.show();
-        }
-
-        /*if (!isRecursed) {
-            var waitResult = this.computeGlobals();
-            this._forceRestyle(true);
-        }*/
-    }
-
-
-    getAccessPath = () => {
-        if (this.parent == null) {
-            return [];
-        } else if (this.parent.selected_variant == this) {
-            return this.parent.getAccessPath();
-        } else if (this.parent != null && Object.keys(this.parent.accessories).length > 0
-            && this.parent.accessories[this.named] != null) {
-            var parAccPath = this.parent.getAccessPath();
-            parAccPath.push(this.named);
-            return parAccPath;
-        } else {
-            return [];
-        }
-    }
-
-    updateRequestedVariantMap = (variantName) => {
-        
-        //if (this.named != null) {
-            if (this.activeVariantMap == null) {
-                this.activeVariantMap = {};//this.getRootDollActiveVariantMapMapFor(this.getAccessPath());
-            }
-        //}
-        if (this.dollInfo.variants != null
-            && this.dollInfo.variants[variantName] != null) {
-            if (this.selected_variant != null)
-                delete this.activeVariantMap[this.selected_variant.named];
-        }
-        this.activeVariantMap[variantName] = true;
-    }
-
-    /*getRootDollActiveVariantMapMapFor = (objectPath) => {
-        var rootDoll = this.findDollRoot();
-        this.rootDoll = rootDoll; 
-        if (rootDoll.activeVariantMap == null) rootDoll.activeVariantMap = { __a: {}, active: {}};
-        var rootMap = rootDoll.activeVariantMap;
-        var currentMap = rootMap;
-        for (var i = 0; i < objectPath.length; i++) {
-            if (currentMap["__a"][objectPath[i]] == null) currentMap["__a"][objectPath[i]] = { __a: {}, active: {} };
-            currentMap = currentMap["__a"][objectPath[i]];
-        }
-        return currentMap;
-    }*/
-
-
-    /**
-     * lazy loading optimization. Variants will not be loaded until required. 
-     * This checks whether or not the requested variant is both specified and instantiated 
-     * on this accessory. If it is specified but not instantiated, it instantiates it. 
-     *  
-     */
-    ensureVariant = async (variantName) => {
-        if (this.dollInfo.variants != null &&
-            this.dollInfo.variants[variantName] != null
-            && this.variants[variantName] == null) {
-            await this.instantiateVariant(variantName);
-        }
-    }
-
-    instantiateVariant = async (variantName) => {
-        var variant = this.dollInfo.variants[variantName];
-        var anAwaiter = defer();
-        this.variants[variantName] = new FDoll(this.basePath, variantName, anAwaiter, this, null, variant);
-        //this.variants[k].setParent(this, attachChild,  toChild);
-        var wait = await anAwaiter;
-        //this.variants[variantName].nameAs(variantName);
-        this.updateRequestedVariantMap(variantName);
-        
-        for (var k of Object.keys(this.activeVariantMap)) {
-            await this.variants[variantName].setVariant(k);
-        }
-    }
-
-
-    copyObj(obj) {
-        if (typeof obj != "function") {
-            return JSON.parse(JSON.stringify(obj));
-        } else {
-            return obj;
-        }
-        /*if(typeof obj == "object" || typeof obj == "array") {
-            var copy = {...{}, ...obj}; 
-            return copy;
-        } else {
-            var copy =  obj;
-            return copy;
-        }*/
-    }
-
-    /**
-     * multiplies the values of the keys in set 1 
-     * by the values of the same keys in set 2 and returns 
-     * the resulting set of values in a set with the same key names.  
-     * @param {*} set1 
-     * @param {*} set2 
-     */
-    mult(set1, set2) {
-        var result = {};
-        for (var k of Object.keys(set1)) {
-            if (set2[k] != null) {
-                result[k] = set1[k] * set2[k];
-            }
-        }
-        return result;
-    }
-
-    /**
-    * adds the values of the keys in set 1 
-    * to the values of the same keys in set 2 and returns 
-    * the resulting set of values in a set with the same key names.  
-    * @param {*} set1 
-    * @param {*} set2 
-    */
-    add(set1, set2) {
-        var result = {};
-        for (var k of Object.keys(set1)) {
-            if (set2[k] != null) {
-                result[k] = set1[k] + set2[k];
-            }
-        }
-        return result;
-    }
-}
-
-function mod(num, by) {
-    return ((num % by) + by) % by;
-};
-
-
-/*convenience functon. returns val if val !=null, otherwise returns ifnull*/
-function selfOr(vall, ifnull) {
-    return vall == null ? ifnull : vall;
-}
-
-
-var loadBlockers = {};
-
-
-
-var baseStyles = document.createElement("style");
-baseStyles.innerText =
-    `
- .spritesheet_container {
-    overflow-x: hidden;
-    overflow-y: hidden;
-    position: absolute;`+
-    //border-style: solid; 
-    //border-color: red;
-    //border-width: 2px;
-    `}
-
- .hidden {
-     display: none;
- }
- `;
-
-docHead.appendChild(baseStyles);
diff --git a/img/dolls/NameValueMaps.js b/img/dolls/NameValueMaps.js
deleted file mode 100644
index 8a44c25f58ad01a45c746f24f48a38089f171cb7..0000000000000000000000000000000000000000
--- a/img/dolls/NameValueMaps.js
+++ /dev/null
@@ -1,86 +0,0 @@
-nameValMaps = { 
-    npchairlengthrear : {
-        "buzz" : 1,
-        "short" : 2,
-        "trimmed" : 3,
-        "flowing" : 4,
-        "long" : 5,
-        "luxurious" : 6,
-        "uncompromising" : 7,
-        "repunzotic" : 8,
-        "endless" : 9
-    }, 
-    npcbodysize : {
-        "tiny_body" : 1,
-        "small_body" : 2,
-        "petite_body" : 3,
-        "medium_body" : 4,
-        "large_body" : 5,
-        "huge_body" : 6,
-        "giant_body" : 7,
-        "joke_body" : 11
-    },
-    npcbreastsize : {
-        "flat" : 0,
-        "budding" : 1,
-        "tiny" : 2,
-        "small" : 3,
-        "pert" : 4,
-        "modest": 5,
-        "full": 6,
-        "large": 7,
-        "ample": 8,
-        "massive": 9,
-        "huge": 10,
-        "gigantic": 11,
-        "enormous": 12  
-    },
-    npcpenissize: {
-        "none" : 0, 
-        "tiny" : 1, 
-        "small" : 2, 
-        "medium" : 3, 
-        "large" : 4, 
-        "huge" : 5        
-    },
-    playerbreastsize : {
-        "flat" : 0,
-        "tiny" : 1,
-        "small" : 2,
-        "large" : 3,
-        "huge" : 4
-    }
-}
-
-valNameMaps = {};
-
-function getValueFromName(map, key) {
-    return nameValMaps[map][key];
-}
-
-function getNameFromValue(map, key) {
-    return valNameMaps[map][key];
-}
-
-
-function generateReverseMaps() {
-    reversal(nameValMaps, valNameMaps); 
-    reversal(valNameMaps, nameValMaps);
-}
-
-function reversal(source, target) {
-    for(var mapName of Object.keys(source)) {
-        for(var k of Object.keys(source[mapName])) {
-            var value = source[mapName][k];
-            if(target[mapName] == null) {
-                target[mapName] = {}; 
-            }
-            if(target[mapName][value] == null) {
-                target[mapName][value] = k 
-            }
-        }
-    }
-}
-
-
-generateReverseMaps();
\ No newline at end of file
diff --git a/img/dolls/battleTestControls/characterDebug.js b/img/dolls/battleTestControls/characterDebug.js
deleted file mode 100644
index be4f2eba1d19ec3a9dbcbe5c67cca66f6e8b1e7d..0000000000000000000000000000000000000000
--- a/img/dolls/battleTestControls/characterDebug.js
+++ /dev/null
@@ -1,861 +0,0 @@
-/* eslint-disable object-shorthand */
-const NPC1 = {
-	penis: "anus",
-	vagina: "none",
-	bodysize: 4,
-	chest: 0,
-	lactation: 0,
-	lefthand: 0,
-	righthand: "throat",
-	anus: 0,
-	mouth: 0,
-	gender: "m",
-	description: "toned",
-	fullDescription: "toned woman",
-	insecurity: "ethics",
-	pronoun: "f",
-	pronouns: {
-		he: 0,
-		his: 0,
-	},
-	penissize: 4,
-	breastsize: 7,
-	bottomsize: 0,
-	ballssize: 0,
-	penisdesc: "humongous cock",
-	hairlengthrear: 3,
-	hairstylerear: "femme",
-	hairstylefront: "bangs",
-	health: 250,
-	skincolour: "white",
-	teen: 0,
-	adult: 1,
-	intro: 0,
-	speechpenisescape: 0,
-	speechvaginaescape: 0,
-	speechanusescape: 0,
-	type: 0,
-	stance: 0,
-	monster: 0,
-	hasPriority: false,
-};
-const NPC2 = {
-	penis: "mouthimminent",
-	vagina: "none",
-	bodysize: 2,
-	chest: 0,
-	lactation: 1,
-	lefthand: 0,
-	righthand: "pen_right_cheek",
-	anus: 0,
-	mouth: 0,
-	gender: "m",
-	description: "lithe",
-	fullDescription: "lithe woman",
-	insecurity: "ethics",
-	pronoun: "f",
-	pronouns: {
-		he: 0,
-		his: 0,
-	},
-	penissize: 4,
-	breastsize: 7,
-	bottomsize: 0,
-	ballssize: 0,
-	penisdesc: "massive cock",
-	hairlengthrear: 6,
-	hairstylerear: "pigtails",
-	hairstylefront: "swept",
-	health: 175,
-	skincolour: "white",
-	teen: 0,
-	adult: 1,
-	intro: 0,
-	speechpenisescape: 0,
-	speechvaginaescape: 0,
-	speechanusescape: 0,
-	type: 0,
-	stance: 0,
-	monster: 0,
-	hasPriority: false,
-};
-const NPC3 = {
-	penis: "none",
-	vagina: "none",
-	breastsdesc: 0,
-	chest: "none",
-	lactation: 0,
-	lefthand: "none",
-	righthand: "none",
-	hairlengthrear: 3,
-	hairstylerear: "ponytail",
-	hairstylefront: "bangs",
-	bodysize: 3,
-	anus: 0,
-	mouth: "none",
-	gender: 0,
-	description: 0,
-	fullDescription: "slight woman",
-	insecurity: 0,
-	pronoun: 0,
-	pronouns: {
-		he: 0,
-		his: 0,
-	},
-	penissize: 0,
-	breastsize: 0,
-	bottomsize: 0,
-	ballssize: 0,
-	penisdesc: 0,
-	breastdesc: 0,
-	health: 0,
-	skincolour: "white",
-	teen: 0,
-	adult: 1,
-	intro: 0,
-	speechpenisescape: 0,
-	speechvaginaescape: 0,
-	speechanusescape: 0,
-	type: 0,
-	stance: 0,
-	monster: 0,
-};
-const NPC4 = {
-	penis: "none",
-	vagina: "none",
-	breastsdesc: 0,
-	chest: "none",
-	lactation: 0,
-	lefthand: "none",
-	hairstylefront: "bangs",
-	hairstylerear: "ponytail",
-	bodysize: 4,
-	righthand: "none",
-	anus: 0,
-	mouth: "none",
-	gender: 0,
-	description: 0,
-	fullDescription: "slender woman",
-	insecurity: 0,
-	pronoun: 0,
-	pronouns: {
-		he: 0,
-		his: 0,
-	},
-	penissize: 0,
-	breastsize: 0,
-	bottomsize: 0,
-	ballssize: 0,
-	penisdesc: 0,
-	breastdesc: 0,
-	health: 0,
-	skincolour: "white",
-	teen: 1,
-	adult: 0,
-	intro: 0,
-	speechpenisescape: 0,
-	speechvaginaescape: 0,
-	speechanusescape: 0,
-	type: 0,
-	stance: 0,
-	monster: 0,
-};
-const NPC5 = {
-	penis: "none",
-	vagina: "none",
-	breastsdesc: 0,
-	chest: "none",
-	hairstylefront: "bangs",
-	hairstylerear: "ponytail",
-	bodysize: "medium",
-	lactation: 3,
-	lefthand: "none",
-	righthand: "none",
-	anus: 0,
-	mouth: "none",
-	gender: 0,
-	description: 0,
-	fullDescription: "graceful woman",
-	insecurity: 0,
-	pronoun: 0,
-	pronouns: {
-		he: 0,
-		his: 0,
-	},
-	penissize: 0,
-	breastsize: 0,
-	bottomsize: 0,
-	ballssize: 0,
-	penisdesc: 0,
-	breastdesc: 0,
-	health: 0,
-	skincolour: "white",
-	teen: 1,
-	adult: 0,
-	intro: 0,
-	speechpenisescape: 0,
-	speechvaginaescape: 0,
-	speechanusescape: 0,
-	type: 0,
-	stance: 0,
-	monster: 0,
-};
-const NPC6 = {
-	penis: "none",
-	vagina: "none",
-	breastsdesc: 0,
-	chest: "none",
-	hairstylefront: "swept",
-	hairstylerear: "ponytail",
-	bodysize: 2,
-	lactation: 0,
-	lefthand: "none",
-	righthand: "none",
-	anus: 0,
-	mouth: "none",
-	gender: 0,
-	description: 0,
-	fullDescription: 0,
-	insecurity: 0,
-	pronoun: 0,
-	pronouns: {
-		he: 0,
-		his: 0,
-	},
-	penissize: 0,
-	breastsize: 0,
-	bottomsize: 0,
-	ballssize: 0,
-	penisdesc: 0,
-	breastdesc: 0,
-	health: 0,
-	skincolour: 0,
-	teen: 0,
-	adult: 0,
-	intro: 0,
-	speechpenisescape: 0,
-	speechvaginaescape: 0,
-	speechanusescape: 0,
-	type: 0,
-	stance: 0,
-	monster: 0,
-};
-
-const player = {
-	bodysize: 1,
-	gender: "m",
-	sex: "m",
-	penis: 0,
-	vagina: 0,
-	penissize: 0,
-	breastsize: 0,
-	bottomsize: 0,
-	ballssize: 0,
-	pronoun: 0,
-	pronouns: {
-		he: 0,
-		his: 0,
-	},
-	virginity: {
-		anal: false,
-		oral: false,
-		penile: true,
-		vaginal: true,
-		temple: true,
-	},
-	gender_appearance: "m",
-	gender_appearance_without_overwear: "m",
-	penisExist: true,
-	vaginaExist: false,
-	ballsExist: true,
-	gender_appearance_factors: [
-		{
-			femininity: -100000,
-			factor: "Penis visible",
-		},
-		{
-			femininity: -50,
-			factor: "Exposed breasts",
-		},
-		{
-			femininity: 19,
-			factor: "Hair length",
-		},
-		{
-			femininity: 50,
-			factor: "Bottom size (100% visible)",
-		},
-		{
-			femininity: -200,
-			factor: "Body type",
-		},
-		{
-			femininity: -119,
-			factor: "Toned muscles",
-		},
-		{
-			femininity: 0,
-			factor: "Posture (x1 effectiveness due to English skill)",
-		},
-		{
-			femininity: 50,
-			factor: "Visible skin markings",
-		},
-	],
-	gender_appearance_without_overwear_factors: [
-		{
-			femininity: -100000,
-			factor: "Penis visible",
-		},
-		{
-			femininity: -50,
-			factor: "Exposed breasts",
-		},
-		{
-			femininity: 19,
-			factor: "Hair length",
-		},
-		{
-			femininity: 50,
-			factor: "Bottom size (100% visible)",
-		},
-		{
-			femininity: -200,
-			factor: "Body type",
-		},
-		{
-			femininity: -119,
-			factor: "Toned muscles",
-		},
-		{
-			femininity: 0,
-			factor: "Posture (x1 effectiveness due to English skill)",
-		},
-		{
-			femininity: 50,
-			factor: "Visible skin markings",
-		},
-	],
-	gender_posture: "n",
-	femininity: -100250,
-	gender_body: "m",
-	femininity_without_overwear: -100250,
-};
-
-const skinColor = {
-	tanLoc: ["body", "breasts", "penis", "swimshorts", "swimsuitTop", "swimsuitBottom", "bikiniTop", "bikiniBottom", "tshirt"],
-	natural: "light",
-	init: true,
-	range: 17,
-	current: {
-		test: "",
-		body: "hue-rotate(30.187deg) saturate(0.15) brightness(4.29)",
-		breasts: "hue-rotate(30.187deg) saturate(0.15) brightness(4.29)",
-		penis: "hue-rotate(30.187deg) saturate(0.15) brightness(4.29)",
-		swimshorts: "hue-rotate(30.187deg) saturate(0.15) brightness(4.29)",
-		swimsuitTop: "hue-rotate(30.187deg) saturate(0.15) brightness(4.29)",
-		swimsuitBottom: "hue-rotate(30.187deg) saturate(0.15) brightness(4.29)",
-		bikiniTop: "hue-rotate(30.187deg) saturate(0.15) brightness(4.29)",
-		bikiniBottom: "hue-rotate(30.187deg) saturate(0.15) brightness(4.29)",
-		tshirt: "hue-rotate(30.187deg) saturate(0.15) brightness(4.29)",
-		mouth: "hue-rotate(30.187deg) saturate(0.15) brightness(4.29)",
-	},
-	tanValues: [1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1],
-	overwriteEnable: false,
-	sunBlock: false,
-	overwrite: { hStart: 30, hEnd: 47, sStart: 0.15, sEnd: 0.3, bStart: 4.3, bEnd: 3.4 },
-	overwriteValues: { hStart: 45, hEnd: 45, sStart: 0.2, sEnd: 0.4, bStart: 4.5, bEnd: 0.7 },
-};
-
-const worn = {
-	upper: {
-		index: 14,
-		name: "large towel",
-		name_cap: "Large towel",
-		variable: "towellarge",
-		integrity: 10,
-		integrity_max: 10,
-		fabric_strength: 20,
-		reveal: 800,
-		word: "a",
-		one_piece: 1,
-		strap: 0,
-		open: 1,
-		state: "waist",
-		state_base: "waist",
-		state_top: "chest",
-		state_top_base: "chest",
-		plural: 0,
-		colour: "tangerine",
-		colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow"],
-		exposed: 0,
-		exposed_base: 0,
-		type: ["normal"],
-		set: "towellarge",
-		gender: "n",
-		cost: 0,
-		description: "Not very secure.",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		sleeve_img: 0,
-		breast_img: 0,
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		exposedcarry: 0,
-		outfitPrimary: {
-			lower: "large towel bottom",
-		},
-	},
-	lower: {
-		index: 15,
-		name: "large towel bottom",
-		name_cap: "Large towel bottom",
-		variable: "gymbloomers",
-		integrity: 10,
-		integrity_max: 10,
-		fabric_strength: 30,
-		reveal: 800,
-		word: "a",
-		one_piece: 1,
-		skirt: 1,
-		skirt_down: 1,
-		state: "hips",
-		state_base: "hips",
-		plural: 0,
-		colour: "tangerine",
-		colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow"],
-		exposed: 0,
-		exposed_base: 0,
-		vagina_exposed: 1,
-		vagina_exposed_base: 1,
-		anus_exposed: 1,
-		anus_exposed_base: 1,
-		type: ["normal"],
-		set: "towellarge",
-		gender: "n",
-		cost: 0,
-		description: "Not very secure.",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		high_img: 0,
-		back_img: 0,
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		exposedcarry: 0,
-		outfitSecondary: ["upper", "large towel"],
-	},
-	under_upper: {
-		index: 0,
-		name: "naked",
-		name_cap: "Naked",
-		variable: "naked",
-		integrity: 0,
-		integrity_max: 0,
-		fabric_strength: 0,
-		reveal: 1000,
-		word: "n",
-		one_piece: 0,
-		strap: 0,
-		open: 0,
-		state: 0,
-		state_base: 0,
-		state_top: 0,
-		state_top_base: 0,
-		plural: 0,
-		colour: 0,
-		colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
-		exposed: 1,
-		exposed_base: 1,
-		type: ["naked"],
-		set: "under_upper",
-		gender: "n",
-		cost: 0,
-		description: "naked",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		sleeve_img: 0,
-		breast_img: 0,
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		exposedcarry: 1,
-		state_stop: 0,
-		mainImage: 0,
-	},
-	under_lower: {
-		index: 0,
-		name: "naked",
-		name_cap: "Naked",
-		variable: "naked",
-		integrity: -10,
-		integrity_max: 0,
-		fabric_strength: 0,
-		reveal: 1000,
-		word: "n",
-		one_piece: 0,
-		state: 0,
-		state_base: 0,
-		plural: 0,
-		colour: 0,
-		colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
-		exposed: 1,
-		exposed_base: 1,
-		vagina_exposed: 1,
-		vagina_exposed_base: 1,
-		anus_exposed: 1,
-		anus_exposed_base: 1,
-		type: ["naked"],
-		anal_shield: 0,
-		set: "under_lower",
-		gender: "n",
-		cost: 0,
-		description: "naked",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		penis_img: 0,
-		high_img: 0,
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		exposedcarry: 1,
-		mainImage: 0,
-	},
-	genitals: {
-		index: 2,
-		name: "chastity cage",
-		name_cap: "Chastity cage",
-		variable: "chastitycage",
-		integrity: 1540,
-		integrity_max: 2000,
-		fabric_strength: 15,
-		reveal: 1000,
-		word: "a",
-		one_piece: 0,
-		state: "waist",
-		state_base: "waist",
-		plural: 1,
-		colour: 0,
-		colour_options: [],
-		exposed: 1,
-		exposed_base: 1,
-		vagina_exposed: 0,
-		vagina_exposed_base: 0,
-		anus_exposed: 1,
-		anus_exposed_base: 1,
-		type: ["chastity", "cage"],
-		anal_shield: null,
-		set: "genitals",
-		gender: "m",
-		cost: 0,
-		description: "Restrictive.",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		penis_img: 0,
-		high_img: 0,
-		cursed: 1,
-		location: 0,
-		hideUnderLower: [
-			"plain panties",
-			"bikini bottoms",
-			"lace panties",
-			"briefs",
-			"school swimsuit bottom",
-			"school swim shorts",
-			"leotard bottom",
-			"full body leotard bottom",
-			"skimpy leotard bottom",
-			"foreign school swimsuit bottom",
-			"swimsuit bottom",
-			"bunny leotard bottom",
-			"boyshorts",
-			"catgirl panties",
-			"G-string",
-			"microkini bottom",
-			"speedo",
-			"striped panties",
-			"thong",
-		],
-		iconFile: 0,
-		accIcon: 0,
-		origin: "temple",
-	},
-	head: {
-		index: 0,
-		name: "naked",
-		name_cap: "Naked",
-		variable: "naked",
-		integrity: 0,
-		integrity_max: 0,
-		fabric_strength: 0,
-		reveal: 1,
-		word: "n",
-		plural: 0,
-		colour: 0,
-		colour_options: [],
-		type: ["naked"],
-		gender: "n",
-		cost: 0,
-		description: "naked",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		back_img: 0,
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		mainImage: 0,
-	},
-	face: {
-		index: 0,
-		name: "naked",
-		name_cap: "Naked",
-		variable: "naked",
-		integrity: 10,
-		integrity_max: 10,
-		fabric_strength: 20,
-		reveal: 1,
-		word: "a",
-		plural: 0,
-		colour: 0,
-		colour_options: [],
-		type: ["naked"],
-		gender: "n",
-		cost: 0,
-		description: "naked",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		mainImage: 0,
-	},
-	neck: {
-		index: 1,
-		name: "collar",
-		name_cap: "Collar",
-		variable: "collar",
-		integrity: 400,
-		integrity_max: 400,
-		fabric_strength: 20,
-		reveal: 1000,
-		word: "n",
-		plural: 1,
-		colour: 0,
-		colour_options: [],
-		type: ["fetish"],
-		gender: "n",
-		cost: 20000,
-		description: "Requires a special tool to unlock.",
-		shop: [],
-		collared: 1,
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		cursed: 1,
-		location: 0,
-		iconFile: "Collar.png",
-		accIcon: 0,
-	},
-	legs: {
-		index: 0,
-		name: "naked",
-		name_cap: "Naked",
-		variable: "naked",
-		integrity: 10,
-		integrity_max: 10,
-		fabric_strength: 20,
-		reveal: 1,
-		word: "a",
-		plural: 0,
-		colour: 0,
-		colour_options: [],
-		type: ["naked"],
-		gender: "n",
-		cost: 0,
-		description: "naked",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		state_base: 0,
-		mainImage: 0,
-	},
-	feet: {
-		index: 0,
-		name: "naked",
-		name_cap: "Naked",
-		variable: "naked",
-		integrity: 10,
-		integrity_max: 10,
-		fabric_strength: 20,
-		reveal: 1,
-		word: "a",
-		plural: 0,
-		colour: 0,
-		colour_options: [],
-		type: ["naked"],
-		gender: "n",
-		cost: 0,
-		description: "naked",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		mainImage: 0,
-	},
-	over_upper: {
-		index: 0,
-		name: "naked",
-		name_cap: "Naked",
-		variable: "naked",
-		integrity: 0,
-		integrity_max: 0,
-		fabric_strength: 0,
-		reveal: 1000,
-		word: "n",
-		strap: 0,
-		open: 0,
-		zip: 0,
-		state: 0,
-		state_base: 0,
-		state_top: 0,
-		state_top_base: 0,
-		plural: 0,
-		colour: 0,
-		colour_options: ["black", "blue", "brown", "green", "pink", "purple", "red", "tangerine", "teal", "white", "yellow", "custom"],
-		exposed: 2,
-		exposed_base: 2,
-		type: ["naked"],
-		gender: "n",
-		cost: 0,
-		description: "naked",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		sleeve_img: 0,
-		breast_img: 0,
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		mainImage: 0,
-	},
-	over_lower: {
-		index: 0,
-		name: "naked",
-		name_cap: "Naked",
-		variable: "naked",
-		integrity: 0,
-		integrity_max: 0,
-		fabric_strength: 0,
-		reveal: 1000,
-		word: "n",
-		skirt: 0,
-		skirt_down: 0,
-		state: 0,
-		state_base: 0,
-		plural: 0,
-		colour: 0,
-		colour_options: [],
-		exposed: 2,
-		exposed_base: 2,
-		vagina_exposed: 1,
-		vagina_exposed_base: 1,
-		anus_exposed: 1,
-		anus_exposed_base: 1,
-		type: ["naked"],
-		gender: "n",
-		cost: 0,
-		description: "naked",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		high_img: 0,
-		back_img: 0,
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		mainImage: 0,
-	},
-	over_head: {
-		index: 0,
-		name: "naked",
-		name_cap: "Naked",
-		variable: "naked",
-		integrity: 0,
-		integrity_max: 0,
-		fabric_strength: 0,
-		reveal: 1,
-		word: "n",
-		plural: 0,
-		colour: 0,
-		colour_options: [],
-		type: ["naked"],
-		gender: "n",
-		cost: 0,
-		description: "naked",
-		shop: [],
-		accessory: 0,
-		accessory_colour: 0,
-		accessory_colour_options: [],
-		back_img: 0,
-		cursed: 0,
-		location: 0,
-		iconFile: 0,
-		accIcon: 0,
-		mainImage: 0,
-	},
-};
-
-// eslint-disable-next-line no-unused-vars
-const SugarCube = {
-	State: {
-		variables: {
-			enemyno: 1,
-			position: "doggy",
-			skinColor: skinColor,
-			hairlengthstage: "shoulder",
-			haircolorfilter: "hue-rotate(40deg) saturate(60%) brightness(71%) contrast(100%)",
-			arousal: 0,
-			arousalmax: 10000,
-			trauma: 0,
-			traumamax: 5000,
-			pain: 0,
-			NPCList: [NPC1, NPC2, NPC3, NPC4, NPC5, NPC6],
-			player: player,
-			worn: worn,
-		},
-	},
-};
diff --git a/img/dolls/battleTestControls/controls.js b/img/dolls/battleTestControls/controls.js
deleted file mode 100644
index a610ef123e722a686a04d56992340f5674ffd684..0000000000000000000000000000000000000000
--- a/img/dolls/battleTestControls/controls.js
+++ /dev/null
@@ -1,190 +0,0 @@
-
-function setEnemyCount(elem) {
-    enemyControlsContainer = document.getElementById("enemy-controls-container");
-    var currentEnemyCount = enemyControlsContainer.querySelectorAll(".enemy-controller").length;
-    SugarCube.State.variables.enemyno = elem.value;
-    addOrRemoveControllers(elem.value, currentEnemyCount);
-}
-
-function addOrRemoveControllers(newCount, oldCount) {
-    var count = newCount - oldCount;
-    for (var i = count; i < 0; i++) {
-        enemyControlsContainer.lastElementChild.remove();
-    }
-    var cachedController = enemyControlsCache.querySelector(".enemy-controller");
-    for (var i = 0; i < count; i++) {
-        var clone = cachedController.cloneNode(true);
-        clone.setAttribute("data-NPC", oldCount + (i));
-        clone.querySelector("h3").innerText = "NPC-" + (oldCount + (i + 1))
-        enemyControlsContainer.appendChild(clone);
-        updateControllerValues(clone);
-    }
-}
-
-
-function updateClothesDropdown() {
-    var bottomAcc = playerDoll.getAccessory("bottom").getAccessory("clothes");
-    var underlower = bottomAcc.getAccessory("under_lower").parent;
-    var playerControls = document.querySelector("#player-controls div");
-    var underLowerSelect = dropdownFromVariants(underlower, "under_lower", (el) => { updateSubVariants(el); updateById(el); }, updateById);
-    playerControls.appendChild(underLowerSelect);
-    underLowerSelect.forPart = "under_lower";
-    underLowerSelect.appendChild(makecolorInputFor(SugarCube.State.variables.worn.under_lower));
-
-    var lower = bottomAcc.getAccessory("lower").parent;
-    var lowerSelect = dropdownFromVariants(lower, "lower", (el) => { updateSubVariants(el); updateById(el); }, updateById);
-    playerControls.appendChild(lowerSelect);
-    lowerSelect.forPart = "lower";
-    lowerSelect.appendChild(makecolorInputFor(SugarCube.State.variables.worn.lower));
-
-}
-
-function dropdownFromVariants(variantContainer, label, onchange, onsubchange) {
-    var select = document.createElement("select");
-    select.classList.add("variants");
-    select.variantContainer = variantContainer;
-    select.onsubchange = onsubchange;
-    select.onchange = () => { onchange(select) };
-    var variantsHolder = variantContainer.dollInfo == null ? variantContainer : variantContainer.dollInfo;
-    for (var k of Object.keys(variantsHolder.variants)) {
-        var opt = document.createElement("option");
-        opt.value = k;
-        opt.innerText = k;
-        select.appendChild(opt);
-    }
-    var selectorDiv = document.createElement("div");
-    selectorDiv.classList.add("selector");
-    selectorDiv.innerHTML = label;
-    selectorDiv.appendChild(select);
-    return selectorDiv;
-}
-
-function updateSubVariants(elem) {
-    var subvariants = elem.parentNode.querySelector(".subvariants");
-    if (subvariants != null)
-        subvariants.remove();
-    var variantContainer = elem.variantContainer;
-    var variantHolder = variantContainer.dollInfo == null? variantContainer.variants : variantContainer.dollInfo.variants;
-    var result = dropdownFromVariants(variantHolder[elem.value], "", elem.onsubchange);
-    result = result.querySelector("select");
-    result.classList.add("subvariants");
-    result.onchange = elem.onsubchange;
-    elem.parentNode.appendChild(result);
-    SugarCube.State.variables.worn[variantContainer.named].variable = elem.value;
-    updateState(loopSpeed);
-}
-
-function updateById(elem) {
-    var val = elem.value == null ? elem.target.value : elem.value;
-    var targ = elem.target == null ? elem : elem.target;
-    var forPart = targ.parentNode.forPart;
-    SugarCube.State.variables.worn[forPart].state = val; //targ.variantContainer.setVariant(val);
-    updateState(loopSpeed);
-}
-
-function makecolorInputFor(item) {
-    var colorer = document.createElement("input")
-    colorer.setAttribute("type", "color");
-    colorer.onchange = (e) => {
-        colorItem(e.target.value, item);
-    }
-    return colorer;
-}
-
-function colorItem(value, item) {
-    var hsb = toHSB(value);
-    var filterString = "hue-rotate(" + hsb.h + "deg) saturate(" + hsb.s + "%) brightness(" + hsb.b+ "%)";
-    item.currentcolor = filterString;
-    updateState(loopSpeed);
-}
-
-/**sets the controller values to reflect its corresponding NPC */
-function updateControllerValues(controller) {
-    var NPCNum = controller.getAttribute("data-NPC");
-    var NPCInfo = SugarCube.State.variables.NPCList[NPCNum];
-    controller.querySelector(".type").value = NPCInfo.type;
-    controller.querySelector(".breastsize").value = NPCInfo.breastsize;
-    controller.querySelector(".hairstylerear").value = NPCInfo.hairstylerear;
-    controller.querySelector(".hairstylerear").value = NPCInfo.hairstylerear;
-    controller.querySelector(".penissize").value = NPCInfo.penissize;
-    controller.querySelector(".bodysize").value = NPCInfo.bodysize;
-    controller.querySelector(".penis").value = NPCInfo.penis;
-
-}
-
-
-
-function toHSB(h) {
-    r = "0x" + h[1] + h[2];
-    g = "0x" + h[3] + h[4];
-    b = "0x" + h[5] + h[6];
-    var hsv = rgbToHsv(r, g, b);
-    //compensate for CSS's horrible hue-rotate math the best we can. 
-    var mod = Math.abs(180-hsv.h)%180; 
-    if(mod == 0) mod = 180;
-    var satMult = 4.5*((100-hsv.s)/100);
-    var b = hsv.v + (hsv.v * (satMult*(mod/180.0)));
-    return {h:hsv.h, s:hsv.s, b:b};
-}
-function rgbToHsv(r, g, b) {
-    let rabs, gabs, babs, rr, gg, bb, h, s, v, diff, diffc, percentRoundFn;
-    rabs = r / 255;
-    gabs = g / 255;
-    babs = b / 255;
-    v = Math.max(rabs, gabs, babs),
-    diff = v - Math.min(rabs, gabs, babs);
-    diffc = c => (v - c) / 6 / diff + 1 / 2;
-    percentRoundFn = num => Math.round(num * 100) / 100;
-    if (diff == 0) {
-        h = s = 0;
-    } else {
-        s = diff / v;
-        rr = diffc(rabs);
-        gg = diffc(gabs);
-        bb = diffc(babs);
-
-        if (rabs === v) {
-            h = bb - gg;
-        } else if (gabs === v) {
-            h = (1 / 3) + rr - bb;
-        } else if (babs === v) {
-            h = (2 / 3) + gg - rr;
-        }
-        if (h < 0) {
-            h += 1;
-        }else if (h > 1) {
-            h -= 1;
-        }
-    }
-    return {
-        h: Math.round(h * 360),
-        s: percentRoundFn(s * 100),
-        v: percentRoundFn(v * 100)
-    };
-}
-
-
-function hsvToRgb(h) {
-    var r, g, b, i, f, p, q, t;
-    if (arguments.length === 1) {
-        s = h.s/100, v = h.v/100, h = h.h/360;
-    }
-    i = Math.floor(h * 6);
-    f = h * 6 - i;
-    p = v * (1 - s);
-    q = v * (1 - f * s);
-    t = v * (1 - (1 - f) * s);
-    switch (i % 6) {
-        case 0: r = v, g = t, b = p; break;
-        case 1: r = q, g = v, b = p; break;
-        case 2: r = p, g = v, b = t; break;
-        case 3: r = p, g = q, b = v; break;
-        case 4: r = t, g = p, b = v; break;
-        case 5: r = v, g = p, b = q; break;
-    }
-    return {
-        r: Math.round(r * 255),
-        g: Math.round(g * 255),
-        b: Math.round(b * 255)
-    };
-}
\ No newline at end of file
diff --git a/img/dolls/dollLoader.js b/img/dolls/dollLoader.js
deleted file mode 100644
index 4b79f183b92dabbe9ec783f23e195e466310a0f4..0000000000000000000000000000000000000000
--- a/img/dolls/dollLoader.js
+++ /dev/null
@@ -1,130 +0,0 @@
-var playerDoll = null;
-var humanCache = [];
-var beastCache = [];
-
-
-var humansActive = [];
-var beastsActive = [];
-var enemiesActive = [];
-var activeNPCList = [];
-
-
-var insertListener = async function(event){
-
-	if (event.animationName == "nodeInserted") {
-        updateState();
-	}
-}
-
-async function updateState(msPerLoop, infoDiv) {
-    //console.log("BATTLE BEGIN! ", event, event.target);
-        globals = SugarCube.State.variables;
-        if(playerDoll == null) {
-            var anAwaiter = defer();
-            playerDoll = new FDoll("dolls/player/player_sex.js", "player", anAwaiter, null, infoDiv);
-            var wait = await anAwaiter;
-        }
-        if(msPerLoop == null) {
-            msPerLoop = 500;
-        }
-
-        var canvasElem = document.querySelector("#divsex");
-        canvasElem.innerHTML = '';
-        cleanSlate();
-        playerDoll.setLoopSpeed(msPerLoop);
-        for(var i = 0; i<activeNPCList.length; i++ ) {
-            activeNPCList[i].setLoopSpeed(msPerLoop);
-        }
-        await initNPCs(infoDiv);
-        await updatePlayerDraw();
-        await updateNPCs(activeNPCList);
-    drawAll();
-}
-
-
-
-async function initNPCs(infoDiv) {
-    var npcList = SugarCube.State.variables.NPCList;
-    var enemyCount = SugarCube.State.variables.enemyno;
-    var humansRequested = 0;
-    activeNPCList = [];
-    var beastsRequested = 0;
-    orificeDibs = {};
-
-    for(var i=0; i<enemyCount; i++) {
-        var npcState = npcList[i];
-        if (npcState.type != 0) {
-            beastsRequested++;
-            var beast = await getOrCreateBeastFromCache(beastsRequested, npcState.type, infoDiv);
-            beast.NPCInfo = npcState;
-            activeNPCList.push(beast);
-            await updateEnemyState(beast);
-            //human.renderTo(canvasElem);
-        } else {
-            humansRequested++;
-            var human = await getOrCreateHumansFromCache(humansRequested, infoDiv);
-            human.NPCInfo = npcState;
-            activeNPCList.push(human);
-            await updateEnemyState(human);
-            //human.renderTo(canvasElem);
-        }
-    }
-}
-
-async function updateNPCs(activeNPCList) {
-    for (var i = 0; i<activeNPCList.length; i++) {
-        updateEnemyDraw((activeNPCList[i]));
-    }
-}
-
-
-function drawAll() {
-    var canvasElem = document.querySelector("#divsex");
-    window.requestAnimationFrame( ()=> {
-        playerDoll.renderTo(canvasElem);
-        for (var i = 0; i<activeNPCList.length; i++) {
-            (activeNPCList[i]).renderTo(canvasElem);
-        }
-    });
-
-}
-
-
-async function getOrCreateHumansFromCache(humansRequested, infoDiv) {
-    if (humanCache.length >= humansRequested) {
-        return humanCache[humansRequested - 1];
-    } else {
-        var anAwaiter = defer();
-        var newHuman = new FDoll("dolls/human/human.js", "human", anAwaiter, null, infoDiv);
-        var wait = await anAwaiter;
-        humanCache.push(newHuman);
-        return newHuman;
-    }
-}
-
-async function getOrCreateBeastFromCache(beastsRequested, type, infoDiv) {
-    if (beastCache.length >= beastsRequested) {
-        return beastCache[beastsRequested - 1];
-    } else {
-        var anAwaiter = defer();
-        var newBeast = new FDoll("dolls/beast/beast.js", type, anAwaiter, null, infoDiv);
-        var wait = await anAwaiter;
-        beastCache.push(newBeast);
-        return newBeast;
-    }
-}
-
-
-function getPlayerPartDrawInfo(partName) {
-    throw error; // todo: write this
-}
-
-const propDrawRules = {
-    pillory: {},
-    wall: {},
-    stable: {}
-}
-
-document.addEventListener("animationstart", insertListener, false); // standard + firefox
-document.addEventListener("MSAnimationStart", insertListener, false); // IE
-document.addEventListener("webkitAnimationStart", insertListener, false); // Chrome + Safari
\ No newline at end of file
diff --git a/img/dolls/dollUpdater.js b/img/dolls/dollUpdater.js
deleted file mode 100644
index ff8a31d91f7ee4db0544fefc84fd558e63489959..0000000000000000000000000000000000000000
--- a/img/dolls/dollUpdater.js
+++ /dev/null
@@ -1,443 +0,0 @@
-function cleanSlate() {
-    orificeDibs = {
-        rearslot: null,
-        underslot: null,
-        faceslot: null,
-        overslot: null,
-    }
-}
-
-async function updateEnemyState(enemyDoll) {
-    await setEnemyStance(enemyDoll);
-}
-async function updatePlayerDraw() {
-    var player = globals.player;
-    await playerDoll.setVariant(globals.position);
-
-    var bottomAccessory = await playerDoll.getAccessory("bottom");
-    var topAccessory = await playerDoll.getAccessory("top");
-    var headAccessory = await topAccessory.getAccessory("head");
-    var faceAccessory = await headAccessory.getAccessory("face");
-
-    await updatePlayerSkin(playerDoll);
-    await updatePlayerGenitals(bottomAccessory);
-    await updatePlayerHair(headAccessory);
-    await updatePlayerHead(headAccessory);
-    await updatePlayerFace(faceAccessory);
-    await updatePlayerArms(playerDoll);
-    await updatePlayerTorso(topAccessory);
-    await updatePlayerClothes(bottomAccessory, topAccessory);
-    playerDoll.computeGlobals();
-    //TODO: other body part colorings
-}
-
-async function updateEnemyDraw(doll) {
-    if (doll.NPCInfo.type != 0) {
-        updateBeastEnemyDraw(doll);
-    } else {
-        updateHumanEnemyDraw(doll);
-    }
-
-}
-
-async function updatePlayerTorso(top) {
-    var breasts = top.getAccessory("breasts");
-    var breastVariant = getNameFromValue("playerbreastsize", player.breastsize);
-    breasts.setVariant(breastVariant);
-}
-
-async function updatePlayerClothes(bottom, top) {
-    var worn = globals.worn;
-    var underLower = bottom.getAccessory("under_lower");
-    var lower = bottom.getAccessory("lower");
-    await underLower.setVariant(worn.under_lower.variable);
-    await underLower.setVariant(worn.under_lower.state);
-    underLower.setFilter(worn.under_lower.currentcolor);
-    await lower.setVariant(worn.lower.variable);
-    await lower.setVariant(worn.lower.state);
-    lower.setFilter(worn.lower.currentcolor);
-}
-
-async function updateBeastEnemyDraw(doll) {
-    var NPCInfo = doll.NPCInfo;
-    if (NPCInfo.penis != "none") {
-        await scaleEnemy(doll);
-        doll.computeGlobals();
-        //we presume magnets are defined on any player-parts of interest to which enemies should gravitate toward
-        doll.dragBy("penis_base", playerDoll, NPCInfo.penis);
-    }
-}
-
-async function updateHumanEnemyDraw(doll) {
-    var NPCInfo = doll.NPCInfo;
-    //await setEnemyStance(doll);
-    await setEnemyPhysique(doll);
-    await setEnemyCosmetics(doll);
-    await scaleEnemy(doll);
-    //doll.getAccessory("arms").setFilter("opacity(0.5)");
-
-    if (NPCInfo.penis != "none") {
-        if (doll.NPCInfo.penis.indexOf("mouth") == 0 && globals.position == "doggy") {
-            doll.getCurrentVariant().setPhase(4);
-        } else {
-            doll.getCurrentVariant().setPhase(0);
-        }
-        doll.computeGlobals();
-        //we presume magnets are defined on any player-parts of interest to which enemies should gravitate toward
-
-        doll.dragBy("penis_aligned", playerDoll, NPCInfo.penis);
-        //move enemy arms down to reach tiny player if 
-        //NPC is in upright position. 
-        if (doll.NPCInfo.currentstance == "upright"
-            && doll.NPCInfo.currentapproachstate == "active"
-            && orificeDibs.rearslot == doll) {
-            var arms = doll.getAccessory("forearm");
-            arms.accessoryDragBy("hands", playerDoll, "waist");
-        }
-        if (doll.NPCInfo.currentstance == "laying"
-            && doll.NPCInfo.currentapproachstate == "active"
-            && orificeDibs.underslot == doll) {
-            var arms = doll.getAccessory("arms");
-            arms.accessoryDragBy("hands", playerDoll, "ribs");
-        }
-    }
-}
-
-async function updatePlayerSkin(bodyAccessory) {
-    var skin = globals.skinColor.current;
-    bodyAccessory.setFilter(skin.body);
-}
-async function updatePlayerGenitals(bottomAccessory) {
-    var player = globals.player;
-    var penisVariant = player.penisExists == true ? "small" : "none";
-    bottomAccessory.getAccessory("penis").setVariant(penisVariant);
-}
-
-async function updatePlayerHead(headAccessory) {
-    var throatAcc = headAccessory.getAccessory("throat");
-    if (orificeDibs.faceslot != null
-        && orificeDibs.faceslot.NPCInfo.penis == "mouth") {
-        var penetrator = orificeDibs.faceslot.NPCInfo.penissize;
-        var penisDelta = penetrator - globals.player.bodysize;
-        var throatMode = penisDelta > 2 ? "huge_load" : "regular_load";
-        await throatAcc.setVariant("oral");
-        await throatAcc.setVariant(throatMode);
-    } else {
-        await throatAcc.setVariant("idle");
-    }
-}
-
-async function updatePlayerHair(headAccessory) {
-    var hairAccessory = headAccessory.getAccessory("hair");
-    await hairAccessory.setVariant(globals.hairlengthstage);
-    await hairAccessory.setFilter(globals.haircolorfilter);
-    var lashAccessory = headAccessory.getAccessory("lashes");
-    await lashAccessory.setFilter(globals.haircolorfilter);
-
-}
-async function updatePlayerFace(faceAccessory) {
-    var arousalRatio = globals.arousal / globals.arousalmax;
-    var painPercent = globals.pain;
-    var traumaRatio = globals.trauma / globals.traumamax;
-    var arousalPercentClamped = Math.max((arousalRatio - 0.41) * 10, 0);
-    var painPercentClamped = Math.max(0, (painPercent - 41) / 10);
-    var minBlush = parseInt(Math.max(arousalPercentClamped, painPercentClamped - 2))
-    var blushAccessory = faceAccessory.getAccessory("blush");
-    var eyesAccessory = faceAccessory.getAccessory("eyes");
-    var tearsAccessory = faceAccessory.getAccessory("tears");
-
-    await blushAccessory.setVariant("blush" + parseInt(arousalRatio * 5));
-    await tearsAccessory.setVariant("tears" + parseInt(painPercent / 20));
-
-    var scleraVariant = painPercent > 90 ? "bloodshot" : "normal";
-    await eyesAccessory.getAccessory("sclera").setVariant(scleraVariant);
-
-    var pupilVariant = traumaRatio > 0.9 ? "empty" : "normal";
-    await eyesAccessory.getAccessory("eyeballs").setVariant(pupilVariant);
-}
-
-async function updatePlayerArms(playerDoll) {
-    var arm_right = playerDoll.getAccessory("arm_right");
-    var arm_left = playerDoll.getAccessory("arm_left");
-    if (globals.rightarm == "grappled")
-        await arm_right.setVariant("bound");
-    else if (globals.rightarm == "penis")
-        await arm_right.setVariant("handjob");
-    else
-        await arm_right.setVariant("normal");
-
-    if (globals.leftarm == "grappled")
-        await arm_left.setVariant("bound");
-    else if (globals.leftarm == "penis")
-        await arm_left.setVariant("handjob");
-    else
-        await arm_left.setVariant("normal");
-}
-
-async function setEnemyPhysique(doll) {
-    var NPCInfo = doll.NPCInfo;
-    var penisSize = null;
-    var breastSize = null;
-
-    var bodyVariant = getNameFromValue("npcbodysize", NPCInfo.bodysize);
-    await doll.setVariant(bodyVariant);
-
-    //TODO: increase number of supported penis sizes in Twine codebase
-    //Currently code only generates penises of size 1, 3, and 4.
-    //but the system makes it easy to visually scale penises 
-    //so it would be nice to have at least five 
-    //1 = tiny
-    //2 = small
-    //3 = medium
-    //4 = large
-    //5 = huge
-    var penisSize = getNameFromValue("npcpenissize", NPCInfo.penissize);
-   
-    var penis = await doll.getAccessory("penis");
-    await penis.setVariant(penisSize);
-    var breastSize = getNameFromValue("npcbreastsize", NPCInfo.breastsize);
-    var breasts = await doll.getAccessory("chest");
-    breasts.setVariant(breastSize);
-}
-
-async function setEnemyCosmetics(doll) {
-    var NPCInfo = doll.NPCInfo;
-    var hairAccessory = doll.getAccessory("hair");
-    var hairRear = hairAccessory.getAccessory("back");
-    var hairFront = hairAccessory.getAccessory("front");
-    await hairRear.setVariant(NPCInfo.hairstylerear);
-    await hairFront.setVariant(NPCInfo.hairstylefront);
-    var hairLengthRear = getNameFromValue("npchairlengthrear", NPCInfo.hairlengthrear);
-    hairLengthRear = hairLengthRear == null? "buzz" : hairLengthRear;
-    await hairAccessory.setVariant(hairLengthRear);
-
-    doll.getAccessory("penis").setFilter(NPCInfo.peniscolor);
-}
-
-
-
-//TODO: make twine code explicitly store that a penis is a strap-on in the 
-//NPC variables. I'm not at all sure how the system does it currently
-function isStrapon(NPCInfo) {
-
-}
-
-//TODO: include a penis color attribute in the NPCList
-//for strap-ons and non-caucasian rapists (diversity is important!).
-function setPenisColor(NPCInfo) {
-
-}
-
-async function setEnemyStance(doll) {
-    var NPCInfo = doll.NPCInfo;
-    var penisTarget = getTargetPartName(NPCInfo.penis);
-    var anusTarget = getTargetPartName(NPCInfo.anus);
-    var vagTarget = getTargetPartName(NPCInfo.vagina);
-    if (penisTarget != null) {
-        var stance = reserveStanceIfAvailable(doll, penisTarget);
-        await doll.setVariant(stance.variant);
-        NPCInfo.currentstance = stance.variant;
-    }
-    if (vagTarget != null) {
-        var stance = reserveStanceIfAvailable(doll, penisTarget);
-        await doll.setVariant(stance.variant);
-        NPCInfo.currentstance = stance.variant;
-        //update the stance of whichever NPC we had to steal the slot from
-        if (stance.stealFrom != null) setEnemyStance(stance.stealFrom);
-    }
-    if (anusTarget != null) {
-        var stance = reserveStanceIfAvailable(doll, anusTarget);
-        await doll.setVariant(stance.variant);
-        NPCInfo.currentstance = stance.variant;
-        //update the stance of whichever NPC we had to steal the slot from
-        if (stance.stealFrom != null) setEnemyStance(stance.stealFrom);
-    }
-    var state = getState(doll);
-    await doll.setVariant(state);
-    NPCInfo.currentapproachstate = state;
-}
-
-
-/**
- * determines if the NPC state is one of "imminent", "entrance", "penetrated"
- * @param {*} doll 
- */
-function getState(doll) {
-    if (doll.NPCInfo.penis.indexOf("imminent") != -1) return "imminent";
-    if (doll.NPCInfo.penis.indexOf("entrance") != -1) return "entrance";
-    switch (doll.NPCInfo.penis) {
-        case "anus":
-        case "mouth":
-        case "vagina": return "active"
-        default: return doll.NPCInfo.penis;
-    }
-}
-
-
-/**
- * scales the NPC enemy to the appropriate body size  
- * relative to the player character 
- * (so the player character is always rendered at the same size, 
- * and the NPC is scaled up or down in proportion)
- *
- */
-async function scaleEnemy(doll) {
-    doll.computeGlobals();
-    var playerInfo = SugarCube.State.variables.player;
-    var globals = SugarCube.State.variables;
-    doll.scale.x = doll.default_params.scale.x;
-    doll.scale.y = doll.default_params.scale.y;
-
-    playerInfo.bodysize = parseInt(playerInfo.bodysize);
-    switch (playerInfo.bodysize) {
-        case undefined: var playerSize = 1; break;
-        case 1: var playerSize = 0.77; break;
-        case 2: var playerSize = 0.88; break;
-        case 3: var playerSize = 1.0; break;
-        case 4: var playerSize = 1.11; break;
-    }
-    switch (doll.NPCInfo.bodysize) {
-        case undefined: var playerSize = 1; break;
-        case 1: var npcSize = 0.775; break;
-        case 2: var npcSize = 0.88; break;
-        case 3: var npcSize = 1.0; break;
-        case 4: var npcSize = 1.11; break;
-        case 5: var npcSize = 1.22; break;
-        case 6: var npcSize = 1.33; break;
-        case 7: var npcSize = 1.5; break;
-        default: var npcSize = 1;
-    }
-
-    doll.scale.x /= playerSize;
-    doll.scale.y /= playerSize;
-
-    if (doll.NPCInfo.penis != "none") {
-        if((doll.NPCInfo.penis.indexOf("mouth") == 0 && globals.position == "doggy"))
-            doll.scale.x = Math.abs(doll.scale.x) * -1;
-        //also scale the legs along the y axis to make it look like 
-        //large characters are spreading their legs to lower themselves
-        var legs = doll.getAccessory("legs");
-        if (legs != null) {
-            legs.scale.y = legs.default_params.scale.y;
-            if (doll.NPCInfo.currentapproachstate == "active"
-                || doll.NPCInfo.currentapproachstate == "entrance"
-                && globals.position == "doggy"
-                && dibMap.underslot != doll) {
-                var legScalar = playerSize / npcSize;
-                legs.scale.y *= ((2 * legScalar) + 1.0) / 3;
-            }
-
-            //cross over the player's legs if the stance is far enough  
-            if (legs.scale.y < 0.85) {
-                legs.translate.depth = 7;
-            } else {
-                legs.translate.depth = 0;
-            }
-        }
-    }
-}
-
-
-/**
- * Returns the appropriate stance for this doll to take 
- * given its purported target
- * @param {*} doll 
- * @param {*} target 
- */
-function reserveStanceIfAvailable(doll, target) {
-    var globals = SugarCube.State.variables;
-    var targMap = dibMap[globals.position][target];
-    var hasPriority = (target == "penis" && position == "missionary")
-    doll.NPCInfo.hasPriority = hasPriority;
-    for (var k of Object.keys(targMap)) {
-        var check = targMap[k];
-        if (orificeDibs[check] == null || orificeDibs[check] == doll) {
-            orificeDibs[check] = doll;
-            return { variant: k, stoleFrom: false };
-        } else if (hasPriority) {
-            var stealFrom = orificeDibs[check];
-            if (!stealFrom.NPCInfo.hasPriority) {
-                orificeDibs[check] = doll;
-                return { variant: k, stoleFrom: stealFrom };
-            }
-        }
-    }
-    return null;
-}
-
-/**strips things like "imminent" and "entrance" from a target name 
- * for easy slot check references
- */
-function getTargetPartName(partName) {
-    if (typeof partName == "string") {
-        if (partName.indexOf("anus") == 0) return "anus";
-        if (partName.indexOf("mouth") == 0) return "mouth";
-        if (partName.indexOf("vagina") == 0) return "vagina";
-        if (partName.indexOf("penis") == 0) return "penis";
-    }
-    return null;
-}
-
-
-
-/**
- * maps available slots on player for NPCs against orificeDibs. 
- * The basic idea is that the NPC selects the orifice or appendage they are trying 
- * to use from either the doggy or missionary position 
- * (as defined by the player stance). 
- * They then traverse each of the keys defined on that orifice in the order
- * they are defined. 
- * Each key corresponds to a variant-name in the doll. The value of each key 
- * corresponds to a key in orificeDibs. If the value of the key in orificeDibs is true,
- * then that means the Doll can adopt the stance specified by the key in the dibMap. 
- * 
- * For example:  
- *  Let's say the player is in the doggy position and the NPC wants to penetrate the player's vagina.
- *  So it checks dibMap.doggy.vagina, which tells it 
- *  "if you want to be in the 'upright' position, you need to check that orificeDibs.rearslot is available". 
- *  The NPC checks orificeDibs.rearslot and finds that it is no longer available. 
- *  So it moves on to the next option. Which states
- *  "if you want to be in the 'laying" position, you need to check that orificeDibs.underslot is available". 
- *  The NPC checkes orificeDibs.underslot and find that it is available. 
- *  So it adopts the 'laying' position, and sets the orificeDibs.underslot value to a reference to itself to indicate 
- *  to any other NPCs that the spot is reserved by it, and that any NPCs who wish to cut in line must talk to it directly/ 
- * 
- */
-var dibMap = {
-    doggy: {
-        vagina: {
-            upright: "rearslot",
-            laying: "underslot"
-        },
-        anus: {
-            upright: "rearslot"
-        },
-        penis: {
-            laying: "underslot"
-        },
-        mouth: {
-            upright: "faceslot"
-        }
-    },
-    missionary: {
-        penis: {
-            hunched: "overslot"
-        },
-        vagina: {
-            hunched: "overslot",
-            crouched: "rearslot"
-        },
-        anus: {
-            laying: "underslot"
-        },
-        mouth: {
-            upright: "faceslot"
-        }
-    }
-};
-var orificeDibs = {
-    rearslot: null,
-    underslot: null,
-    faceslot: null,
-    overslot: null,
-}
diff --git a/img/dolls/dolls/beast/beast.js b/img/dolls/dolls/beast/beast.js
deleted file mode 100644
index ab6a9715cddbccfa1d65aeaba2563280730dbbcd..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/beast/beast.js
+++ /dev/null
@@ -1,13 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-    horse: {
-        import: {
-            filepath : "horse/horse.js",
-            variable : "horse"
-        }
-    }
-}); //IT IS VERY IMPORTANT THAT THE LAST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-
-
-
-
diff --git a/img/dolls/dolls/beast/horse/horse.js b/img/dolls/dolls/beast/horse/horse.js
deleted file mode 100644
index 2ff21c155f278d0febb506375c015ead1fce6afd..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/beast/horse/horse.js
+++ /dev/null
@@ -1,56 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-horse : {
-    translate: {x:0, y:0, depth: 20},
-    frames: 7,
-    selected_variant : "active", 
-    variants : {
-        active : {
-            import : {variable: "horse_penetrated"}
-        }
-    }
-},
-horse_penetrated : 
-{
-    spritesheet: "penetrated.png", //the filename of the spriteesheet for this FDoll/accessory
-    width : 1624, //width of the spritesheet, in pixels.
-    frames : 7, //number of frames in the spritesheet.
-    magnets: { //names and locations of spots we can attach accessories to
-         penis_base : {x: 152, y: 108, depth: -20}, 
-         penis_tip : {x: 130, y: 114},
-         front_hoof : {x: 39, y: 54},
-         cutoff : {x:128, y: 0, depth: -10},
-         saddle: {x: 170, y:0}
-    },
-    accessories: {
-        penis: {
-            width : 1624,
-            frames : 7, 
-            spritesheet: "penetrated_penis.png",
-            attach: "penis_base",
-            to: "penis_base",
-            magnets : {
-                penis_base : {x: 152, y: 108}, 
-            }
-        }
-        /*head : {
-            attach: "hips",
-            to: "cutoff",
-            variants : {
-                    centaur: {
-                        specifier: "../human/human.js",
-                        scale: {x:1.5, y: 1.2},
-                        data: "human"
-                    },
-                    normal: {}
-                }
-            
-        }, 
-        rider : {
-            attach: "hips",
-            to: "saddle",            
-            specifier: "../human/human.js",
-            data: "human"
-        }*/
-    }
-}
-});
\ No newline at end of file
diff --git a/img/dolls/dolls/beast/horse/penetrated.png b/img/dolls/dolls/beast/horse/penetrated.png
deleted file mode 100644
index 9ef7ddde9a747ce796a2c332b16428f8b0b9b2a4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/beast/horse/penetrated.png and /dev/null differ
diff --git a/img/dolls/dolls/beast/horse/penetrated_penis.png b/img/dolls/dolls/beast/horse/penetrated_penis.png
deleted file mode 100644
index 9b8f0e585bf7d8118da375a86e38433bf38b4c43..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/beast/horse/penetrated_penis.png and /dev/null differ
diff --git a/img/dolls/dolls/beast/pen_1.png b/img/dolls/dolls/beast/pen_1.png
deleted file mode 100644
index 19140a8044c222ecf5ca46166fe1e08fd6f13985..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/beast/pen_1.png and /dev/null differ
diff --git a/img/dolls/dolls/beast/pen_2.png b/img/dolls/dolls/beast/pen_2.png
deleted file mode 100644
index a809b78f8755f9b67e72909f0e5773b04ed1b739..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/beast/pen_2.png and /dev/null differ
diff --git a/img/dolls/dolls/beast/pen_3.png b/img/dolls/dolls/beast/pen_3.png
deleted file mode 100644
index decc30f6c99cdd3af4e6eb1eba85faf7479508b4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/beast/pen_3.png and /dev/null differ
diff --git a/img/dolls/dolls/beast/pen_4.png b/img/dolls/dolls/beast/pen_4.png
deleted file mode 100644
index 0c1ca50f29b0bac9b2c8fa60aacd327caf31ff93..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/beast/pen_4.png and /dev/null differ
diff --git a/img/dolls/dolls/human/arms/arm_upright.png b/img/dolls/dolls/human/arms/arm_upright.png
deleted file mode 100644
index f64c2f35eb2a19ad2ab237ab8f12fa8ee3dcdb27..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/arms/arm_upright.png and /dev/null differ
diff --git a/img/dolls/dolls/human/arms/armjerk.png b/img/dolls/dolls/human/arms/armjerk.png
deleted file mode 100644
index a6c4ce9992729b5451256789397e9108e4e2da7b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/arms/armjerk.png and /dev/null differ
diff --git a/img/dolls/dolls/human/arms/forearm_upright.png b/img/dolls/dolls/human/arms/forearm_upright.png
deleted file mode 100644
index 968d11cd1c8b3d0ae2cd3639792e13aa91d5a2ae..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/arms/forearm_upright.png and /dev/null differ
diff --git a/img/dolls/dolls/human/arms/imminent_h.png b/img/dolls/dolls/human/arms/imminent_h.png
deleted file mode 100644
index cb17a5f4c4cb976074f8f15de40e311b2d1801ce..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/arms/imminent_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/arms/laying_h.png b/img/dolls/dolls/human/arms/laying_h.png
deleted file mode 100644
index 790ed6cced1ba155ff0abb9bd773bd0171f96f83..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/arms/laying_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/arms/upright.png b/img/dolls/dolls/human/arms/upright.png
deleted file mode 100644
index 57b4116e57da89926124774c46bfbbfc817d3a48..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/arms/upright.png and /dev/null differ
diff --git a/img/dolls/dolls/human/arms/upright_h.gif b/img/dolls/dolls/human/arms/upright_h.gif
deleted file mode 100644
index 46921d085ccb181eed512f1f23a8a3ac80ddd0e5..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/arms/upright_h.gif and /dev/null differ
diff --git a/img/dolls/dolls/human/arms/upright_h.png b/img/dolls/dolls/human/arms/upright_h.png
deleted file mode 100644
index e7c65f5fb62a3ff12530e47d2257c8ba88fb538d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/arms/upright_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/breasts.js b/img/dolls/dolls/human/breasts/breasts.js
deleted file mode 100644
index 511ed6c7e81f50ea3c6505b6cc9475d60568f831..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/human/breasts/breasts.js
+++ /dev/null
@@ -1,75 +0,0 @@
-DoLHouse.add({
-	breast_variants: {
-		frames: 8,
-		inherit_sequence_info: true,
-		variants: {
-			upright: {
-				translate: { x: 0, y: 0, depth: 8 },
-				import: {
-					filepath: "upright/breasts_upright.js",
-					variable: "breasts_upright"
-				}
-			},
-			laying: {
-				width: 648,
-				frames: 4,
-				translate: { x: 0, y: 0, depth: 7 },
-				filter: "drop-shadow(0px -12px 8px #0006)",
-				magnets: {
-					base: { x: 62, y: 90 }
-				},
-				selected_variant: "flat",
-				variants: {
-					flat: {},
-					budding: {
-						inherit_filter: true,
-						spritesheet: "laying/budding.png"
-					},
-					tiny: { spritesheet: "laying/tiny.png" },
-					small: { spritesheet: "laying/small.png" },
-					pert: {
-						inherit_filter: true,
-						scale: { x: 1.1, y: 1.1 },
-						spritesheet: "laying/small.png"
-					},
-					modest: {
-						inherit_filter: true,
-						spritesheet: "laying/medium.png"
-					},
-					full: {
-						inherit_filter: true,
-						scale: { x: 1.1, y: 1.1 },
-						spritesheet: "laying/medium.png"
-					},
-					large: {
-						inherit_filter: true,
-						spritesheet: "laying/large.png"
-					},
-					ample: {
-						inherit_filter: true,
-						scale: { x: 1.1, y: 1.1 },
-						spritesheet: "laying/large.png"
-					},
-					massive: {
-						inherit_filter: true,
-						spritesheet: "laying/massive.png"
-					},
-					huge: {
-						inherit_filter: true,
-						scale: { x: 1.1, y: 1.1 },
-						spritesheet: "laying/massive.png"
-					},
-					gigantic: {
-						inherit_filter: true,
-						spritesheet: "laying/huge.png"
-					},
-					enormous: {
-						inherit_filter: true,
-						scale: { x: 1.1, y: 1.1 },
-						spritesheet: "laying/huge.png"
-					},
-				}
-			}
-		}
-	}
-});
diff --git a/img/dolls/dolls/human/breasts/laying/budding.png b/img/dolls/dolls/human/breasts/laying/budding.png
deleted file mode 100644
index 42378fa22f8f8fc1584030f4adb4febc4540f98b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/laying/budding.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/laying/huge.png b/img/dolls/dolls/human/breasts/laying/huge.png
deleted file mode 100644
index 72ffc8dbb5757784a16635156032b2f4f202179f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/laying/huge.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/laying/large.png b/img/dolls/dolls/human/breasts/laying/large.png
deleted file mode 100644
index a2854422ffdf415f775da951023734738005d86c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/laying/large.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/laying/massive.png b/img/dolls/dolls/human/breasts/laying/massive.png
deleted file mode 100644
index 692c7217758a14e294191735aebafbea82f55b71..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/laying/massive.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/laying/medium.png b/img/dolls/dolls/human/breasts/laying/medium.png
deleted file mode 100644
index b9f0fc5a5778c347a3ad22220f136652c3c4a019..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/laying/medium.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/laying/small.png b/img/dolls/dolls/human/breasts/laying/small.png
deleted file mode 100644
index 0539048679debcd0cc0a6b264ab89681f4854f94..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/laying/small.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/laying/tiny.png b/img/dolls/dolls/human/breasts/laying/tiny.png
deleted file mode 100644
index a64c394aad8a667e9c6614361a59b3cb926f2cba..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/laying/tiny.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/ample.png b/img/dolls/dolls/human/breasts/upright/ample.png
deleted file mode 100644
index 9aba8f80e7cd3ee665c03128d3ec155d7e907a42..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/ample.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/ample_h.gif b/img/dolls/dolls/human/breasts/upright/ample_h.gif
deleted file mode 100644
index a82523dec7a2582b18baf14807262e4bcb85058f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/ample_h.gif and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/ample_h.png b/img/dolls/dolls/human/breasts/upright/ample_h.png
deleted file mode 100644
index 4507238fe7f4bbb8177b6c679995c508e12b07af..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/ample_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/breasts_upright.js b/img/dolls/dolls/human/breasts/upright/breasts_upright.js
deleted file mode 100644
index e2b05c6395c32a2affc3f805b483ca774abebe1a..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/human/breasts/upright/breasts_upright.js
+++ /dev/null
@@ -1,101 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-    breasts_upright: {
-        inherit_sequence_info: true, /*signifies that this accessory should adopt whatever sequence is specified on the most immediate ancestor*/
-        sequences: {
-            imminent: [7,7,7]
-        },
-        variants: {
-            flat: {
-                /*lol, why woud there be a spritesheet for this?*/
-            },
-            budding: {
-                inherit_sequence_info: true,
-                width: 552,
-                scale: { x: 1, y: 1 },
-                magnets: {base: { x: 45, y: 62 }},
-                spritesheet: "budding_h.png"
-            },
-            tiny: {
-                inherit_sequence_info: true,
-                width: 552,
-                scale: { x: 1.2, y: 1.2 },
-                magnets: { base: { x: 45, y: 62 } },
-                spritesheet: "budding_h.png"
-            },
-            small: {
-                inherit_sequence_info: true,
-                width: 784,
-                scale: { x: 1, y: 1 },
-                magnets: { base: { x: 75, y: 75 } },
-                spritesheet: "small_h.png"
-            },
-            pert: {
-                inherit_sequence_info: true,
-                width: 784,
-                scale: { x: 1.1, y: 1.1 },
-                magnets: { base: { x: 75, y: 73 } },
-                spritesheet: "small_h.png"
-            },
-            modest: {
-                inherit_sequence_info: true,
-                width: 864,
-                scale: { x: 0.9, y: 0.9 },
-                magnets: { base: { x: 87, y: 78 } },
-                spritesheet: "full_h.png"
-            },
-            full: {
-                inherit_sequence_info: true,
-                width: 864,
-                scale: { x: 1, y: 1 },
-                magnets: { base: { x: 87, y: 68 } },
-                spritesheet: "full_h.png"
-            }
-            ,
-            large: {
-                inherit_sequence_info: true,
-                width: 864,
-                scale: { x: 1.1, y: 1.1 },
-                magnets: { base: { x: 87, y: 68 } },
-                spritesheet: "full_h.png"
-            },
-            ample: {
-                inherit_sequence_info: true,
-                width: 1282,
-                scale: { x: 0.9, y: 0.9 },
-                magnets: { base: { x: 101, y: 70 } },
-                spritesheet: "ample_h.png"
-            },
-            massive: {
-                inherit_sequence_info: true,
-                width: 1282,
-                scale: { x: 1.1, y: 1.1 },
-                magnets: { base: { x: 101, y: 65 } },
-                spritesheet: "ample_h.png"
-            }
-            ,
-            huge: {
-                inherit_sequence_info: true,
-                width: 1488,
-                scale: { x: 0.9, y: 0.9 },
-                magnets: { base: { x: 129, y: 85 } },
-                spritesheet: "huge_h.png"
-            },
-            gigantic: {
-                inherit_sequence_info: true,
-                width: 1488,
-                scale: { x: 1, y: 1 },
-                magnets: { base: { x: 129, y: 76 } },
-                spritesheet: "huge_h.png"
-            }
-            ,
-            enormous: {
-                inherit_sequence_info: true,
-                width: 1488,
-                scale: { x: 1.2, y: 1.2 },
-                magnets: { base: { x: 129, y: 72 } },
-                spritesheet: "huge_h.png"
-            }
-        }
-    }
-}); //IT IS VERY IMPORTANT THAT THE LAST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
diff --git a/img/dolls/dolls/human/breasts/upright/budding.png b/img/dolls/dolls/human/breasts/upright/budding.png
deleted file mode 100644
index eaa59c4e16b23cf610b46a443c7c153113aa270e..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/budding.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/budding_h.gif b/img/dolls/dolls/human/breasts/upright/budding_h.gif
deleted file mode 100644
index 1afb50043269e98d140f3b73208801b99b60364e..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/budding_h.gif and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/budding_h.png b/img/dolls/dolls/human/breasts/upright/budding_h.png
deleted file mode 100644
index c5de9dff13ac624c22fc4963654e6a19c3c79481..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/budding_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/full.png b/img/dolls/dolls/human/breasts/upright/full.png
deleted file mode 100644
index ab4496d80de449f2a8c2517f256f815148ce4053..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/full.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/full_h.gif b/img/dolls/dolls/human/breasts/upright/full_h.gif
deleted file mode 100644
index bedf5f1a54bde61e3642e6d379cb8db78b77e383..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/full_h.gif and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/full_h.png b/img/dolls/dolls/human/breasts/upright/full_h.png
deleted file mode 100644
index ffd1304f4038b92bd9f4a031b846d004d29a3f71..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/full_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/huge.png b/img/dolls/dolls/human/breasts/upright/huge.png
deleted file mode 100644
index de2298278ad90912d3924878a27775f517135d36..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/huge.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/huge_h.gif b/img/dolls/dolls/human/breasts/upright/huge_h.gif
deleted file mode 100644
index e5eea47c37ac8ff445c83252754f7eb7311311b3..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/huge_h.gif and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/huge_h.png b/img/dolls/dolls/human/breasts/upright/huge_h.png
deleted file mode 100644
index fe4e27d21e4ff48df107a79e1dcdf546e300f065..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/huge_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/small.png b/img/dolls/dolls/human/breasts/upright/small.png
deleted file mode 100644
index 854441d01b585346827ebe6e6eae5a0c5a5fdbaa..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/small.png and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/small_h.gif b/img/dolls/dolls/human/breasts/upright/small_h.gif
deleted file mode 100644
index 1db6f2ed1d4fb7d0affd84f1c4c9facabe0c1634..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/small_h.gif and /dev/null differ
diff --git a/img/dolls/dolls/human/breasts/upright/small_h.png b/img/dolls/dolls/human/breasts/upright/small_h.png
deleted file mode 100644
index 8c0c30fdb9bd1c6ab1194ec44c9e6df5466da090..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/breasts/upright/small_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/laying/long.png b/img/dolls/dolls/human/head/hair/back/laying/long.png
deleted file mode 100644
index b679761e2cf93d28fa0bd796193f231f387f4fd7..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/laying/long.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/laying/medium.png b/img/dolls/dolls/human/head/hair/back/laying/medium.png
deleted file mode 100644
index 57313961bcdfa97061553d119590e06b5548109b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/laying/medium.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/laying/repunzotic.png b/img/dolls/dolls/human/head/hair/back/laying/repunzotic.png
deleted file mode 100644
index 5291079f7a099a896eb4d3e086c6295590482624..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/laying/repunzotic.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/laying/short.png b/img/dolls/dolls/human/head/hair/back/laying/short.png
deleted file mode 100644
index 249d588217eccf21a1f4eb51ee765c98064051bb..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/laying/short.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/upright/bowl.png b/img/dolls/dolls/human/head/hair/back/upright/bowl.png
deleted file mode 100644
index 64630ff5f89817757c175658251aefa79560bb32..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/upright/bowl.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/upright/bowl_h.png b/img/dolls/dolls/human/head/hair/back/upright/bowl_h.png
deleted file mode 100644
index 65a25fb3dd5be317c3df5fbe3b299fb4f28b5dee..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/upright/bowl_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/upright/braid.js b/img/dolls/dolls/human/head/hair/back/upright/braid.js
deleted file mode 100644
index 80a9be6d5034142434877531b49da439c2c47cf8..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/human/head/hair/back/upright/braid.js
+++ /dev/null
@@ -1,213 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-    braid: {
-        accessories: {
-            moreHair: {
-                inherit_sequence_info: true,
-                width: 1160,
-                attach: "base",
-                to: "end",
-                phase: 0,
-
-                variants: {
-                    buzz: {
-                        scale: { x: 1, y: 1.3 },
-                        import: {
-                            variable: "tips"
-                        }
-                    },
-                    short: {
-                        scale: { x: 1, y: 1.3 },
-                        import: { variable: "short" }
-                    },
-                    trimmed: {
-                        import: { variable: "trimmed" }
-                    },
-                    flowing: {
-                        scale: { x: 1, y: 1.3 },
-                        import: { variable: "flowing" }
-                    },
-                    long: {
-                        scale: { x: 1, y: 1.3 },
-                        import: { variable: "long" }
-                    },
-                    luxurious: {
-                        scale: { x: 1, y: 1.3 },
-                        import: { variable: "luxurious" }
-                    },
-                    uncompromising: {
-                        scale: { x: 1, y: 1.3 },
-                        import: { variable: "uncompromising" }
-                    },
-                    repunzotic: {
-                        scale: { x: 1, y: 1.3 },
-                        import: { variable: "repunzotic" }
-                    },
-                    endless: {
-                        scale: { x: 1, y: 1.3 },
-                        import: { variable: "endless" }
-                    }
-                }
-            }
-
-        }
-
-    },
-
-
-    endless: {
-        inherit_sequence_info: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820 - 808, y: 20 },
-            end: { x: 820 - 808, y: 70 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "repunzotic" }
-            }
-        }
-    },
-    repunzotic: {
-        inherit_sequence_info: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820 - 808, y: 20 },
-            end: { x: 820 - 808, y: 70 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "uncompromising" }
-            }
-        }
-    },
-    uncompromising: {
-        inherit_sequence_info: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820 - 808, y: 20 },
-            end: { x: 820 - 808, y: 70 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "luxurious" }
-            }
-        }
-    },
-    luxurious: {
-        inherit_sequence_info: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820 - 808, y: 20 },
-            end: { x: 820 - 808, y: 70 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "long" }
-            }
-        }
-    },
-    long: {
-        inherit_sequence_info: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820 - 808, y: 20 },
-            end: { x: 820 - 808, y: 70 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "flowing" }
-            }
-        }
-    },
-    flowing: {
-        inherit_sequence_info: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820 - 808, y: 20 },
-            end: { x: 820 - 808, y: 70 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "trimmed" }
-            }
-        }
-    },
-    trimmed: {
-        inherit_sequence_info: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820 - 808, y: 20 },
-            end: { x: 820 - 808, y: 70 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "short" }
-            }
-        }
-    },
-    short: {
-        inherit_sequence_info: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820 - 808, y: 20 },
-            end: { x: 820 - 808, y: 70 }
-        },
-        accessories: {
-            tips: {
-                attach: "base",
-                to: "end",
-                import: {
-                    variable: "tips"
-                }
-            }
-        }
-    },
-    tips: {
-        inherit_sequence_info: true,
-        phase: 1,
-        width: 1608,
-        spritesheet: "tipstart_h.png",
-        scale: { x: 0.5, y: 1 },
-        magnets: {
-            base: { x: 744 - 768, y: 5 },
-            end: { x: 820 - 768, y: 40 }
-        },
-        accessories: {
-            tipends: {
-                attach: "base",
-                to: "end",
-                phase: 1,
-                width: 1712,
-                spritesheet: "tipend_h.png",
-                scale: { x: 0.9, y: 1 },
-                magnets: {
-                    base: { x: 820 - 769, y: 0 }
-                }
-            }
-
-        }
-    }
-});  //IT IS VERY IMPORTANT THAT THE LAST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
\ No newline at end of file
diff --git a/img/dolls/dolls/human/head/hair/back/upright/extension.png b/img/dolls/dolls/human/head/hair/back/upright/extension.png
deleted file mode 100644
index 968b5d1762bfd3a8fc6daf7cbde0f293939960d8..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/upright/extension.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/upright/extension_h.png b/img/dolls/dolls/human/head/hair/back/upright/extension_h.png
deleted file mode 100644
index ebfb3455b39450c7ca0aa1e56b1223e5fa1144bb..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/upright/extension_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/upright/femme.js b/img/dolls/dolls/human/head/hair/back/upright/femme.js
deleted file mode 100644
index f172e8f109519cfbd552b25bc45f520d436ffd2e..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/human/head/hair/back/upright/femme.js
+++ /dev/null
@@ -1,227 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-    femme: {
-        accessories: {
-            moreHair: {
-                inherit_sequence_info: true,
-                inherit_filter: true,
-                attach: "base",
-                to: "end",
-                width: 1520,                
-                selected_variant: "trimmed",
-                variants: {
-                    buzz: {
-                        scale: { x: 1, y: 3 },
-                        import: {
-                            variable: "tips"
-                        }
-                    },
-                    short: {
-                        scale: { x: 1, y: 3 },
-                        import: { variable: "short" }
-                    },
-                    trimmed: {
-                        scale: { x: 1, y: 3 },
-                        import: { variable: "trimmed" }
-                    },
-                    flowing: {
-                        scale: { x: 1, y: 3 },
-                        import: { variable: "flowing" }
-                    },
-                    long: {
-                        scale: { x: 1, y: 3 },
-                        import: { variable: "long" }
-                    },
-                    luxurious: {
-                        scale: { x: 1, y: 3 },
-                        import: { variable: "luxurious" }
-                    },
-                    uncompromising: {
-                        scale: { x: 1, y: 3 },
-                        import: { variable: "uncompromising" }
-                    },
-                    repunzotic: {
-                        scale: { x: 1, y: 3 },
-                        import: { variable: "repunzotic" }
-                    },
-                    endless: {
-                        scale: { x: 1, y: 3 },
-                        import: { variable: "endless" }
-                    }
-                }
-            }
-        }
-    },
-
-
-    endless: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "extension_h.png",
-        magnets: {
-            base: { x: 95, y: 35 },
-            end: { x: 95, y: 55 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "repunzotic" }
-            }
-        }
-    },
-    repunzotic: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "extension_h.png",
-        magnets: {
-            base: { x: 95, y: 35 },
-            end: { x: 95, y: 55 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "uncompromising" }
-            }
-        }
-    },
-    uncompromising: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "extension_h.png",
-        magnets: {
-            base: { x: 95, y: 35 },
-            end: { x: 95, y: 55 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "luxurious" }
-            }
-        }
-    },
-    luxurious: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "extension_h.png",
-        magnets: {
-            base: { x: 95, y: 35 },
-            end: { x: 95, y: 55 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "long" }
-            }
-        }
-    },
-    long: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "extension_h.png",
-        magnets: {
-            base: { x: 95, y: 35 },
-            end: { x: 95, y: 55 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "flowing" }
-            }
-        }
-    },
-    flowing: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "extension_h.png",
-        magnets: {
-            base: { x: 95, y: 35 },
-            end: { x: 95, y: 55 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "trimmed" }
-            }
-        }
-    },
-    trimmed: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "extension_h.png",
-        magnets: {
-            base: { x: 95, y: 35 },
-            end: { x: 95, y: 55 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import: { variable: "short" }
-            }
-        }
-    },
-    short: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "extension_h.png",
-        magnets: {
-            base: { x: 95, y: 35 },
-            end: { x: 95, y: 55 }
-        },
-        accessories: {
-            short: {
-                attach: "base",
-                to: "end",
-                import: {
-                    variable: "tips"
-                }
-            }
-        }
-    },
-    tips: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: 1,
-        width: 1608,
-        spritesheet: "tipstart_h.png",
-        scale: { x: 1, y: 0.5 },
-        magnets: {
-            base: { x: 120, y: 0 },
-            end: { x: 95, y: 40 }
-        },
-        accessories: {
-            tipends: {
-                inherit_sequence_info: true,
-                attach: "base",
-                to: "end",
-                phase: 1,
-                width: 1712,
-                spritesheet: "tipend_h.png",
-                scale: { x: 1, y: 0.5 },
-                magnets: {
-                    base: { x: 95, y: 0 }
-                }
-            }
-        }
-    },
-    extension_magnets: {
-        magnets: {
-            base: { x: 95, y: 20 },
-            end: { x: 95, y: 60 }
-        }
-    }
-});  //IT IS VERY IMPORTANT THAT THE LAST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
\ No newline at end of file
diff --git a/img/dolls/dolls/human/head/hair/back/upright/pigtails.js b/img/dolls/dolls/human/head/hair/back/upright/pigtails.js
deleted file mode 100644
index 3305d0cc51f148d6254e52617b4edb81c1447857..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/human/head/hair/back/upright/pigtails.js
+++ /dev/null
@@ -1,42 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-    pigtails: {
-        inherit_sequence_info: true,
-        accessories: {
-            split: {
-                translate: {x:-10, y: -25},
-                inherit_filter: true,
-                inherit_sequence_info: true,
-                selected_sequence: "active",
-                phase: 0,
-                accessories: {
-                    tail1: {
-                        scale: {x: 0.6, y:1},
-                        translate: { x: 60, y: -1, depth: -1 },
-                        phase: 0,
-                        inherit_filter: true,
-                        inherit_sequence_info: true,
-                        import: {
-                            filepath: "ponytail.js",
-                            variable: "ponytail"
-
-                        }
-                    },
-                    tail2: {
-                        filter: "brightness(0.9)",
-                        scale: {x: -0.6, y:1},
-                        inherit_filter: true,
-                        inherit_sequence_info: true,
-                        translate: { x: 180, y: -1, depth: -1 },
-                        phase: -2,
-                        import: {
-                            filepath: "ponytail.js",
-                            variable: "ponytail"
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-});  //IT IS VERY IMPORTANT THAT THE LAST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
\ No newline at end of file
diff --git a/img/dolls/dolls/human/head/hair/back/upright/ponytail.js b/img/dolls/dolls/human/head/hair/back/upright/ponytail.js
deleted file mode 100644
index b95ba7dcd66bdaa23a6fb431c9ed7e8808044df9..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/human/head/hair/back/upright/ponytail.js
+++ /dev/null
@@ -1,219 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-    ponytail: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        accessories: {            
-                    moreHair: {
-                        inherit_sequence_info: true,
-                        inherit_filter: true,
-                        width: 1160,
-                        attach: "base",
-                        to: "end",
-                        phase: 0,
-                        
-                        variants: {
-                            buzz: { scale: {x:1 , y: 1},
-                                import : { 
-                                    variable: "short"
-                                }
-                            },
-                            short: { 
-                                scale: {x:1 , y: 1.7},
-                                import : {variable: "short"}
-                            },
-                            trimmed: {
-                                scale: {x:1 , y: 1.7},
-                                import : {variable: "trimmed"}
-                            },
-                            flowing: { scale: {x:1 , y: 1.7},
-                                import : {variable: "flowing"}
-                            },
-                            long: { scale: {x:1 , y: 1.7},
-                                import : { variable: "long"}
-                            },
-                            luxurious: { scale: {x:1 , y: 1.7},
-                                import : { variable: "luxurious"}
-                            },
-                            uncompromising: { scale: {x:1 , y: 1.7},
-                                import : { variable: "uncompromising"}
-                            },
-                            repunzotic: { scale: {x:1 , y: 1.7},
-                                import : { variable: "repunzotic"}
-                            },
-                            endless: { scale: {x:1 , y: 1.7},
-                                import : { variable: "endless"}
-                            }
-                        }
-                    }
-                
-             }
-    },
-
-
-    endless: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820-808, y: 30 },
-            end: { x: 820-808, y: 50 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import : { variable: "repunzotic"}
-            }
-        }
-    },
-    repunzotic: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820-808, y: 20 },
-            end: { x: 820-808, y: 50 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import : { variable: "uncompromising"}
-            }
-        }
-    },
-    uncompromising: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820-808, y: 20 },
-            end: { x: 820-808, y: 50 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import : { variable: "luxurious" }
-            }
-        }
-    },
-    luxurious: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820-808, y: 20 },
-            end: { x: 820-808, y: 50 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import : { variable: "long"}
-            }
-        }
-    },
-    long: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820-808, y: 20 },
-            end: { x: 820-808, y: 50 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import : { variable: "flowing"}
-            }
-        }
-    },
-    flowing: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820-808, y: 20 },
-            end: { x: 820-808, y: 50 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import : { variable: "trimmed"}
-            }
-        }
-    },
-    trimmed: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820-808, y: 20 },
-            end: { x: 820-808, y: 50 }
-        },
-        accessories: {
-            inter: {
-                attach: "base",
-                to: "end",
-                import : {variable: "short"}
-            }
-        }
-    },
-    short: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: -1,
-        spritesheet: "thinextension_h.png",
-        magnets: {
-            base: { x: 820-808, y: 20 },
-            end: { x: 820-808, y: 50 }
-        },
-        accessories: {
-            tips: {
-                attach: "base",
-                to: "end",
-                import: {
-                    variable: "tips"
-                }
-            }
-        }
-    },
-    tips: {
-        inherit_sequence_info: true,
-        inherit_filter: true,
-        phase: 1,
-        width: 1608,
-        spritesheet: "tipstart_h.png",
-        scale: { x: 0.5, y: 1 },
-        magnets: {
-            base: { x: 744-768, y: 5 },
-            end: { x: 820-768, y: 40 }
-        },
-        accessories: {
-            tipends: {
-                inherit_filter: true,
-                attach: "base",
-                to: "end",
-                phase: 1,
-                width: 1712,
-                spritesheet: "tipend_h.png",
-                scale: { x: 0.9, y: 1 },
-                magnets: {
-                    base: { x: 820-769, y: 0 }
-                }
-            }
-
-        }
-    }
-});  //IT IS VERY IMPORTANT THAT THE LAST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
\ No newline at end of file
diff --git a/img/dolls/dolls/human/head/hair/back/upright/thinextension.png b/img/dolls/dolls/human/head/hair/back/upright/thinextension.png
deleted file mode 100644
index fdc92a732fa957ea1b1fb11ff0af0ee745bd544b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/upright/thinextension.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/upright/thinextension_h.png b/img/dolls/dolls/human/head/hair/back/upright/thinextension_h.png
deleted file mode 100644
index 0e1541da9f5a696832513e7f9368a98af5f3e6ad..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/upright/thinextension_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/upright/tipend.png b/img/dolls/dolls/human/head/hair/back/upright/tipend.png
deleted file mode 100644
index 2b4c5c27a9ff2b1a4d45398bf8995446fc7b3fdf..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/upright/tipend.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/upright/tipend_h.png b/img/dolls/dolls/human/head/hair/back/upright/tipend_h.png
deleted file mode 100644
index f05e62443ca5212450c935c6ad51d2cc1d908c19..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/upright/tipend_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/upright/tipstart.png b/img/dolls/dolls/human/head/hair/back/upright/tipstart.png
deleted file mode 100644
index 0db83b620be4d914215aa9d3bf994516fbc2ba94..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/upright/tipstart.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/back/upright/tipstart_h.png b/img/dolls/dolls/human/head/hair/back/upright/tipstart_h.png
deleted file mode 100644
index 66a4ba32eb92f0c4dea7825557155095618fcaa2..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/back/upright/tipstart_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/front/laying/bangs.png b/img/dolls/dolls/human/head/hair/front/laying/bangs.png
deleted file mode 100644
index 09fce57959209d7158b502313f3380263f11cd07..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/front/laying/bangs.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/front/laying/combed.png b/img/dolls/dolls/human/head/hair/front/laying/combed.png
deleted file mode 100644
index 36dcd5a508e66036c3b70de9fa1b9d33d7d7a50e..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/front/laying/combed.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/front/laying/pulledback.png b/img/dolls/dolls/human/head/hair/front/laying/pulledback.png
deleted file mode 100644
index 85bbe949235304d5453b2f00440a056c5a4ecbe6..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/front/laying/pulledback.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/front/laying/swept.png b/img/dolls/dolls/human/head/hair/front/laying/swept.png
deleted file mode 100644
index 4fd5e1e65a6708eff4dccba7525c77f55d1cc922..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/front/laying/swept.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/front/upright/bangs.png b/img/dolls/dolls/human/head/hair/front/upright/bangs.png
deleted file mode 100644
index 09fce57959209d7158b502313f3380263f11cd07..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/front/upright/bangs.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/front/upright/combed.png b/img/dolls/dolls/human/head/hair/front/upright/combed.png
deleted file mode 100644
index 59e60d75616961f8f74cde398609ab48115e0f7e..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/front/upright/combed.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/front/upright/pulledback.png b/img/dolls/dolls/human/head/hair/front/upright/pulledback.png
deleted file mode 100644
index ce9d595220841f832a2690404e654eb11b7a1940..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/front/upright/pulledback.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/front/upright/swept.png b/img/dolls/dolls/human/head/hair/front/upright/swept.png
deleted file mode 100644
index 3999101a3012d3c62dcbb79fccb42008581e809a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/hair/front/upright/swept.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/hair/hair.js b/img/dolls/dolls/human/head/hair/hair.js
deleted file mode 100644
index 73c64f195d68bc7e0a97d9995092d85f67737ea7..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/human/head/hair/hair.js
+++ /dev/null
@@ -1,244 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-    hair: {
-        //width: 2048,
-        //frames: 8,
-        attach: "base",
-        to: "top",
-        inherit_sequence_info: true,
-        translate: { x: 0, y: 0, depth: 10 },
-        variants: {
-            upright: {
-                inherit_sequence_info: true,
-                accessories: {
-                    front: {
-                        width: 125,
-                        frames: 1,
-                        selected_variant: "swept",
-                        variants: {
-                            none: {},
-                            bangs: {
-                                spritesheet: "front/upright/bangs.png",
-                                attach: "base",
-                                to: "hairfront",
-                                phase: -1,
-                                magnets: {
-                                    base: { x: 40, y: 74 }
-                                }
-                            },
-                            pulledback: {
-                                spritesheet: "front/upright/pulledback.png",
-                                attach: "base",
-                                to: "hairfront",
-                                magnets: {
-                                    base: { x: 40, y: 74 }
-                                }
-                            },
-                            combed: {
-                                spritesheet: "front/upright/combed.png",
-                                attach: "base",
-                                to: "hairfront",
-                                magnets: {
-                                    base: { x: 40, y: 74 }
-                                }
-                            },
-                            swept: {
-                                spritesheet: "front/upright/swept.png",
-                                attach: "base",
-                                to: "hairfront",
-                                width: 222,
-                                magnets: {
-                                    base: { x: 40, y: 74 }
-                                }
-                            }
-                        },
-
-                    },
-                    back: {
-                        inherit_sequence_info: true,
-                        inherit_filter: true,
-                        selected_variant: "femme",
-                        variants: {
-                            femme: {
-                                inherit_sequence_info: true,
-                                inherit_filter: true,
-                                accessories: {
-                                    roots: {
-                                        inherit_sequence_info: true,
-                                        phase: 0,
-                                        width: 2088,
-                                        spritesheet: "bowl_h.png",
-                                        magnets: {
-                                            base: { x: 820 - 760, y: 0 },
-                                            end: { x: 150, y: 158 }
-                                        },
-
-                                        import: {
-                                            filepath: "back/upright/femme.js",
-                                            variable: "femme"
-                                        }
-                                    }
-
-                                }
-                            },
-                            braid: {
-                                inherit_sequence_info: true,
-                                inherit_filter: true,
-
-                                accessories: {
-                                    roots: {
-                                        inherit_sequence_info: true,
-                                        phase: 0,
-                                        width: 2088,
-                                        spritesheet: "bowl_h.png",
-                                        magnets: {
-                                            base: { x: 820 - 738, y: 0 },
-                                            end: { x: 900 - 738, y: 80 }
-                                        },
-                                        import: {
-                                            filepath: "back/upright/braid.js",
-                                            variable: "braid"
-                                        }
-                                    }
-
-                                }
-                            },
-                            pigtails: {
-                                inherit_sequence_info: true,
-                                inherit_filter: true,
-                                accessories: {
-                                    roots: {
-                                        inherit_sequence_info: true,
-                                        phase: 0,
-                                        width: 2088,
-                                        spritesheet: "bowl_h.png",
-                                        magnets: {
-                                            base: { x: 820 - 738, y: 0 },
-                                            end: { x: 900 - 738, y: 80 }
-                                        },
-                                        import: {
-                                            filepath: "back/upright/pigtails.js",
-                                            variable: "pigtails"
-                                        }
-                                    }
-
-                                }
-                            },
-                            ponytail: {
-                                inherit_sequence_info: true,
-                                inherit_filter: true,
-
-                                accessories: {
-                                    roots: {
-                                        inherit_sequence_info: true,
-                                        phase: 0,
-                                        width: 2088,
-                                        spritesheet: "bowl_h.png",
-                                        magnets: {
-                                            base: { x: 820 - 738, y: 0 },
-                                            end: { x: 900 - 738, y: 80 }
-                                        },
-
-                                        import: {
-                                            filepath: "back/upright/ponytail.js",
-                                            variable: "ponytail"
-                                        }
-                                    }
-                                }
-                            }
-                        }
-
-                    }
-                }
-            },
-            laying: {
-                accessories: {
-                    front: {
-                        width: 104,
-                        frames: 1,
-                        selected_variant: "swept",
-                        variants: {
-                            none: {},
-                            bangs: {
-                                spritesheet: "front/laying/bangs.png",
-                                attach: "base",
-                                to: "hairfront",
-                                phase: -1,
-                                magnets: {
-                                    base: { x: 74, y: 40 }
-                                }
-                            },
-                            pulledback: {
-                                spritesheet: "front/laying/pulledback.png",
-                                attach: "base",
-                                to: "hairfront",
-                                magnets: {
-                                    base: { x: 74, y: 40 }
-                                }
-                            },
-                            combed: {
-                                spritesheet: "front/laying/combed.png",
-                                attach: "base",
-                                to: "hairfront",
-                                magnets: {
-                                    base: { x: 74, y: 40 }
-                                }
-                            },
-                            swept: {
-                                spritesheet: "front/laying/swept.png",
-                                attach: "base",
-                                to: "hairfront",
-                                width: 222,
-                                magnets: {
-                                    base: { x: 74, y: 40 }
-                                }
-                            }
-                        },
-
-                    },
-                    back: {                                                
-                        selected_variant: "trimmed", 
-                        attach: "base",
-                        to: "top",
-                        magnets: {
-                            base: {x: 160, y:168},
-                        },
-                        frames: 1,
-                        variants: {
-                            none: {},
-                            bob: {
-                                spritesheet: "back/laying/short.png"
-                            },
-                            short: {
-                                spritesheet: "back/laying/short.png"
-                            },
-                            trimmed: {
-                                spritesheet: "back/laying/medium.png"
-                            },
-                            flowing: {
-                                spritesheet: "back/laying/medium.png"
-                            }, 
-                            long: {
-                                spritesheet: "back/laying/long.png"
-                            },
-                            luxurious: {
-                                spritesheet: "back/laying/long.png"
-                            },
-                            uncompromising: {
-                                spritesheet: "back/laying/repunzotic.png"
-                            },
-                            repunzotic: {
-                                spritesheet: "back/laying/repunzotic.png"
-                            },
-                            endless: {
-                                spritesheet: "back/laying/repunzotic.png"
-                            }
-                        }
-                        
-                    }
-                }
-            }
-        
-        }
-    }
-
-}); //IT IS VERY IMPORTANT THAT THE LAST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
diff --git a/img/dolls/dolls/human/head/laying_h.png b/img/dolls/dolls/human/head/laying_h.png
deleted file mode 100644
index 7e5e5cba48ba8912ac51935482f9d76e4d1b51c3..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/laying_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/upright.png b/img/dolls/dolls/human/head/upright.png
deleted file mode 100644
index 1c3e17cd4415da0ac1ab2623918ef7086a43b902..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/upright.png and /dev/null differ
diff --git a/img/dolls/dolls/human/head/upright_h.gif b/img/dolls/dolls/human/head/upright_h.gif
deleted file mode 100644
index ede8ba7f3822cdddd0d91e7525bd5e82bdc2726f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/upright_h.gif and /dev/null differ
diff --git a/img/dolls/dolls/human/head/upright_h.png b/img/dolls/dolls/human/head/upright_h.png
deleted file mode 100644
index cc4b1836694935a7c282cec82cb4341fbff25c72..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/head/upright_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/human.js b/img/dolls/dolls/human/human.js
deleted file mode 100644
index 729f5d3c30a5a50a8f0cf22a3951d00cdfe60696..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/human/human.js
+++ /dev/null
@@ -1,393 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-
-    human_arms: {
-        selected_variant: "upright",
-        inherit_filter: true,
-        variants: {
-            upright: {
-                inherit_filter: true,
-                selected_variant: "imminent",
-                variants: {
-                    active: {
-                        inherit_filter: true,
-                        translate: { x: 0, y: 0, depth: 10 },
-                        spritesheet: "arms/arm_upright.png",
-                        width: 3256, //width of the spritesheet, in pixels.
-                        frames: 8, //number of frames in the spritesheet.
-                        magnets: { //names and locations of spots we can attach accessories to
-                            base: { x: 290, y: 55, depth: 2 },
-                            //base: { x: 288, y: 62, depth: 2 },  
-                            //hands: {x: 64, y: 226}                             
-                        },
-                        accessories: {
-                            forearm: {
-                                spritesheet: "arms/forearm_upright.png",
-                                width: 3256, //width of the spritesheet, in pixels.
-                                frames: 8, //number of frames in the spritesheet.
-                                magnets: {
-                                    hands: { x: 114, y: 250 }
-                                }
-                            }
-                        }
-                    },
-                    imminent: {
-                        inherit_filter: true,
-                        translate: { x: 0, y: 0, depth: 10 },
-                        spritesheet: "arms/imminent_h.png",
-                        width: 918, //width of the spritesheet, in pixels.
-                        frames: 3, //number of frames in the spritesheet.
-                        magnets: { //names and locations of spots we can attach accessories to
-                            base: { x: 158, y: 30, depth: 2 }
-                        }
-                    },
-                    entrance: {
-                        inherit_filter: true,
-                        translate: { x: 0, y: 0, depth: 2 },
-                        spritesheet: "arms/imminent_h.png",
-                        width: 918, //width of the spritesheet, in pixels.
-                        frames: 3, //number of frames in the spritesheet.
-                        magnets: { //names and locations of spots we can attach accessories to
-                            base: { x: 158, y: 30, depth: 2 }
-                        }
-                    }
-                }
-            },
-            laying: {
-                inherit_filter: true,
-                selected_variant: "active",
-                variants: {
-                    active: {
-                        inherit_filter: true,
-                        translate: { x: 0, y: 0, depth: 10 },
-                        filter: "drop-shadow(7px -13px 6px #0006)",
-                        magnets: { //names and locations of spots we can attach accessories to
-                            base: { x: 120, y: 300, depth: 0 },
-                            hands: {x: 140, y: 90}
-                            //base: { x: 288, y: 62, depth: 2 },  
-                            //hands: {x: 64, y: 226}                             
-                        },
-                        selected_variant: "vaginal",
-                        variants : {
-                            vaginal : {
-                                inherit_filter: true,
-                                spritesheet: "arms/laying_h.png",
-                                width: 1096, //width of the spritesheet, in pixels.
-                                frames: 4, //number of frames in the spritesheet.
-                            }, 
-                            anal : {
-                                inherit_filter: true,
-                                spritesheet: "arms/laying_h.png",
-                                width: 1096, //width of the spritesheet, in pixels.
-                                frames: 4, //number of frames in the spritesheet.
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    },
-    human_legs: {
-        selected_variant: "upright",
-        variants: {
-            upright: {
-                variants: {
-                    active: {
-                        import: { variable: "upright_leg" },
-                        selected_sequence: "active"
-
-                    },
-                    imminent: {
-                        import: { variable: "upright_leg" },
-                        selected_sequence: "imminent"
-                    },
-                    entrance: {
-                        import: { variable: "upright_leg" },
-                        selected_sequence: "imminent"
-                    }
-                }
-            },
-            laying: {}
-        }
-    },
-    human_head: {
-        inherit_sequence_info: true,
-        /**NPC body size can be scaled by various factors
-         * but big people don't generally have proportionally 
-         * large heads so we scale the head up or down to compensate a bit 
-         * by specifiying different head scale variants for different body_size variants. 
-         * 
-         * (this works because specifying a variant on Doll will cause the any variant of the same name
-         *  to be activated on any child accessories)
-         */
-        variants: {
-            joke_body: {
-                inherit_sequence_info: true,
-                scale: { x: 0.6, y: 0.6 },
-                import: { variable: "head_stance_variants" }
-            },
-            giant_body: {
-                inherit_sequence_info: true,
-                scale: { x: 0.76, y: 0.76 },
-                import: { variable: "head_stance_variants" }
-            },
-            huge_body: {
-                inherit_sequence_info: true,
-                scale: { x: 0.83, y: 0.83 },
-                import: { variable: "head_stance_variants" }
-            },
-            large_body: {
-                inherit_sequence_info: true,
-                scale: { x: 0.9, y: 0.9 },
-                import: { variable: "head_stance_variants" }
-            },
-            medium_body: {
-                inherit_sequence_info: true,
-                scale: { x: 0.9, y: 0.9 },
-                import: { variable: "head_stance_variants" }
-            },
-            petite_body: {
-                inherit_sequence_info: true,
-                scale: { x: 1, y: 1},
-                import: { variable: "head_stance_variants" }
-            },
-            small_body: {
-                inherit_sequence_info: true,
-                scale: { x: 1.1, y: 1.1 },
-                import: { variable: "head_stance_variants" }
-            },
-            tiny_body: {
-                inherit_sequence_info: true,
-                scale: { x: 1.2, y: 1.2 },
-                import: { variable: "head_stance_variants" }
-            }            
-        }
-    },
-    defaultHumanAccessoriesList: {
-        arms: {
-            import: { variable: "human_arms" },
-            attach: "base",
-            to: "shoulders"
-        },
-        chest: {
-            import: {
-                filepath: "breasts/breasts.js",
-                variable: "breast_variants"
-            },
-            attach: "base",
-            to: "sternum"
-        },
-        legs: {
-            import: { variable: "human_legs" },
-            attach: "base",
-            to: "hips"
-        },
-        head: {
-            inherit_sequence_info: true,
-            import: { variable: "human_head" },
-            attach: "base",
-            to: "neck"
-        },
-        penis: {
-            import: {
-                filepath: "penis/penis.js",
-                variable: "penis"
-            }
-        }
-    },
-    human: {
-        width: 1632,
-        frames: 8,
-        scale: { x: 0.25, y: 0.25 },
-        selected_variant: "medium_body",
-        variants: {
-            joke_body: {
-                scale: { x: 3, y: 3 },
-                import: { variable: "stance_variants" }
-            },
-            giant_body: {
-                scale: { x: 1.5, y: 1.5 },
-                import: { variable: "stance_variants" }
-            },
-            huge_body: {
-                scale: { x: 1.33, y: 1.33 },
-                import: { variable: "stance_variants" }
-            },
-            large_body: {
-                scale: { x: 1.22, y: 1.22 },
-                import: { variable: "stance_variants" }
-            },
-            medium_body: {
-                scale: { x: 1.11, y: 1.11 },
-                import: { variable: "stance_variants" }
-            }, 
-            petite_body: {
-                scale: { x: 1, y: 1 },
-                import: { variable: "stance_variants" }
-            },
-            small_body: {
-                scale: { x: 0.88, y: 0.88 },
-                import: { variable: "stance_variants" }
-            },
-            tiny_body: {
-                scale: { x: 0.775, y: 0.775 },
-                import: { variable: "stance_variants" }
-            }
-        }
-    },
-    stance_variants: {
-        selected_variant: "upright",
-        variants: {
-            upright: {
-                selected_variant: "imminent",
-                variants: {
-                    active: {
-                        import: { variable: "upright_torso" },
-                        selected_sequence: "active"
-                    },
-                    imminent: {
-                        import: { variable: "upright_torso" },
-                        selected_sequence: "imminent"
-                    },
-                    entrance: {
-                        import: { variable: "upright_torso" },
-                        selected_sequence: "imminent"
-                    }
-                }
-            },
-            laying: {
-                width: 3680,
-                frames: 4,
-                spritesheet: "torso/laying_h.png",
-                accessories: {
-                    import: { variable: "defaultHumanAccessoriesList" }
-                },
-                magnets: {
-                    shoulders: { x: 420, y: 220 },
-                    penis_aligned: [
-                        { x: 631 - (3680 * 0), y: 97 },
-                        { x: 1554 - (3680 * 1), y: 116 },
-                        { x: 2500 - (3680 * 2), y: 120 },
-                        { x: 3411 - (3680 * 3), y: 114 }
-                    ],
-                    sternum: { x: 430, y: 157 },
-                    neck: {x:366, y:270}
-                }
-            }
-            /*hunching: {
-    
-            },
-            feedng: {
-    
-            }*/
-        }
-    },
-    head_stance_variants: {
-        inherit_sequence_info: true,
-        selected_variant: "upright",
-        variants: {
-            upright: {
-                inherit_sequence_info: true,
-                spritesheet: "head/upright_h.png",
-                width: 2400, //width of the spritesheet, in pixels.
-                frames: 8, //number of frames in the spritesheet.
-                magnets: { //names and locations of spots we can attach accessories to
-                    base: { x: 840 - 672, y: 224 - 2 },
-                    top: { x: 820 - 672, y: 0 - 2 },
-                    hairfront:
-                        [{ x: 40 - (300 * 0), y: 78, depth: 0 },
-                        { x: 352 - (300 * 1), y: 78, depth: 0 },
-                        { x: 656 - (300 * 2), y: 78, depth: 0 },
-                        { x: 948 - (300 * 3), y: 78, depth: 0 },
-                        { x: 1240 - (300 * 4), y: 78, depth: 0 },
-                        { x: 1540 - (300 * 5), y: 78, depth: 0 },
-                        { x: 1836 - (300 * 6), y: 78, depth: 0 },
-                        { x: 2132 - (300 * 7), y: 78, depth: 0 }]
-                },
-                accessories: {
-                    hair: {
-                        inherit_sequence_info: true,
-                        import: {
-                            filepath: "head/hair/hair.js",
-                            variable: "hair"
-                        }                        
-                    }
-                }
-            },
-            laying: {
-                spritesheet: "head/laying_h.png",
-                frames: 1,
-                magnets: {
-                    base: {x: 236, y: 210},
-                    hairfront: {x:85, y:50},
-                    top: {x:21, y:120}
-                },
-                accessories: {
-                    hair: {
-                        inherit_sequence_info: true,
-                        import: {
-                            filepath: "head/hair/hair.js",
-                            variable: "hair"
-                        }
-                    }
-                },
-               
-            }
-
-        }
-    },
-    upright_leg: {
-        spritesheet: "legs/upright_h.png",
-        width: 2696, //width of the spritesheet, in pixels.
-        frames: 8, //number of frames in the spritesheet.
-        magnets: { //names and locations of spots we can attach accessories to
-            base: { x: 820 - 687, y: 0 }
-        },
-        filter: "drop-shadow(-9px 34px 15px #0006)",
-        sequences: {
-            active: [0, 1, 2, 3, 4, 5, 6, 7],
-            imminent: [3, 4, 5]
-        }
-    },
-    upright_torso: {
-        /*the spritesheet for shadow enemies is 4x resolution as everything else
-                            *to minimize aliasing for various body size, so we scale it down by a fourth here*/
-        
-        accessories: {
-            import: { variable: "defaultHumanAccessoriesList" }
-        },
-        spritesheet: "torso/upright_h.png",
-        width: 1632, //width of the spritesheet, in pixels.
-        frames: 8, //number of frames in the spritesheet.
-        magnets: { //names and locations of spots we can attach accessories to
-            hips: { x: 820 - 726, y: 520 - 198 },
-            penis_aligned: [
-                { x: 15 - (204 * 0), y: 322 },
-                { x: 224 - (204 * 1), y: 324 },
-                { x: 446 - (204 * 2), y: 326 },
-                { x: 658 - (204 * 3), y: 326 },
-                { x: 878 - (204 * 4), y: 328 },
-                { x: 1073 - (204 * 5), y: 326 },
-                { x: 1268 - (204 * 6), y: 325 },
-                { x: 1452 - (204 * 7), y: 322 }
-
-            ],
-            penis_static: { x: 30, y: 520 - 198 },
-            sternum: { x: 66, y: 328 - 198 },
-            shoulders: { x: 114, y: 280 - 198 },
-            neck: { x: 114, y: 224 - 198 }
-        },
-        sequences: {
-            active: [0, 1, 2, 3, 4, 5, 6, 7],
-            imminent: [3, 4, 5]
-        }
-    }
-
-
-
-}); //IT IS VERY IMPORTANT THAT THE LAST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-
-
-
-
diff --git a/img/dolls/dolls/human/legs/upright.png b/img/dolls/dolls/human/legs/upright.png
deleted file mode 100644
index 0d11f1538a3455344e473cc0ec45d23504e4c8d8..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/legs/upright.png and /dev/null differ
diff --git a/img/dolls/dolls/human/legs/upright_h.gif b/img/dolls/dolls/human/legs/upright_h.gif
deleted file mode 100644
index feb5328148acf9c1efcc8fd112fc141a957345f9..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/legs/upright_h.gif and /dev/null differ
diff --git a/img/dolls/dolls/human/legs/upright_h.png b/img/dolls/dolls/human/legs/upright_h.png
deleted file mode 100644
index 592a47e71efe937a51c340c66ddc500c7a8e0206..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/legs/upright_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/penis/penis.js b/img/dolls/dolls/human/penis/penis.js
deleted file mode 100644
index fa97d0eaf0c980c285f2afe6b50236dfa33f86d1..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/human/penis/penis.js
+++ /dev/null
@@ -1,205 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-    penis: {
-        inherit_filter: true,
-        /**NPC body size can be scaled by various factors
-         * but penises should be in absolute size. 
-         * If a penis is enormous, it should be just enormous on a tiny NPC as it 
-         * is on a giant NPC, so we specifiy different 
-         * penis scale variants dedicated to different body_size variants here. 
-         * 
-         * (this works because specifying a variant on Doll will cause the any variant of the same name
-         *  to be activated on any child accessories)
-         */
-        selected_variant: "medium_body",
-        variants: {
-            joke_body: {
-                scale: { x: 1.0 / 2.5, y: 1.0 / 2.5 },
-                import: { variable: "penis_stance_variants" }
-            },
-			giant_body: {
-                scale: { x: 1.0/1.5, y: 1.0/1.5 },
-                import: { variable: "penis_stance_variants" }
-            },
-            huge_body: {
-                scale: { x: 1.0/1.33, y: 1.0/1.33 },
-                import: { variable: "penis_stance_variants" }
-            },
-            large_body: {
-                scale: { x: 1.0/1.22, y: 1.0/1.22 },
-                import: { variable: "penis_stance_variants" }
-            },
-            medium_body: {
-                scale: { x: 1.0/1.11, y: 1.0/1.11 },
-                import: { variable: "penis_stance_variants" }
-            },
-            petite_body: {
-                scale: { x: 1.0/1.0, y: 1.0/1.0 },
-                import: { variable: "penis_stance_variants" }
-            },
-            small_body: {
-                scale: { x: 1.0/.88, y: 1.0/.88 },
-                import: { variable: "penis_stance_variants" }
-            },
-            tiny_body: {
-                scale: { x: 1.0/.775, y: 1.0/.775 },
-                import: { variable: "penis_stance_variants" }
-            },
-        }
-    },
-
-    penis_stance_variants: {
-        inherit_filter: true,
-        selected_variant: "upright",
-        variants: {
-            laying: {},
-            upright: {
-                inherit_filter: true,
-                selected_variant: "imminent",
-                variants: {
-                    imminent: {
-                        import: {variable: "approaching"}
-                    },
-                    entrance: {
-                        import: {variable: "approaching"}
-                    },
-                    active: {
-                        frames: 8,
-                        width: 2048,
-                        attach: "base",
-                        to: "penis_static",
-                        selected_variant: "huge",
-                        inherit_filter: true,
-                        variants: {
-                            huge: {
-                                spritesheet: "upright/huge.png",
-                                scale: { x: 4.0, y: 4.0 },
-                                magnets: {
-                                    base://[
-                                        { x: 184 - (256 * 0), y: 130 }
-                                    /* { x: 442-(256*1 ) , y: 130 },
-                                     { x: 702-(256*2 ) , y: 130 },
-                                     { x: 960-(256*3 ) , y: 130 },
-                                     { x: 1222-(256*4 ) , y: 130 },
-                                     { x: 1474-(256*5 ) , y: 130 },
-                                     { x: 1728-(256*6 ) , y: 130 },
-                                     { x: 1978-(256*7 ) , y: 130 }*/
-                                    //]
-                                }
-                            },
-                            large: {
-                                spritesheet: "upright/huge.png",
-                                scale: { x: 0.85 * 4.0, y: 0.85 * 4.0 },
-                                magnets: {
-                                    base: //[
-                                        { x: 184 - (256 * 0), y: 130 }
-                                    /* { x: 442-(256*1 ) , y: 130 },
-                                     { x: 702-(256*2 ) , y: 130 },
-                                     { x: 960-(256*3 ) , y: 130 },
-                                     { x: 1222-(256*4 ) , y: 130 },
-                                     { x: 1474-(256*5 ) , y: 130 },
-                                     { x: 1728-(256*6 ) , y: 130 },
-                                     { x: 1978-(256*7 ) , y: 130 }*/
-                                    //]
-                                }
-
-                            },
-                            medium: {
-                                spritesheet: "upright/huge.png",
-                                scale: { x: 0.7 * 4.0, y: 0.7 * 4.0 },
-                                magnets: {
-                                    base: //[
-                                        { x: 184 - (256 * 0), y: 130 }
-                                    /* { x: 442-(256*1 ) , y: 130 },
-                                     { x: 702-(256*2 ) , y: 130 },
-                                     { x: 960-(256*3 ) , y: 130 },
-                                     { x: 1222-(256*4 ) , y: 130 },
-                                     { x: 1474-(256*5 ) , y: 130 },
-                                     { x: 1728-(256*6 ) , y: 130 },
-                                     { x: 1978-(256*7 ) , y: 130 }*/
-                                    //]
-                                }
-                            },
-                            small: {
-                                spritesheet: "upright/huge.png",
-                                scale: { x: 0.55 * 4.0, y: 0.5 * 4.0 },
-                                magnets: {
-                                    base: //[
-                                        { x: 184 - (256 * 0), y: 130 }
-                                    /* { x: 442-(256*1 ) , y: 130 },
-                                     { x: 702-(256*2 ) , y: 130 },
-                                     { x: 960-(256*3 ) , y: 130 },
-                                     { x: 1222-(256*4 ) , y: 130 },
-                                     { x: 1474-(256*5 ) , y: 130 },
-                                     { x: 1728-(256*6 ) , y: 130 },
-                                     { x: 1978-(256*7 ) , y: 130 }*/
-                                    //]
-                                }
-                            },
-                            tiny: {
-                                spritesheet: "upright/huge.png",
-                                scale: { x: 0.4 * 4.0, y: 0.4 * 4.0 },
-                                magnets: {
-                                    base: //[
-                                        { x: 184 - (256 * 0), y: 130 }
-                                    /* { x: 442-(256*1 ) , y: 130 },
-                                     { x: 702-(256*2 ) , y: 130 },
-                                     { x: 960-(256*3 ) , y: 130 },
-                                     { x: 1222-(256*4 ) , y: 130 },
-                                     { x: 1474-(256*5 ) , y: 130 },
-                                     { x: 1728-(256*6 ) , y: 130 },
-                                     { x: 1978-(256*7 ) , y: 130 }*/
-                                    //]
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    },
-    approaching: {
-        inherit_filter: true,
-        attach: "base",
-        to: "penis_aligned",
-        frames: 3,
-        width: 224,
-        selected_variant: "huge",
-        variants: {
-            huge: {
-                scale: { x: 4.0, y: 4.0 },
-                import: { variable: "fapping_upright" }
-            },
-            large: {
-                scale: { x: 0.85 * 4.0, y: 0.85 * 4.0 },
-                import: { variable: "fapping_upright" }
-            },
-            medium: {
-                scale: { x: 0.7 * 4.0, y: 0.7 * 4.0 },
-                import: { variable: "fapping_upright" }
-
-            },
-            small: {
-                scale: { x: 0.55 * 4.0, y: 0.5 * 4.0 },
-                import: { variable: "fapping_upright" }
-            },
-            tiny: {
-                scale: { x: 0.4 * 4.0, y: 0.4 * 4.0 },
-                import: { variable: "fapping_upright" }
-            }
-        }
-    },
-    fapping_upright: {
-        inherit_filter: true,
-        spritesheet: "upright/imminent_h.png",
-
-        magnets: {
-            base: [
-                { x: 54, y: 26 },
-                { x: 54, y: 26 },
-                { x: 54, y: 26 }
-            ]
-            //{ x: 48, y: 25 }
-        }
-    }
-});
\ No newline at end of file
diff --git a/img/dolls/dolls/human/penis/upright/huge.png b/img/dolls/dolls/human/penis/upright/huge.png
deleted file mode 100644
index 0fe785d7edaa2be6ce9d481c646d6d9afed348fa..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/penis/upright/huge.png and /dev/null differ
diff --git a/img/dolls/dolls/human/penis/upright/huge1.png b/img/dolls/dolls/human/penis/upright/huge1.png
deleted file mode 100644
index 08bab1f2795d8da286777ebefa6d276ded7ef22a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/penis/upright/huge1.png and /dev/null differ
diff --git a/img/dolls/dolls/human/penis/upright/imminent_h.png b/img/dolls/dolls/human/penis/upright/imminent_h.png
deleted file mode 100644
index d81f31f46853b655c76da9c4b56bd94b8606ec82..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/penis/upright/imminent_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/torso/laying_h.png b/img/dolls/dolls/human/torso/laying_h.png
deleted file mode 100644
index 331fd41c47c39ad373be98e4126f0f4c49f7cdf2..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/torso/laying_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/torso/upright_h.png b/img/dolls/dolls/human/torso/upright_h.png
deleted file mode 100644
index 4f3ae48d8f063fc1fbe3f83e932a4e10ff8c8c23..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/torso/upright_h.png and /dev/null differ
diff --git a/img/dolls/dolls/human/torso_upright.png b/img/dolls/dolls/human/torso_upright.png
deleted file mode 100644
index 5ae937fb1152e02d0ea5e8601f78a9859afec961..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/human/torso_upright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/.activeinlineanalxray.png-autosave.kra b/img/dolls/dolls/player/doggy/bottom/.activeinlineanalxray.png-autosave.kra
deleted file mode 100644
index 7920247d2c05b61604d90882b3b8131e9c9dde30..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/.activeinlineanalxray.png-autosave.kra and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/activeinlineanalxray.png b/img/dolls/dolls/player/doggy/bottom/activeinlineanalxray.png
deleted file mode 100644
index 17e21afa319845b9a00de21a7ca201da5d1621cf..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/activeinlineanalxray.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/bottom.js b/img/dolls/dolls/player/doggy/bottom/bottom.js
deleted file mode 100644
index a5876de2321d687b87a5e2fa75907dc6bb5384c0..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/player/doggy/bottom/bottom.js
+++ /dev/null
@@ -1,111 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-    bottom: {
-        inherit_filter: true,
-        inherit_sequence_info: true,
-        translate: {x:0, y:0, depth:5},
-        magnets: {
-            anus: { x: 178, y: 120 },
-            anusentrance: { x: 195, y: 122 },
-            anusimminent: { x: 230, y: 122 },
-            penis: { x: 150, y: 142 },
-            vagina: { x: 173, y: 132 },
-            vaginaimminent: { x: 263, y: 128 },
-            vaginaentrance : { x: 188, y: 133 },
-            footjob: { x: 205, y: 114 },
-            waist: {x: 160, y: 110}
-        },
-        accessories: {
-            clothes: {
-                import: {
-                    filepath: "clothes/clothes_bottom.js",
-                    variable: "clothes"
-                }
-            },
-            butt_front: {
-                inherit_filter: true,
-                inherit_sequence_info: true,
-                selected_variant: "normal",
-                variants: {
-                    normal: {
-                        inherit_filter: true,
-                        filter: "drop-shadow(#0006 -3px 3px 3px)",
-                        translate: { x: 0, y: 0, depth: 2 },
-                        spritesheet: "doggyactivebasefrontrear.png",
-                        accessories: {
-                            import: { variable: "left_leg" }
-                        }
-                    },
-                    inline_xray: {
-                        inherit_filter: true,
-                        translate: { x: 0, y: 0, depth: 2 },
-                        spritesheet: "activeinlineanalxray.png",
-                        accessories: {
-                            import: { variable: "left_leg" }
-                        }
-                    }
-                }
-            },
-            butt_back: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -2 },
-                spritesheet: "doggyactivebaserightthigh.png",
-                accessories: {
-                    leg: {
-                        inherit_filter: true,
-                        selected_variant: "normal",
-                        variants: {
-                            normal: {
-                                inherit_filter: true,
-                                spritesheet: "/legs/doggyactivebaselegright.png"
-                            },
-                            footjob: {}
-                        }
-                    }
-                }
-            },
-            penis: {
-                inherit_filter: true,
-                selected_variant: "small",
-                variants: {
-                    none: {
-
-                    },
-                    virgin: {
-                        spritesheet: "/penis/doggyactivepenisvirgin.png"
-                    },
-                    tiny: {
-                        spritesheet: "/penis/doggyactivepenis.png"
-                    },
-                    small: {
-                        spritesheet: "/penis/doggyactivepenis.png"
-                    },
-                    large: {
-                        spritesheet: "/penis/doggyactivepenis.png"
-                    }
-                }
-            },
-            bowels: {},
-            uterus: {},
-            clothing: {}
-        }
-    },
-    left_leg: {
-        leg: {
-            selected_variant: "normal",
-            inherit_filter: true,
-           
-            variants: {
-                normal: {
-                    translate: { x: 0, y: 0, depth: -1},
-                    inherit_filter: true,
-                    spritesheet: "/legs/doggyactivebaselegleft.png"
-                },
-                footjob: {
-                    translate: { x: 0, y: 0, depth: 2 },
-                    inherit_filter: true,
-                    spritesheet: "/legs/doggyactivefeetjob.png"
-                }
-            }
-        }
-    }
-});
\ No newline at end of file
diff --git a/img/dolls/dolls/player/doggy/bottom/bowels/bowelshuge.png b/img/dolls/dolls/player/doggy/bottom/bowels/bowelshuge.png
deleted file mode 100644
index 759e6e8419d4c1effcfd8deac1607ddbfa17b1b0..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/bowels/bowelshuge.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/bowels/bowelslarge.png b/img/dolls/dolls/player/doggy/bottom/bowels/bowelslarge.png
deleted file mode 100644
index 1503ebba0aac85ae35f748f065cfba533a3a8dce..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/bowels/bowelslarge.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/bowels/bowelsmedium.png b/img/dolls/dolls/player/doggy/bottom/bowels/bowelsmedium.png
deleted file mode 100644
index 12b8282effa25dcb168a50f22a6139d820249365..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/bowels/bowelsmedium.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_anklefootjob.png b/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_anklefootjob.png
deleted file mode 100644
index c445c75f514aca8842f048a839b75e47fde641d5..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_anklefootjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_ankles.png b/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_ankles.png
deleted file mode 100644
index 416d0cb328fd0abe576ab2034b484f538752df4c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_ankles.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_knees.png b/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_knees.png
deleted file mode 100644
index 39ce032f2bc070cc1008680303998cc5f77eed81..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_knees.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_thighs.png b/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_thighs.png
deleted file mode 100644
index 64c8f7eb92f57e8494a02ae373d3b8ba96927f4c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_waist.png b/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_waist.png
deleted file mode 100644
index c4caf1ecc1daa83f11879b0483bfdcb2db9b1c28..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyactive_bikinibottom_waist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyidle_bikinibottom_anklefootjob.png b/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyidle_bikinibottom_anklefootjob.png
deleted file mode 100644
index c445c75f514aca8842f048a839b75e47fde641d5..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/bikinibottom/doggyidle_bikinibottom_anklefootjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/clothes_bottom.js b/img/dolls/dolls/player/doggy/bottom/clothes/clothes_bottom.js
deleted file mode 100644
index 4840165f38d4a243a29099e5a62420f9a90363f2..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/player/doggy/bottom/clothes/clothes_bottom.js
+++ /dev/null
@@ -1,320 +0,0 @@
-
-DoLHouse.add({//IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-    clothes: {
-        //inherit_filter: true,
-        translate: { x: 0, y: 0, depth: 9 },
-        accessories: {
-            lower: {
-                inherit_filter: true,
-                selected_variant: "naked",
-                translate: { x: 0, y: 0, depth: 1 },
-                variants: {
-                    naked: {},
-                    cyleshorts: {
-                        import: { variable: "gymbloomers" }
-                    },
-                    towellarge: {
-                        selected_variant: "hips",
-                        import: { variable: "towel_variants" }
-                    },
-                   
-                    boardshorts: {
-                        import: { variable: "shorts" }
-                    },
-                    boyshorts: {
-                        import: { variable: "shorts" }
-                    },
-                    schoolshorts: {
-                        import: { variable: "shorts" }
-                    },
-                    schoolswimshorts: {
-                        import: { variable: "gymbloomers" }
-                    },
-                    jorts: {
-                        import: { variable: "shorts" }
-                    },
-                    shorts: {
-                        import: { variable: "shorts" }
-                    },
-                    skirt: { 
-                        import: { variable: "skirt"}
-                    },
-                    micropleatedskirt : {
-                        import: { variable: 'micropleatedskirt'}
-                    }
-
-                }
-            },
-            under_lower: {
-                inherit_filter: true,
-                selected_variant: "plainpanties",
-                translate: {x:0, y:0, depth: 0},
-                variants: {
-                    naked: {},
-                    
-                    bikini: {
-                        import: {
-                            variable: "risquepanties"
-                        }
-                    },
-                    crotchlesspantis: {
-                        import: {
-                            variable: "risquepanties"
-                        }
-                    }, 
-                    microkini: {
-                        import: {
-                            variable: "risquepanties"
-                        }
-                    },
-                    lacepanties: {
-                        import: {
-                            variable: "risquepanties"
-                        }
-                    },
-                    catgirlpanties: {
-                        import: {
-                            variable: "plainpanties"
-                        }
-                    },
-                    plainpanties: {
-                        import: {
-                            variable: "plainpanties"
-                        }
-                    },
-                    stripedpanties: {
-                        import: {
-                            variable: "plainpanties"
-                        }
-                    },
-                    speedo: {
-                        import: {
-                            variable: "plainpanties"
-                        }
-                    },
-                    
-                }
-            },
-            /*over_lower: {
-                 variants: {
-                     hips: { spritesheet: "gymbloomers/doggyactive_delim_hips.png" },
-                     thighs: { spritesheet: "gymbloomers/doggyactive_gymbloomers_thighs.png" },
-                     knees: { spritesheet: "gymbloomers/doggyactive_gymbloomers_knees.png" },
-                     ankles: { spritesheet: "gymbloomers/doggyactive_gymbloomers_ankles.png" },
-                     anklesfootjob: { spritesheet: "gymbloomers/doggyactive_gymbloomers_anklesfootjob.png" },
-                 }
- 
-             },*/
-            genitals: {
-                selected_variant: "naked",
-                variants: {
-                    naked: {},
-                    chastitycage: {
-                        spritesheet: "doggyactivechastitycage.png"
-                    },
-                    chastitycagepenis: {
-                        spritesheet: "doggyactivechastitycagepenis.png"
-                    },
-                    chastitybelt: {
-                        spritesheet: "doggyactivechastitybelt.png"
-                    }
-                }
-            }
-        }
-    },
-    towel_variants: {
-        //inherit_filter: true,
-        variants: {
-            hips: {
-                inherit_filter: true,
-                spritesheet: "lowertowel/doggyactive_towel_waist.png"
-            },
-            thighs: {
-                inherit_filter: true,
-                spritesheet: "lowertowel/doggyactive_towel_thighs.png"
-            },
-            knees: {
-                inherit_filter: true,
-                spritesheet: "lowertowel/doggyactive_towel_knees.png"
-            },
-            ankles: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -6 },
-                spritesheet: "lowertowel/doggyactive_towel_ankles.png"
-            },
-        }
-    },
-    shorts: {
-        inherit_filter: true,
-        selected_variant: "hips",
-        variants: {
-            hips: {
-                inherit_filter: true,
-                spritesheet: "shorts/doggyactive_shorts_hips.png"
-            },
-            thighs: {
-                inherit_filter: true,
-                spritesheet: "shorts/doggyactive_shorts_thighs.png"
-            },
-            knees: {
-                inherit_filter: true,
-                spritesheet: "shorts/doggyactive_shorts_knees.png"
-            },
-            ankles: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -6 },
-                spritesheet: "shorts/doggyactive_shorts_ankles.png"
-            },
-            anklesfootjob: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -6 },
-                spritesheet: "shorts/doggyactive_shorts_anklesfootjob.png"
-            },
-        }
-    },
-    gymbloomers: {
-        inherit_filter: true,
-        selected_variant: "hips",
-        variants: {
-            hips: {
-                inherit_filter: true,
-                spritesheet: "gymbloomers/doggyactive_shorts_hips.png"
-            },
-            thighs: {
-                inherit_filter: true,
-                spritesheet: "gymbloomers/doggyactive_shorts_thighs.png"
-            },
-            knees: {
-                inherit_filter: true,
-                spritesheet: "gymbloomers/doggyactive_shorts_knees.png"
-            },
-            ankles: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -6 },
-                spritesheet: "gymbloomers/doggyactive_shorts_ankles.png"
-            },
-            anklesfootjob: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -6 },
-                spritesheet: "gymbloomers/doggyactive_shorts_anklesfootjob.png"
-            },
-        }
-    },
-    risquepanties: {
-        inherit_filter: true,
-        selected_variant: "hips",
-        variants: {
-            hips: {
-                inherit_filter: true,
-                spritesheet: "bikinibottom/doggyactive_bikinibottom_waist.png"
-            },
-            thighs: {
-                inherit_filter: true,
-                spritesheet: "bikinibottom/doggyactive_bikinibottom_thighs.png"
-            },
-            knees: {
-                inherit_filter: true,
-                spritesheet: "bikinibottom/doggyactive_bikinibottom_knees.png"
-            },
-            ankles: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -5 },
-                spritesheet: "bikinibottom/doggyactive_bikinibottom_ankles.png"
-            },
-            anklesfootjob: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -5 },
-                spritesheet: "bikinibottom/doggyactive_bikinibottom_anklefootjob.png"
-            },
-        }
-    },
-    plainpanties: {
-        inherit_filter: true,
-        selected_variant: "hips",
-        variants: {
-            hips: {
-                inherit_filter: true,
-                spritesheet: "plainpanties/doggyactive_plainpanties_hips.png"
-            },
-            thighs: {
-                inherit_filter: true,
-                spritesheet: "plainpanties/doggyactive_plainpanties_thighs.png"
-            },
-            knees: {
-                inherit_filter: true,
-                spritesheet: "plainpanties/doggyactive_plainpanties_knees.png"
-            },
-            ankles: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -5 },
-                spritesheet: "plainpanties/doggyactive_plainpanties_ankles.png"
-            },
-            anklesfootjob: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -5 },
-                spritesheet: "plainpanties/doggyactive_plainpanties_anklesfootjob.png"
-            },
-        }
-    }, 
-    micropleatedskirt: {
-        inherit_filter: true,
-        selected_variant: "hips",
-        variants: {
-            hips: {
-                inherit_filter: true,
-                spritesheet: "micropleatedskirt/hips.png"
-            },
-            thighs: {
-                inherit_filter: true,
-                spritesheet: "micropleatedskirt/thighs.png"
-            },
-            knees: {
-                inherit_filter: true,
-                spritesheet: "micropleatedskirt/knees.png"
-            },
-            waist: {
-                inherit_filter: true,
-                spritesheet: "micropleatedskirt/waist.png"
-            },
-            ankles: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -6 },
-                spritesheet: "micropleatedskirt/ankles.png"
-            },
-            anklesfootjob: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -6 },
-                spritesheet: "micropleatedskirt/anklesfootjob.png"
-            },
-        }
-    },
-    skirt: {
-        inherit_filter: true,
-        selected_variant: "hips",
-        variants: {
-            hips: {
-                inherit_filter: true,
-                spritesheet: "skirt/doggyactive_skirt_hips.png"
-            },
-            thighs: {
-                inherit_filter: true,
-                spritesheet: "skirt/doggyactive_skirt_thighs.png"
-            },
-            knees: {
-                inherit_filter: true,
-                spritesheet: "skirt/doggyactive_skirt_knees.png"
-            },
-            ankles: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -6 },
-                spritesheet: "skirt/doggyactive_skirt_ankles.png"
-            },
-            anklesfootjob: {
-                inherit_filter: true,
-                translate: { x: 0, y: 0, depth: -6 },
-                spritesheet: "skirt/doggyactive_skirt_anklesfootjob.png"
-            },
-        }
-    }
-});
\ No newline at end of file
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/doggyactivechastitybelt.png b/img/dolls/dolls/player/doggy/bottom/clothes/doggyactivechastitybelt.png
deleted file mode 100644
index 2736a522cd6086bd985a5b71ed5ae197f87c7360..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/doggyactivechastitybelt.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/doggyactivechastitycage.png b/img/dolls/dolls/player/doggy/bottom/clothes/doggyactivechastitycage.png
deleted file mode 100644
index ec19462d4b123c52c9bd79484dea293425f7af9f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/doggyactivechastitycage.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/doggyactivechastitycagepenis.png b/img/dolls/dolls/player/doggy/bottom/clothes/doggyactivechastitycagepenis.png
deleted file mode 100644
index 61e23167332434f3e91c0d8aa71826590f7a0e12..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/doggyactivechastitycagepenis.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_ankles.png b/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_ankles.png
deleted file mode 100644
index 41c93f2026a238b165424424fb20361ba88dd064..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_ankles.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_anklesfootjob.png b/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_anklesfootjob.png
deleted file mode 100644
index d45d54c75d114c6240b33601b05fc1fa1615b4f0..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_anklesfootjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_hips.png b/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_hips.png
deleted file mode 100644
index d312086e3b97030cbc1dc11b7374c5d94540b4b3..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_hips.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_knees.png b/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_knees.png
deleted file mode 100644
index fcfe50215234dfd5af193fac7b530b6efb00afa9..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_knees.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_thighs.png b/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_thighs.png
deleted file mode 100644
index e792ff18ad27ec9fa1a2f80e84feaed9870e4612..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/gymbloomers/doggyactive_shorts_thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_ankles.png b/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_ankles.png
deleted file mode 100644
index 22b66e47afcb5130c26c0b136b1d15bbd4951139..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_ankles.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_knees.png b/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_knees.png
deleted file mode 100644
index d31ea6873f6e2c17cfdf7d6cfc5f8355b9465c3d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_knees.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_skirtup.png b/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_skirtup.png
deleted file mode 100644
index 44ce6a2f5a2ee0f44e15c08322d69a8fe08df878..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_skirtup.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_thighs.png b/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_thighs.png
deleted file mode 100644
index ce9124a181a6a2c6142e5e94747996ac8cca2f0b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_waist.png b/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_waist.png
deleted file mode 100644
index b2463389b3c6b4151d79b480ed342a4b177288e2..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyactive_towel_waist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_ankles.png b/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_ankles.png
deleted file mode 100644
index 22b66e47afcb5130c26c0b136b1d15bbd4951139..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_ankles.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_knees.png b/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_knees.png
deleted file mode 100644
index d31ea6873f6e2c17cfdf7d6cfc5f8355b9465c3d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_knees.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_skirtup.png b/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_skirtup.png
deleted file mode 100644
index 44ce6a2f5a2ee0f44e15c08322d69a8fe08df878..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_skirtup.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_thighs.png b/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_thighs.png
deleted file mode 100644
index ce9124a181a6a2c6142e5e94747996ac8cca2f0b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_waist.png b/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_waist.png
deleted file mode 100644
index b2463389b3c6b4151d79b480ed342a4b177288e2..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/lowertowel/doggyidle_towel_waist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/ankles.png b/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/ankles.png
deleted file mode 100644
index 67d63cf40558729034510c7db8d94211f5ea830d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/ankles.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/anklesfootjob.png b/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/anklesfootjob.png
deleted file mode 100644
index 6e6e264d1691ce20488c68684b609cc6da31d750..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/anklesfootjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/hips.png b/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/hips.png
deleted file mode 100644
index d5384385b77600ade3ead8de9396620ef782811b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/hips.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/knees.png b/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/knees.png
deleted file mode 100644
index 4fea62eba6ff12eddebf9e92c5f9db7b1fd13900..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/knees.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/thighs.png b/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/thighs.png
deleted file mode 100644
index d6f0be3cf3c544cf334858a087f902053d104529..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/waist.png b/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/waist.png
deleted file mode 100644
index 65188328526de4770021f9f50881df042202a124..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/micropleatedskirt/waist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_ankles.png b/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_ankles.png
deleted file mode 100644
index 41c93f2026a238b165424424fb20361ba88dd064..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_ankles.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_anklesfootjob.png b/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_anklesfootjob.png
deleted file mode 100644
index d45d54c75d114c6240b33601b05fc1fa1615b4f0..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_anklesfootjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_hips.png b/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_hips.png
deleted file mode 100644
index 6f5dfdbb2d637d38a7c1b4a661ddf4727a15c0bf..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_hips.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_knees.png b/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_knees.png
deleted file mode 100644
index 92421c58997bcd277a26ee096fb0b1c2d4d5ee11..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_knees.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_thighs.png b/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_thighs.png
deleted file mode 100644
index 604960c5f3c91fbffc4946a2201e8b073c72649d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/plainpanties/doggyactive_plainpanties_thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_ankles.png b/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_ankles.png
deleted file mode 100644
index f819880e8775361e60740de34ef6249c8d884d0c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_ankles.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_anklesfootjob.png b/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_anklesfootjob.png
deleted file mode 100644
index 674b742a5f96b9dac959ce539f16b21be755bab7..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_anklesfootjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_hips.png b/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_hips.png
deleted file mode 100644
index 575ea106e8d7a00343d1b168edd2d70a75923ad0..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_hips.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_knees.png b/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_knees.png
deleted file mode 100644
index a9f3b91d3cfe0a2de1a05aee1b4e2711142d62e2..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_knees.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_thighs.png b/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_thighs.png
deleted file mode 100644
index b0bcf872aa6630550d369729ad52da2331543e2c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyactive_shorts_thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyidle_shorts_anklesfootjob.png b/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyidle_shorts_anklesfootjob.png
deleted file mode 100644
index 674b742a5f96b9dac959ce539f16b21be755bab7..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/shorts/doggyidle_shorts_anklesfootjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_ankles.png b/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_ankles.png
deleted file mode 100644
index df582cd4ea021c1dc67b302e2a03eb7f78b62d57..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_ankles.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_anklesfootjob.png b/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_anklesfootjob.png
deleted file mode 100644
index 967cecb443dd074aa4de2c0489628db70a25aaf3..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_anklesfootjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_hips.png b/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_hips.png
deleted file mode 100644
index 6f85c3fab6f34e507305f35809b132831606869f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_hips.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_knees.png b/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_knees.png
deleted file mode 100644
index beb511f1402f0fcb9265c189919d23c0d1e2fab4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_knees.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_thighs.png b/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_thighs.png
deleted file mode 100644
index a7ef74bcb641dfabead49f241006b9a5f3081cc0..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_waist.png b/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_waist.png
deleted file mode 100644
index 9503fc945da674a27e75842fc502ca704955338c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/clothes/skirt/doggyactive_skirt_waist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/doggyactivebasefrontrear.png b/img/dolls/dolls/player/doggy/bottom/doggyactivebasefrontrear.png
deleted file mode 100644
index 733b78001b61ae690aabf54c1aba33620e5cf0a8..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/doggyactivebasefrontrear.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/doggyactivebaserightthigh.png b/img/dolls/dolls/player/doggy/bottom/doggyactivebaserightthigh.png
deleted file mode 100644
index b495398d817038226cb275e2ddd47e6fa1972b56..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/doggyactivebaserightthigh.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/doggyactivegoldchastitybelt.png b/img/dolls/dolls/player/doggy/bottom/doggyactivegoldchastitybelt.png
deleted file mode 100644
index 281b6d14b448504c704e2e8564180fd4f2897c07..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/doggyactivegoldchastitybelt.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/doggyactivepush.png b/img/dolls/dolls/player/doggy/bottom/doggyactivepush.png
deleted file mode 100644
index b31e1993932ab5a41c594a32ba906364af354b1a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/doggyactivepush.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/doggyactivepushlight.png b/img/dolls/dolls/player/doggy/bottom/doggyactivepushlight.png
deleted file mode 100644
index 67c6a3c4031b7ee7370467d2ac4f5c555dd7ff4e..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/doggyactivepushlight.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullfeetjobleft.png
deleted file mode 100644
index 9120ba0a0cd530f5fb5228c672000f785059a429..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullfeetjobright.png
deleted file mode 100644
index 5e98cf2b6a9c98d2845f825f79c80aa1cbabea08..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullrestleft.png
deleted file mode 100644
index cb2fa474cc581c76b38458e0b73b9fe2c0262d27..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullrestright.png
deleted file mode 100644
index f132cef95b5d8823267b4e06997dc2ad4ab1dec8..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/fullrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesfeetjobleft.png
deleted file mode 100644
index dc0213edbb27cf6b156271f9b6f969a6e89ec5c9..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesfeetjobright.png
deleted file mode 100644
index e0ee4de02cc01a4daa3cecf828e4722ef4b7c37a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesrestleft.png
deleted file mode 100644
index 9e4fb8cb0fc65c13e4f00077d22e396d060ec088..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesrestright.png
deleted file mode 100644
index d63ae8dcf271c2c6b41acd13b6d40bef4a8c9416..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/boysgymsocks/kneesrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullfeetjobleft.png
deleted file mode 100644
index f59473f73d298fc1d94c88f8881c5597868e4c9d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullfeetjobright.png
deleted file mode 100644
index a76fce0940cb3d43b663cdd2b25a654e35c1591a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullrestleft.png
deleted file mode 100644
index a4f7c46e0dfcc10319a8dc427bc1a1008af69527..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullrestright.png
deleted file mode 100644
index 971344ea5c9a2706231c04c8086807c6bd0de75c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/fullrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesfeetjobleft.png
deleted file mode 100644
index ffaa3e305b33aac0158aa7fbae4f6d1edc28e34c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesfeetjobright.png
deleted file mode 100644
index 53e1aba59e89ce71c5c29b4bf1fc8f9ebf41a52c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesrestleft.png
deleted file mode 100644
index f16bfb734d5e559b4d0b5aaeceb3d1e0b0a67bee..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesrestright.png
deleted file mode 100644
index b38ae01df3bac651541be92f34c1cdab5ff1190d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/christmas/kneesrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullfeetjobleft.png
deleted file mode 100644
index 188ae25d5b2687bc6c706c424517800a7c5dd55f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullfeetjobright.png
deleted file mode 100644
index bc6684885b0a83ba709bfbd632b058f50a83b155..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullrestleft.png
deleted file mode 100644
index 6ba1f502db5117baf9d2cbaef83a50e827636659..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullrestright.png
deleted file mode 100644
index 3dd9de7a545bb9ad3a6def809a7a5501bbb6b645..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/fullrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesfeetjobleft.png
deleted file mode 100644
index b4937c1f76315a6c81cdb654be43f1532f8129dd..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesfeetjobright.png
deleted file mode 100644
index 087767a9c232fd02fe3ddddc6a900fcd681968dd..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesrestleft.png
deleted file mode 100644
index 9ee4aaf7558f42ac6fc91452f61996b8c653fb5a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesrestright.png
deleted file mode 100644
index 86cf000075ccf4e13c046e5a6469036df51ed234..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnetstockings/kneesrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/fullfeetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/fullfeetjob.png
deleted file mode 100644
index cd22361ac16c9b00387db1c9b9b361a89e850f93..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/fullfeetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/fullrest.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/fullrest.png
deleted file mode 100644
index d3a6b12c4d8e70d875db04e297a8cb7e16a6c002..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/fullrest.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/kneesfeetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/kneesfeetjob.png
deleted file mode 100644
index e3d2a085597f4c509e0011ca16b7afda6a8e4be5..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/kneesfeetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/kneesrest.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/kneesrest.png
deleted file mode 100644
index c3907e63769f92bd064690500b11dd1289fdbd6b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/fishnettights/kneesrest.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullfeetjobleft.png
deleted file mode 100644
index cc475a1f923ba662fa8c36885feca0e3e25fbe6a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullfeetjobright.png
deleted file mode 100644
index 8f7763af2ba021732546ae3848d54ead6683fe61..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullrestleft.png
deleted file mode 100644
index 58461136056952bd2ea8fc889e05f74a46301769..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullrestright.png
deleted file mode 100644
index a1667fd6164cb48c97dd11342d594d21952b4ecf..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/fullrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesfeetjobleft.png
deleted file mode 100644
index 8a2852b52267a0e34ec642e4b5e6ea3b84863273..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesfeetjobright.png
deleted file mode 100644
index 5f21b76d9835472b02faf734685604535aaf1e57..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesrestleft.png
deleted file mode 100644
index 1ca30924fba809acc444542ce8786ad774afc669..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesrestright.png
deleted file mode 100644
index 91263ac15a138c3848221d3109d3c3ed3a5e3dd7..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/garterstockings/kneesrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullfeetjobleft.png
deleted file mode 100644
index abb3af3634145aa70d5fd7d3981310dabeb38858..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullfeetjobright.png
deleted file mode 100644
index a5d36e6f3cc076dcc70bc2f5acb0b2b2e1710dc9..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullrestleft.png
deleted file mode 100644
index d14a6cd7145123877e4535d8d9dd4962e61876b2..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullrestright.png
deleted file mode 100644
index 2f57cdfd788b6b524eaf375b21713cea71a67da8..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/fullrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesfeetjobleft.png
deleted file mode 100644
index ad726f9c2074b4ede7757133403972b2a8b01728..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesfeetjobright.png
deleted file mode 100644
index e0ee4de02cc01a4daa3cecf828e4722ef4b7c37a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesrestleft.png
deleted file mode 100644
index 66476e7559ddd1867dc2466241c5084d51acef9f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesrestright.png
deleted file mode 100644
index d63ae8dcf271c2c6b41acd13b6d40bef4a8c9416..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/girlsgymsocks/kneesrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/goldanklets/feetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/goldanklets/feetjob.png
deleted file mode 100644
index 9ebc7a72a5bb93ddc3dea6aca3b5fd18068e29eb..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/goldanklets/feetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/goldanklets/rest.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/goldanklets/rest.png
deleted file mode 100644
index 95057da3e2ba88893d91430280cb33babd0ef35a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/goldanklets/rest.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullfeetjobleft.png
deleted file mode 100644
index 219af0598b4ca245164bd35b676f07d9c17b0ab8..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullfeetjobright.png
deleted file mode 100644
index d51a17e2a73619f22c5acb6d3b943ccc4754136d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullrestleft.png
deleted file mode 100644
index eebdb98d0aacb6a11f319bc9ecf341ae4b31d59b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullrestright.png
deleted file mode 100644
index 0dadefeb304479a4576fffcc69a555cad3253cd2..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/fullrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesfeetjobleft.png
deleted file mode 100644
index 1d893800397df0479118d63d5538879c45bd91bf..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesfeetjobright.png
deleted file mode 100644
index aca49cbf75cb6bcaf19d6f982713910c3d233eeb..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesrestleft.png
deleted file mode 100644
index f525628857d9b818461bfd39e0a3ec71603d6de4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesrestright.png
deleted file mode 100644
index b0f505321a3014bd30cf19e1b0ae1e958469a695..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/legwarmers/kneesrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/bootheels/feetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/bootheels/feetjob.png
deleted file mode 100644
index bd22b34d3190dfc071d3e3e82d9880375c6f7a18..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/bootheels/feetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/bootheels/thighs.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/bootheels/thighs.png
deleted file mode 100644
index da086c07c4d234018a203eb434b8dc0c7e971914..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/bootheels/thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/courtheels/feetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/courtheels/feetjob.png
deleted file mode 100644
index 32fddf0c8ff7ee41ec7b810731837b53fa69ccbd..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/courtheels/feetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/courtheels/thighs.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/courtheels/thighs.png
deleted file mode 100644
index 1df707c8f790ed2f38095d9ecadae4c02afefe04..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/courtheels/thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/kittenheels/feetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/kittenheels/feetjob.png
deleted file mode 100644
index 51d61557c4ffa2faa4a94f0e4f3d9786d7425874..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/kittenheels/feetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/kittenheels/thighs.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/kittenheels/thighs.png
deleted file mode 100644
index 109d05cfe0d54e6a3d1672872555838630e85ee4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/kittenheels/thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/platformheels/feetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/platformheels/feetjob.png
deleted file mode 100644
index 75e36489ee3e789442f96898e27c5a02f20aee8c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/platformheels/feetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/platformheels/thighs.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/platformheels/thighs.png
deleted file mode 100644
index d18d2dc7687ed254553ff8e455210910e6ebb85c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/platformheels/thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/feetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/feetjob.png
deleted file mode 100644
index 7d1ef2d5df766a642c0a9a60c0af2a40cf9e309d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/feetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/feetjobacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/feetjobacc.png
deleted file mode 100644
index 3ac8cbe2cc8dcd7f24f1d62fc372bcc52fcfe796..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/feetjobacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/thighs.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/thighs.png
deleted file mode 100644
index f2f233dd5c4f8b59e56b7ec25804af4b39895a88..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/thighsacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/thighsacc.png
deleted file mode 100644
index b91fc267737a4436b141448ebfc2ffc2289dd449..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/stripperheels/thighsacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/feetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/feetjob.png
deleted file mode 100644
index f7d1cbd2fec9a10d49fd3371f981f3816dcea723..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/feetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/feetjobacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/feetjobacc.png
deleted file mode 100644
index 03e0592e28108df905a70e6bd73930374df85125..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/feetjobacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/thighs.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/thighs.png
deleted file mode 100644
index 02b7bc34e7ae99dd0ec2655e0fffd58a7fd0c3aa..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/thighsacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/thighsacc.png
deleted file mode 100644
index e8829975ba65c730c8839a066a79e8e06694c8e8..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/shoes/wedgesandals/thighsacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullfeetjobleft.png
deleted file mode 100644
index 43f5440aa303884aa0a3f45eaad990f89769cccb..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullfeetjobright.png
deleted file mode 100644
index 401083932fba69796258e49a591e4d831c739718..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullrestleft.png
deleted file mode 100644
index f1a0d2792fed3fbd8955028446e4261403b2c720..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullrestright.png
deleted file mode 100644
index ef20f3fc56ef6455a8cf8264a263819d0f651239..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/fullrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesfeetjobleft.png
deleted file mode 100644
index f8fdaee6c97c51d6b0baa2e9b692c4059417c348..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesfeetjobright.png
deleted file mode 100644
index 77d2fcb94ba3b7ac2761e402496595bd7f969c4e..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesrestleft.png
deleted file mode 100644
index 49296da5180e23b610e0ee0ea47e651d62d18749..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesrestright.png
deleted file mode 100644
index 0fe210491112fb912d7acd2ca67f402c42f9bdd4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stockings/kneesrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobleft.png
deleted file mode 100644
index 39c7717aa39dbf46212b6aeec2ffd8878f75f84a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobleftacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobleftacc.png
deleted file mode 100644
index a2a41e25fe1767ecb35677552ba10caf722d82ad..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobleftacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobright.png
deleted file mode 100644
index f19ac49b45c31cfcd9c0a6a80f9ea7417b6badb8..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobrightacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobrightacc.png
deleted file mode 100644
index 1faff3da34e0505457504bf37f8545cb2eb14b27..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullfeetjobrightacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestleft.png
deleted file mode 100644
index 7d8b70f59a408a2fac2bf8ee49837abac9dbeb7f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestleftacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestleftacc.png
deleted file mode 100644
index 54c0e6591509ef92e1ff90c107f6bee2025670dc..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestleftacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestright.png
deleted file mode 100644
index b12650540e5a986a0b1de265cc46706390e4500a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestrightacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestrightacc.png
deleted file mode 100644
index 963ae91497112f91ffbdda9ddd2fbaf03d4ba6ce..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/fullrestrightacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobleft.png
deleted file mode 100644
index d749ea8c30538f9275f1a0e1bac9d6c71fbce474..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobleftacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobleftacc.png
deleted file mode 100644
index f5b1e97661814582c5f951a766001170259d2f98..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobleftacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobright.png
deleted file mode 100644
index 992700952f2dd04741bcad732b133eb3b6cd7f56..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobrightacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobrightacc.png
deleted file mode 100644
index b887a7c384d4f23a357b8ade6d45910c54767d03..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesfeetjobrightacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestleft.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestleft.png
deleted file mode 100644
index 01b6311b82b2763797bd59f9ab03bcc5eb84de00..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestleftacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestleftacc.png
deleted file mode 100644
index 6b9cc543869b348a6a575e5f8ee892e70b575c87..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestleftacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestright.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestright.png
deleted file mode 100644
index 59ba93f9f9a24665d089d386e3e2d950e6ee8049..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestrightacc.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestrightacc.png
deleted file mode 100644
index 8a547a335948ae58ab965f1bd5060d3e6b83bd83..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/stripedthighhighs/kneesrestrightacc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/fullfeetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/fullfeetjob.png
deleted file mode 100644
index 713120765232ba280e442fdc407a3f41b146a26f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/fullfeetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/fullrest.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/fullrest.png
deleted file mode 100644
index eb8d5137e59dc5c56457d8c4ff3adfa05594e603..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/fullrest.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/kneesfeetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/kneesfeetjob.png
deleted file mode 100644
index af9a8c64534382b0c7aefc7e3bc7e33747db3513..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/kneesfeetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/kneesrest.png b/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/kneesrest.png
deleted file mode 100644
index 7793b62894c883257e9c172238c213518fa52248..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/clothes/tights/kneesrest.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/doggyactivebaselegleft.png b/img/dolls/dolls/player/doggy/bottom/legs/doggyactivebaselegleft.png
deleted file mode 100644
index 0bd0cb6607480fa4f792c504f981668c3deffa54..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/doggyactivebaselegleft.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/doggyactivebaselegright.png b/img/dolls/dolls/player/doggy/bottom/legs/doggyactivebaselegright.png
deleted file mode 100644
index a39ecff92a6293d1b9200aaef3be8b32a237a89a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/doggyactivebaselegright.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/legs/doggyactivefeetjob.png b/img/dolls/dolls/player/doggy/bottom/legs/doggyactivefeetjob.png
deleted file mode 100644
index 066248d32e2ba1fdd540a71c2d4d9093b3655fb9..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/legs/doggyactivefeetjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/penis/doggyactivechastitycagepenis.png b/img/dolls/dolls/player/doggy/bottom/penis/doggyactivechastitycagepenis.png
deleted file mode 100644
index 83d0a9ec0877bc040e5dc7cf46ad7151141e1d31..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/penis/doggyactivechastitycagepenis.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/penis/doggyactivepenis.png b/img/dolls/dolls/player/doggy/bottom/penis/doggyactivepenis.png
deleted file mode 100644
index baccb6a8033c35092f4d4aa3ed83653769475b06..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/penis/doggyactivepenis.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/penis/doggyactivepenisvirgin.png b/img/dolls/dolls/player/doggy/bottom/penis/doggyactivepenisvirgin.png
deleted file mode 100644
index 2e862be79ad2eb784ce5bc9b296ad016f2fdfc79..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/penis/doggyactivepenisvirgin.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/transformations/cat/tail.png b/img/dolls/dolls/player/doggy/bottom/transformations/cat/tail.png
deleted file mode 100644
index 18463ffde4eb1b2e61b3bf1c8cfbd9f97be08989..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/transformations/cat/tail.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/transformations/cow/tail.png b/img/dolls/dolls/player/doggy/bottom/transformations/cow/tail.png
deleted file mode 100644
index 4f25a9643a856775858575fe14834737ec2be1d4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/transformations/cow/tail.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tail/classic.png b/img/dolls/dolls/player/doggy/bottom/transformations/demon/tail/classic.png
deleted file mode 100644
index 452c3d1b7c47900cd4309fd6c1f06848e4af2dfa..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tail/classic.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tail/default.png b/img/dolls/dolls/player/doggy/bottom/transformations/demon/tail/default.png
deleted file mode 100644
index 989c7578e09c387396859992f4ca25bec9b58f62..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tail/default.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexback/classic.png b/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexback/classic.png
deleted file mode 100644
index 75d8b19cfa18298b3b451d0baf9e8c2e9fae92fb..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexback/classic.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexback/default.png b/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexback/default.png
deleted file mode 100644
index 75d8b19cfa18298b3b451d0baf9e8c2e9fae92fb..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexback/default.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexfront/classic.png b/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexfront/classic.png
deleted file mode 100644
index c684c5703491f86b9dc2aef035c03ada8a94249b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexfront/classic.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexfront/default.png b/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexfront/default.png
deleted file mode 100644
index db1dd3a501f3dd0d880edd22ba588397df322df3..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/transformations/demon/tailsexfront/default.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/transformations/hirsute/pubes.png b/img/dolls/dolls/player/doggy/bottom/transformations/hirsute/pubes.png
deleted file mode 100644
index 805d3697db45adde73c7b5846afa2426bce25938..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/transformations/hirsute/pubes.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/bottom/transformations/wolf/tail.png b/img/dolls/dolls/player/doggy/bottom/transformations/wolf/tail.png
deleted file mode 100644
index ca3772bd093b1e181a112e2445e623f0cacc89fd..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/bottom/transformations/wolf/tail.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/doggy.js b/img/dolls/dolls/player/doggy/doggy.js
deleted file mode 100644
index 3ac574902fecc6be7175025420c6a89f9e105eb3..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/player/doggy/doggy.js
+++ /dev/null
@@ -1,63 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-    doggy: {
-        selected_variant: "active",
-        inherit_filter: true,
-        promulgate_sequence_info: true, //forces any descendant accessories to inherit sequence info by default
-        frames: 4,
-        width: 1024,
-        sequences: { 
-            deep: [2,3,3,3,0,1,1], //for deep penetration by big NPCs with 7 frames (eg horses)
-            deepcum: [2,3,3,3,0,1,1,2,3,3,3,0,1,1], //double length to allow for cumshot animation
-            active: [0,1,2,3],
-            activecum: [0,1,2,3,0,1,2,3], // double length to allow for cumshot animation
-            still: [0], //single frame
-            idle: [0, 2] //two-frame idle animation
-        },
-        variants: {
-            deep : {
-                import: {variable: "base_doggy"},
-                selected_sequence: "deep"
-            }, 
-            deepcum: {
-                import: {variable: "base_doggy"},
-                selected_sequence: "deepcum"
-            },
-            active: {
-                import: {variable: "base_doggy"},
-                selected_sequence: "active"
-            },
-            activecum: {
-                import: {variable: "base_doggy"},
-                selected_sequence: "activecum"
-            },
-            idle : {
-                import: {variable: "base_doggy"},
-                selected_sequence: "idle"
-            },
-            still: {
-                import: {variable: "base_doggy"},
-                selected_sequence: "still"
-            }
-        }
-    },
-    base_doggy: {        
-        spritesheet: "doggyactivebase.png",
-        translate: {x:0, y:0, depth: -5},
-        inherit_filter: true,
-        inherit_sequence_info: true,
-        accessories: {
-            bottom: {
-                import: {
-                    filepath: "bottom/bottom.js",
-                    variable: "bottom"
-                }
-            },
-            top: {
-                import: {
-                    filepath: "top/top.js",
-                    variable: "top"
-                }
-            }
-        }       
-    }
-});
\ No newline at end of file
diff --git a/img/dolls/dolls/player/doggy/doggyactivebase.png b/img/dolls/dolls/player/doggy/doggyactivebase.png
deleted file mode 100644
index acc9adbdbbab0a38760ab7a36ce6db27bd48c10d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/doggyactivebase.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/doggyactivebasefront.png b/img/dolls/dolls/player/doggy/doggyactivebasefront.png
deleted file mode 100644
index 4e686355a865355d90f2d6e7822f9bc686ce84a4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/doggyactivebasefront.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/doggyactivefeetjobpenis.png b/img/dolls/dolls/player/doggy/doggyactivefeetjobpenis.png
deleted file mode 100644
index 49961db83747703d5044e3aa4c13035c84c8db30..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/doggyactivefeetjobpenis.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/doggyactivelefthandjobpenis.png b/img/dolls/dolls/player/doggy/doggyactivelefthandjobpenis.png
deleted file mode 100644
index fa371645ffd40298a08032775c208fd3c3652912..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/doggyactivelefthandjobpenis.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/doggyactiverighthandjobpenis.png b/img/dolls/dolls/player/doggy/doggyactiverighthandjobpenis.png
deleted file mode 100644
index 5506f44997d099ccc50b87a12d205a3f75797b15..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/doggyactiverighthandjobpenis.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/doggyactiveshadow.png b/img/dolls/dolls/player/doggy/doggyactiveshadow.png
deleted file mode 100644
index b34b9b215f6f32d11ede19451032867c5dd9faf2..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/doggyactiveshadow.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/arms/doggyactivebaseleftarm.png b/img/dolls/dolls/player/doggy/top/arms/doggyactivebaseleftarm.png
deleted file mode 100644
index 7af45d39c7e3a5381aeba2d05229d6fe7d02ce1d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/arms/doggyactivebaseleftarm.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/arms/doggyactivebaserightarm.png b/img/dolls/dolls/player/doggy/top/arms/doggyactivebaserightarm.png
deleted file mode 100644
index 5abf2e7191654b37a1e609952bbfb3a9d019c8fd..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/arms/doggyactivebaserightarm.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/arms/doggyactiveleftarmbound.png b/img/dolls/dolls/player/doggy/top/arms/doggyactiveleftarmbound.png
deleted file mode 100644
index 795950d01011a59e81d885cca609d21bdfa78de0..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/arms/doggyactiveleftarmbound.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/arms/doggyactivelefthandjob.png b/img/dolls/dolls/player/doggy/top/arms/doggyactivelefthandjob.png
deleted file mode 100644
index e092c5c6d92c7d1ef54fcd6cf699a7e4c0d50e68..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/arms/doggyactivelefthandjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/arms/doggyactiverighthandjob.png b/img/dolls/dolls/player/doggy/top/arms/doggyactiverighthandjob.png
deleted file mode 100644
index fdcb9aaeb1674fb73d0b8c59e17dc77264e58575..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/arms/doggyactiverighthandjob.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/bikinitop/doggyactive_bikinitop_chest.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/bikinitop/doggyactive_bikinitop_chest.png
deleted file mode 100644
index d6c766fb0f3b9bf2114759bb55faadf50ec158bd..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/bikinitop/doggyactive_bikinitop_chest.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/bikinitop/doggyactive_bikinitop_midriff.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/bikinitop/doggyactive_bikinitop_midriff.png
deleted file mode 100644
index cab2e3c02ebf8ae5617e5204cb84de36c8df1ecc..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/bikinitop/doggyactive_bikinitop_midriff.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/bikinitop/doggyactive_bikinitop_thorax.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/bikinitop/doggyactive_bikinitop_thorax.png
deleted file mode 100644
index 4f0811ea983c588c11cf0ae01546246c6cb61d28..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/bikinitop/doggyactive_bikinitop_thorax.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/huge.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/huge.png
deleted file mode 100644
index 34ee84a20f42ce780ece3b9e3e77a6ec7b6ca2f7..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/huge.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/large.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/large.png
deleted file mode 100644
index 3fd1e7c8ff54c207bf58f00effe8b5e55d33d203..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/large.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/none.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/none.png
deleted file mode 100644
index 1abcccd378f67aeeb1f642bd7f8d8dd490921996..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/none.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/small.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/small.png
deleted file mode 100644
index 9570e0c585c8e77a2884c684bd7ab977cb55d4c0..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/small.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/tiny.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/tiny.png
deleted file mode 100644
index fd35714f8e7632feb7aac2917ea258a81f15ae15..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/chestwrap/tiny.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_hips.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_hips.png
deleted file mode 100644
index 27b6d00c7c30f3b111901d9de89ba3cb0a241bcf..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_hips.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_neck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_neck.png
deleted file mode 100644
index 0866dd50d093b767e36ae6c3c083e3bbdf02082c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_neck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_thighs.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_thighs.png
deleted file mode 100644
index 8116d6e672410017e573ba8e7c9e04821d8a4ce5..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_thighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_tummy.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_tummy.png
deleted file mode 100644
index afc4bb5341245f7e4b1e1850e577faccf6bcf477..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/dress/doggyactive_dress_tummy.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundneck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundneck.png
deleted file mode 100644
index e6d1366bd282c78c03335a808fd0128d52b6e7a8..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundneck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundneck_acc.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundneck_acc.png
deleted file mode 100644
index e353590c28e9519ac97b24c974ab49fb9a99c14f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundneck_acc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundwaist.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundwaist.png
deleted file mode 100644
index 3bd608bb0a6b87ef66522bd6dcde8980809ae1e6..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundwaist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundwaist_acc.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundwaist_acc.png
deleted file mode 100644
index 1a924686013d135b658271adb6c4bfaa91e4513d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/boundwaist_acc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/neck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/neck.png
deleted file mode 100644
index 1b68f5fc3a78ab536fc351b36a307c2f055e3411..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/neck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/neck_acc.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/neck_acc.png
deleted file mode 100644
index 20ced464a0ae6e860b785d86d410cfadbafbddfd..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/neck_acc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/waist.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/waist.png
deleted file mode 100644
index a211807b27abb050829d162f690827956789e1a4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/waist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/waist_acc.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/waist_acc.png
deleted file mode 100644
index f9dd7cf9094ccc9af169e6bbff8a81ec7c4ff30a..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/gymshirt/waist_acc.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_boundneck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_boundneck.png
deleted file mode 100644
index b28d004834843468a49c4504c8ce807a1a02ff61..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_boundneck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_boundwaist.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_boundwaist.png
deleted file mode 100644
index b4b6ffb7ff68038ad6d912eb51f299e1b2c40f1d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_boundwaist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_neck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_neck.png
deleted file mode 100644
index f63ef9bccce67bfecdc1bac41004854d2dff54ad..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_neck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_waist.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_waist.png
deleted file mode 100644
index 87ffb8c1ddd4a3e793d741d08bb17de6a4d9d24f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/t-shirt/doggyactive_tshirt_waist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_boundneck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_boundneck.png
deleted file mode 100644
index 337fb130c3935c94310d6969c8f63c8f057e44c4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_boundneck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_boundwaist.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_boundwaist.png
deleted file mode 100644
index dc13bcf0450cbd1502cf63a5baf8e186577e9a0c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_boundwaist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_neck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_neck.png
deleted file mode 100644
index 49d5a6b38d8372c4766951ef05a6096e957d0a40..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_neck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_waist.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_waist.png
deleted file mode 100644
index 5fe39f6903e1e2eee4ac3f9681371aa6103e5982..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/tanktop/doggyactive_tanktop_waist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/huge.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/huge.png
deleted file mode 100644
index 3e1988ae334ab675d2e3cff22c442d56d9835278..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/huge.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/large.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/large.png
deleted file mode 100644
index 3588a7d40523622f6fa854e5d3b48c9c9bae0632..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/large.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/none.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/none.png
deleted file mode 100644
index ff9ce8e505ab69718ed50c5e084504d9fa7f0376..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/none.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/small.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/small.png
deleted file mode 100644
index 7326e2eeb1ad7fba927ae1501bbd25608fef2b85..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/small.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/tiny.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/tiny.png
deleted file mode 100644
index 100d8c0678a0c52a27093ad85ab9ec7be67f7147..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/tiefronttop/tiny.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_boundneck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_boundneck.png
deleted file mode 100644
index 95b3be5d017598006d17175a0a889aa31cfb1913..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_boundneck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_boundwaist.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_boundwaist.png
deleted file mode 100644
index 78341824bebabb796c64f1ee2dad9f3c13d11937..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_boundwaist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_neck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_neck.png
deleted file mode 100644
index ea6e401bff0da0cab1c0759bde77c23310c122b9..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_neck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_waist.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_waist.png
deleted file mode 100644
index 9708e747a5bb807542ba6fd65d0b43593a55748b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyactive_towel_waist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_boundneck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_boundneck.png
deleted file mode 100644
index 95b3be5d017598006d17175a0a889aa31cfb1913..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_boundneck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_boundwaist.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_boundwaist.png
deleted file mode 100644
index 78341824bebabb796c64f1ee2dad9f3c13d11937..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_boundwaist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_neck.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_neck.png
deleted file mode 100644
index ea6e401bff0da0cab1c0759bde77c23310c122b9..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_neck.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_waist.png b/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_waist.png
deleted file mode 100644
index 9708e747a5bb807542ba6fd65d0b43593a55748b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/clothes/uppertowel/doggyidle_towel_waist.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/clothes_top.js b/img/dolls/dolls/player/doggy/top/breasts/clothes_top.js
deleted file mode 100644
index eecd9e772cdc367fc2d72204c2f59909d760ed48..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/player/doggy/top/breasts/clothes_top.js
+++ /dev/null
@@ -1,257 +0,0 @@
-
-
-DoLHouse.add({//IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-    clothes: {
-        translate: { x: 0, y: 0, depth: 9 },
-        accessories: {
-            upper: {
-                inherit_filter: true,
-                selected_variant: "naked",
-                variants: {
-                    naked: {},
-                    bikinitop: {
-                        inherit_filter: true,
-                        selected_variant: "hips",
-                        variants: {
-                            chest: {
-                                inherit_filter: true,
-                                spritesheet: "bikinitop/doggyactive_bikinitop_chest.png"
-                            },
-                            midriff: {
-                                inherit_filter: true,
-                                spritesheet: "bikinitop/doggyactive_bikinitop_midriff.png"
-                            },
-                            thorax: {
-                                inherit_filter: true,
-                                spritesheet: "bikinitop/doggyactive_bikinitop_thorax.png"
-                            },
-                        }
-                    },
-                    dress: {
-                        inherit_filter: true,
-                        selected_variant: "thighs",
-                        variants: {
-                            hips: {
-                                inherit_filter: true,
-                                spritesheet: "dress/doggyactive_dress_hips.png"
-                            },
-                            thighs: {
-                                inherit_filter: true,
-                                spritesheet: "dress/doggyactive_dress_thighs.png"
-                            },
-                            tummy: {
-                                inherit_filter: true,
-                                spritesheet: "dress/doggyactive_dress_tummy.png"
-                            },
-                            neck: {
-                                inherit_filter: true,
-                                spritesheet: "dress/doggyactive_dress_neck.png"
-                            },
-                        }
-                    },
-                    gymshirt: {
-                        inherit_filter: true,
-                        selected_variant: "normal",
-                        variants: {
-                            normal: {
-                                inherit_filter: true,
-                                accessories: {
-                                    cloth: {
-                                        inherit_filter: true,
-                                        selected_variant: "waist",
-                                        variants: {
-                                            waist: {
-                                                inherit_filter: true,
-                                                spritesheet: "gymshirt/waist.png",
-                                            },
-                                            neck: {
-                                                inherit_filter: true,
-                                                spritesheet: "gymshirt/neck.png"
-                                            }
-                                        }
-                                    },
-                                    accents: {
-                                        selected_variant: "naked",
-                                        variants: {
-                                            naked: {},
-                                            waist: {
-                                                inherit_filter: true,
-                                                spritesheet: "gymshirt/waist_acc.png",
-                                            },
-                                            neck: {
-                                                inherit_filter: true,
-                                                spritesheet: "gymshirt/neck_acc.png"
-                                            }
-                                        }
-                                    }
-                                }
-                            },
-                            bound: {
-                                inherit_filter: true,
-                                accessories: {
-                                    cloth: {
-                                        selected_variant: "waist",
-                                        inherit_filter: true,
-                                        variants: {
-                                            waist: {
-                                                inherit_filter: true,
-                                                spritesheet: "gymshirt/boundwaist.png",
-                                            },
-                                            neck: {
-                                                inherit_filter: true,
-                                                spritesheet: "gymshirt/boundneck.png"
-                                            }
-                                        }
-                                    },
-                                    accents: {
-                                        selected_variant: "waist",
-                                        variants: {
-                                            waist: {
-                                                inherit_filter: true,
-                                                spritesheet: "gymshirt/boundwaist_acc.png",
-                                            },
-                                            neck: {
-                                                inherit_filter: true,
-                                                spritesheet: "gymshirt/boundneck_acc.png"
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    },
-                    tanktop: {
-                        inherit_filter: true,
-                        selected_variant: "normal",
-                        variants: {
-                            normal: {
-                                inherit_filter: true,
-                                variants: {
-                                    waist: {
-                                        inherit_filter: true,
-                                        spritesheet: "tanktop/doggyactive_tanktop_waist.png"
-                                    },
-                                    neck: {
-                                        inherit_filter: true,
-                                        spritesheet: "tanktop/doggyactive_tanktop_neck.png"
-                                    }
-                                }
-                            },
-                            bound: {
-                                inherit_filter: true,
-                                variants: {
-                                    waist: {
-                                        inherit_filter: true,
-                                        spritesheet: "tanktop/doggyactive_tanktop_boundwaist.png"
-                                    },
-                                    neck: {
-                                        inherit_filter: true,
-                                        spritesheet: "tanktop/doggyactive_tanktop_boundneck.png"
-                                    }
-                                }
-                            }
-
-                        }
-                    },
-                    towel : {
-
-                    },
-                    tshirt : {
-                        inherit_filter: true,
-                        selected_variant: "normal",
-                        variants: {
-                            normal: {
-                                inherit_filter: true,
-                                variants: {
-                                    waist: {
-                                        inherit_filter: true,
-                                        spritesheet: "tshirt/doggyactive_tshirt_waist.png"
-                                    },
-                                    neck: {
-                                        inherit_filter: true,
-                                        spritesheet: "tshirt/doggyactive_tshirt_neck.png"
-                                    }
-                                }
-                            },
-                            bound: {
-                                inherit_filter: true,
-                                variants: {
-                                    waist: {
-                                        inherit_filter: true,
-                                        spritesheet: "tshirt/doggyactive_tshirt_boundwaist.png"
-                                    },
-                                    neck: {
-                                        inherit_filter: true,
-                                        spritesheet: "tshirt/doggyactive_tshirt_boundneck.png"
-                                    }
-                                }
-                            }
-
-                        }
-                    }
-                    
-                }
-            },
-            under_upper: {
-                inherit_filter: true,
-                selected_variant: "naked",
-                variants: {
-                    naked: {},
-                    chestwrap: {
-                        inherit_filter: true,
-                        selected_variant: "none",
-                        variants: {
-                            none: {
-                                inherit_filter: true,
-                                spritesheet: "chestwrap/none.png"
-                            },
-                            tiny: {
-                                inherit_filter: true,
-                                spritesheet: "chestwrap/tiny.png"
-                            },
-                            small: {
-                                inherit_filter: true,
-                                spritesheet: "chestwrap/small.png"
-                            },
-                            large: {
-                                inherit_filter: true,
-                                spritesheet: "chestwrap/large.png"
-                            },
-                            huge: {
-                                inherit_filter: true,
-                                spritesheet: "chestwrap/huge.png"
-                            },
-                        }
-                    },
-                    tiefronttop: {
-                        inherit_filter: true,
-                        selected_variant: "none",
-                        variants: {
-                            none: {
-                                inherit_filter: true,
-                                spritesheet: "tiefronttop/none.png"
-                            },
-                            tiny: {
-                                inherit_filter: true,
-                                spritesheet: "tiefronttop/tiny.png"
-                            },
-                            small: {
-                                inherit_filter: true,
-                                spritesheet: "tiefronttop/small.png"
-                            },
-                            large: {
-                                inherit_filter: true,
-                                spritesheet: "tiefronttop/large.png"
-                            },
-                            huge: {
-                                inherit_filter: true,
-                                spritesheet: "tiefronttop/huge.png"
-                            },
-                        }
-                    }
-                }
-            },
-        }
-    }
-});
\ No newline at end of file
diff --git a/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreastshuge.png b/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreastshuge.png
deleted file mode 100644
index 1c848a2993432ad7bbcea332b7e55adfbfca712f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreastshuge.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreastslarge.png b/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreastslarge.png
deleted file mode 100644
index 986f073407028adaa8058126fd3070c4331f5075..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreastslarge.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreastssmall.png b/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreastssmall.png
deleted file mode 100644
index 2e9f70e46ae3c752d0ccc2056aa20fcd3827de8c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreastssmall.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreaststiny.png b/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreaststiny.png
deleted file mode 100644
index 95667767b88ac51ce6224ee43caa65d7011b4553..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/breasts/doggyactivebreaststiny.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/doggyactivebasefrontoral.png b/img/dolls/dolls/player/doggy/top/doggyactivebasefrontoral.png
deleted file mode 100644
index 01ff3e30eacd27db49309ed364405bdf47306dda..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/doggyactivebasefrontoral.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/doggyactivebasefrontoralhuge.png b/img/dolls/dolls/player/doggy/top/doggyactivebasefrontoralhuge.png
deleted file mode 100644
index ed314424af8678add6324868b365c3e81fce13a4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/doggyactivebasefrontoralhuge.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush1.png b/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush1.png
deleted file mode 100644
index 1dd2686dd2039b6930fbf7c075abab75c83dae2c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush1.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush2.png b/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush2.png
deleted file mode 100644
index 791b70eafcedcd50b4ca6864195af3e80cfd7cea..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush2.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush3.png b/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush3.png
deleted file mode 100644
index 596516a50e988b808c860288058f519b4db09370..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush3.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush4.png b/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush4.png
deleted file mode 100644
index b80135ce0d2a2bd36d6846416e36a90fbdefa3d6..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush4.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush5.png b/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush5.png
deleted file mode 100644
index 736af0efb32bc20abb485b4fcfb19932e73bc617..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/blush/doggyactiveblush5.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/clothes/blindfold/full.png b/img/dolls/dolls/player/doggy/top/face/clothes/blindfold/full.png
deleted file mode 100644
index 2cd2fab14eefb501654051bb631bfcac74b324e6..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/clothes/blindfold/full.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/clothes/cow/full.png b/img/dolls/dolls/player/doggy/top/face/clothes/cow/full.png
deleted file mode 100644
index 69706cd2562da1e59483c46b0a835b3c8e2a39eb..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/clothes/cow/full.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/clothes/gag/full.png b/img/dolls/dolls/player/doggy/top/face/clothes/gag/full.png
deleted file mode 100644
index 6316e7932d80e7158aa6cfdc7bc2f5f6cc07d73e..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/clothes/gag/full.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/clothes/muzzle/full.png b/img/dolls/dolls/player/doggy/top/face/clothes/muzzle/full.png
deleted file mode 100644
index 48cb371828c4c6fab917b9b91b195fd234299bf5..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/clothes/muzzle/full.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/doggyactiveeyes.png b/img/dolls/dolls/player/doggy/top/face/eyes/doggyactiveeyes.png
deleted file mode 100644
index 87f1bb42f7d46103dbe974a3a1ba62402d68a013..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/doggyactiveeyes.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/doggyactiveeyesempty.png b/img/dolls/dolls/player/doggy/top/face/eyes/doggyactiveeyesempty.png
deleted file mode 100644
index 89d17d01913415327ed823eb9ea1730a98449129..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/doggyactiveeyesempty.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/doggyactivesclerabloodshot.png b/img/dolls/dolls/player/doggy/top/face/eyes/doggyactivesclerabloodshot.png
deleted file mode 100644
index d2c9bcd108002559fb91290b0451abaeeaf27ea7..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/doggyactivesclerabloodshot.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/doggyidleeyelids.png b/img/dolls/dolls/player/doggy/top/face/eyes/doggyidleeyelids.png
deleted file mode 100644
index a6c8b68aba8839de887f6b11dba2866f9219d286..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/doggyidleeyelids.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/eyelids/doggyactiveeyelids.png b/img/dolls/dolls/player/doggy/top/face/eyes/eyelids/doggyactiveeyelids.png
deleted file mode 100644
index 3beb8997c882deec02a967ff52f1bb8617e66682..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/eyelids/doggyactiveeyelids.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/eyelids/doggyactivelashes.png b/img/dolls/dolls/player/doggy/top/face/eyes/eyelids/doggyactivelashes.png
deleted file mode 100644
index c12fb2af381937a3e4159b2b64028177dff33d27..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/eyelids/doggyactivelashes.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/eyelids/doggyactivelashesmakeup.png b/img/dolls/dolls/player/doggy/top/face/eyes/eyelids/doggyactivelashesmakeup.png
deleted file mode 100644
index 6c3c60ba46023a47d5d34d781e4bcc5fb74a1413..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/eyelids/doggyactivelashesmakeup.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/eyes.js b/img/dolls/dolls/player/doggy/top/face/eyes/eyes.js
deleted file mode 100644
index 6967e4e0f88369838f35c8bcc6ae524969b918e6..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/player/doggy/top/face/eyes/eyes.js
+++ /dev/null
@@ -1,76 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-    eyes: {
-        translate: { x: 0, y: 0, depth: 4},
-        inherit_filter: true,
-        accessories: {
-            eyelids: {
-                inherit_filter: true,
-                sequences: {
-                    still: [0, 0, 2, 2]
-                },
-                translate: {x:0, y:0, depth:2},
-                spritesheet: "eyelids/doggyactiveeyelids.png",
-                accessories: {
-                    lashes : {
-                        selected_variant: "natural",
-                        translate: {x:0, y:0, depth:1},
-                        variants: {
-                            makeup: {                                
-                                inherit_filter : true,
-                                spritesheet : "eyelids/doggyactivelashesmakeup.png"
-                            },
-                            natural: {                
-                                inherit_filter : true,                
-                                spritesheet : "eyelids/doggyactivelashes.png"
-                            }
-                        }
-                    }
-                }
-            },
-            eyeballs: {
-                selected_variant: "normal",
-                translate: { x: 0, y: 0, depth: 1 },
-                variants: {
-                    normal: {                        
-                        spritesheet: "doggyactiveeyes.png"
-                    },
-                    empty: {
-                        spritesheet: "doggyactiveeyesempty.png"
-                    }
-                }
-            },
-            sclera: {
-                selected_variant: "normal",
-                translate: { x: 0, y: 0, depth: 2 },
-                variants: {
-                    normal: {},
-                    bloodshot: {                        
-                        spritesheet: "doggyactivesclerabloodshot.png"
-                    }
-                }
-            },
-            tears: {
-                translate: {x:0, y:0, depth:4},
-                selected_variant: "tears5",
-                variants: {                    
-                    tears0: {},
-                    tears1: {                        
-                        spritesheet: "tears/doggyactivetears1.png"
-                    },
-                    tears2: {
-                        spritesheet: "tears/doggyactivetears2.png"
-                    },
-                    tears3: {
-                        spritesheet: "tears/doggyactivetears3.png"
-                    },
-                    tears4: {
-                        spritesheet: "tears/doggyactivetears4.png"
-                    },
-                    tears5: {
-                        spritesheet: "tears/doggyactivetears5.png"
-                    }
-                }
-            },
-        }
-    }
-});
\ No newline at end of file
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears1.png b/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears1.png
deleted file mode 100644
index 733dd64b1550ca3224e0d6f6969d2dd6c633576d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears1.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears2.png b/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears2.png
deleted file mode 100644
index e2f25047e9220b2224630d7d527d5e4c3ef09b07..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears2.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears3.png b/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears3.png
deleted file mode 100644
index ed2aa99803e73c17acb3da4f211cd1eddb4c0440..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears3.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears4.png b/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears4.png
deleted file mode 100644
index ed2aa99803e73c17acb3da4f211cd1eddb4c0440..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears4.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears5.png b/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears5.png
deleted file mode 100644
index 9443bac90cbcac31baed2711a6169d0a64d4b7cd..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/eyes/tears/doggyactivetears5.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/face.js b/img/dolls/dolls/player/doggy/top/face/face.js
deleted file mode 100644
index 955ba76a68eb49eb9d79a33159d30fb8aa296639..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/player/doggy/top/face/face.js
+++ /dev/null
@@ -1,56 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-    face: {         
-        magnets: {
-            mouth: {x: 40, y: 114},
-            mouthentrance: {x: 15, y:114},
-            mouthimminent: {x: 5, y:114}
-        },
-        accessories: {
-            blush: {
-                translate: {x:0, y:0, depth:3},
-                selected_variant: "blush5",
-                variants: {
-                    blush0: {},
-                    blush1: {
-                        spritesheet: "blush/doggyactiveblush1.png"
-                    },
-                    blush2: {
-                        spritesheet: "blush/doggyactiveblush2.png"
-                    },
-                    blush3: {
-                        spritesheet: "blush/doggyactiveblush3.png"
-                    },
-                    blush4: {
-                        spritesheet: "blush/doggyactiveblush4.png"
-                    },
-                    blush5: {
-                        spritesheet: "blush/doggyactiveblush5.png"
-                    }
-                }
-            },
-            eyes : { 
-                import: {
-                    filepath: "eyes/eyes.js",
-                    variable: "eyes"
-                }
-            },
-            mouth: {
-                selected_variant: "normal",
-                variants: {                    
-                    normal: {
-                        translate: {x:0, y:0, depth:-1},
-                        spritesheet: "mouth/doggyactivemouth.png"                        
-                    },
-                    oral: {
-                        translate: {x:0, y:0, depth:-1},
-                        spritesheet: "mouth/doggyactiveoral.png"
-                    },
-                    kissing: {
-                        translate: {x:0, y:0, depth:-1},
-                        spritesheet: "mouth/doggyactiveoralmouth.png"
-                    }
-                }
-            }
-        }
-    }
-});
\ No newline at end of file
diff --git a/img/dolls/dolls/player/doggy/top/face/mouth/doggyactivemouth.png b/img/dolls/dolls/player/doggy/top/face/mouth/doggyactivemouth.png
deleted file mode 100644
index 8a2a0ddb64886922ecb700c5f81a3ff6211e1285..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/mouth/doggyactivemouth.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/mouth/doggyactiveoral.png b/img/dolls/dolls/player/doggy/top/face/mouth/doggyactiveoral.png
deleted file mode 100644
index 51eafe5537aa85ea4bc3e42bf8f756ad2ab0309d..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/mouth/doggyactiveoral.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/mouth/doggyactiveoralcum.png b/img/dolls/dolls/player/doggy/top/face/mouth/doggyactiveoralcum.png
deleted file mode 100644
index 6d8ed86205285b55a8662d78cc9c95f7e29bb4a8..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/mouth/doggyactiveoralcum.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/mouth/doggyactiveoralmouth.png b/img/dolls/dolls/player/doggy/top/face/mouth/doggyactiveoralmouth.png
deleted file mode 100644
index eee2b5b22f9f1545c96365f1d7ef0830ca2284ca..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/mouth/doggyactiveoralmouth.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/angel/backhalo.png b/img/dolls/dolls/player/doggy/top/face/transformations/angel/backhalo.png
deleted file mode 100644
index 008976b3153196224e877f2e3aaa4979d310075c..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/angel/backhalo.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/angel/brokenhalo.png b/img/dolls/dolls/player/doggy/top/face/transformations/angel/brokenhalo.png
deleted file mode 100644
index 125909922cc920abf42910ed7ef0814131c58744..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/angel/brokenhalo.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/angel/fronthalo.png b/img/dolls/dolls/player/doggy/top/face/transformations/angel/fronthalo.png
deleted file mode 100644
index f6e110ecb97cb80f11fc9571fd8547bdb683b043..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/angel/fronthalo.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/angel/halo.png b/img/dolls/dolls/player/doggy/top/face/transformations/angel/halo.png
deleted file mode 100644
index b7ddd952246f2a15c45c7979ac61544ddaa18f56..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/angel/halo.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/cat/ears.png b/img/dolls/dolls/player/doggy/top/face/transformations/cat/ears.png
deleted file mode 100644
index ddc3d0a9690f3a856814f0c116f6ce36b75849bf..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/cat/ears.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/cow/ears.png b/img/dolls/dolls/player/doggy/top/face/transformations/cow/ears.png
deleted file mode 100644
index fdd7526556af35e24ccbb1aa30e8f99fca89bb12..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/cow/ears.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/cow/horns.png b/img/dolls/dolls/player/doggy/top/face/transformations/cow/horns.png
deleted file mode 100644
index f2e7a803374c35785801cef2e2ca7f66e85499bf..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/cow/horns.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/demon/horns/classic.png b/img/dolls/dolls/player/doggy/top/face/transformations/demon/horns/classic.png
deleted file mode 100644
index 56ee8829ce0d117f5a817f923ca74271ce416364..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/demon/horns/classic.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/demon/horns/default.png b/img/dolls/dolls/player/doggy/top/face/transformations/demon/horns/default.png
deleted file mode 100644
index 0b71102623a59c00bc60423c5a6d814eb52796e4..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/demon/horns/default.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/fallenangel/backhalo.png b/img/dolls/dolls/player/doggy/top/face/transformations/fallenangel/backhalo.png
deleted file mode 100644
index 72c33fffbf5a6bb7f0fadecd51620acb11b3f356..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/fallenangel/backhalo.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/fallenangel/fronthalo.png b/img/dolls/dolls/player/doggy/top/face/transformations/fallenangel/fronthalo.png
deleted file mode 100644
index b3bfed76194aada7779e421ac9fbaff037e56444..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/fallenangel/fronthalo.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/face/transformations/wolf/ears.png b/img/dolls/dolls/player/doggy/top/face/transformations/wolf/ears.png
deleted file mode 100644
index cd557f6a3bd4f06452504ad13e442070639bc779..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/face/transformations/wolf/ears.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/doggyactivechest.png b/img/dolls/dolls/player/doggy/top/hair/doggyactivechest.png
deleted file mode 100644
index f52dc71deeaee23f70b8f60b8a4922c72584441b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/hair/doggyactivechest.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/doggyactivefeet.png b/img/dolls/dolls/player/doggy/top/hair/doggyactivefeet.png
deleted file mode 100644
index d2e2f61ff40ad2c4ef8bf13d59ece29e1d2e3d2f..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/hair/doggyactivefeet.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/doggyactivenavel.png b/img/dolls/dolls/player/doggy/top/hair/doggyactivenavel.png
deleted file mode 100644
index 269366023edd30f2c3e6a19d872e4c84635173a9..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/hair/doggyactivenavel.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/doggyactiveoverlay.png b/img/dolls/dolls/player/doggy/top/hair/doggyactiveoverlay.png
deleted file mode 100644
index 5247c1e0613793b23ee9c4b51a1d190e703f3d89..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/hair/doggyactiveoverlay.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/doggyactiveshort.png b/img/dolls/dolls/player/doggy/top/hair/doggyactiveshort.png
deleted file mode 100644
index 679b98281884e3b3c96726232e661c8c9b8d5a9e..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/hair/doggyactiveshort.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/doggyactiveshoulder.png b/img/dolls/dolls/player/doggy/top/hair/doggyactiveshoulder.png
deleted file mode 100644
index 3e82cf30e9f774b52d96d3a676b9acc662ced8c1..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/hair/doggyactiveshoulder.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/doggyactivethighs.png b/img/dolls/dolls/player/doggy/top/hair/doggyactivethighs.png
deleted file mode 100644
index d72ff9fec1c9f34e729d426772de93e2f26f7b4b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/hair/doggyactivethighs.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/edge/chest.png b/img/dolls/dolls/player/doggy/top/hair/edge/chest.png
deleted file mode 100644
index 3088480b5586ae8949e4362e1a74866c7afa8bba..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/hair/edge/chest.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/edge/short.png b/img/dolls/dolls/player/doggy/top/hair/edge/short.png
deleted file mode 100644
index c30febb25f83101e466279494ae407e552580967..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/hair/edge/short.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/edge/shoulder.png b/img/dolls/dolls/player/doggy/top/hair/edge/shoulder.png
deleted file mode 100644
index 5ff949ff46e76136d511aa34fcbd3b2472dd6530..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/hair/edge/shoulder.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/hair/player_hair_doggy.js b/img/dolls/dolls/player/doggy/top/hair/player_hair_doggy.js
deleted file mode 100644
index dc1a0d9c3e6e791afbf5d301891e2bd5e30970ed..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/player/doggy/top/hair/player_hair_doggy.js
+++ /dev/null
@@ -1,43 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-    hair: {
-        width: 1024,
-        frames: 4,
-        accessories : {
-            shimmer : {
-                inherit_filter: true,
-                translate: {x:0, y:0, depth: 4},
-                spritesheet : "doggyactiveoverlay.png"
-            }, 
-            lengths : {
-                inherit_filter: true,
-                translate: {x:0, y:0, depth: 3},
-                variants : {
-                    short : {
-                        inherit_filter: true,
-                        spritesheet : "doggyactiveshort.png"
-                    },
-                    shoulder: {
-                        inherit_filter: true,
-                        spritesheet : "doggyactiveshoulder.png"                    
-                    },
-                    chest: {
-                        inherit_filter: true,
-                        spritesheet : "doggyactivechest.png"                    
-                    }, 
-                    navel: {
-                        inherit_filter: true,
-                        spritesheet : "doggyactivenavel.png"
-                    }, 
-                    thighs: {
-                        inherit_filter: true,
-                        spritesheet : "doggyactivethighs.png"
-                    },
-                    feet: {
-                        inherit_filter: true,
-                        spritesheet : "doggyactivefeet.png"
-                    }
-                }
-            }
-        }
-    }
-});
diff --git a/img/dolls/dolls/player/doggy/top/tan/doggybikiniupper.png b/img/dolls/dolls/player/doggy/top/tan/doggybikiniupper.png
deleted file mode 100644
index 65d95ad9f377a654e7e8020c715805615069d45b..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/tan/doggybikiniupper.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/tan/doggyswimsuit.png b/img/dolls/dolls/player/doggy/top/tan/doggyswimsuit.png
deleted file mode 100644
index 210e1c4a0b9fa248823316d251ca4f46d1207ee6..0000000000000000000000000000000000000000
Binary files a/img/dolls/dolls/player/doggy/top/tan/doggyswimsuit.png and /dev/null differ
diff --git a/img/dolls/dolls/player/doggy/top/top.js b/img/dolls/dolls/player/doggy/top/top.js
deleted file mode 100644
index faf403578df3f1ceeaa18741c1ea00cbd557d750..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/player/doggy/top/top.js
+++ /dev/null
@@ -1,125 +0,0 @@
-DoLHouse.add({
-	// IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-	top: {
-		inherit_filter: true,
-		translate: { x: 0, y: 0, depth: 4 },
-		magnets: { ribs: { x: 130, y: 115 } },
-		accessories: {
-			head: {
-				inherit_filter: true,
-				accessories: {
-					face: {
-						inherit_filter: true,
-						import: {
-							filepath: "face/face.js",
-							variable: "face",
-						},
-					},
-					throat: {
-						translate: { x: 0, y: 0, depth: 2 },
-						selected_variant: "idle",
-						inherit_filter: true,
-						variants: {
-							idle: {},
-							oral: {
-								inherit_filter: true,
-								variants: {
-									regular_load: {
-										inherit_filter: true,
-										spritesheet: "doggyactivebasefrontoral.png",
-									},
-									huge_load: {
-										inherit_filter: true,
-										spritesheet: "doggyactivebasefrontoralhuge.png",
-									},
-								},
-							},
-						},
-					},
-					hair: {
-						import: {
-							filepath: "hair/player_hair_doggy.js",
-							variable: "hair",
-						},
-					},
-				},
-			},
-			arm_right: {
-				translate: { x: 0, y: 0, depth: -5 },
-				selected_variant: "normal",
-				inherit_filter: true,
-				variants: {
-					normal: {
-						inherit_filter: true,
-						spritesheet: "arms/doggyactivebaserightarm.png",
-					},
-					bound: {},
-					handjob: {
-						inherit_filter: true,
-						spritesheet: "arms/doggyactiverighthandjob.png",
-					},
-				},
-			},
-			arm_left: {
-				translate: { x: 0, y: 0, depth: 13 },
-				inherit_filter: true,
-				accessories: {
-					arm: {
-						selected_variant: "normal",
-						inherit_filter: true,
-						variants: {
-							normal: {
-								inherit_filter: true,
-								filter: "drop-shadow(#0006 -3px 3px 3px)",
-								spritesheet: "arms/doggyactivebaseleftarm.png",
-							},
-							bound: {
-								translate: { x: 0, y: 0, depth: -5 },
-								inherit_filter: true,
-								spritesheet: "arms/doggyactiveleftarmbound.png",
-							},
-							handjob: {
-								inherit_filter: true,
-								spritesheet: "arms/doggyactivelefthandjob.png",
-							},
-						},
-						// a lot of the clothes seem to depend on arm state,
-						// so we attach the clothes as an accessory to the arm
-						// so that they end up autoadopting variant information
-						// when the arm is commanded to.
-						clothes: {
-							import: {
-								filepath: "breasts/clothes_top.js",
-								variable: "clothes",
-							},
-						},
-					},
-				},
-			},
-			breasts: {
-				inherit_filter: true,
-				selected_variant: "flat",
-				translate: { x: 0, y: 0, depth: 11 },
-				variants: {
-					flat: {},
-					tiny: {
-						inherit_filter: true,
-						spritesheet: "breasts/doggyactivebreaststiny.png",
-					},
-					small: {
-						inherit_filter: true,
-						spritesheet: "breasts/doggyactivebreastssmall.png",
-					},
-					large: {
-						inherit_filter: true,
-						spritesheet: "breasts/doggyactivebreastslarge.png",
-					},
-					huge: {
-						inherit_filter: true,
-						spritesheet: "breasts/doggyactivebreastshuge.png",
-					},
-				},
-			},
-		},
-	},
-});
diff --git a/img/dolls/dolls/player/player_sex.js b/img/dolls/dolls/player/player_sex.js
deleted file mode 100644
index 631b1a8e3dc27c8d742e87fae80cf7653f152442..0000000000000000000000000000000000000000
--- a/img/dolls/dolls/player/player_sex.js
+++ /dev/null
@@ -1,27 +0,0 @@
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-    player: {
-        frames: 4,
-        selected_variant: "doggy",        
-        variants: {            
-            doggy: {
-                import: {
-                    filepath: "doggy/doggy.js",
-                    variable: "doggy"
-                }
-            },
-            missionary: {
-                /*import: {
-                    filepath: "missionary/missionary.js",
-                    variable: "missionary_bottom"
-                }*/
-            }
-        }
-    }
-
-}); //IT IS VERY IMPORTANT THAT THE LAST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-
-
-
-
diff --git a/img/dolls/fdoll-documentation.js b/img/dolls/fdoll-documentation.js
deleted file mode 100644
index 4ee0d70251febe0f745ebd20ec0876cb07f6ddb1..0000000000000000000000000000000000000000
--- a/img/dolls/fdoll-documentation.js
+++ /dev/null
@@ -1,276 +0,0 @@
-/**
- * An FDoll works a bit like a paper-mannequin. 
- * It can be thought of as little cut-out drawings that can be pinned together, 
- * (except that each drawing can be an animated sprite). 
- * In this way, it is easy to add, remove, or swap out parts / accessories on the 
- * doll as desired.
- * 
- * Any sprite or accessory is treated as its own FDoll, so it can in turn have its own
- * accessories attached to or removed from it. 
- * (for example, an FDoll character may be defined as just a torso. 
- * We might then attach a "leg" accessory to this FDoll. 
- * This leg accessory is itself an FDoll, to which we may wish to add 
- * a "shoe" accessory, or a "sock" accessory, or both. 
- * This "shoe" accessory is itself and FDoll, to which we may wish to add a
- * a "lace" accessory, or a "velcro strap" accessory, or both. 
- * etcetera etc) 
- * 
- * 
- * Creating an FDoll/accessory is simple: 
- * 
- *    First, you make a spritesheet for the FDoll/accessory 
- * (or don't, in which case, it will be treated as an invisible part for other parts to
- * be pinned onto).
- *     Next, make a note of the pixel coordinates of some points of interest on the first frame 
- * of your spritesheet. These points of interest will be used to define "magnets". Magnets 
- * are spots on your FDoll where accessories can be attached. 
- * For example, if we have an FDoll torso, we might specify the location of 
- * the neck, to which we may attach a head accessory, 
- * the hips, to which we may atttach a leg accessory, 
- * and the shoulders, to which we may attach etcetera 
- *     Finally, create a .js text file in the same directory as your spritesheet (or lack thereof)
- * and populate it with some information about that spritesheet (or lack thereof). 
- * The contents of the .js file should look something like the example below, which describes
- * an arm accessory
- * 
- * -------
- * */
-DoLHouse.add({ //IT IS VERY IMPORTANT THAT THE FIRST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-    arm_example:
-    {
-        spritesheet: "example_arm.png", //the filename of the spriteesheet for this FDoll/accessory
-        width: 2048, //width of the spritesheet, in pixels.
-        frames: 8, //number of frames in the spritesheet.
-        magnets: { //names and locations of spots we can attach accessories to
-            base: { x: 200, y: 20 },
-            wrist: { x: 120, y: 25 },
-            tattoo_spot: { x: 180, y: 18 }
-        },
-        accessories: {//accessories attached to this FDoll/accessory
-            bracelet: {
-                import: {
-                    filepath: "accessories/bracelets/bracelet.js", //the location of the .js file specifying the accessory to attach.  
-                    //leaving this blank indicates the accessory is contained in the current file
-                    variable: "bracelet" //name of the variable in the js location containing the information for this accessory. 
-                    //if variable isn't specified, filepath is ignored, and it is assumed the accessory is specified
-                    //directly. (so the script will continue looking for the spritesheet or magnets or whatever)
-                }
-            },
-            tattoo: {
-                import: {
-                    variable: "tattoo_variants_list" //Note: Because no filepath was provided, it is assumed the variable exists in this file.
-                }
-            }
-        }
-    },
-
-    /* 
-    * 
-    * -------
-    * 
-    * Note that FDolls/accessories can come in "variants." 
-    * A variant is just different appearance for a given FDoll/accessory.  
-    * They are distinguished from a simple "accessory" in that they are actually 
-    * a list of possible accessories, of which only one can be attached at a time. 
-    *  
-    * For example, consider an FDoll with a face. A face can show multiple expressions. 
-    * One way to handle this is to have different faces accessories for each expression we want on the 
-    * FDoll, and manually find, add or remove faces depending on the expression we want to show, 
-    * but this is error prone, because we might easily end up forgetting to remove the 
-    * old face before adding the new one. 
-    * Variants allow us to just specify a single face accessory, and then pick whether we want to 
-    * show the happy variant, the sad variant, the existential dread variant, etceteratata
-    * 
-    * an FDoll that comes in variants must specify a "variants" attribute. If this attrbitue is 
-    * specified, any spritesheet declared outside of the variants list will be ignored. 
-    * 
-    *The example below shows the contents of the hypothetical "tattoo_variants.js" file referenced in the previous example 
-    *-------
-    */
-
-
-    tattoo_variants_list:
-    {
-        selected_variant: null, //name of the variant to display by default. null means don't display anything
-        attach: "base", //name of the magnet on this accessory to which the parent will attach
-        to: "tatto_spot", //name of the magnet on the parent to which this accessory will attach
-        variants: {
-            cowgirl: {
-                spritesheet: "cowgirl.png",
-                width: 24,
-                frames: 1,
-                magnets: {
-                    base: { x: 12, y: 12 }
-                }
-            },
-            born2ride: {
-                spritesheet: "born2ride.png",
-                width: 24,
-                frames: 1,
-                magnets: {
-                    base: { x: 12, y: 12 }
-                }
-            },
-            skull: {
-                spritesheet: "cowgirl.png",
-                width: 24,
-                frames: 1,
-                magnets: {
-                    base: { x: 12, y: 12 },
-                    top: { x: 12, y: 0 },
-                    bottom: { x: 12, y: 24 },
-                    behind: {
-                        x: 12, y: 12,
-                        depth: -1 //Note! magnets can have an optional "depth" attribute.  
-                        //by default, this is 0, indicating the accessory should be drawn immediately over the parent 
-                        //FDoll. If set to -1, it will be drawn immediately behind the current FDoll accessory.
-                        //a value of -5 would mean it would be drawn 5 layes behind it, and a value of 999999999 would 
-                        //all but ensure that it's drawn above basically any other accessory or FDoll anywhere else in the scene. 
-
-                    }
-                },
-                accessories: {
-                    decorations_front: {
-                        import: { //Note taht while these examples use the import statement only for accessing accessories and 
-                            //variants, you can use import basically anywhere the dump obect contents.
-                            variable: "tattoo_decorations"
-                        },
-                        attach: "base",
-                        to: "base"
-                    },
-                    decorations_behind: {
-                        import: {
-                            variable: "tattoo_decorations"
-                        },
-                        attach: "base", //note that import just dumps the requested content into the object requesting import,
-                        //so you can recycle general content to mix with specific content. In this case, we import the general definition 
-                        //of the tattoo decoration variants, but define different attachment points between this accessory and the previous one
-                        to: "behind"
-                    }
-                }
-            }
-        },
-
-        //variant decorations to spice up generic tattoos
-        tattoo_decorations: {
-            selected_variant: null,
-            variants: {
-                crossbones: {
-                    spritesheet: "crossbones.png",
-                    width: 24,
-                    frames: 1,
-                    magnets: { base: { x: 12, y: 12 } }
-                },
-                intricate: {
-                    import: {
-                        filepath: "intricate.js",
-                        variable: "intricate_decorations"
-                    }
-                },
-                flower_decorations: {
-                    import: {
-                        filepath: "flowers.js",
-                        variable: "intricate_decorations" //Note, it is acceptable for variables to have the same name so long as they are specified in different files.
-                    }
-                }
-            }
-        },
-
-
-
-        /** 
-        * Finally, there is quite useful functionality for specifying how we animate a sprite sheet. 
-        * Animation rules can be set on the spritesheet using the "sequences" parameter, 
-        * which lists animtion rules that can be selected at play time. 
-        * 
-        * Below, is the arm_example again, this time modfied to highlight the uses of a sequences parameter 
-        */
-
-        arm_example:
-        {
-            spritesheet: "example_arm.png", //the filename of the spriteesheet for this FDoll/accessory
-            width: 2048, //width of the spritesheet, in pixels.
-            frames: 8, //number of frames in the spritesheet.
-            magnets: { //names and locations of spots we can attach accessories to
-                base: { x: 200, y: 20 },
-                wrist: { x: 120, y: 25 },
-                tattoo_spot: { x: 180, y: 18 }
-            },
-            accessories: {//accessories attached to this FDoll/accessory
-                bracelet: {
-                    attach: "base", //the name of the relevant magnet on the accessory we're attaching.
-                    to: "wrist", //the name of the magnet on this FDoll to which we're attaching the accessory. 
-                    import: {
-                        filepath: "accessories/bracelets/bracelet.js", //the .js file specifying the accessory to attach. 
-                        variable: "bracelet" //the name of the variable in the js file to import. 
-                    }
-                },
-                tattoo: {
-                    attach: "base",
-                    to: "tatto_spot",
-                    import: {
-                        filepath: "../../tattoos/tattoo_variants.js", //Note, here "../" indicates that tattoos/tattoo_variants.js is 
-                        //located two directories above the current directory
-                        variable: "tattoo_variants_list"
-                    }
-                },
-                sequences: { //OPTIONAL: can be used to specify which of the frames of the spritesheet should play per loop, 
-                    idle: [2, 4, 8],
-                    tremble: [1, 2],
-                    reversed: [7, 6, 5, 4, 3, 2, 1, 0],
-                    punch: [0, 0, 1, 4, 4, 4, 4, 4, 4, 4, 4, 5, 6, 7] //slow ramp up from the first few frames, 
-                    //to quick jump to the midmost frame, followed by slow rampdown to the firstmost frames       
-                },
-                looptime: 1 //OPTIONAL: can be used to specify how many parent animation loops 
-                //constitute a single animation loop for this sprite. A value of 2 means the parent animation must loop twice
-                //for this animation to loop once. 
-            }
-        }
-    }
-}
-
-
-); //IT IS VERY IMPORTANT THAT THE LAST LINE IN YOUR FILE IS A COPY-PASTE OF THIS LINE
-
-
-/**
- * -----------------------------------------------
- * END OF ARTIST DOCUMENTATION 
- * -----------------------------------------------
- */
-
-
-/**
- * -----------------------------------------------
- * START OF DEVELOPER DOCUMENTATION
- * -----------------------------------------------
- * 
- * 
- * 
- * Given all of the examples above (and presuming we have already loaded whatever js file contains our arm data). 
- * We can now easily generate a new FDoll as follows
- **/
-var justAnArm = new FDoll(arm_example);
-/**
- * we can then render it into a div with
- */
-var displayContainer = document.getElementById("display_container");
-justAnArm.renderTo(displayContainer);
-
-/**
- * The way we've set things up, the arm will display, complete with whatever bracelet 
- * was defined in the hypothetical "bracelet.js" file. 
- * 
- * However, because our tattoo accessory's selected variant was defined as "null", 
- * the arm will not have a tattoo. 
- * If we wish to display one of the tattoos 
- * available for the arm, (say, for example a skull), 
- * we simply do 
- */
-justAnArm.accessories.tattoo.setVariant("skull");
-
-/**
-* If we want to make it a skull and crossbones, we might do 
-**/
-var armskull = justAnArm.accessories.tattoo.selected_variant;
-armskull.accessories.decorations_behind.setVariant("crossbones"); 
\ No newline at end of file
diff --git a/img/dolls/style.css b/img/dolls/style.css
deleted file mode 100644
index e1cc02ef950489153d44fb267de0b973f83b08ee..0000000000000000000000000000000000000000
--- a/img/dolls/style.css
+++ /dev/null
@@ -1,65 +0,0 @@
-/* NOTE: Moving this file out of img/dolls will break combat spacing */
-#enemy-controls-cache {
-	display: none;
-}
-
-#enemy-controls-container {
-	width: 80vw;
-	height: 300px;
-	overflow-y: auto;
-	color: var(--900);
-}
-
-#all-controls {
-	display: flex;
-}
-
-#divsex {
-	margin-top: 250px;
-	margin-left: 300px;
-	background-color: var(--900);
-
-	/* display: inline; */
-}
-
-#side-panel {
-	width: 20vw;
-}
-
-#loadinfo {
-	display: inline;
-	position: fixed;
-	right: 0;
-	bottom: 0;
-	max-height: 30vh;
-	overflow-y: scroll;
-}
-
-/* 
-	#global-controls {
-		
-	} 
-*/
-
-.enemy-controller {
-	border-bottom: 2px solid var(--900);
-	background: var(--150);
-}
-
-.selector {
-	padding-right: 20px;
-}
-
-.appearance {
-	display: flex;
-	flex-wrap: wrap;
-}
-
-.actions {
-	background: var(--150);
-}
-
-.actions div {
-	display: flex;
-	flex-wrap: wrap;
-}
diff --git a/img/img.twee-config.yml b/img/img.twee-config.yml
index 8758d8d9b7891138f597a8a72fb57ee68ce6ad87..d392388ee63042054c0b2ae7651163c38aca8568 100644
--- a/img/img.twee-config.yml
+++ b/img/img.twee-config.yml
@@ -7,60 +7,6 @@ aliases:
       border: 0px
 sugarcube-2:
   macros:
-    english_star:
-      description: |-
-        Prints current star icon for english
-
-        ![empty](./ui/empty_star.png)
-        ![bronze](./ui/bronze_star.png)
-        ![silver](./ui/silver_star.png)
-        ![gold](./ui/gold_star.png)
-      tags: ["img", "unused"]
-    g_english_star:
-      description: |-
-        Prints star icon at 1 greater than current english
-
-        ![empty](./ui/empty_star.png)
-        ![bronze](./ui/bronze_star.png)
-        ![silver](./ui/silver_star.png)
-        ![gold](./ui/gold_star.png)
-      tags: ["img"]
-    g_history_star:
-      description: |-
-        Prints star icon at 1 greater than current history
-
-        ![empty](./ui/empty_star.png)
-        ![bronze](./ui/bronze_star.png)
-        ![silver](./ui/silver_star.png)
-        ![gold](./ui/gold_star.png)
-      tags: ["img"]
-    g_maths_star:
-      description: |-
-        Prints star icon at 1 greater than current maths
-
-        ![empty](./ui/empty_star.png)
-        ![bronze](./ui/bronze_star.png)
-        ![silver](./ui/silver_star.png)
-        ![gold](./ui/gold_star.png)
-      tags: ["img"]
-    g_science_star:
-      description: |-
-        Prints star icon at 1 greater than current science
-
-        ![empty](./ui/empty_star.png)
-        ![bronze](./ui/bronze_star.png)
-        ![silver](./ui/silver_star.png)
-        ![gold](./ui/gold_star.png)
-      tags: ["img"]
-    history_star:
-      description: |-
-        Prints current star icon for history
-
-        ![empty](./ui/empty_star.png)
-        ![bronze](./ui/bronze_star.png)
-        ![silver](./ui/silver_star.png)
-        ![gold](./ui/gold_star.png)
-      tags: ["img", "unused"]
     img:
       name: img
     img_tf_angel_doggy_active:
@@ -135,21 +81,3 @@ sugarcube-2:
       name: img_tf_wolf_miss_active
     img_tf_wolf_miss_idle:
       name: img_tf_wolf_miss_idle
-    maths_star:
-      description: |-
-        Prints current star icon for maths
-
-        ![empty](./ui/empty_star.png)
-        ![bronze](./ui/bronze_star.png)
-        ![silver](./ui/silver_star.png)
-        ![gold](./ui/gold_star.png)
-      tags: ["img", "unused"]
-    science_star:
-      description: |-
-        Prints current star icon for science
-
-        ![empty](./ui/empty_star.png)
-        ![bronze](./ui/bronze_star.png)
-        ![silver](./ui/silver_star.png)
-        ![gold](./ui/gold_star.png)
-      tags: ["img", "unused"]
diff --git a/t3lt.twee-config.yml b/t3lt.twee-config.yml
index 6493ef35a9f6e02e24a18d603606c6c16fe09f1a..86d93a7337fc74acde6c7f0c28e04efed5a28e57 100644
--- a/t3lt.twee-config.yml
+++ b/t3lt.twee-config.yml
@@ -1,14590 +1,14598 @@
 aliases:
-    dom: &dom
-        border: solid 0px
-    form: &form
-        border: solid 0px
-    img: &img
-        border: 1px
-        borderStyle: dashed dashed none
-    legacy: &legacy
-        border: solid 0px
-    links: &links
-        textDecoration: bold
-    refactor: &refactor
-        textDecoration: bold
-    temp: &temp
-        border: solid 0px
-    text: &text
-        textDecoration: underline
-    unused: &unused
-        border: 0px
+  dom: &dom
+    border: solid 0px
+  form: &form
+    border: solid 0px
+  img: &img
+    border: 1px
+    borderStyle: dashed dashed none
+  legacy: &legacy
+    border: solid 0px
+  links: &links
+    textDecoration: bold
+  refactor: &refactor
+    textDecoration: bold
+  temp: &temp
+    border: solid 0px
+  text: &text
+    textDecoration: underline
+  unused: &unused
+    border: 0px
 sugarcube-2:
-    enums:
-        bodyLiquidParts: '"neck"|"rightarm"|"leftarm"|"thigh"|"bottom"|"tummy"|"chest"|"face"|"hair"|"feet"|"vaginaoutside"|"vagina"|"penis"|"anus"|"mouth"'
-        bodyLiquidPartsDesc: '`"neck"` | `"rightarm"` | `"leftarm"` | `"thigh"` | `"bottom"` | `"tummy"` | `"chest"` | `"face"` | `"hair"` | `"feet"` | `"vaginaoutside"` | `"vagina"` | `"penis"` | `"anus"` | `"mouth"`'
-        bodyParts: '"forehead"|"left_cheek"|"right_cheek"|"left_shoulder"|"right_shoulder"|"breasts"|"back"|"left_bottom"|"right_bottom"|"pubic"|"left_thigh"|"right_thigh"'
-        bodyPartsDesc: '`"forehead"` | `"left_cheek"` | `"right_cheek"` | `"left_shoulder"` | `"right_shoulder"` | `"breasts"` | `"back"` | `"left_bottom"` | `"right_bottom"` | `"pubic"` | `"left_thigh"` | `"right_thigh"`'
-        clothesTypes: '"over_upper"|"over_lower"|"upper"|"lower"|"under_upper"|"under_lower"|"over_head"|"head"|"face"|"neck"|"hands"|"handheld"|"legs"|"feet"|"genitals"'
-        clothesTypesDesc: '`"over_upper"` | `"over_lower"` | `"upper"` | `"lower"` | `"under_upper"` | `"under_lower"` | `"over_head"` | `"head"` | `"face"` | `"neck"` | `"hands"` | `"handheld"` | `"legs"` | `"feet"` | `"genitals"`'
-        combatPositions: '"doggy"|"missionary"'
-        combatPositionsDesc: '`"doggy"` | `"missionary"`'
-        combatProps: '"haybale"|"milk"|"bench"|"table"'
-        combatPropsDesc: '`"haybale"` | `"milk"` | `"bench"` | `"table"`'
-        crimeTypes: '"assault"|"coercion"|"destruction"|"exposure"|"obstruction"|"prostitution"|"resisting"|"thievery"|"petty"|"trespassing"'
-        crimeTypesDesc: '`"assault"` | `"coercion"` | `"destruction"` | `"exposure"` | `"obstruction"` | `"prostitution"` | `"resisting"` | `"thievery"` | `"petty"` | `"trespassing"`'
-        fameTypes: '"exhibitionism"|"prostitution"|"bestiality"|"sex"|"rape"|"good"|"business"|"scrap"|"pimp"|"social"|"model"|"pregnancy"|"impreg"'
-        fameTypesDesc: '`"exhibitionism"` | `"prostitution"` | `"bestiality"` | `"sex"` | `"rape"` | `"good"` | `"business"` | `"scrap"` | `"pimp"` | `"social"` | `"model"` | `"pregnancy"` | `"impreg"`'
-        insecurityTypes: '"penis_tiny"|"penis_small"|"penis_big"|"breasts_tiny"|"breasts_small"|"breasts_big"|"pregnancy"'
-        insecurityTypesDesc: '`"penis_tiny"` | `"penis_small"` | `"penis_big"` | `"breasts_tiny"` | `"breasts_small"` | `"breasts_big"` | `"pregnancy"`'
-        liquidTypes: '"goo"|"slime"|"fluid"|"nectar"|"cum"|"semen"'
-        liquidTypesDesc: '`"goo"` | `"slime"` | `"fluid"` | `"nectar"` | `"cum"` | `"semen"`'
-        loveInterest: '"Robin"|"Whitney"|"Kylar"|"Sydney"|"Eden"|"Avery"|"Alex"|"Great Hawk"|"Black Wolf"'
-        loveInterestDesc: '`"Robin"` | `"Whitney"` | `"Kylar"` | `"Sydney"` | `"Eden"` | `"Avery"` | `"Alex"` | `"Great Hawk"` | `"Black Wolf"`'
-        namedNPC: '"Avery"|"Bailey"|"Briar"|"Charlie"|"Darryl"|"Doren"|"Eden"|"Gwylan"|"Harper"|"Jordan"|"Kylar"|"Landry"|"Leighton"|"Mason"|"Morgan"|"River"|"Robin"|"Sam"|"Sirris"|"Whitney"|"Winter"|"Black Wolf"|"Niki"|"Quinn"|"Remy"|"Alex"|"Great Hawk"|"Wren"|"Sydney"|"Ivory Wraith"|"Zephyr"'
-        namedNPCDesc: '`"Avery"` | `"Bailey"` | `"Briar"` | `"Charlie"` | `"Darryl"` | `"Doren"` | `"Eden"` | `"Gwylan"` | `"Harper"` | `"Jordan"` | `"Kylar"` | `"Landry"` | `"Leighton"` | `"Mason"` | `"Morgan"` | `"River"` | `"Robin"` | `"Sam"` | `"Sirris"` | `"Whitney"` | `"Winter"` | `"Black Wolf"` | `"Niki"` | `"Quinn"` | `"Remy"` | `"Alex"` | `"Great Hawk"` | `"Wren"` | `"Sydney"` | `"Ivory Wraith"` | `"Zephyr"`'
-        plantTypes: '"apple"|"baby_bottle_of_breast_milk"|"banana"|"bird_egg"|"blackberry"|"blood_lemon"|"bottle_of_breast_milk"|"bottle_of_milk"|"bottle_of_semen"|"broccoli"|"cabbage"|"carnation"|"chicken_egg"|"daisy"|"garlic_bulb"|"ghostshroom"|"lemon"|"lily"|"lotus"|"mushroom"|"onion"|"orange"|"orchid"|"peach"|"pear"|"plum"|"plumeria"|"poppy"|"potato"|"red_rose"|"strange_flower"|"strawberry"|"truffle"|"tulip"|"turnip"|"white_rose"|"wild_carrot"|"wild_honeycomb"|"wolfshroom"'
-        plantTypesDesc: '`"apple"` | `"baby_bottle_of_breast_milk"` | `"banana"` | `"bird_egg"` | `"blackberry"` | `"blood_lemon"` | `"bottle_of_breast_milk"` | `"bottle_of_milk"` | `"bottle_of_semen"` | `"broccoli"` | `"cabbage"` | `"carnation"` | `"chicken_egg"` | `"daisy"` | `"garlic_bulb"` | `"ghostshroom"` | `"lemon"` | `"lily"` | `"lotus"` | `"mushroom"` | `"onion"` | `"orange"` | `"orchid"` | `"peach"` | `"pear"` | `"plum"` | `"plumeria"` | `"poppy"` | `"potato"` | `"red_rose"` | `"strange_flower"` | `"strawberry"` | `"truffle"` | `"tulip"` | `"turnip"` | `"white_rose"` | `"wild_carrot"` | `"wild_honeycomb"` | `"wolfshroom"`'
-        pronouns: he, him, girl, girlfriend, sir, lass
-        virginityTypes: '"vaginal"|"penile"|"anal"|"oral"|"kiss"|"handholding"'
-        virginityTypesDesc: '`"vaginal"` | `"penile"` | `"anal"` | `"oral"` | `"kiss"` | `"handholding"`'
-    macros:
-        a:
-            description: |-
-                Prints text with prepended correctly-tensed indefinite article
-
-                `<<a text>>`
-                - **text**: `string` - text to check first character of
-            parameters:
-                - "string"
-            tags: ["text"]
-        A:
-            description: |-
-                Prints text with prepended correctly-tensed capitalised indefinite article
-
-                `<<a text>>`
-                - **text**: `string` - text to check first character of
-            parameters:
-                - "string"
-            tags: ["text"]
-        a_pillory_person:
-            description: |-
-                Prints `a <<person>>` or the name of person in the pillory
-
-                Undercase `<<A_pillory_person>>`.
-                Related to `<<the_pillory_person>>`/ '<<The_pillory_person>>
-            tags: ["text", "unused"]
-        A_pillory_person:
-            description: |-
-                Prints `A <<person>>` or the name of person in the pillory
-
-                Capitalised `<<a_pillory_person>>`.
-                Related to `<<the_pillory_person>>` / '<<The_pillory_person>>'
-            tags: ["text"]
-        a_role:
-            description: |-
-                Prints active npc as their role
-
-                Example:
-                ```
-                You find <<a_role>> nearby to help you out with this example.
-                ```
-            tags: ["text"]
-        A_role:
-            description: |-
-                Prints active npc as their role capitalised
-
-                Example:
-                ```
-                <<A_role>> comes out from behind the other to help with the example.
-                ```
-            tags: ["unused", "text"]
-        abomination:
-            name: abomination
-        abortbrothelshow:
-            name: abortbrothelshow
-            tags: ["unused"]
-        acceptance:
-            description: |-
-                Adds acceptance to pc's state concerning specific part and applies effects
-
-                `$acceptance_X` are measures of pc overcoming specific insecurities where 0 is not accepting (0-1,000)
-
-                `<<insecurity part change>>`
-                - **part**: `string` - part to gain insecurity in
-                  - %insecurityTypesDesc%
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "%insecurityTypes% &+ number"
-        acceptassignment:
-            name: acceptassignment
-        acceptbrothelshow:
-            name: acceptbrothelshow
-        actioncarry:
-            name: actioncarry
-        actioncarrydrop:
-            name: actioncarrydrop
-        actionsabomination:
-            name: actionsabomination
-        actionsAnalKiss:
-            name: actionsAnalKiss
-        actionsAnalLick:
-            name: actionsAnalLick
-        actionsanusdoubleedging:
-            name: actionsanusdoubleedging
-        actionsanusdoubleescape:
-            name: actionsanusdoubleescape
-        actionsanusdoubletake:
-            name: actionsanusdoubletake
-        actionsanusdoublethrust:
-            name: actionsanusdoublethrust
-        actionsanusedging:
-            name: actionsanusedging
-        actionsanusescape:
-            name: actionsanusescape
-        actionsanusFaceAgainstAnus:
-            name: actionsanusFaceAgainstAnus
-        actionsanusHandAgainstAnus:
-            name: actionsanusHandAgainstAnus
-        actionsanusHandEntrance:
-            name: actionsanusHandEntrance
-        actionsanusHandPenetration:
-            name: actionsanusHandPenetration
-        actionsanusMouthEntrance:
-            name: actionsanusMouthEntrance
-        actionsanusMouthImminent:
-            name: actionsanusMouthImminent
-        actionsanusMouthPenetration:
-            name: actionsanusMouthPenetration
-        actionsanusPenisAgainstAnus:
-            name: actionsanusPenisAgainstAnus
-        actionsanusPenisDoubleEntrance:
-            name: actionsanusPenisDoubleEntrance
-        actionsanuspenisdoublefuck:
-            name: actionsanuspenisdoublefuck
-        actionsanusPenisDoubleImminent:
-            name: actionsanusPenisDoubleImminent
-        actionsanusPenisDoublePenetration:
-            name: actionsanusPenisDoublePenetration
-        actionsanusPenisEntrance:
-            name: actionsanusPenisEntrance
-        actionsanuspenisfucknew:
-            name: actionsanuspenisfucknew
-        actionsanusPenisImminent:
-            name: actionsanusPenisImminent
-        actionsanusPenisPenetration:
-            name: actionsanusPenisPenetration
-        actionsanusrub:
-            name: actionsanusrub
-        actionsanustake:
-            name: actionsanustake
-        actionsanusthrust:
-            name: actionsanusthrust
-        actionsanustopenisnew:
-            name: actionsanustopenisnew
-        actionscheekrub:
-            name: actionscheekrub
-        actionschoke:
-            name: actionschoke
-        actionsclitrub:
-            name: actionsclitrub
-        actionsclitstroke:
-            name: actionsclitstroke
-        actionsconfront:
-            name: actionsconfront
-        actionsconfrontNNPC:
-            name: actionsconfrontNNPC
-        actionsdemand:
-            name: actionsdemand
-        actionsdissociation:
-            name: actionsdissociation
-        actionsfeetpussy:
-            name: actionsfeetpussy
-        actionsfeetrub:
-            name: actionsfeetrub
-        actionsfencingcooperate:
-            name: actionsfencingcooperate
-        actionsfencingescape:
-            name: actionsfencingescape
-        actionsfencingtake:
-            name: actionsfencingtake
-        actionsfencingtease:
-            name: actionsfencingtease
-        actionsgrabrub:
-            name: actionsgrabrub
-        actionsgrowl:
-            name: actionsgrowl
-        actionshandanustake:
-            name: actionshandanustake
-        actionshandanustease:
-            name: actionshandanustease
-        actionshandanusthrust:
-            name: actionshandanusthrust
-        actionshandbite:
-            name: actionshandbite
-        actionshandedge:
-            name: actionshandedge
-        actionshit:
-            name: actionshit
-        actionskick:
-            name: actionskick
-        actionskiss:
-            name: actionskiss
-        actionskissback:
-            name: actionskissback
-        actionsman:
-            name: actionsman
-        actionsmoan:
-            name: actionsmoan
-        actionsmock:
-            name: actionsmock
-        actionsmouthbottomrub:
-            name: actionsmouthbottomrub
-        actionsmouththighrub:
-            name: actionsmouththighrub
-        actionsOmni:
-            name: actionsOmni
-        actionsoraledge:
-            name: actionsoraledge
-        actionsorgasm:
-            name: actionsorgasm
-        actionsotheranusedging:
-            name: actionsotheranusedging
-        actionsotheranusescape:
-            name: actionsotheranusescape
-        actionsotheranusrub:
-            name: actionsotheranusrub
-        actionsotheranustake:
-            name: actionsotheranustake
-        actionsotheranustease:
-            name: actionsotheranustease
-        actionsotheranusthrust:
-            name: actionsotheranusthrust
-        actionsothermouthanusescape:
-            name: actionsothermouthanusescape
-        actionsothermouthanusrub:
-            name: actionsothermouthanusrub
-        actionsothermouthanustease:
-            name: actionsothermouthanustease
-        actionsothermouthanusthrust:
-            name: actionsothermouthanusthrust
-        actionsothermouthpenisescape:
-            name: actionsothermouthpenisescape
-        actionsothermouthpenisrub:
-            name: actionsothermouthpenisrub
-        actionsothermouthpenistease:
-            name: actionsothermouthpenistease
-        actionsothermouthpenisthrust:
-            name: actionsothermouthpenisthrust
-        actionsothermouthvaginaescape:
-            name: actionsothermouthvaginaescape
-        actionsothermouthvaginarub:
-            name: actionsothermouthvaginarub
-        actionsothermouthvaginatease:
-            name: actionsothermouthvaginatease
-        actionsothermouthvaginathrust:
-            name: actionsothermouthvaginathrust
-        actionsotherpenispenisrub:
-            name: actionsotherpenispenisrub
-        actionsothervaginavaginarub:
-            name: actionsothervaginavaginarub
-        actionspain:
-            name: actionspain
-        actionspenisAgainstAss:
-            name: actionspenisAgainstAss
-        actionspenisAgainstClit:
-            name: actionspenisAgainstClit
-        actionspenisAnusEntrance:
-            name: actionspenisAnusEntrance
-        actionspenisanusfucknew:
-            name: actionspenisanusfucknew
-        actionspenisAnusImminent:
-            name: actionspenisAnusImminent
-        actionspenisAnusPenetration:
-            name: actionspenisAnusPenetration
-        actionspenisdoubleedging:
-            name: actionspenisdoubleedging
-        actionspenisdoubleride:
-            name: actionspenisdoubleride
-        actionspenisdoubletake:
-            name: actionspenisdoubletake
-        actionspenisdoubletip:
-            name: actionspenisdoubletip
-        actionspenisedging:
-            name: actionspenisedging
-        actionspenisescape:
-            name: actionspenisescape
-        actionspeniskiss:
-            name: actionspeniskiss
-        actionspenislick:
-            name: actionspenislick
-        actionspenisMouthEntrance:
-            name: actionspenisMouthEntrance
-        actionspenisMouthImminent:
-            name: actionspenisMouthImminent
-        actionspenisMouthPenetration:
-            name: actionspenisMouthPenetration
-        actionspenisPenisEntrance:
-            name: actionspenisPenisEntrance
-        actionspenisPenisFencing:
-            name: actionspenisPenisFencing
-        actionspenisPenisImminent:
-            name: actionspenisPenisImminent
-        actionspenisPussyEntrance:
-            name: actionspenisPussyEntrance
-        actionspenisPussyImminent:
-            name: actionspenisPussyImminent
-        actionspenisPussyPenetration:
-            name: actionspenisPussyPenetration
-        actionspenisride:
-            name: actionspenisride
-        actionspenisrub:
-            name: actionspenisrub
-        actionspenisstroke:
-            name: actionspenisstroke
-        actionspenissuck:
-            name: actionspenissuck
-        actionspenistake:
-            name: actionspenistake
-        actionspenistip:
-            name: actionspenistip
-        actionspenistoanusnew:
-            name: actionspenistoanusnew
-        actionspenistopenis:
-            name: actionspenistopenis
-        actionspenistopenisfucknew:
-            name: actionspenistopenisfucknew
-        actionspenistovaginanew:
-            name: actionspenistovaginanew
-        actionspenisvaginafucknew:
-            name: actionspenisvaginafucknew
-        actionsplead:
-            name: actionsplead
-        actionspossessed:
-            name: actionspossessed
-        actionspussyedging:
-            name: actionspussyedging
-        actionspussylick:
-            name: actionspussylick
-        actionspussyrub:
-            name: actionspussyrub
-        actionspussytake:
-            name: actionspussytake
-        actionspussytease:
-            name: actionspussytease
-        actionspussythrust:
-            name: actionspussythrust
-        actionsshaftrub:
-            name: actionsshaftrub
-        actionsStroke:
-            name: actionsStroke
-        actionsStrokerCooperate:
-            name: actionsStrokerCooperate
-        actionsStrokerRest:
-            name: actionsStrokerRest
-        actionstentacleadvanus:
-            name: actionstentacleadvanus
-            tags: ["unused"]
-        actionstentacleadvbottom:
-            name: actionstentacleadvbottom
-            tags: ["unused"]
-        actionstentacleadvcheckbox:
-            description: |-
-                Prints `<<radiobutton>>` for tentacle actions
-
-                `<<actionstentacleadvcheckbox behavior checkboxText receiverVar checkedValue defaultValue>>`
-
-                - **behavior**: `string` - decoration and classification of label
-                  - `"def"` | `"sub"` | `"neutral"` | `"brat"`
-                - **checkboxText**: `string` - displayed label of the checkbox
-                - **receiverName**: `string` - name of the variable to modify, which must be quoted—e.g., `"$foo"`. See `<<radiobutton>>`
-                - **checkedValue**: `object` - value set by the radio button when checked. See `<<radiobutton>>`
-                - **defaultValue**: `object` - displays the radiobutton as checked if this value exactly matches `checkedValue`
-            parameters:
-                - '"def"|"sub"|"neutral"|"brat" &+ string &+ string &+ var|bareword |+ var|bareword'
-            tags: ["text"]
-        actionstentacleadvchest:
-            name: actionstentacleadvchest
-            tags: ["unused"]
-        actionstentacleadvlefthand:
-            name: actionstentacleadvlefthand
-        actionstentacleadvlegs:
-            name: actionstentacleadvlegs
-        actionstentacleadvmouth:
-            name: actionstentacleadvmouth
-            tags: ["unused"]
-        actionstentacleadvpenis:
-            name: actionstentacleadvpenis
-        actionstentacleadvrighthand:
-            name: actionstentacleadvrighthand
-        actionstentacleadvthighs:
-            name: actionstentacleadvthighs
-            tags: ["unused"]
-        actionstentacleadvvagina:
-            name: actionstentacleadvvagina
-            tags: ["unused"]
-        actionstentacles:
-            name: actionstentacles
-        actionstentacleslefthand:
-            name: actionstentacleslefthand
-            tags: ["unused"]
-        actionstentacleslegs:
-            name: actionstentacleslegs
-            tags: ["unused"]
-        actionstentaclespenis:
-            name: actionstentaclespenis
-            tags: ["unused"]
-        actionstentaclesrighthand:
-            name: actionstentaclesrighthand
-            tags: ["unused"]
-        actionsthighrub:
-            name: actionsthighrub
-        actionstribcooperate:
-            name: actionstribcooperate
-        actionstribedge:
-            name: actionstribedge
-        actionstribescape:
-            name: actionstribescape
-        actionsTribRest:
-            name: actionsTribRest
-        actionstribtake:
-            name: actionstribtake
-        actionstribtease:
-            name: actionstribtease
-        actionsvaginadoubleescape:
-            name: actionsvaginadoubleescape
-        actionsvaginaescape:
-            name: actionsvaginaescape
-        actionsvaginaMouthEntrance:
-            name: actionsvaginaMouthEntrance
-        actionsvaginaMouthImminent:
-            name: actionsvaginaMouthImminent
-        actionsvaginaMouthPenetrated:
-            name: actionsvaginaMouthPenetrated
-        actionsvaginaPenisDoubleEntrance:
-            name: actionsvaginaPenisDoubleEntrance
-        actionsvaginapenisdoublefuck:
-            name: actionsvaginapenisdoublefuck
-        actionsvaginaPenisDoubleImminent:
-            name: actionsvaginaPenisDoubleImminent
-        actionsvaginaPenisDoublePenetrated:
-            name: actionsvaginaPenisDoublePenetrated
-        actionsvaginaPenisEntrance:
-            name: actionsvaginaPenisEntrance
-        actionsvaginapenisfucknew:
-            name: actionsvaginapenisfucknew
-        actionsvaginaPenisImminent:
-            name: actionsvaginaPenisImminent
-        actionsvaginaPenisPenetrated:
-            name: actionsvaginaPenisPenetrated
-        actionsvaginatopenisnew:
-            name: actionsvaginatopenisnew
-        actionsvaginatovaginafucknew:
-            name: actionsvaginatovaginafucknew
-        actionsvaginatovaginanew:
-            name: actionsvaginatovaginanew
-        actionsvaginaVagina:
-            name: actionsvaginaVagina
-        actionsvaginaVaginaEntrance:
-            name: actionsvaginaVaginaEntrance
-        actionsvaginaVaginaImminent:
-            name: actionsvaginaVaginaImminent
-        actionsvorentacles:
-            name: actionsvorentacles
-        actor:
-            name: actor
-            tags: ["unused"]
-        actorAroused:
-            name: actorAroused
-            tags: ["unused"]
-        add_bodywriting:
-            name: add_bodywriting
-        add_link:
-            name: add_link
-        add_plot:
-            name: add_plot
-        addConsumableCosmetics:
-            name: addConsumableCosmetics
-        addevent:
-            name: addevent
-        addfemininityfromfactor:
-            name: addfemininityfromfactor
-            tags: ["unused"]
-        addfemininityofclothingarticle:
-            name: addfemininityofclothingarticle
-            tags: ["unused"]
-        addinlineevent:
-            container: true
-            name: addinlineevent
-        addNNPCOutfit:
-            name: addNNPCOutfit
-        addVaginalWetness:
-            name: addVaginalWetness
-        adjust_school_traits:
-            name: adjust_school_traits
-        adultShop-main:
-            name: adultShop-main
-        adultShopBackgroundEvent:
-            name: adultShopBackgroundEvent
-        adultShopClear:
-            name: adultShopClear
-        adultshopclerkevents:
-            name: adultshopclerkevents
-        adultshopentryevent:
-            name: adultshopentryevent
-        adultShopEvents:
-            name: adultShopEvents
-        adultShopPersonEvent:
-            name: adultShopPersonEvent
-        adultShopWage:
-            name: adultShopWage
-        advancelesson:
-            name: advancelesson
-        advancetohour:
-            description: |-
-                Advances time until the next whole hour
-
-                `<<advancetohour>>`
-            parameters:
-                - ""
-        ahe:
-            name: ahe
-        aHe:
-            name: aHe
-        ahis:
-            name: ahis
-        alarmstate:
-            name: alarmstate
-        alcohol:
-            description: |-
-                Adds alcohol to pc's system
-
-                `$drunk` is a measure of how much alcohol is in the pc's system where 0 is none (0-1,000)
-
-                `<<alcohol change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        alex_baby_interactions:
-            name: alex_baby_interactions
-        alex_cottage_pregnancy_reveal:
-            name: alex_cottage_pregnancy_reveal
-        alex_pregnancy_comment:
-            name: alex_pregnancy_comment
-        alexclamp:
-            name: alexclamp
-        allBottoms:
-            description: |-
-                Prints worn over and middle bottom clothing names
-            tags: ["text"]
-        allBottomsUnderwear:
-            description: |-
-                Prints worn over, middle, and under bottom clothing names
-            tags: ["text"]
-        allSettings:
-            name: allSettings
-        AllShop:
-            description: |-
-                Prints all categories of
-            name: AllShop
-            tags: ["form"]
-        allTops:
-            description: |-
-                Prints worn over and middle top clothing names
-            tags: ["text"]
-        allTopsUnderwear:
-            description: |-
-                Prints worn over, middle, and under top clothing names
-            tags: ["unused", "text"]
-        allurecaption:
-            name: allurecaption
-        alongsideButtPlug:
-            name: alongsideButtPlug
-        ambulance:
-            name: ambulance
-        ampm:
-            description: |-
-                Prints hours and minutes as formatted time string
-
-                1. `<<ampm>>`
-                  - Uses current time as display
-
-                2. `<<ampm hour minute?>>`
-                - **hour**: `number` - hour to calculate
-                - **minute** _optional_: `number` - minute to calculate
-                  - Defaults to `0`
-            parameters:
-                - ""
-                - "number |+ number"
-            tags: ["text"]
-        analdifficulty:
-            description: |-
-                Prints color-coded adjective of anal action difficulty in current combat
-            tags: ["text"]
-        analdoublestat:
-            name: analdoublestat
-        analejacstat:
-            name: analejacstat
-        analskill:
-            name: analskill
-        analskilluse:
-            name: analskilluse
-        analstat:
-            name: analstat
-        analtext:
-            description: |-
-                Prints color-coded adjective of active anal skill usage
-            tags: ["text"]
-        analvirginitywarning:
-            description: |-
-                Prints `This action will take your anal virginity.` if anal virginity can still be lost
-
-                Takes combat state into account to display starting pipe `| `
-            tags: ["text"]
-        andButtPlug:
-            name: andButtPlug
-        angel:
-            description: |-
-                Prints `| Angel`
-            tags: ["text"]
-        angelTransform:
-            name: angelTransform
-        animalsemenswallowedstat:
-            name: animalsemenswallowedstat
-        animatemodel:
-            description: |-
-                Renders, prints, and JS-animates model
-
-                [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
-
-                `<<animatemodel className?>>`
-                - **className** _optional_: `string` - class or space-separated classes of canvas element to be inserted when placed in the DOM
-            parameters:
-                - "|+ text"
-            tags: ["dom"]
-        anticatcall:
-            description: |-
-                Prints random response from player putting down a catcall
-            tags: ["text"]
-        anus_lube_amount:
-            description: |-
-                Prints the amount of lube around player anus
-
-                Relies on `_anus_lube_amount` being set already
-
-                See `<<anus_lube_text>>`
-            tags: ["text", "temp"]
-        anus_lube_text:
-            description: |-
-                Prints qualified description of lube around the anus prior to penetration
-
-                Example:
-                ```
-                <<anus_lube_text>> the example can be performed without a problem.
-                ```
-            tags: ["text"]
-        anusactionDifficulty:
-            name: anusactionDifficulty
-        anusactionDifficultyTentacle:
-            name: anusactionDifficultyTentacle
-        anusActionInit:
-            name: anusActionInit
-        anusActionInitStruggle:
-            name: anusActionInitStruggle
-        anusActionInitTentacle:
-            name: anusActionInitTentacle
-        anusActions:
-            name: anusActions
-        anusActionsTentacle:
-            name: anusActionsTentacle
-        anusraped:
-            name: anusraped
-        anxious_guard:
-            name: anxious_guard
-        apologyWraith:
-            name: apologyWraith
-        applyFeatsBoost:
-            name: applyFeatsBoost
-        applyLube:
-            name: applyLube
-        arcade_npc_bet:
-            name: arcade_npc_bet
-        arcade_player_bet:
-            name: arcade_player_bet
-        arcade_player_lost:
-            name: arcade_player_lost
-        arcade_player_win:
-            name: arcade_player_win
-        arcadeEndLink:
-            name: arcadeEndLink
-        arm_unbind:
-            name: arm_unbind
-        arousal:
-            description: |-
-                Adds arousal to pc with appropriate modifiers
-
-                `$arousal` is pc's arousal state where 0 is not-aroused (0-10,000)
-
-                `source` is messy, overdefined, and underused. Consider refactoring
-
-                `<<arousal change source?>>`
-                - **change**: `number` - +/- change to apply
-                - **source** _optional_: `string` - source of the stimulus
-                  - `"masturbation"` | `"mouth"` | `"oral"` | `"lips"` | `"masturbationMouth"` | `"masturbationOral"` | `"breast"` | `"breasts"` | `"chest"` | `"nipple"` | `"nipples"` | `"masturbationBreasts"` | `"masturbationNipples"` | `"bottom"` | `"anus"` | `"anal"` | `"ass"` | `"butt"` | `"masturbationAnal"` | `"masturbationAss"` | `"genital"` | `"genitals"` | `"penis"` | `"penile"` | `"pussy"` | `"vaginal"` | `"vagina"` | `"masturbationGenital"` | `"masturbationPenis"` | `"masturbationVagina"` | `"maso"` | `"time"`
-            parameters:
-                - 'number |+ "masturbation"|"mouth"|"oral"|"lips"|"masturbationMouth"|"masturbationOral"|"breast"|"breasts"|"chest"|"nipple"|"nipples"|"masturbationBreasts"|"masturbationNipples"|"bottom"|"anus"|"anal"|"ass"|"butt"|"masturbationAnal"|"masturbationAss"|"genital"|"genitals"|"penis"|"penile"|"pussy"|"vaginal"|"vagina"|"masturbationGenital"|"masturbationPenis"|"masturbationVagina"|"maso"|"time"'
-        arousalcaption:
-            name: arousalcaption
-        arousalclamp:
-            name: arousalclamp
-        arousalError:
-            description: |-
-                Stores a up to 50 arousal errors
-
-                `$arousalError` is an array of arousal errors
-
-                Eligible for deprecation
-
-                `<<arousalError firstArg secondArg>>`
-                - **firstArg**: `any` - something to store
-                - **secondArg**: `any` - something else to store
-            tags: ["unused"]
-        askrough:
-            name: askrough
-        assignmenttip:
-            name: assignmenttip
-        asylumassessment:
-            name: asylumassessment
-        asylumeffects:
-            name: asylumeffects
-        asylumend:
-            name: asylumend
-        asylumescape:
-            name: asylumescape
-        asylumevents:
-            name: asylumevents
-        asylumoptions:
-            name: asylumoptions
-        asylumpunish:
-            name: asylumpunish
-            tags: ["unused"]
-        asylumpunish2:
-            name: asylumpunish2
-        asylumstats:
-            name: asylumstats
-        asylumstatus:
-            description: |-
-                Adds status to asylum in regards to pc
-
-                `$asylumstatus` is status of pc in the asylum where 0 is not liked (0-100)
-
-                `<<suspicion change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        asylumtreatments:
-            name: asylumtreatments
-        athletics:
-            name: athletics
-        athleticsdifficulty:
-            name: athleticsdifficulty
-        attach_leash:
-            description: |-
-                Attaches leash to pc's collar
-
-                Can be used to gain infinite collars and keepCursed isn't universal. Consider refactoring
-
-                `<<attach_leash pcCanRemove? noRebuy?>>`
-                - **keepCursed** _optional_: `bool` - collar will not be cursed unless original collar was already (truthy)
-                  - Defaults to `false`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool |+ bool"
-            tags: ["refactor"]
-        attackstat:
-            name: attackstat
-        attitudes:
-            name: attitudes
-        attitudesControlCheck:
-            name: attitudesControlCheck
-        audience:
-            name: audience
-        audiencecamera:
-            name: audiencecamera
-        audiencecameraswarm:
-            name: audiencecameraswarm
-        audiencespeech:
-            name: audiencespeech
-        autoTakePillCheck:
-            name: autoTakePillCheck
-        averyscore:
-            name: averyscore
-        awareness:
-            description: |-
-                Adds awareness to pc's state, with appropriate modifiers
-
-                `$awareness` is measure of pc's knowledge of lewdity where negative is innocent and 0 is unaware (-200-1,000)
-
-                `<<awareness change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        awarenessup:
-            name: awarenessup
-        babyRent:
-            name: babyRent
-        babyRentDisplay:
-            name: babyRentDisplay
-        babyType:
-            name: babyType
-            tags: ["unused"]
-        backComp:
-            name: backComp
-        balloonRobinAngryHelp:
-            name: balloonRobinAngryHelp
-            tags: ["text"]
-        balloonRobinAngryPurchase:
-            name: balloonRobinAngryPurchase
-            tags: ["text"]
-        balloonRobinGrateful:
-            name: balloonRobinGrateful
-            tags: ["text"]
-        balloonRobinHelped:
-            name: balloonRobinHelped
-            tags: ["text"]
-        balloonRobinSabotaged:
-            name: balloonRobinSabotaged
-        balloonRobinTalk:
-            name: balloonRobinTalk
-            tags: ["text"]
-        ballsize:
-            description: |-
-                Prints random adjective describing pc's `$ballssize`
-        barb:
-            name: barb
-        barbeventend:
-            name: barbeventend
-        barbexposed:
-            name: barbexposed
-            tags: ["unused"]
-        barbquick:
-            name: barbquick
-        barn_img:
-            name: barn_img
-        baseClothingImg:
-            name: baseClothingImg
-        baseClothingStrings:
-            name: baseClothingStrings
-        basegloryholespeech:
-            name: basegloryholespeech
-        basespeech:
-            name: basespeech
-        bastard:
-            description: |-
-                Prints `bastard` or `whore` depending on pc's appearance
-            tags: ["text"]
-        bathroomLink:
-            name: bathroomLink
-        beach_cave_caught:
-            name: beach_cave_caught
-        beach_cave_end:
-            name: beach_cave_end
-        beach_cave_init:
-            name: beach_cave_init
-        beach_cave_pursuit:
-            name: beach_cave_pursuit
-        beachday1:
-            name: beachday1
-        beachday2:
-            name: beachday2
-        beachday3:
-            name: beachday3
-        beachday4:
-            name: beachday4
-        beachday5:
-            name: beachday5
-        beachday6:
-            name: beachday6
-        beachex1:
-            name: beachex1
-        beachex2:
-            name: beachex2
-        beachnight1:
-            name: beachnight1
-        beachnight2:
-            name: beachnight2
-        beast:
-            name: beast
-        beast_claws_text:
-            description: |-
-                Prints `talons` or type of claws for active NPC's type
-            tags: ["unused", "text"]
-        beast_growling_text:
-            description: |-
-                Prints `growling` verbs for active NPC's type
-            tags: ["text"]
-        beast_growls_text:
-            description: |-
-                Prints `growls` verbs for active NPC's type
-            tags: ["text"]
-        beast_jaws_text:
-            description: |-
-                Prints `beak` or `jaws` for active NPC's type
-            tags: ["text"]
-        beast_Jaws_text:
-            description: |-
-                Prints `Beak` or `Jaws` for active NPC's type
-            tags: ["text"]
-        beast_teeth_text:
-            description: |-
-                Prints `beak` or `teeth` for active NPC's type
-            tags: ["text"]
-        beastAttractionSettings:
-            name: beastAttractionSettings
-        beastattribute:
-            name: beastattribute
-        beastclothing:
-            name: beastclothing
-        beastCombatInit:
-            name: beastCombatInit
-        beastejaculation:
-            description: |-
-                Performs end of combat ejaculation description for all combat beast NPCs
-
-                All beast NPCs, including named, should go through here to get pre and post ejac descriptions
-
-                `<<beastejaculation ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation to perform
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-                  - `"knot"`: Player is temporarily tied to beast at end of ejac
-            parameters:
-                - '|+ "short"|"knot"'
-            tags: ["text"]
-        beastescape:
-            name: beastescape
-        beastGenders:
-            name: beastGenders
-        beastimgdoggy:
-            name: beastimgdoggy
-        beastimggenitals:
-            name: beastimggenitals
-        beastimggenitalsmissionary:
-            name: beastimggenitalsmissionary
-        beastimgidle:
-            name: beastimgidle
-        beastimgmissionary:
-            name: beastimgmissionary
-        beastlick:
-            name: beastlick
-        beastMaleChanceSplitControls:
-            name: beastMaleChanceSplitControls
-        beastNEWinit:
-            name: beastNEWinit
-        beastNNPCinit:
-            name: beastNNPCinit
-            tags: ["unused"]
-        beastNOGENinit:
-            name: beastNOGENinit
-        beastSettings:
-            name: beastSettings
-        beastspeech:
-            name: beastspeech
-        beastSplitBy:
-            name: beastSplitBy
-        beastSplitByFull:
-            name: beastSplitByFull
-        beastsplural:
-            description: |-
-                Prints plural beast type of provided NPC
-
-                `<<beasttype npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to 0
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        beastTrainGenerate:
-            name: beastTrainGenerate
-        beasttype:
-            description: |-
-                Prints beast type of NPC
-
-                `<<beasttype npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to 0
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        beasttypes:
-            description: |-
-                Prints beast type of first NPC with posssessive apostraphe s
-            tags: ["text"]
-        beastwound:
-            name: beastwound
-        beauty:
-            description: |-
-                Adds beauty to pc's state
-
-                `$beauty` is a measure of pc's base beauty that grows over time from lack of trauma where 0 is none (0-10,000)
-
-                `<<beauty change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        becomePinch:
-            description: |-
-                Morphs the pc into either Lew or Pinch
-
-                **Should be used after `<<freezePlayerStats>>`**
-
-                `<<becomePinch characterName>>`
-                - **characterName**: `string` - name of the character to morph into
-                  - `"Lew"` | `"Pinch"`
-            parameters:
-                - '"Lew"|"Pinch"'
-        bedclotheson:
-            name: bedclotheson
-        bellyDescription:
-            description: |-
-                Prints description of a belly based on its size
-
-                `<<bellyDescription sizeSource forcePregDesc?>>`
-                - **sizeSource**: `number|string` - source where size is pulled from
-                  - `number`: Direct size value
-                  - `"pc"`: Take size from pc
-                  - `namedNPC`: Take size from named npc
-                  - %namedNPCDesc%
-                - **forcePregDesc** _optional_: `bool` - use pregnant version of description regardless of pregnancy awareness (truthy)
-                  - Defaults to `false`
-            parameters:
-                - '|+ number|"pc"|%namedNPC% |+ bool'
-        bestialityTrait:
-            description: |-
-                Prints `| Tamer` or `| Bitch` depending on pc's `$submissive`
-            tags: ["unused", "text"]
-        bhe:
-            description: |-
-                Prints singular pronoun of current beast (he/she/it)
-
-                See `<<bHe>>` for capitalised prose
-
-                Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<he>>` for named npcs. Consider refactoring to not personselect but allow named
-
-                `<<bhe npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to output
-                  - Defaults to `0`
-            parameters:
-                - "|+ number"
-            tags: ["text", "refactor"]
-        bHe:
-            description: |-
-                Prints capitalised singular pronoun of current beast (He/She/It)
-
-                See `<<bhe>>` for un-capitalised prose
-
-                Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<He_Short>>` for named npcs. Consider refactoring to not personselect but allow named
-
-                `<<bHe npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to output
-                  - Defaults to `0`
-            parameters:
-                - "|+ number"
-            tags: ["text", "refactor"]
-        bhers:
-            description: |-
-                Prints singular possessive pronoun as predicate adjective of current beast (his/hers/its)
-
-                See `<<bhis>>` for general possessive pronoun
-
-                Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<his>>` for named npcs. Consider refactoring to not personselect but allow named
-
-                `<<bhers npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to output
-                  - Defaults to `0`
-            parameters:
-                - "|+ number"
-            tags: ["text", "refactor"]
-        bhes:
-            description: |-
-                Prints singular pronoun as is/has contraction of current beast (he's/she's/it's)
-
-                See `<<bHes>>` for capitalised prose
-
-                Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<Himself>>` for named npcs. Consider refactoring to not personselect but allow named
-
-                `<<bHimself npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to output
-                  - Defaults to `0`
-            parameters:
-                - "|+ number"
-            tags: ["unused", "text", "refactor"]
-        bHes:
-            name: bHes
-        bhim:
-            description: |-
-                Prints singular objective pronoun of current beast (him/her/it)
-
-                See `<<bHim>>` for capitalised prose
-
-                Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<him>>` for named npcs. Consider refactoring to not personselect but allow named
-
-                `<<bhim npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to output
-                  - Defaults to `0`
-            parameters:
-                - "|+ number"
-            tags: ["text", "refactor"]
-        bHim:
-            description: |-
-                Prints capitalised singular objective pronoun of current beast (Him/Her/It)
-
-                See `<<bhim>>` for uncapitalised prose
-
-                Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<Him>>` for named npcs. Consider refactoring to not personselect but allow named
-
-                `<<bHim npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to output
-                  - Defaults to `0`
-            parameters:
-                - "|+ number"
-            tags: ["unused", "text", "refactor"]
-        bhimself:
-            description: |-
-                Prints singular objective pronoun as reflexive form of current beast (Himself/Herself/Itself)
-
-                See `<<bHimself>>` for capitalised prose
-
-                Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<himself>>` for named npcs. Consider refactoring to not personselect but allow named
-
-                `<<bhimself npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to output
-                  - Defaults to `0`
-            parameters:
-                - "|+ number"
-            tags: ["unused", "text", "refactor"]
-        bHimself:
-            description: |-
-                Prints capitalised singular objective pronoun as reflexive form of current beast (Himself/Herself/Itself)
-
-                See `<<bhimself>>` for uncapitalised prose
-
-                Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<Himself>>` (because it doesn't exist) for named npcs.
-                Consider refactoring to not personselect but allow named
-
-                `<<bHimself npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to output
-                  - Defaults to `0`
-            parameters:
-                - "|+ number"
-            tags: ["unused", "text", "refactor"]
-        bhis:
-            description: |-
-                Prints singular possessive pronoun of current beast (his/her/its)
-
-                See `<bHis>>` for capitalised prose or `<<bhers>>` for general possessive pronoun as predicate adjective (hers)
-
-                Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<his>>` for named npcs. Consider refactoring to not personselect but allow named
-
-                `<<bhis npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to output
-                  - Defaults to `0`
-            parameters:
-                - "|+ number"
-            tags: ["text", "refactor"]
-        bHis:
-            description: |-
-                Prints capitalised singular possessive pronoun of current beast (his/hers/its)
-
-                See `<<bhis>>` for uncapitalised prose
-
-                Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<His>>` for named npcs. Consider refactoring to not personselect but allow named
-
-                `<<bHis npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to output
-                  - Defaults to `0`
-            parameters:
-                - "|+ number"
-            tags: ["text", "refactor"]
-        bhisnext:
-            name: bhisnext
-        bimboCheck:
-            name: bimboCheck
-        bimboUpdate:
-            name: bimboUpdate
-        bind:
-            name: bind
-        bindings:
-            name: bindings
-        bindtemp:
-            name: bindtemp
-        bird_fly_options:
-            name: bird_fly_options
-        bird_greeting:
-            name: bird_greeting
-        bird_hunt_return:
-            name: bird_hunt_return
-        bird_init:
-            name: bird_init
-        bird_loot:
-            name: bird_loot
-        bird_loot_random:
-            name: bird_loot_random
-        bird_loot_select:
-            name: bird_loot_select
-        bird_pass:
-            name: bird_pass
-        bird_perch_options:
-            name: bird_perch_options
-        bird_schedule:
-            name: bird_schedule
-        bird_stockholm:
-            name: bird_stockholm
-        birthChildElement:
-            name: birthChildElement
-        birthUi:
-            name: birthUi
-        bishop:
-            description: |-
-                Prints `bishop` if confessor has had intro, otherwise `<<priest>>`
-            tags: ["text"]
-        bishop_hands:
-            description: |-
-                Prints `bishop's hands` or its parts
-
-                `<<bishop_hands length?>>`
-                - **length** _optional_: `string` - type of description
-                  - `"long"`: Individual hands that make up the bishop's hands (currently unused)
-            parameters:
-                - '|+ "long"'
-        bitch:
-            description: |-
-                Prints `bitch`
-            tags: ["text"]
-        bitch_pirate:
-            description: |-
-                Prints `dog` or `bitch` depending on pc's appearance
-            tags: ["text"]
-        blackjackCalculate:
-            name: blackjackCalculate
-        blackjackCaughtCheatingSurrender:
-            name: blackjackCaughtCheatingSurrender
-        blackjackCaughtControls:
-            name: blackjackCaughtControls
-        blackjackCheatingAlertsFooter:
-            name: blackjackCheatingAlertsFooter
-        blackjackCheatingCaught:
-            name: blackjackCheatingCaught
-        blackjackCheatingChoicesGenerate:
-            name: blackjackCheatingChoicesGenerate
-        blackjackCheatingPeekingChoiceGenerate:
-            name: blackjackCheatingPeekingChoiceGenerate
-        blackjackControls:
-            name: blackjackControls
-        blackjackControlsChoices:
-            name: blackjackControlsChoices
-        blackjackControlsPostGameSuspicion:
-            name: blackjackControlsPostGameSuspicion
-        blackjackEnd:
-            name: blackjackEnd
-        blackjackGetCanMarkCount:
-            name: blackjackGetCanMarkCount
-        blackjackHelp:
-            name: blackjackHelp
-        blackjackPostGameBettingResult:
-            name: blackjackPostGameBettingResult
-        blackjackPostGameThrowTips:
-            name: blackjackPostGameThrowTips
-        blackjackResultText:
-            name: blackjackResultText
-        blackjackScore:
-            name: blackjackScore
-        blackjackShowCards:
-            name: blackjackShowCards
-        blackjackStart:
-            name: blackjackStart
-        blackjackSuspicion:
-            name: blackjackSuspicion
-        blackwolfhand:
-            name: blackwolfhand
-        blackwolfhealth:
-            name: blackwolfhealth
-        blindfoldintro:
-            name: blindfoldintro
-        blindfoldremove:
-            name: blindfoldremove
-        body_size_text:
-            description: |-
-                Prints random appropriate description of pc's physique
-            tags: ["text"]
-        body_tip:
-            name: body_tip
-        bodycommentsetdata:
-            name: bodycommentsetdata
-        bodyliquid:
-            description: |-
-                Applies specified liquid(s) to specified bodypart(s)
-
-                [].deleteAt is used incorrectly here and repeated arguments should be the last.
-                Consider refactoring to accept array and fixing delete behavior
-
-                `<<bodyliquid bodypart ...liquidTypes amount?>>`
-                - **bodypart**: `string` - bodypart(s) to apply liquid to
-                  - `"all"` | `"clear"`: all bodyparts
-                  - `"inside"`: inner bodyparts
-                  - `"outside"`: all bodyparts without inner bodyparts
-                  - %bodyLiquidPartsDesc%
-                - ...**liquidTypes**: `string` - type of liquid(s) to apply
-                  - %liquidTypesDesc%
-                - **amount** _optional_: `int` - amount of liquid to apply to bodypart(s)
-                  - Defaults to `1`
-            parameters:
-                - '"all"|"inside"|"outside"|%bodyLiquidParts% &+ ...(%liquidTypes%|number|var|bareword)'
-                - '"all"|"inside"|"outside"|%bodyLiquidParts% &+ "all" |+ number|var|bareword'
-                - '"clear" &+ ...(%liquidTypes%)'
-            tags: ["refactor"]
-        bodypart:
-            name: bodypart
-        bodypart_admire:
-            name: bodypart_admire
-        bodypart_admire_arrow:
-            name: bodypart_admire_arrow
-        bodypart_admire_bestiality:
-            name: bodypart_admire_bestiality
-        bodypart_admire_boyish:
-            name: bodypart_admire_boyish
-        bodypart_admire_chance:
-            name: bodypart_admire_chance
-        bodypart_admire_combat:
-            name: bodypart_admire_combat
-        bodypart_admire_criminal:
-            name: bodypart_admire_criminal
-        bodypart_admire_cum:
-            name: bodypart_admire_cum
-        bodypart_admire_cum_convert:
-            name: bodypart_admire_cum_convert
-        bodypart_admire_cum_heavy:
-            name: bodypart_admire_cum_heavy
-        bodypart_admire_cum_light:
-            name: bodypart_admire_cum_light
-        bodypart_admire_exhibitionism:
-            name: bodypart_admire_exhibitionism
-        bodypart_admire_generic:
-            name: bodypart_admire_generic
-        bodypart_admire_girly:
-            name: bodypart_admire_girly
-        bodypart_admire_impreg:
-            name: bodypart_admire_impreg
-        bodypart_admire_kylar:
-            name: bodypart_admire_kylar
-        bodypart_admire_lewd:
-            name: bodypart_admire_lewd
-        bodypart_admire_named:
-            name: bodypart_admire_named
-        bodypart_admire_parasite:
-            name: bodypart_admire_parasite
-        bodypart_admire_parasite_comment:
-            name: bodypart_admire_parasite_comment
-        bodypart_admire_parasite_convert:
-            name: bodypart_admire_parasite_convert
-        bodypart_admire_plant:
-            name: bodypart_admire_plant
-        bodypart_admire_pregnancy:
-            name: bodypart_admire_pregnancy
-        bodypart_admire_promiscuity:
-            name: bodypart_admire_promiscuity
-        bodypart_admire_prostitution:
-            name: bodypart_admire_prostitution
-        bodypart_admire_rape:
-            name: bodypart_admire_rape
-        bodypart_admire_violence:
-            name: bodypart_admire_violence
-        bodyPregCalc:
-            name: bodyPregCalc
-            tags: ["unused"]
-        bodyremarkcapitalise:
-            name: bodyremarkcapitalise
-        bodyremarkcomma:
-            name: bodyremarkcomma
-        bodyremarkstop:
-            name: bodyremarkstop
-        bodywriting:
-            name: bodywriting
-        bodywriting_beauty_select:
-            name: bodywriting_beauty_select
-        bodywriting_bestiality_select:
-            name: bodywriting_bestiality_select
-        bodywriting_clear:
-            name: bodywriting_clear
-        bodywriting_clear_all:
-            name: bodywriting_clear_all
-            tags: ["unused"]
-        bodywriting_criminal:
-            name: bodywriting_criminal
-        bodywriting_criminal_select:
-            name: bodywriting_criminal_select
-        bodywriting_dungeon_select:
-            name: bodywriting_dungeon_select
-        bodywriting_exhibitionism_select:
-            name: bodywriting_exhibitionism_select
-        bodywriting_finalisation:
-            name: bodywriting_finalisation
-        bodywriting_impreg_select:
-            name: bodywriting_impreg_select
-        bodywriting_init:
-            name: bodywriting_init
-        bodywriting_machine:
-            name: bodywriting_machine
-        bodywriting_normal_select:
-            name: bodywriting_normal_select
-        bodywriting_npc:
-            name: bodywriting_npc
-        bodywriting_npc_bodypart:
-            name: bodywriting_npc_bodypart
-        bodywriting_npc_kylar:
-            name: bodywriting_npc_kylar
-        bodywriting_npc_normal:
-            name: bodywriting_npc_normal
-        bodywriting_npc_picture:
-            name: bodywriting_npc_picture
-        bodywriting_npc_special:
-            name: bodywriting_npc_special
-        bodywriting_npc_sydney:
-            name: bodywriting_npc_sydney
-        bodywriting_npc_sydney_book:
-            name: bodywriting_npc_sydney_book
-        bodywriting_npc_sydney_friendly:
-            name: bodywriting_npc_sydney_friendly
-        bodywriting_npc_sydney_science:
-            name: bodywriting_npc_sydney_science
-        bodywriting_npc_whitney:
-            name: bodywriting_npc_whitney
-        bodywriting_pregnancy_select:
-            name: bodywriting_pregnancy_select
-        bodywriting_prostitution_check:
-            name: bodywriting_prostitution_check
-            tags: ["unused"]
-        bodywriting_prostitution_select:
-            name: bodywriting_prostitution_select
-        bodywriting_rape_select:
-            name: bodywriting_rape_select
-        bodywriting_scrap_select:
-            name: bodywriting_scrap_select
-        bodywriting_sex_select:
-            name: bodywriting_sex_select
-        bodywritingExposureCheck:
-            name: bodywritingExposureCheck
-        bodywritingMenu:
-            name: bodywritingMenu
-        bodywritingMenuLinks:
-            name: bodywritingMenuLinks
-        bodywritingOptions:
-            name: bodywritingOptions
-        bookCriminal:
-            name: bookCriminal
-        bookRentalOptions:
-            name: bookRentalOptions
-        bottom:
-            name: bottom
-        bottom_sensitivity:
-            description: |-
-                Changes sensitivity of bottom by provided amount
-
-                `<<bottom_sensitivity amount>>`
-                - **amount**: `number` - change to sensitivity
-            parameters:
-                - "number"
-        bottom_wiggle:
-            name: bottom_wiggle
-        bottomaside:
-            description: |-
-                Prints name of innermost bottom clothing layer that can be seen or `bottom` if everything is exposed
-
-                Does not take into account over_bottom. Consider refactoring
-            tags: ["refactor", "text"]
-        bottomdifficulty:
-            description: |-
-                Prints color-coded adjective of bottom action difficulty in current combat
-            tags: ["text"]
-        bottomejacstat:
-            name: bottomejacstat
-        bottoms:
-            description: |-
-                Prints lower clothing layer, taking into account if it is part of an outfit
-            tags: ["text"]
-        bottomsensitivity:
-            name: bottomsensitivity
-        BottomShop:
-            name: BottomShop
-        bottomskill:
-            description: |-
-                Adds bottom skill to pc's state
-
-                `$bottomskill` is a measure of pc's proficiency using their buttocks where 0 is awkward (0-1,000)
-
-                `<<bottomskill change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        bottomskilluse:
-            name: bottomskilluse
-        bottomstat:
-            name: bottomstat
-        bottomtext:
-            description: |-
-                Prints color-coded adjective of active bottom skill usage
-            tags: ["text"]
-        boughtOnce:
-            name: boughtOnce
-        bound2init:
-            name: bound2init
-            tags: ["unused"]
-        boundBodyParts:
-            description: |-
-                Prints description of bound body parts if there are any
-
-                Output is also stored in `_boundparts` for convenience
-            tags: ["text", "temp"]
-        bra:
-            description: |-
-                Prints descriptor of active NPC's inner_upper clothing
-
-                See `<<panties>> for inner_lower clothing or `<<dress>>` for upper clothing
-
-                See `<<npcClothesText>>` for full name of clothes
-            tags: ["text"]
-        brat:
-            name: brat
-        breast_sensitivity:
-            description: |-
-                Changes sensitivity of breasts by provided amount
-
-                `<<breast_sensitivity amount>>`
-                - **amount**: `number` - change to sensitivity
-            parameters:
-                - "number"
-        breastarousal:
-            deprecatedSuggestions:
-                - <<arousal X "breasts">>
-            description: |-
-                Adds breast-focused arousal to pc with appropriate modifiers
-
-                `<<breastsarousal change source>>`
-                - **change**: `number` - +/- change to apply
-            tags: ["unused"]
-        breastfed:
-            name: breastfed
-        breastfeed:
-            description: |-
-                Milks the pc and applies effects of being milked
-
-                Amount extracted is between 1x-5x amount with possible additional 2x multiplier for cow transform
-
-                `<<breastfeed amount? storage?>>`
-                - **amount** _optional_: `number` - multiplier to random amount of milk extracted
-                  - Defaults to `1`
-                - **storage** _optional_: `string` - method used to gather milk
-                  - `"pump"`: a breastpump is being used
-                  - Defaults to not storing
-            parameters:
-                - '|+ number |+ "pump"'
-        breastFlavorText:
-            name: breastFlavorText
-        breasts:
-            name: breasts
-        breastsactive:
-            name: breastsactive
-        breastsactivemissionary:
-            name: breastsactivemissionary
-        breastsaside:
-            description: |-
-                Prints name of innermost top clothing layer that can be seen or `<<breasts>>` if everything is exposed
-
-                See `<<topaside>>`
-
-                Does not take into account over_top. Consider refactoring
-            tags: ["refactor", "text"]
-        breastsensitivity:
-            name: breastsensitivity
-        breastsidle:
-            name: breastsidle
-        breastsidlemissionary:
-            name: breastsidlemissionary
-        breastsizedesc:
-            name: breastsizedesc
-        breastssimple:
-            name: breastssimple
-        bred:
-            description: |-
-                Prints `bred` or `fucked` depending on pc's pregnancy speech settings
-
-                Bug reports of it sometimes showing up as `bread` are just rumours
-            tags: ["text"]
-        brothel_bukkake:
-            name: brothel_bukkake
-        brothel_bukkake_end:
-            name: brothel_bukkake_end
-        brothel_bukkake_init:
-            name: brothel_bukkake_init
-        brothel_bukkake_links:
-            name: brothel_bukkake_links
-        brothel_show_security:
-            name: brothel_show_security
-        brothelshowintro:
-            name: brothelshowintro
-        brothelshowoptions:
-            name: brothelshowoptions
-        brothers_and_sisters:
-            description: |-
-                Prints `brothers and sisters` unless player has mono-gendered the world
-
-                See `<<monks_and_nuns>>`
-            tags: ["text"]
-        browsColourPreview:
-            name: browsColourPreview
-        browsDyeReset:
-            name: browsDyeReset
-        bruise:
-            name: bruise
-        busmoveinit:
-            name: busmoveinit
-            tags: ["unused"]
-        busstationex1:
-            name: busstationex1
-        buswait:
-            name: buswait
-        buttplugon:
-            name: buttplugon
-        buyToy:
-            name: buyToy
-        buyTryOnClothes:
-            name: buyTryOnClothes
-        bwpcinteraction:
-            name: bwpcinteraction
-        cabinothers:
-            name: cabinothers
-        cabintime:
-            name: cabintime
-        cafecoffeeflasharousal:
-            name: cafecoffeeflasharousal
-        cafecoffeesip:
-            name: cafecoffeesip
-        CafeExhibitionismLegsPartEnd:
-            name: CafeExhibitionismLegsPartEnd
-        CafeExhibitionismLegsPartNormalTerminate:
-            description: |-
-                End Cafe Exhibitionism event and link to Cliff Street
-
-                ```dart
-                // :: Cafe Exhibitionism Legs Part
-                //   <<CafeExhibitionismLegsPartSuccessS1>>
-                //   <<CafeExhibitionismLegsPartPhotoDecision>>
-                //   <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
-                   <<CafeExhibitionismLegsPartNormalTerminate>>
-                // :: Cafe Exhibitionism Legs Part Pantiless
-                //   <<CafeExhibitionismLegsPartPantilessPhotoDecision>>
-                   <<CafeExhibitionismLegsPartNormalTerminate>>
-                ```
-            tags: ["links"]
-        CafeExhibitionismLegsPartPantilessPhotoDecision:
-            description: |-
-                Link to Cafe Exhibitionism Legs Part Pantiless Photo/No Photo Passages
-                ```dart
-                // :: Cafe Exhibitionism Legs Part Pantiless
-                   <<CafeExhibitionismLegsPartPantilessPhotoDecision>>
-                //   <<CafeExhibitionismLegsPartNormalTerminate>>
-                ```
-            tags: ["links"]
-        CafeExhibitionismLegsPartPantyTakeoffDecision:
-            description: |-
-                ```dart
-                // :: Cafe Exhibitionism Legs Part
-                //   <<CafeExhibitionismLegsPartSuccessS1>>
-                     <<CafeExhibitionismLegsPartPhotoDecision>>
-                //   <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
-                //   <<CafeExhibitionismLegsPartNormalTerminate>>
-                // :: Cafe Exhibitionism Legs Part Photo
-                //   <<CafeExhibitionismLegsPartSuccessS2>>
-                     <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
-                //   <<CafeExhibitionismLegsPartEnd>>
-                ```
-            tags: ["links"]
-        CafeExhibitionismLegsPartPhotoDecision:
-            description: |-
-                ```dart
-                // :: Cafe Exhibitionism Legs Part
-                //   <<CafeExhibitionismLegsPartSuccessS1>>
-                     <<CafeExhibitionismLegsPartPhotoDecision>>
-                //   <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
-                //   <<CafeExhibitionismLegsPartNormalTerminate>>
-                ```
-            tags: ["links"]
-        CafeExhibitionismLegsPartSuccessS1:
-            description: |-
-                ```dart
-                // :: Cafe Exhibitionism Legs Part
-                   <<CafeExhibitionismLegsPartSuccessS1>>
-                //   <<CafeExhibitionismLegsPartPhotoDecision>>
-                //   <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
-                //   <<CafeExhibitionismLegsPartNormalTerminate>>
-                ```
-            tags: ["links"]
-        CafeExhibitionismLegsPartSuccessS2:
-            description: |-
-                ```dart
-                // :: Cafe Exhibitionism Legs Part Photo
-                   <<CafeExhibitionismLegsPartSuccessS2>>
-                //   <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
-                //   <<CafeExhibitionismLegsPartEnd>>
-                ```
-            tags: ["links"]
-        calchairlengthstage:
-            name: calchairlengthstage
-        calculateallure:
-            name: calculateallure
-        calculateBlackjackLuckStats:
-            name: calculateBlackjackLuckStats
-        callJanet:
-            description: |-
-                Freezes the story variables, then morphs the pc into Janet, also altering the location and time
-        campFurnitureMessage:
-            name: campFurnitureMessage
-        canvas-model-override:
-            name: canvas-model-override
-        canvas-player-base-body:
-            name: canvas-player-base-body
-        canvasanimate:
-            description: |-
-                Insert HTML <canvas> element right here
-
-                Renders, prints, and animates previously prepared images into it
-
-                [Low-Level Canvas API Overview](%workspaceDir%/game/base-clothing/canvas.twee#L2)
-
-                `<<canvasanimate className>>`
-                - **className**: `string` - class or space-separated classes of canvas element to be inserted when placed in the DOM
-            parameters:
-                - "|+ text"
-            tags: ["dom", "unused"]
-        canvasColoursEditor:
-            name: canvasColoursEditor
-        canvasdraw:
-            description: |-
-                Insert HTML <canvas> element right here
-
-                Renders, prints, and animates previously prepared images into it
-
-                [Low-Level Canvas API Overview](%workspaceDir%/game/base-clothing/canvas.twee#L2)
-
-                `<<canvasdraw frameCount className>>`
-                - **frameCount**: `number` - frame count to use for splitting canvas
-                  - Defaults to 1
-                - **className**: `string` - class or space-separated classes of canvas element to be inserted when placed in the DOM
-            parameters:
-                - "|+ number |+ text"
-            tags: ["dom", "unused"]
-        canvasimg:
-            name: canvasimg
-        canvaslayer:
-            description: |-
-                Prepares a layer to be rendered
-
-                [Low-Level Canvas API Overview](%workspaceDir%/game/base-clothing/canvas.twee#L2)
-
-                `<<canvaslayer zIndex sourceUrl ...options>>`
-                - **zIndex**: `number` - z-index of the layer (bigger above lower)
-                - **sourceUrl**: `string` - path to image
-                - ...**options**: extra CompositeLayerSpec option objects
-                  - Are merged, last has most priority
-            parameters:
-                - number &+ text &+ ...(bareword|var)
-            tags: ["unused"]
-        canvasLayersEditor:
-            name: canvasLayersEditor
-        canvasModelEditor:
-            name: canvasModelEditor
-        canvasstart:
-            description: |-
-                Creates an off-screen <canvas> element
-
-                [Low-Level Canvas API Overview](%workspaceDir%/game/base-clothing/canvas.twee#L2)
-
-                `<<canvasstart width height frames>>`
-                - **width**: `number` - positive integer corresponding to HTMLCanvasElement.width
-                - **height**: `number` - positive integer corresponding to HTMLCanvasElement.height
-                - **frames**: `number` - positive integer multiplied to width for creating horizontal spritesheet
-            parameters:
-                - number &+ number &+ number
-            tags: ["unused"]
-        capitalise:
-            description: |-
-                Capitalises the first letter of `_text_output`
-
-                Example:
-                ```
-                <<widget "The">><<silently>>
-                  <<set _text_output to "the">>
-                  <<capitalise>>
-                <</silently>>_text_output<</widget>>
-                ```
-        capitalise2:
-            container: true
-            description: |-
-                Capitalises the inner contents of this widget
-
-                Example:
-                ```
-                <<capitalise2>>
-                  the
-                <</captialise2>>
-                ```
-            tags: ["unused"]
-        caption_clamp:
-            name: caption_clamp
-        card_clothes_lost:
-            name: card_clothes_lost
-        card_clothes_rebuy_calculate:
-            name: card_clothes_rebuy_calculate
-        card_pot_collected:
-            name: card_pot_collected
-        card_pot_confiscated:
-            name: card_pot_confiscated
-        cardImage:
-            name: cardImage
-        cards_arousal_check:
-            name: cards_arousal_check
-        cards_bottom_cover:
-            name: cards_bottom_cover
-        cards_bra_cover:
-            name: cards_bra_cover
-        cards_cheating_virginity_warning:
-            name: cards_cheating_virginity_warning
-        cards_exposure_text:
-            name: cards_exposure_text
-        cards_lap_clothes:
-            name: cards_lap_clothes
-        cards_lap_clothes_intro:
-            name: cards_lap_clothes_intro
-        cards_lap_return:
-            name: cards_lap_return
-        cards_naked_cover:
-            name: cards_naked_cover
-        cards_naked_end:
-            name: cards_naked_end
-        cards_oral_options:
-            name: cards_oral_options
-        cards_panties_cover:
-            name: cards_panties_cover
-            tags: ["unused"]
-        cards_play_options:
-            name: cards_play_options
-        cards_start_play_options:
-            name: cards_start_play_options
-        cards_strip_text:
-            name: cards_strip_text
-        cards_top_cover:
-            name: cards_top_cover
-        cards_underwear_cover:
-            name: cards_underwear_cover
-        cards_virginity_all_warnings:
-            name: cards_virginity_all_warnings
-        cards_virginity_warning:
-            name: cards_virginity_warning
-        cardText:
-            name: cardText
-            tags: ["unused"]
-        carriedSend:
-            name: carriedSend
-        carryblock:
-            name: carryblock
-        cassBoy:
-            name: cassBoy
-        cast_aside_clothes:
-            description: |-
-                Prints sentence describing what an npc does with forcibly stripped clothing
-
-                Out of date and underutilised. Consider refactoring
-            tags: ["text", "refactor"]
-        cat:
-            description: |-
-                Prints `| Cat`
-            tags: ["text"]
-        catacombs_end:
-            name: catacombs_end
-        catacombs_exit_indicator:
-            name: catacombs_exit_indicator
-        catacombs_init:
-            name: catacombs_init
-        catacombs_skip:
-            name: catacombs_skip
-        catacombs_torch:
-            name: catacombs_torch
-        catacombs_torch_text:
-            name: catacombs_torch_text
-        catcall:
-            description: |-
-                Prints random catcall
-            tags: ["text"]
-        catHeterochromiaTF:
-            name: catHeterochromiaTF
-        catTransform:
-            name: catTransform
-        cell_trouble:
-            name: cell_trouble
-        chalets_bags:
-            name: chalets_bags
-        chalets_end:
-            name: chalets_end
-        chalets_end_link:
-            name: chalets_end_link
-        chalets_fall_events:
-            name: chalets_fall_events
-        chalets_links:
-            name: chalets_links
-        chalets_start:
-            name: chalets_start
-        changeCChildbirthDate:
-            name: changeCChildbirthDate
-            tags: ["unused"]
-        changeCChildConceptionDate:
-            name: changeCChildConceptionDate
-            tags: ["unused"]
-        changeCChildId:
-            name: changeCChildId
-            tags: ["unused"]
-        changeCNPCEventTimer:
-            name: changeCNPCEventTimer
-            tags: ["unused"]
-        changeCNPCPregnancyAvoidance:
-            name: changeCNPCPregnancyAvoidance
-            tags: ["unused"]
-        changeCNPCPregnancyTimer:
-            name: changeCNPCPregnancyTimer
-            tags: ["unused"]
-        changingRoom:
-            name: changingRoom
-        changingRoomFeelings:
-            name: changingRoomFeelings
-        changingrooms:
-            name: changingrooms
-            tags: ["unused"]
-        characteristic-box:
-            name: characteristic-box
-        characteristic-box-modifier:
-            name: characteristic-box-modifier
-        characteristic-text:
-            name: characteristic-text
-        characteristics:
-            name: characteristics
-        characterSettings:
-            name: characterSettings
-        charles:
-            description: |-
-                Prints the name Morgan gives the player based on appearance
-            tags: ["text"]
-        charLight:
-            description: |-
-                Render and print light behind character model
-
-                `<<charLight xOffset yOffset className?>>`
-                - **xOffset**: `number` - CSS x offset
-                  - Assumes px
-                - **yOffset**: `number` - CSS y offset
-                  - Assumes px
-                - **className** _optional_: `string` - class or space-separated classes of div element to be inserted when placed in the DOM
-            parameters:
-                - number|text &+ number|text |+ text
-            tags: ["dom"]
-        charLightCombat:
-            description: |-
-                Render and print light behind character model
-
-                `<<charLight position? prop?>>`
-                - **position** _optional_: `string` - combat position
-                  - %combatPositionsDesc%
-                - **prop** _optional_: `string` - prop being rendered in combat
-                  - %combatPropsDesc%
-                - **className** _optional_: `string` - class or space-separated classes of div element to be inserted when placed in the DOM
-            parameters:
-                - "|+ %combatPositions% |+ %combatProps% |+ text"
-            tags: ["dom"]
-        chastityBreakWraith:
-            name: chastityBreakWraith
-        cheatBodyliquidOnPart:
-            name: cheatBodyliquidOnPart
-        cheatMenuEyesSelected:
-            name: cheatMenuEyesSelected
-        cheatParasiteToggle:
-            name: cheatParasiteToggle
-        cheatPregnancyNPC:
-            name: cheatPregnancyNPC
-        cheatPregnancyNPCReset:
-            name: cheatPregnancyNPCReset
-        cheats:
-            name: cheats
-        cheats-characterStats:
-            name: cheats-characterStats
-        cheats-characterVisual:
-            name: cheats-characterVisual
-        cheats-npcs:
-            name: cheats-npcs
-        cheats-other:
-            name: cheats-other
-        cheats-teleport:
-            name: cheats-teleport
-        cheatsImpreg:
-            name: cheatsImpreg
-        cheatsImpregOptions:
-            name: cheatsImpregOptions
-        cheatsPregnancyOptions:
-            name: cheatsPregnancyOptions
-        cheatStart:
-            name: cheatStart
-        cheatVirginityToggle:
-            name: cheatVirginityToggle
-        checkdroptowel:
-            name: checkdroptowel
-        checkfloor:
-            name: checkfloor
-        checkforloveinterests:
-            name: checkforloveinterests
-        checkWraith:
-            name: checkWraith
-        cheeklick:
-            description: |-
-                Prints some facial reaction by NPC to pc's mouth usage
-
-                `<<ejaculation-eden npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to 0
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        chefspeechoptions:
-            name: chefspeechoptions
-        chefwork:
-            name: chefwork
-        chest:
-            name: chest
-        chest_section:
-            name: chest_section
-        chestactionDifficulty:
-            name: chestactionDifficulty
-        chestactionDifficultyTentacle:
-            name: chestactionDifficultyTentacle
-        chestActionInit:
-            name: chestActionInit
-        chestActionInitStruggle:
-            name: chestActionInitStruggle
-        chestActionInitTentacle:
-            name: chestActionInitTentacle
-        chestActions:
-            name: chestActions
-        chestActionsTentacle:
-            name: chestActionsTentacle
-        chestdifficulty:
-            description: |-
-                Prints color-coded adjective of chest action difficulty in current combat
-            tags: ["text"]
-        chestejacstat:
-            name: chestejacstat
-        chestsimple:
-            name: chestsimple
-        chestskill:
-            description: |-
-                Adds chest skill to pc's state
-
-                `$chestskill` is a measure of pc's proficiency using their chest where 0 is awkward (0-1,000)
-
-                `<<chestskill change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        chestskilluse:
-            name: chestskilluse
-        cheststat:
-            name: cheststat
-        chesttext:
-            description: |-
-                Prints color-coded adjective of active chest skill usage
-            tags: ["text"]
-        chikanattention:
-            name: chikanattention
-        chikanmolestactions:
-            name: chikanmolestactions
-        childActivity:
-            name: childActivity
-        childAge:
-            name: childAge
-        childChangeClothes:
-            name: childChangeClothes
-            tags: ["unused"]
-        childcry:
-            name: childcry
-        childCry:
-            name: childCry
-            tags: ["unused"]
-        childFirstWord:
-            name: childFirstWord
-            tags: ["unused"]
-        childgiggles:
-            name: childgiggles
-        childhair:
-            name: childhair
-            tags: ["unused"]
-        childhand:
-            name: childhand
-        childhands:
-            name: childhands
-        childhe:
-            name: childhe
-        childHe:
-            name: childHe
-        childhers:
-            name: childhers
-            tags: ["unused"]
-        childHers:
-            name: childHers
-            tags: ["unused"]
-        childherself:
-            name: childherself
-        childhim:
-            name: childhim
-        childHim:
-            name: childHim
-        childhimself:
-            name: childhimself
-        childhis:
-            name: childhis
-        childHis:
-            name: childHis
-        childInteratedWith:
-            name: childInteratedWith
-        childname:
-            name: childname
-        childRename:
-            name: childRename
-            tags: ["unused"]
-        childrenEvents:
-            name: childrenEvents
-        childrenNames:
-            name: childrenNames
-        childrenSetup:
-            name: childrenSetup
-        childrenToysUI:
-            name: childrenToysUI
-        childrenToysUIReplace:
-            name: childrenToysUIReplace
-        childSelect:
-            name: childSelect
-        childSelectRandom:
-            description: |-
-                Sets `$childSelected` to a random child
-
-                `$childSelected` is a `{Child}` object from `$children`.
-                It being synced with the original cannot be guaranteed between passages
-
-                `<<childSelectRandom location>>`
-                - **location** _optional_: `string` - location string to select from randomly
-                  - Defaults to all if no location is provided
-            parameters:
-                - string
-        childtoy:
-            name: childtoy
-        childTransform:
-            name: childTransform
-        childtype:
-            name: childtype
-        childViewerDisplay:
-            name: childViewerDisplay
-        childViewerDisplayElements:
-            name: childViewerDisplayElements
-        childViewerElement:
-            name: childViewerElement
-        childViewerHiddenElements:
-            name: childViewerHiddenElements
-        childViewerHiddenElementsUnhide:
-            name: childViewerHiddenElementsUnhide
-        childViewerPageUpdate:
-            name: childViewerPageUpdate
-        chokeTrait:
-            description: |-
-                Prints `| Asphyxiophilia`
-            tags: ["text"]
-        christmas_options:
-            name: christmas_options
-        christmas_robin:
-            name: christmas_robin
-        christmas_robin_visit:
-            name: christmas_robin_visit
-        clamp:
-            name: clamp
-        clampgoo:
-            name: clampgoo
-        classgrades:
-            name: classgrades
-        classRoomEarSlime:
-            description: |-
-                Checks if ear slime wants the player to skip specified class and interrupt passage
-
-                Sets `_earSlimeClassRoomBlock` to true if slime outputs enough text to warrant a passage block
-
-                `<<classRoomEarSlime class>>`
-                - **class**: `string` - name of class to check
-                  - `"english"` | `"history"` | `"maths"` | `"science"` | `"swimming"`
-            parameters:
-                - '"english"|"history"|"maths"|"science"|"swimming"'
-            tags: ["links", "text", "temp"]
-        cleanupOnWardrobeExit:
-            name: cleanupOnWardrobeExit
-        clear_pillory:
-            name: clear_pillory
-        clear_plot:
-            name: clear_plot
-        clearAllWarning:
-            name: clearAllWarning
-        clearAnimalTransformations:
-            name: clearAnimalTransformations
-        clearDivineTransformations:
-            name: clearDivineTransformations
-        cleareventpool:
-            name: cleareventpool
-        clearingactions:
-            name: clearingactions
-        clearingedenactions:
-            name: clearingedenactions
-        clearnpc:
-            description: |-
-                Clears active npcs, saving persistent npcs if present
-
-                See `<<clearsinglenpc>>` to clear just a single active npc
-        clearNPC:
-            description: |-
-                Fully clears data about a specific persistent npc
-
-                Not to be confused with `<<clearnpc>>`. Consider refactoring
-
-                `<<clearNPC name>>`
-                - **name**: `string` - npc key to clear data from
-                  - spaces should be avoided if possible
-            parameters:
-                - "text"
-            tags: ["refactor"]
-        clearPronouns:
-            description: |-
-                Resets NPC object's `pronouns` property back to empty
-
-                `<<clearPronouns npcObject>>`
-                - **npcObject**: `object` - NPC to unfill
-            parameters:
-                - "var"
-            tags: ["unused"]
-        clearSaveMenu:
-            name: clearSaveMenu
-        clearsinglenpc:
-            description: |-
-                Clears single active npc
-
-                Does not save persistent npcs when cleared
-
-                `<<clearsinglenpc slot>>`
-                - **slot**: `number` - slot number to clear (zero-based)
-            parameters:
-                - "number"
-        clearToDeleteParasiteFetus:
-            name: clearToDeleteParasiteFetus
-        clearWraith:
-            name: clearWraith
-        cliff:
-            name: cliff
-        cliff_top_desc:
-            name: cliff_top_desc
-        cliffeventend:
-            name: cliffeventend
-        cliffexposed:
-            name: cliffexposed
-            tags: ["unused"]
-        cliffquick:
-            name: cliffquick
-        clit:
-            name: clit
-        clock:
-            description: |-
-                Prints an analogue clock set to current time
-            tags: ["dom"]
-        closeButton:
-            name: closeButton
-        closeButtonMobile:
-            name: closeButtonMobile
-        closeimg:
-            name: closeimg
-        clothesactive:
-            name: clothesactive
-        clothesactivemissionary:
-            name: clothesactivemissionary
-        clothescolour:
-            name: clothescolour
-            tags: ["unused"]
-        clothesidle:
-            name: clothesidle
-        clothesidlemissionary:
-            name: clothesidlemissionary
-        clotheson:
-            name: clotheson
-        clothesonplant:
-            name: clothesonplant
-        clothesontowel:
-            name: clothesontowel
-        clothesruined:
-            description: |-
-                Destroys pc's main body clothing slots, whether worn or carried
-
-                This includes over_upper, upper, under_upper, over_lower, lower, and under_lower slot clothing
-        clothesruinstat:
-            name: clothesruinstat
-        clothesspeech:
-            name: clothesspeech
-        clothesstrip:
-            name: clothesstrip
-        clothesstripstat:
-            name: clothesstripstat
-        clothing_arrays:
-            name: clothing_arrays
-        clothing_data:
-            name: clothing_data
-        clothingCaptionChastityEffect:
-            name: clothingCaptionChastityEffect
-            tags: ["unused"]
-        clothingCaptionExposed:
-            name: clothingCaptionExposed
-        clothingCaptionText:
-            name: clothingCaptionText
-        clothingCaptionTextGender:
-            name: clothingCaptionTextGender
-        clothingCaptionTextGenitals:
-            name: clothingCaptionTextGenitals
-        clothingCaptionTextHandheld:
-            name: clothingCaptionTextHandheld
-        clothingCaptionTextMask:
-            name: clothingCaptionTextMask
-        clothingCaptionTextMiddle:
-            name: clothingCaptionTextMiddle
-        clothingCaptionTextNothing:
-            name: clothingCaptionTextNothing
-        clothingCaptionTextOver:
-            name: clothingCaptionTextOver
-        clothingCaptionTextPreggy:
-            name: clothingCaptionTextPreggy
-        clothingCaptionTextStrip:
-            name: clothingCaptionTextStrip
-        clothingCaptionTextUnder:
-            name: clothingCaptionTextUnder
-        clothinginit:
-            name: clothinginit
-        clothingReset:
-            name: clothingReset
-        clothingResetOwnedReset:
-            name: clothingResetOwnedReset
-        clothingShop-main:
-            name: clothingShop-main
-        clothingshopChangePage:
-            name: clothingshopChangePage
-        clothingShopLegend:
-            name: clothingShopLegend
-        clothingShopv2:
-            description: |-
-                1. `<<clothingShopv2 shopName slot>>`
-
-                2. `<<clothingShopv2 shopName slot outfits?>>`
-                	- **shopName**: `string` - name of shop
-                  - `"clothing"` | `"forest"` | `"school"`"*slot**: `string` - name of clothing slot"
-                  - `"all"` | %clothesTypesDesc%
-                  - `"over_upper"` | `"upper"` | `"under_upper"`"*outfits** _optional_: `string|bool` - display outfits version of slots"
-                  - `"outfits"` | `"non-outfits"` | `true` | `false`
-            parameters:
-                - '"clothing"|"forest"|"school" &+ "all"|%clothesTypes%'
-                - '"clothing"|"forest"|"school" &+ "over_upper"|"upper"|"under_upper" |+ "outfits"|"non-outfits"|bool'
-            tags: ["dom"]
-        clothingstatecompare:
-            name: clothingstatecompare
-        clothingtrait:
-            description: |-
-                ```dart
-                /*  <<shoptraits>>  */
-                    <<clothingtrait trait noOutput?>>
-                /*    <<shopTraitDescription trait>>  */
-                ```
-
-                <<clothingtrait trait noOutput?>>
-                - **trait**: `string` - trait key in lowercase
-                - **noOutput** _optional_: `bool` - suppress output (truthy)
-            parameters:
-                - text |+ bool|text|number
-            tags: ["text", "img"]
-        colourCodes:
-            name: colourCodes
-        combat_deviancy_text:
-            name: combat_deviancy_text
-        combat_lewdity_text:
-            name: combat_lewdity_text
-        combat_promiscuity_text:
-            name: combat_promiscuity_text
-        combat-dildo-on-anus:
-            name: combat-dildo-on-anus
-        combat-dildo-on-anusentrance:
-            name: combat-dildo-on-anusentrance
-        combat-dildo-on-penis:
-            name: combat-dildo-on-penis
-        combat-dildo-on-penisentrance:
-            name: combat-dildo-on-penisentrance
-        combat-dildo-on-vagina:
-            name: combat-dildo-on-vagina
-        combat-dildo-on-vaginaentrance:
-            name: combat-dildo-on-vaginaentrance
-        combat-dildospank:
-            name: combat-dildospank
-        combat-get-other-hand:
-            name: combat-get-other-hand
-        combat-hand-hypnosis:
-            name: combat-hand-hypnosis
-        combat-hand-hypnosis-cover:
-            name: combat-hand-hypnosis-cover
-        combat-hand-hypnosis-masochism:
-            name: combat-hand-hypnosis-masochism
-        combat-hand-hypnosis-orgasm:
-            name: combat-hand-hypnosis-orgasm
-        combat-hand-hypnosis-scream:
-            name: combat-hand-hypnosis-scream
-        combat-hand-on-anus:
-            name: combat-hand-on-anus
-        combat-hand-on-anusentrance:
-            name: combat-hand-on-anusentrance
-        combat-hand-on-arms:
-            name: combat-hand-on-arms
-        combat-hand-on-bottom:
-            name: combat-hand-on-bottom
-        combat-hand-on-buttplug:
-            name: combat-hand-on-buttplug
-        combat-hand-on-chastity:
-            name: combat-hand-on-chastity
-        combat-hand-on-clothes:
-            name: combat-hand-on-clothes
-        combat-hand-on-hair:
-            name: combat-hand-on-hair
-        combat-hand-on-hand:
-            name: combat-hand-on-hand
-        combat-hand-on-head_breasts:
-            name: combat-hand-on-head_breasts
-        combat-hand-on-head_nipples:
-            name: combat-hand-on-head_nipples
-        combat-hand-on-lowerclothes:
-            name: combat-hand-on-lowerclothes
-        combat-hand-on-lube:
-            name: combat-hand-on-lube
-        combat-hand-on-mask:
-            name: combat-hand-on-mask
-        combat-hand-on-mouth:
-            name: combat-hand-on-mouth
-        combat-hand-on-one-arm:
-            name: combat-hand-on-one-arm
-        combat-hand-on-overlowerclothes:
-            name: combat-hand-on-overlowerclothes
-        combat-hand-on-overupperclothes:
-            name: combat-hand-on-overupperclothes
-        combat-hand-on-penis:
-            name: combat-hand-on-penis
-        combat-hand-on-penisentrance:
-            name: combat-hand-on-penisentrance
-        combat-hand-on-sextoy:
-            name: combat-hand-on-sextoy
-        combat-hand-on-shackle:
-            name: combat-hand-on-shackle
-        combat-hand-on-shackle-imminent:
-            name: combat-hand-on-shackle-imminent
-        combat-hand-on-shoes:
-            name: combat-hand-on-shoes
-        combat-hand-on-socks:
-            name: combat-hand-on-socks
-        combat-hand-on-throat:
-            name: combat-hand-on-throat
-        combat-hand-on-underlowerclothes:
-            name: combat-hand-on-underlowerclothes
-        combat-hand-on-underupperclothes:
-            name: combat-hand-on-underupperclothes
-        combat-hand-on-upperclothes:
-            name: combat-hand-on-upperclothes
-        combat-hand-on-vagina:
-            name: combat-hand-on-vagina
-        combat-hand-on-vaginaentrance:
-            name: combat-hand-on-vaginaentrance
-        combat-lift-skirt:
-            name: combat-lift-skirt
-        combat-pen-on-bodypart:
-            name: combat-pen-on-bodypart
-        combat-pull-clothing-down:
-            name: combat-pull-clothing-down
-        combat-pull-clothing-state:
-            name: combat-pull-clothing-state
-        combat-pull-clothing-to-side:
-            name: combat-pull-clothing-to-side
-        combat-pull-clothing-up:
-            name: combat-pull-clothing-up
-        combat-pull-outfit-down:
-            name: combat-pull-outfit-down
-        combat-pull-outfit-up:
-            name: combat-pull-outfit-up
-        combat-remove-buttplug:
-            name: combat-remove-buttplug
-        combat-reset-hand:
-            name: combat-reset-hand
-        combat-reset-tool:
-            name: combat-reset-tool
-        combat-reveal-sextoy:
-            name: combat-reveal-sextoy
-        combat-set-hand-start:
-            name: combat-set-hand-start
-        combat-set-hand-target:
-            name: combat-set-hand-target
-        combat-spank:
-            name: combat-spank
-        combat-stroker-on-penis:
-            name: combat-stroker-on-penis
-        combat-stroker-on-penisentrance:
-            name: combat-stroker-on-penisentrance
-        combat-tug-clothing:
-            name: combat-tug-clothing
-        combatApologise:
-            name: combatApologise
-        combataware:
-            description: |-
-                Prints `Awareness X` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-
-                `<<combataware level>>`
-                - **level**: `number` - required level for this action
-                  - `1-5`: level and color
-                  - `0`: just text
-            parameters:
-                - "number"
-            tags: ["text"]
-        combatBreast:
-            name: combatBreast
-        combatButtonAdjustments:
-            name: combatButtonAdjustments
-        combatcontrol:
-            description: |-
-                Adds control to pc and updates effects of it
-
-                Modifies `$controlstart` to track when changes should be output in combat
-
-                `change` is technically optional but should not be. Consider refactoring
-
-                `<<trauma change?>>`
-                - **change** _optional_: `number` - +/- change to apply
-                  - if not provided, just clamps pc's control
-            parameters:
-                - "number"
-            tags: ["refactor"]
-        combatcrime:
-            description: |-
-                Prints `Crime X` where X is type of crime
-
-                `<<combatX>>` widgets should be used in combat
-
-                `<<combatcrime type>>`
-                - **type**: `string` - type in setup.crimeNames
-                  - %crimeTypesDesc%
-            parameters:
-                - "%crimeTypes%"
-            tags: ["text"]
-        combatDefaults:
-            name: combatDefaults
-        combatdeviancy1:
-            name: combatdeviancy1
-            tags: ["unused"]
-        combatdeviancy2:
-            name: combatdeviancy2
-            tags: ["unused"]
-        combatdeviancy3:
-            name: combatdeviancy3
-            tags: ["unused"]
-        combatdeviancy4:
-            name: combatdeviancy4
-            tags: ["unused"]
-        combatdeviancy5:
-            name: combatdeviancy5
-        combatdeviancy6:
-            name: combatdeviancy6
-            tags: ["unused"]
-        combatdeviancyN:
-            name: combatdeviancyN
-        combatdeviant:
-            description: |-
-                Prints `Deviancy X` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-
-                `<<combatdeviant level>>`
-                - **level**: `number` - required level for this action
-                  - `1-6`: level and color
-                  - `0`: just text
-            parameters:
-                - "number"
-            tags: ["unused", "text"]
-        combatdeviant1:
-            description: |-
-                Prints `Deviancy 1` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["unused", "text"]
-        combatdeviant2:
-            description: |-
-                Prints `Deviancy 1` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["unused", "text"]
-        combatdeviant3:
-            description: |-
-                Prints `Deviancy 1` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["unused", "text"]
-        combatdeviant4:
-            description: |-
-                Prints `Deviancy 1` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["unused", "text"]
-        combatdeviant5:
-            description: |-
-                Prints `Deviancy 1` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["unused", "text"]
-        combatdeviant6:
-            description: |-
-                Prints `Deviancy 1` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["unused", "text"]
-        combateffects:
-            name: combateffects
-        combatexhibitionist:
-            description: |-
-                Prints `Exhibitionism X` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-
-                `<<combatexhibitionist level>>`
-                - **level**: `number` - required level for this action
-                  - `1-6`: level and color
-                  - `0`: just text
-            parameters:
-                - "number"
-            tags: ["unused", "text"]
-        combatexhibitionist1:
-            description: |-
-                Prints `Exhibitionism 1` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatexhibitionist2:
-            description: |-
-                Prints `Exhibitionism 2` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatexhibitionist3:
-            description: |-
-                Prints `Exhibitionism 3` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatexhibitionist4:
-            description: |-
-                Prints `Exhibitionism 4` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatexhibitionist5:
-            description: |-
-                Prints `Exhibitionism 5` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatexhibitionist6:
-            description: |-
-                Prints `!Exhibitionism 6!` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["unused", "text"]
-        combathandguide:
-            name: combathandguide
-        combathandhold:
-            name: combathandhold
-        combatimg:
-            name: combatimg
-        combatinit:
-            name: combatinit
-        combatListColor:
-            description: |-
-                Use `combatListColor()` instead
-            name: combatListColor
-            tags: ["unused"]
-        combatMasturbate:
-            name: combatMasturbate
-        combatMouthOtherAnus:
-            name: combatMouthOtherAnus
-        combatNipple:
-            name: combatNipple
-        combatOthervagina:
-            name: combatOthervagina
-        combatPenisEntrance:
-            name: combatPenisEntrance
-        combatPenisImminent:
-            name: combatPenisImminent
-        combatPenisPenetrated:
-            name: combatPenisPenetrated
-        combatperson:
-            name: combatperson
-        combatPerson:
-            name: combatPerson
-        combatpersons:
-            name: combatpersons
-        combatpromiscuity1:
-            name: combatpromiscuity1
-        combatpromiscuity2:
-            name: combatpromiscuity2
-        combatpromiscuity3:
-            name: combatpromiscuity3
-        combatpromiscuity4:
-            name: combatpromiscuity4
-        combatpromiscuity5:
-            name: combatpromiscuity5
-        combatpromiscuity6:
-            name: combatpromiscuity6
-        combatpromiscuityN:
-            name: combatpromiscuityN
-        combatpromiscuous:
-            description: |-
-                Prints `Promiscuous X` or `Deviancy X` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-
-                `<<combatpromiscuous level>>`
-                - **level**: `number` - required level for this action
-                  - `1-6`: level and color
-                  - `0`: just text
-            parameters:
-                - "number"
-            tags: ["unused", "text"]
-        combatpromiscuous1:
-            description: |-
-                Prints `Promiscuous 1` or `Deviancy 1` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatpromiscuous2:
-            description: |-
-                Prints `Promiscuous 2` or `Deviancy 2` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatpromiscuous3:
-            description: |-
-                Prints `Promiscuous 3` or `Deviancy 3` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatpromiscuous4:
-            description: |-
-                Prints `Promiscuous 4` or `Deviancy 4` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatpromiscuous5:
-            description: |-
-                Prints `Promiscuous 5` or `Deviancy 5` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatpromiscuous6:
-            description: |-
-                Prints `!Promiscuous 6!` or `!Deviancy 6!` with appropriate color for level
-
-                `<<combatX>>` widgets should be used in combat
-            tags: ["text"]
-        combatskulduggeryskilluse:
-            name: combatskulduggeryskilluse
-        combatspeech:
-            name: combatspeech
-        combatstate:
-            name: combatstate
-        combatTrainAdvance:
-            name: combatTrainAdvance
-        combattrauma:
-            description: |-
-                Adds trauma to pc based on control and trait modifiers
-
-                This trauma is half of normal trauma gain
-
-                Trauma effects on pc are not updated after change.
-                Consider refactoring to call `<<trauma>>` instead of `<<traumaclamp>>`
-
-                `<<combattrauma change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "|+ number"
-            tags: ["refactor"]
-        commaButtPlug:
-            name: commaButtPlug
-            tags: ["unused"]
-        commercial:
-            name: commercial
-        commercialdrain:
-            name: commercialdrain
-        commercialdraineventend:
-            name: commercialdraineventend
-        commercialdrainlinks:
-            name: commercialdrainlinks
-        commercialdrainquick:
-            name: commercialdrainquick
-        commercialeventend:
-            name: commercialeventend
-        commercialex1:
-            name: commercialex1
-        commercialex2:
-            name: commercialex2
-        commercialex3:
-            name: commercialex3
-        commercialexposed:
-            name: commercialexposed
-            tags: ["unused"]
-        commercialquick:
-            name: commercialquick
-        completeassignment:
-            name: completeassignment
-        compoundoptions:
-            name: compoundoptions
-        compressionVerifier:
-            name: compressionVerifier
-            tags: ["unused"]
-        compressNPC:
-            description: |-
-                Puts an active npc in a persistent slot after compressing it
-
-                `<<compressNPC slot name>>`
-                - **slot**: `number` - slot number to put npc data at (zero-based)
-                - **name**: `string` - key to load npc's data from
-                  - spaces should be avoided if possible
-            parameters:
-                - "number &+ string|text"
-        compute:
-            container: true
-            name: compute
-        condition:
-            name: condition
-            tags: ["unused"]
-        condomDesc:
-            name: condomDesc
-        condomsPrice:
-            name: condomsPrice
-        condomsSidebar:
-            name: condomsSidebar
-        connector-box:
-            name: connector-box
-        connudatus:
-            name: connudatus
-        connudatuseventend:
-            name: connudatuseventend
-        connudatusexposed:
-            name: connudatusexposed
-            tags: ["unused"]
-        connudatusMarketsLewdEvents:
-            name: connudatusMarketsLewdEvents
-        connudatusMarketsProductsEvents:
-            name: connudatusMarketsProductsEvents
-        connudatusMarketsStatusEvents:
-            name: connudatusMarketsStatusEvents
-        connudatusquick:
-            name: connudatusquick
-        connudatuswallet:
-            name: connudatuswallet
-        consensual:
-            name: consensual
-        consensualman:
-            name: consensualman
-            tags: ["unused"]
-        containerInfo:
-            name: containerInfo
-        containersInit:
-            name: containersInit
-        containersLink:
-            name: containersLink
-        continueWraith:
-            name: continueWraith
-        control:
-            description: |-
-                Adds control to pc and updates effects of it
-
-                `$control` is pc's control over their life choices where higher numbers are healthy (0-1,000)
-
-                See `<<combatcontrol>>` for other use cases
-
-                `change` is technically optional but should not be. Consider refactoring
-
-                `<<trauma change?>>`
-                - **change** _optional_: `number` - +/- change to apply
-                  - if not provided, just clamps pc's control
-            parameters:
-                - "number"
-            tags: ["refactor"]
-        controlcaption:
-            name: controlcaption
-        controlloss:
-            name: controlloss
-        convertToDDFormat:
-            name: convertToDDFormat
-            tags: ["unused"]
-        convertToDMYFormat:
-            name: convertToDMYFormat
-            tags: ["unused"]
-        corruption:
-            description: |-
-                Adds corruption to pc and applies corruption effects
-
-                `<<corruption change skipSubmissive?>>`
-                - **change**: `number` - +/- change to apply
-                - **skipSubmissive** _optional_: `bool` - do not add `$submissive` to pc even if they qualify (truthy)
-                  - Defaults to false
-            parameters:
-                - "number |+ bool"
-        CosmeticsGenericDepartment:
-            name: CosmeticsGenericDepartment
-        cottage_bailey_options:
-            name: cottage_bailey_options
-        courtyard:
-            name: courtyard
-        cover_end:
-            name: cover_end
-        covered:
-            description: |-
-                Prints text description of player attempting to cover their lewdness
-            tags: ["text"]
-        cow:
-            description: |-
-                Prints `| Cow`
-            tags: ["text"]
-        cowTransform:
-            name: cowTransform
-        cream_arousal:
-            name: cream_arousal
-        cream_audience:
-            name: cream_audience
-        cream_damage:
-            name: cream_damage
-        cream_description:
-            name: cream_description
-        cream_end:
-            name: cream_end
-        cream_events:
-            name: cream_events
-        cream_fail:
-            name: cream_fail
-        cream_finish:
-            name: cream_finish
-        cream_init:
-            name: cream_init
-        cream_walk:
-            name: cream_walk
-        creampie:
-            name: creampie
-        creatureActivity:
-            name: creatureActivity
-        creatureContainersProgressDay:
-            name: creatureContainersProgressDay
-        creatureTooltip:
-            name: creatureTooltip
-        creatureVisit:
-            name: creatureVisit
-        crime:
-            description: |-
-                Prints `Crime X` where X is type of crime
-
-                `<<crime type>>`
-                - **type**: `string` - type in setup.crimeNames
-                  - %crimeTypesDesc%
-            parameters:
-                - "%crimeTypes%"
-            tags: ["text"]
-        crimeClear:
-            name: crimeClear
-        crimeClearEvent:
-            name: crimeClearEvent
-        crimeDown:
-            name: crimeDown
-        crimeParade:
-            name: crimeParade
-        crimes:
-            description: |-
-                Prints list of crimes
-
-                `<<crimes ...type>>`
-                - ...**type**: `string` - type in setup.crimeNames
-                  - %crimeTypesDesc%
-            parameters:
-                - "...%crimeTypes%"
-            tags: ["text"]
-        crimeType:
-            description: |-
-                Prints type of crime
-
-                `<<crimeType type>>`
-                - **type**: `string` - type in setup.crimeNames
-                  - %crimeTypesDesc%
-            parameters:
-                - "%crimeTypes%"
-            tags: ["text"]
-        crimeUp:
-            name: crimeUp
-        crimeUpFlat:
-            name: crimeUpFlat
-        crossdressing_check:
-            name: crossdressing_check
-        crotch:
-            description: |-
-                Prints outermost non-naked lower clothing layer
-            tags: ["text"]
-        cumspeech:
-            name: cumspeech
-        cumswallow:
-            name: cumswallow
-        cunnilingusejacstat:
-            name: cunnilingusejacstat
-        cunnilingusstat:
-            name: cunnilingusstat
-        cursedtext:
-            description: |-
-                Prints hint on getting cursed item off (ie, `| Perhaps the X can help.`)
-
-                Does not allow multiple items despite partial implementation. Consider refactoring
-
-                `<<cursedtext ...cursedItemNames>>`
-                - ...**cursedItemNames**: `string` - name of cursed items to print hint for
-                  - `"collar"`: `| Perhaps the police can help.`
-                  - `"chastity belt"`: `| Perhaps the temple can help.`
-            parameters:
-                - '...("collar"|"chastity belt")'
-            tags: ["text"]
-        cute:
-            description: |-
-                Prints random gender-appropriate synonym for cute
-
-                Could use more synonyms. Consider refactoring
-            tags: ["text", "refactor"]
-        dailySellProduce:
-            name: dailySellProduce
-            tags: ["unused"]
-        damage_farm:
-            name: damage_farm
-        damageClothing:
-            name: damageClothing
-            tags: ["unused"]
-        damageFaceCover:
-            name: damageFaceCover
-        dance_crossdress_reveal:
-            name: dance_crossdress_reveal
-        dance_job_end:
-            name: dance_job_end
-        dance_job_init:
-            name: dance_job_init
-        dance_job_interest:
-            name: dance_job_interest
-        dance_job_text:
-            name: dance_job_text
-        dance_npc_masturbation:
-            name: dance_npc_masturbation
-        dance_npc_masturbation_chance:
-            name: dance_npc_masturbation_chance
-        dance_private_init:
-            name: dance_private_init
-        dance_stage_cum:
-            name: dance_stage_cum
-        danceactions:
-            name: danceactions
-        danceaudience:
-            name: danceaudience
-        dancebriar:
-            name: dancebriar
-        dancebrothelrobin:
-            name: dancebrothelrobin
-        danceCorruption:
-            name: danceCorruption
-        dancedarryl:
-            name: dancedarryl
-        dancedifficulty:
-            name: dancedifficulty
-        dancedrink:
-            name: dancedrink
-        dancedrunktrip:
-            name: dancedrunktrip
-        danceeffects:
-            name: danceeffects
-        dancefall:
-            name: dancefall
-        dancefinish:
-            name: dancefinish
-        danceinit:
-            name: danceinit
-        danceleighton:
-            name: danceleighton
-        dancelight:
-            name: dancelight
-        dancelonging:
-            name: dancelonging
-        dancemolest:
-            name: dancemolest
-        dancenote:
-            name: dancenote
-        danceprivate:
-            name: danceprivate
-        dancepull:
-            name: dancepull
-        dancerape:
-            name: dancerape
-        dancesalivate:
-            name: dancesalivate
-        dancesamfinish:
-            name: dancesamfinish
-        danceskill:
-            name: danceskill
-        danceskilluse:
-            name: danceskilluse
-        dancespeech:
-            name: dancespeech
-        dancestat:
-            name: dancestat
-        dancestrip:
-            name: dancestrip
-        danceStripActionObject:
-            name: danceStripActionObject
-        dancestripactions:
-            name: dancestripactions
-        dancestripeffects:
-            name: dancestripeffects
-        dancestrippertrouble:
-            name: dancestrippertrouble
-        danceStudioIntro:
-            name: danceStudioIntro
-        dancetext:
-            description: |-
-                Prints color-coded adjective of active dance skill usage
-            tags: ["text"]
-        dancetripfinish:
-            name: dancetripfinish
-        dancetriprape:
-            name: dancetriprape
-        dancevip:
-            name: dancevip
-        danceWraith:
-            name: danceWraith
-        dancingclothes:
-            name: dancingclothes
-        dangerousText:
-            description: |-
-                Prints `| Dangerous`
-            tags: ["text"]
-        danube:
-            name: danube
-        danubeeventend:
-            name: danubeeventend
-        danubeexposed:
-            name: danubeexposed
-            tags: ["unused"]
-        danubemeal:
-            name: danubemeal
-        danubequick:
-            name: danubequick
-        daughter:
-            description: |-
-                Prints `son` or `daughter` depending on npc pronouns
-            tags: ["text"]
-        daylight:
-            description: |-
-                Prints amount ambient light based on time of day
-            tags: ["text"]
-        deactivateNPC:
-            name: deactivateNPC
-            tags: ["unused"]
-        def:
-            description: |-
-                Adds defiant quality to pc's state and applies effects
-
-                See `<<sub>>`
-
-                `<<def change>>`
-                - **change**: `number` - + change to apply
-            parameters:
-                - "number"
-        defeatnpc:
-            name: defeatnpc
-        defer:
-            name: defer
-            tags: ["unused"]
-        defiance:
-            name: defiance
-        defianttext:
-            description: |-
-                Prints `| Defiant`
-            tags: ["text"]
-        deleteConfirm:
-            name: deleteConfirm
-        deleteoutfit:
-            name: deleteoutfit
-        deleteWarning:
-            name: deleteWarning
-        delinquency:
-            description: |-
-                Adds delinquency to pc's state
-
-                `$delinquency` is a historic measurement of how much trouble the pc is considered by the school where 0 is innocent (0-1,000).
-                `change` is multiplied by 4 here and in `<<detention>>`
-
-                See `<<detention>>` to adjust detention at the same time
-
-                `<<delinquency change modifier?>>`
-                - **change**: `number` - +/- change to apply
-                - **modifier** _optional_: `string` - type of modifier to apply
-                  - `"bonus"`: additional reduction if pc attends with optional school trait clothes
-            parameters:
-                - 'number |+ "bonus"'
-        demon:
-            description: |-
-                Prints `| Demon`
-            tags: ["text"]
-        demonTransform:
-            name: demonTransform
-        deskText:
-            name: deskText
-        destination:
-            name: destination
-        destination_catacombs:
-            name: destination_catacombs
-        destination_farm:
-            name: destination_farm
-        destination_farm_ride:
-            name: destination_farm_ride
-        destination_lake_ice:
-            name: destination_lake_ice
-        destination_pool:
-            name: destination_pool
-        destination_prison:
-            name: destination_prison
-        destination_prison_walkway:
-            name: destination_prison_walkway
-        destination_tentacle_forest:
-            name: destination_tentacle_forest
-        destination5:
-            name: destination5
-        destinationbondage:
-            name: destinationbondage
-        destinationdrain:
-            name: destinationdrain
-        destinationeventend:
-            name: destinationeventend
-        destinationexposed:
-            name: destinationexposed
-            tags: ["unused"]
-        destinationfarmroad:
-            name: destinationfarmroad
-        destinationlake:
-            name: destinationlake
-        destinationlakeruin:
-            name: destinationlakeruin
-        destinationsewers:
-            name: destinationsewers
-        destinationsewersrandom:
-            name: destinationsewersrandom
-        destinationsmuggler:
-            name: destinationsmuggler
-        destinationstormdrain:
-            name: destinationstormdrain
-        destinationwolfcave:
-            name: destinationwolfcave
-        detach_leash:
-            description: |-
-                Dettaches leash from pc's collar
-
-                Can be used to gain infinite collars and keepCursed isn't universal. Consider refactoring
-
-                `<<detach_leash pcCanRemove? noRebuy?>>`
-                - **keepCursed** _optional_: `bool` - collar will not be cursed unless original collar was already (truthy)
-                  - Defaults to `false`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool |+ bool"
-            tags: ["refactor"]
-        detention:
-            description: |-
-                Adds detention and delinquency to pc's state
-
-                `$detention` is a measurement of how much trouble the pc is in per day where 0 is innocent (0-100).
-                `change` is multiplied by 10
-
-                See `<<delinquency>>` to adjust only delinquency
-
-                `<<detention change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        deviancy1:
-            name: deviancy1
-        deviancy2:
-            name: deviancy2
-        deviancy3:
-            name: deviancy3
-        deviancy4:
-            name: deviancy4
-        deviancy5:
-            name: deviancy5
-        deviancy6:
-            name: deviancy6
-            tags: ["unused"]
-        deviancyN:
-            name: deviancyN
-        deviant:
-            description: |-
-                Prints `Deviancy X` with appropriate color for level
+  enums:
+    bodyLiquidParts: '"neck"|"rightarm"|"leftarm"|"thigh"|"bottom"|"tummy"|"chest"|"face"|"hair"|"feet"|"vaginaoutside"|"vagina"|"penis"|"anus"|"mouth"'
+    bodyLiquidPartsDesc: '`"neck"` | `"rightarm"` | `"leftarm"` | `"thigh"` | `"bottom"` | `"tummy"` | `"chest"` | `"face"` | `"hair"` | `"feet"` | `"vaginaoutside"` | `"vagina"` | `"penis"` | `"anus"` | `"mouth"`'
+    bodyParts: '"forehead"|"left_cheek"|"right_cheek"|"left_shoulder"|"right_shoulder"|"breasts"|"back"|"left_bottom"|"right_bottom"|"pubic"|"left_thigh"|"right_thigh"'
+    bodyPartsDesc: '`"forehead"` | `"left_cheek"` | `"right_cheek"` | `"left_shoulder"` | `"right_shoulder"` | `"breasts"` | `"back"` | `"left_bottom"` | `"right_bottom"` | `"pubic"` | `"left_thigh"` | `"right_thigh"`'
+    clothesTypes: '"over_upper"|"over_lower"|"upper"|"lower"|"under_upper"|"under_lower"|"over_head"|"head"|"face"|"neck"|"hands"|"handheld"|"legs"|"feet"|"genitals"'
+    clothesTypesDesc: '`"over_upper"` | `"over_lower"` | `"upper"` | `"lower"` | `"under_upper"` | `"under_lower"` | `"over_head"` | `"head"` | `"face"` | `"neck"` | `"hands"` | `"handheld"` | `"legs"` | `"feet"` | `"genitals"`'
+    combatPositions: '"doggy"|"missionary"'
+    combatPositionsDesc: '`"doggy"` | `"missionary"`'
+    combatProps: '"haybale"|"milk"|"bench"|"table"'
+    combatPropsDesc: '`"haybale"` | `"milk"` | `"bench"` | `"table"`'
+    crimeTypes: '"assault"|"coercion"|"destruction"|"exposure"|"obstruction"|"prostitution"|"resisting"|"thievery"|"petty"|"trespassing"'
+    crimeTypesDesc: '`"assault"` | `"coercion"` | `"destruction"` | `"exposure"` | `"obstruction"` | `"prostitution"` | `"resisting"` | `"thievery"` | `"petty"` | `"trespassing"`'
+    fameTypes: '"exhibitionism"|"prostitution"|"bestiality"|"sex"|"rape"|"good"|"business"|"scrap"|"pimp"|"social"|"model"|"pregnancy"|"impreg"'
+    fameTypesDesc: '`"exhibitionism"` | `"prostitution"` | `"bestiality"` | `"sex"` | `"rape"` | `"good"` | `"business"` | `"scrap"` | `"pimp"` | `"social"` | `"model"` | `"pregnancy"` | `"impreg"`'
+    insecurityTypes: '"penis_tiny"|"penis_small"|"penis_big"|"breasts_tiny"|"breasts_small"|"breasts_big"|"pregnancy"'
+    insecurityTypesDesc: '`"penis_tiny"` | `"penis_small"` | `"penis_big"` | `"breasts_tiny"` | `"breasts_small"` | `"breasts_big"` | `"pregnancy"`'
+    liquidTypes: '"goo"|"slime"|"fluid"|"nectar"|"cum"|"semen"'
+    liquidTypesDesc: '`"goo"` | `"slime"` | `"fluid"` | `"nectar"` | `"cum"` | `"semen"`'
+    loveInterest: '"Robin"|"Whitney"|"Kylar"|"Sydney"|"Eden"|"Avery"|"Alex"|"Great Hawk"|"Black Wolf"'
+    loveInterestDesc: '`"Robin"` | `"Whitney"` | `"Kylar"` | `"Sydney"` | `"Eden"` | `"Avery"` | `"Alex"` | `"Great Hawk"` | `"Black Wolf"`'
+    namedNPC: '"Avery"|"Bailey"|"Briar"|"Charlie"|"Darryl"|"Doren"|"Eden"|"Gwylan"|"Harper"|"Jordan"|"Kylar"|"Landry"|"Leighton"|"Mason"|"Morgan"|"River"|"Robin"|"Sam"|"Sirris"|"Whitney"|"Winter"|"Black Wolf"|"Niki"|"Quinn"|"Remy"|"Alex"|"Great Hawk"|"Wren"|"Sydney"|"Ivory Wraith"|"Zephyr"'
+    namedNPCDesc: '`"Avery"` | `"Bailey"` | `"Briar"` | `"Charlie"` | `"Darryl"` | `"Doren"` | `"Eden"` | `"Gwylan"` | `"Harper"` | `"Jordan"` | `"Kylar"` | `"Landry"` | `"Leighton"` | `"Mason"` | `"Morgan"` | `"River"` | `"Robin"` | `"Sam"` | `"Sirris"` | `"Whitney"` | `"Winter"` | `"Black Wolf"` | `"Niki"` | `"Quinn"` | `"Remy"` | `"Alex"` | `"Great Hawk"` | `"Wren"` | `"Sydney"` | `"Ivory Wraith"` | `"Zephyr"`'
+    plantTypes: '"apple"|"baby_bottle_of_breast_milk"|"banana"|"bird_egg"|"blackberry"|"blood_lemon"|"bottle_of_breast_milk"|"bottle_of_milk"|"bottle_of_semen"|"broccoli"|"cabbage"|"carnation"|"chicken_egg"|"daisy"|"garlic_bulb"|"ghostshroom"|"lemon"|"lily"|"lotus"|"mushroom"|"onion"|"orange"|"orchid"|"peach"|"pear"|"plum"|"plumeria"|"poppy"|"potato"|"red_rose"|"strange_flower"|"strawberry"|"truffle"|"tulip"|"turnip"|"white_rose"|"wild_carrot"|"wild_honeycomb"|"wolfshroom"'
+    plantTypesDesc: '`"apple"` | `"baby_bottle_of_breast_milk"` | `"banana"` | `"bird_egg"` | `"blackberry"` | `"blood_lemon"` | `"bottle_of_breast_milk"` | `"bottle_of_milk"` | `"bottle_of_semen"` | `"broccoli"` | `"cabbage"` | `"carnation"` | `"chicken_egg"` | `"daisy"` | `"garlic_bulb"` | `"ghostshroom"` | `"lemon"` | `"lily"` | `"lotus"` | `"mushroom"` | `"onion"` | `"orange"` | `"orchid"` | `"peach"` | `"pear"` | `"plum"` | `"plumeria"` | `"poppy"` | `"potato"` | `"red_rose"` | `"strange_flower"` | `"strawberry"` | `"truffle"` | `"tulip"` | `"turnip"` | `"white_rose"` | `"wild_carrot"` | `"wild_honeycomb"` | `"wolfshroom"`'
+    pronouns: he, him, girl, girlfriend, sir, lass
+    virginityTypes: '"vaginal"|"penile"|"anal"|"oral"|"kiss"|"handholding"'
+    virginityTypesDesc: '`"vaginal"` | `"penile"` | `"anal"` | `"oral"` | `"kiss"` | `"handholding"`'
+  macros:
+    a:
+      description: |-
+        Prints text with prepended correctly-tensed indefinite article
+
+        `<<a text>>`
+        - **text**: `string` - text to check first character of
+      parameters:
+        - "string"
+      tags: ["text"]
+    A:
+      description: |-
+        Prints text with prepended correctly-tensed capitalised indefinite article
+
+        `<<a text>>`
+        - **text**: `string` - text to check first character of
+      parameters:
+        - "string"
+      tags: ["text"]
+    a_pillory_person:
+      description: |-
+        Prints `a <<person>>` or the name of person in the pillory
+
+        Undercase `<<A_pillory_person>>`.
+        Related to `<<the_pillory_person>>`/ '<<The_pillory_person>>
+      tags: ["text", "unused"]
+    A_pillory_person:
+      description: |-
+        Prints `A <<person>>` or the name of person in the pillory
+
+        Capitalised `<<a_pillory_person>>`.
+        Related to `<<the_pillory_person>>` / '<<The_pillory_person>>'
+      tags: ["text"]
+    a_role:
+      description: |-
+        Prints active npc as their role
+
+        Example:
+        ```
+        You find <<a_role>> nearby to help you out with this example.
+        ```
+      tags: ["text"]
+    A_role:
+      description: |-
+        Prints active npc as their role capitalised
+
+        Example:
+        ```
+        <<A_role>> comes out from behind the other to help with the example.
+        ```
+      tags: ["unused", "text"]
+    abomination:
+      name: abomination
+    abortbrothelshow:
+      name: abortbrothelshow
+      tags: ["unused"]
+    acceptance:
+      description: |-
+        Adds acceptance to pc's state concerning specific part and applies effects
+
+        `$acceptance_X` are measures of pc overcoming specific insecurities where 0 is not accepting (0-1,000)
+
+        `<<insecurity part change>>`
+        - **part**: `string` - part to gain insecurity in
+          - %insecurityTypesDesc%
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "%insecurityTypes% &+ number"
+    acceptassignment:
+      name: acceptassignment
+    acceptbrothelshow:
+      name: acceptbrothelshow
+    actioncarry:
+      name: actioncarry
+    actioncarrydrop:
+      name: actioncarrydrop
+    actionsabomination:
+      name: actionsabomination
+    actionsAnalKiss:
+      name: actionsAnalKiss
+    actionsAnalLick:
+      name: actionsAnalLick
+    actionsanusdoubleedging:
+      name: actionsanusdoubleedging
+    actionsanusdoubleescape:
+      name: actionsanusdoubleescape
+    actionsanusdoubletake:
+      name: actionsanusdoubletake
+    actionsanusdoublethrust:
+      name: actionsanusdoublethrust
+    actionsanusedging:
+      name: actionsanusedging
+    actionsanusescape:
+      name: actionsanusescape
+    actionsanusFaceAgainstAnus:
+      name: actionsanusFaceAgainstAnus
+    actionsanusHandAgainstAnus:
+      name: actionsanusHandAgainstAnus
+    actionsanusHandEntrance:
+      name: actionsanusHandEntrance
+    actionsanusHandPenetration:
+      name: actionsanusHandPenetration
+    actionsanusMouthEntrance:
+      name: actionsanusMouthEntrance
+    actionsanusMouthImminent:
+      name: actionsanusMouthImminent
+    actionsanusMouthPenetration:
+      name: actionsanusMouthPenetration
+    actionsanusPenisAgainstAnus:
+      name: actionsanusPenisAgainstAnus
+    actionsanusPenisDoubleEntrance:
+      name: actionsanusPenisDoubleEntrance
+    actionsanuspenisdoublefuck:
+      name: actionsanuspenisdoublefuck
+    actionsanusPenisDoubleImminent:
+      name: actionsanusPenisDoubleImminent
+    actionsanusPenisDoublePenetration:
+      name: actionsanusPenisDoublePenetration
+    actionsanusPenisEntrance:
+      name: actionsanusPenisEntrance
+    actionsanuspenisfucknew:
+      name: actionsanuspenisfucknew
+    actionsanusPenisImminent:
+      name: actionsanusPenisImminent
+    actionsanusPenisPenetration:
+      name: actionsanusPenisPenetration
+    actionsanusrub:
+      name: actionsanusrub
+    actionsanustake:
+      name: actionsanustake
+    actionsanusthrust:
+      name: actionsanusthrust
+    actionsanustopenisnew:
+      name: actionsanustopenisnew
+    actionscheekrub:
+      name: actionscheekrub
+    actionschoke:
+      name: actionschoke
+    actionsclitrub:
+      name: actionsclitrub
+    actionsclitstroke:
+      name: actionsclitstroke
+    actionsconfront:
+      name: actionsconfront
+    actionsconfrontNNPC:
+      name: actionsconfrontNNPC
+    actionsdemand:
+      name: actionsdemand
+    actionsdissociation:
+      name: actionsdissociation
+    actionsfeetpussy:
+      name: actionsfeetpussy
+    actionsfeetrub:
+      name: actionsfeetrub
+    actionsfencingcooperate:
+      name: actionsfencingcooperate
+    actionsfencingescape:
+      name: actionsfencingescape
+    actionsfencingtake:
+      name: actionsfencingtake
+    actionsfencingtease:
+      name: actionsfencingtease
+    actionsgrabrub:
+      name: actionsgrabrub
+    actionsgrowl:
+      name: actionsgrowl
+    actionshandanustake:
+      name: actionshandanustake
+    actionshandanustease:
+      name: actionshandanustease
+    actionshandanusthrust:
+      name: actionshandanusthrust
+    actionshandbite:
+      name: actionshandbite
+    actionshandedge:
+      name: actionshandedge
+    actionshit:
+      name: actionshit
+    actionskick:
+      name: actionskick
+    actionskiss:
+      name: actionskiss
+    actionskissback:
+      name: actionskissback
+    actionsman:
+      name: actionsman
+    actionsmoan:
+      name: actionsmoan
+    actionsmock:
+      name: actionsmock
+    actionsmouthbottomrub:
+      name: actionsmouthbottomrub
+    actionsmouththighrub:
+      name: actionsmouththighrub
+    actionsOmni:
+      name: actionsOmni
+    actionsoraledge:
+      name: actionsoraledge
+    actionsorgasm:
+      name: actionsorgasm
+    actionsotheranusedging:
+      name: actionsotheranusedging
+    actionsotheranusescape:
+      name: actionsotheranusescape
+    actionsotheranusrub:
+      name: actionsotheranusrub
+    actionsotheranustake:
+      name: actionsotheranustake
+    actionsotheranustease:
+      name: actionsotheranustease
+    actionsotheranusthrust:
+      name: actionsotheranusthrust
+    actionsothermouthanusescape:
+      name: actionsothermouthanusescape
+    actionsothermouthanusrub:
+      name: actionsothermouthanusrub
+    actionsothermouthanustease:
+      name: actionsothermouthanustease
+    actionsothermouthanusthrust:
+      name: actionsothermouthanusthrust
+    actionsothermouthpenisescape:
+      name: actionsothermouthpenisescape
+    actionsothermouthpenisrub:
+      name: actionsothermouthpenisrub
+    actionsothermouthpenistease:
+      name: actionsothermouthpenistease
+    actionsothermouthpenisthrust:
+      name: actionsothermouthpenisthrust
+    actionsothermouthvaginaescape:
+      name: actionsothermouthvaginaescape
+    actionsothermouthvaginarub:
+      name: actionsothermouthvaginarub
+    actionsothermouthvaginatease:
+      name: actionsothermouthvaginatease
+    actionsothermouthvaginathrust:
+      name: actionsothermouthvaginathrust
+    actionsotherpenispenisrub:
+      name: actionsotherpenispenisrub
+    actionsothervaginavaginarub:
+      name: actionsothervaginavaginarub
+    actionspain:
+      name: actionspain
+    actionspenisAgainstAss:
+      name: actionspenisAgainstAss
+    actionspenisAgainstClit:
+      name: actionspenisAgainstClit
+    actionspenisAnusEntrance:
+      name: actionspenisAnusEntrance
+    actionspenisanusfucknew:
+      name: actionspenisanusfucknew
+    actionspenisAnusImminent:
+      name: actionspenisAnusImminent
+    actionspenisAnusPenetration:
+      name: actionspenisAnusPenetration
+    actionspenisdoubleedging:
+      name: actionspenisdoubleedging
+    actionspenisdoubleride:
+      name: actionspenisdoubleride
+    actionspenisdoubletake:
+      name: actionspenisdoubletake
+    actionspenisdoubletip:
+      name: actionspenisdoubletip
+    actionspenisedging:
+      name: actionspenisedging
+    actionspenisescape:
+      name: actionspenisescape
+    actionspeniskiss:
+      name: actionspeniskiss
+    actionspenislick:
+      name: actionspenislick
+    actionspenisMouthEntrance:
+      name: actionspenisMouthEntrance
+    actionspenisMouthImminent:
+      name: actionspenisMouthImminent
+    actionspenisMouthPenetration:
+      name: actionspenisMouthPenetration
+    actionspenisPenisEntrance:
+      name: actionspenisPenisEntrance
+    actionspenisPenisFencing:
+      name: actionspenisPenisFencing
+    actionspenisPenisImminent:
+      name: actionspenisPenisImminent
+    actionspenisPussyEntrance:
+      name: actionspenisPussyEntrance
+    actionspenisPussyImminent:
+      name: actionspenisPussyImminent
+    actionspenisPussyPenetration:
+      name: actionspenisPussyPenetration
+    actionspenisride:
+      name: actionspenisride
+    actionspenisrub:
+      name: actionspenisrub
+    actionspenisstroke:
+      name: actionspenisstroke
+    actionspenissuck:
+      name: actionspenissuck
+    actionspenistake:
+      name: actionspenistake
+    actionspenistip:
+      name: actionspenistip
+    actionspenistoanusnew:
+      name: actionspenistoanusnew
+    actionspenistopenis:
+      name: actionspenistopenis
+    actionspenistopenisfucknew:
+      name: actionspenistopenisfucknew
+    actionspenistovaginanew:
+      name: actionspenistovaginanew
+    actionspenisvaginafucknew:
+      name: actionspenisvaginafucknew
+    actionsplead:
+      name: actionsplead
+    actionspossessed:
+      name: actionspossessed
+    actionspussyedging:
+      name: actionspussyedging
+    actionspussylick:
+      name: actionspussylick
+    actionspussyrub:
+      name: actionspussyrub
+    actionspussytake:
+      name: actionspussytake
+    actionspussytease:
+      name: actionspussytease
+    actionspussythrust:
+      name: actionspussythrust
+    actionsshaftrub:
+      name: actionsshaftrub
+    actionsStroke:
+      name: actionsStroke
+    actionsStrokerCooperate:
+      name: actionsStrokerCooperate
+    actionsStrokerRest:
+      name: actionsStrokerRest
+    actionstentacleadvanus:
+      name: actionstentacleadvanus
+      tags: ["unused"]
+    actionstentacleadvbottom:
+      name: actionstentacleadvbottom
+      tags: ["unused"]
+    actionstentacleadvcheckbox:
+      description: |-
+        Prints `<<radiobutton>>` for tentacle actions
+
+        `<<actionstentacleadvcheckbox behavior checkboxText receiverVar checkedValue defaultValue>>`
+
+        - **behavior**: `string` - decoration and classification of label
+          - `"def"` | `"sub"` | `"neutral"` | `"brat"`
+        - **checkboxText**: `string` - displayed label of the checkbox
+        - **receiverName**: `string` - name of the variable to modify, which must be quoted—e.g., `"$foo"`. See `<<radiobutton>>`
+        - **checkedValue**: `object` - value set by the radio button when checked. See `<<radiobutton>>`
+        - **defaultValue**: `object` - displays the radiobutton as checked if this value exactly matches `checkedValue`
+      parameters:
+        - '"def"|"sub"|"neutral"|"brat" &+ string &+ string &+ var|bareword |+ var|bareword'
+      tags: ["text"]
+    actionstentacleadvchest:
+      name: actionstentacleadvchest
+      tags: ["unused"]
+    actionstentacleadvlefthand:
+      name: actionstentacleadvlefthand
+    actionstentacleadvlegs:
+      name: actionstentacleadvlegs
+    actionstentacleadvmouth:
+      name: actionstentacleadvmouth
+      tags: ["unused"]
+    actionstentacleadvpenis:
+      name: actionstentacleadvpenis
+    actionstentacleadvrighthand:
+      name: actionstentacleadvrighthand
+    actionstentacleadvthighs:
+      name: actionstentacleadvthighs
+      tags: ["unused"]
+    actionstentacleadvvagina:
+      name: actionstentacleadvvagina
+      tags: ["unused"]
+    actionstentacles:
+      name: actionstentacles
+    actionstentacleslefthand:
+      name: actionstentacleslefthand
+      tags: ["unused"]
+    actionstentacleslegs:
+      name: actionstentacleslegs
+      tags: ["unused"]
+    actionstentaclespenis:
+      name: actionstentaclespenis
+      tags: ["unused"]
+    actionstentaclesrighthand:
+      name: actionstentaclesrighthand
+      tags: ["unused"]
+    actionsthighrub:
+      name: actionsthighrub
+    actionstribcooperate:
+      name: actionstribcooperate
+    actionstribedge:
+      name: actionstribedge
+    actionstribescape:
+      name: actionstribescape
+    actionsTribRest:
+      name: actionsTribRest
+    actionstribtake:
+      name: actionstribtake
+    actionstribtease:
+      name: actionstribtease
+    actionsvaginadoubleescape:
+      name: actionsvaginadoubleescape
+    actionsvaginaescape:
+      name: actionsvaginaescape
+    actionsvaginaMouthEntrance:
+      name: actionsvaginaMouthEntrance
+    actionsvaginaMouthImminent:
+      name: actionsvaginaMouthImminent
+    actionsvaginaMouthPenetrated:
+      name: actionsvaginaMouthPenetrated
+    actionsvaginaPenisDoubleEntrance:
+      name: actionsvaginaPenisDoubleEntrance
+    actionsvaginapenisdoublefuck:
+      name: actionsvaginapenisdoublefuck
+    actionsvaginaPenisDoubleImminent:
+      name: actionsvaginaPenisDoubleImminent
+    actionsvaginaPenisDoublePenetrated:
+      name: actionsvaginaPenisDoublePenetrated
+    actionsvaginaPenisEntrance:
+      name: actionsvaginaPenisEntrance
+    actionsvaginapenisfucknew:
+      name: actionsvaginapenisfucknew
+    actionsvaginaPenisImminent:
+      name: actionsvaginaPenisImminent
+    actionsvaginaPenisPenetrated:
+      name: actionsvaginaPenisPenetrated
+    actionsvaginatopenisnew:
+      name: actionsvaginatopenisnew
+    actionsvaginatovaginafucknew:
+      name: actionsvaginatovaginafucknew
+    actionsvaginatovaginanew:
+      name: actionsvaginatovaginanew
+    actionsvaginaVagina:
+      name: actionsvaginaVagina
+    actionsvaginaVaginaEntrance:
+      name: actionsvaginaVaginaEntrance
+    actionsvaginaVaginaImminent:
+      name: actionsvaginaVaginaImminent
+    actionsvorentacles:
+      name: actionsvorentacles
+    actor:
+      name: actor
+      tags: ["unused"]
+    actorAroused:
+      name: actorAroused
+      tags: ["unused"]
+    add_bodywriting:
+      name: add_bodywriting
+    add_link:
+      name: add_link
+    add_plot:
+      name: add_plot
+    addConsumableCosmetics:
+      name: addConsumableCosmetics
+    addevent:
+      name: addevent
+    addfemininityfromfactor:
+      name: addfemininityfromfactor
+      tags: ["unused"]
+    addfemininityofclothingarticle:
+      name: addfemininityofclothingarticle
+      tags: ["unused"]
+    addinlineevent:
+      container: true
+      name: addinlineevent
+    addNNPCOutfit:
+      name: addNNPCOutfit
+    addVaginalWetness:
+      name: addVaginalWetness
+    adjust_school_traits:
+      name: adjust_school_traits
+    adultShop-main:
+      name: adultShop-main
+    adultShopBackgroundEvent:
+      name: adultShopBackgroundEvent
+    adultShopClear:
+      name: adultShopClear
+    adultshopclerkevents:
+      name: adultshopclerkevents
+    adultshopentryevent:
+      name: adultshopentryevent
+    adultShopEvents:
+      name: adultShopEvents
+    adultShopPersonEvent:
+      name: adultShopPersonEvent
+    adultShopWage:
+      name: adultShopWage
+    advancelesson:
+      name: advancelesson
+    advancetohour:
+      description: |-
+        Advances time until the next whole hour
+
+        `<<advancetohour>>`
+      parameters:
+        - ""
+    ahe:
+      name: ahe
+    aHe:
+      name: aHe
+    ahis:
+      name: ahis
+    alarmstate:
+      name: alarmstate
+    alcohol:
+      description: |-
+        Adds alcohol to pc's system
+
+        `$drunk` is a measure of how much alcohol is in the pc's system where 0 is none (0-1,000)
+
+        `<<alcohol change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    alex_baby_interactions:
+      name: alex_baby_interactions
+    alex_cottage_pregnancy_reveal:
+      name: alex_cottage_pregnancy_reveal
+    alex_pregnancy_comment:
+      name: alex_pregnancy_comment
+    alexclamp:
+      name: alexclamp
+    allBottoms:
+      description: |-
+        Prints worn over and middle bottom clothing names
+      tags: ["text"]
+    allBottomsUnderwear:
+      description: |-
+        Prints worn over, middle, and under bottom clothing names
+      tags: ["text"]
+    allSettings:
+      name: allSettings
+    AllShop:
+      description: |-
+        Prints all categories of
+      name: AllShop
+      tags: ["form"]
+    allTops:
+      description: |-
+        Prints worn over and middle top clothing names
+      tags: ["text"]
+    allTopsUnderwear:
+      description: |-
+        Prints worn over, middle, and under top clothing names
+      tags: ["unused", "text"]
+    allurecaption:
+      name: allurecaption
+    alongsideButtPlug:
+      name: alongsideButtPlug
+    ambulance:
+      name: ambulance
+    ampm:
+      description: |-
+        Prints hours and minutes as formatted time string
+
+        1. `<<ampm>>`
+          - Uses current time as display
+
+        2. `<<ampm hour minute?>>`
+        - **hour**: `number` - hour to calculate
+        - **minute** _optional_: `number` - minute to calculate
+          - Defaults to `0`
+      parameters:
+        - ""
+        - "number |+ number"
+      tags: ["text"]
+    analdifficulty:
+      description: |-
+        Prints color-coded adjective of anal action difficulty in current combat
+      tags: ["text"]
+    analdoublestat:
+      name: analdoublestat
+    analejacstat:
+      name: analejacstat
+    analskill:
+      name: analskill
+    analskilluse:
+      name: analskilluse
+    analstat:
+      name: analstat
+    analtext:
+      description: |-
+        Prints color-coded adjective of active anal skill usage
+      tags: ["text"]
+    analvirginitywarning:
+      description: |-
+        Prints `This action will take your anal virginity.` if anal virginity can still be lost
+
+        Takes combat state into account to display starting pipe `| `
+      tags: ["text"]
+    andButtPlug:
+      name: andButtPlug
+    angel:
+      description: |-
+        Prints `| Angel`
+      tags: ["text"]
+    angelTransform:
+      name: angelTransform
+    animalsemenswallowedstat:
+      name: animalsemenswallowedstat
+    animatemodel:
+      description: |-
+        Renders, prints, and JS-animates model
+
+        [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
+
+        `<<animatemodel className?>>`
+        - **className** _optional_: `string` - class or space-separated classes of canvas element to be inserted when placed in the DOM
+      parameters:
+        - "|+ text"
+      tags: ["dom"]
+    anticatcall:
+      description: |-
+        Prints random response from player putting down a catcall
+      tags: ["text"]
+    anus_lube_amount:
+      description: |-
+        Prints the amount of lube around player anus
+
+        Relies on `_anus_lube_amount` being set already
+
+        See `<<anus_lube_text>>`
+      tags: ["text", "temp"]
+    anus_lube_text:
+      description: |-
+        Prints qualified description of lube around the anus prior to penetration
+
+        Example:
+        ```
+        <<anus_lube_text>> the example can be performed without a problem.
+        ```
+      tags: ["text"]
+    anusactionDifficulty:
+      name: anusactionDifficulty
+    anusactionDifficultyTentacle:
+      name: anusactionDifficultyTentacle
+    anusActionInit:
+      name: anusActionInit
+    anusActionInitStruggle:
+      name: anusActionInitStruggle
+    anusActionInitTentacle:
+      name: anusActionInitTentacle
+    anusActions:
+      name: anusActions
+    anusActionsTentacle:
+      name: anusActionsTentacle
+    anusraped:
+      name: anusraped
+    anxious_guard:
+      name: anxious_guard
+    apologyWraith:
+      name: apologyWraith
+    applyFeatsBoost:
+      name: applyFeatsBoost
+    applyLube:
+      name: applyLube
+    arcade_npc_bet:
+      name: arcade_npc_bet
+    arcade_player_bet:
+      name: arcade_player_bet
+    arcade_player_lost:
+      name: arcade_player_lost
+    arcade_player_win:
+      name: arcade_player_win
+    arcadeEndLink:
+      name: arcadeEndLink
+    arm_unbind:
+      name: arm_unbind
+    arousal:
+      description: |-
+        Adds arousal to pc with appropriate modifiers
+
+        `$arousal` is pc's arousal state where 0 is not-aroused (0-10,000)
+
+        `source` is messy, overdefined, and underused. Consider refactoring
+
+        `<<arousal change source?>>`
+        - **change**: `number` - +/- change to apply
+        - **source** _optional_: `string` - source of the stimulus
+          - `"masturbation"` | `"mouth"` | `"oral"` | `"lips"` | `"masturbationMouth"` | `"masturbationOral"` | `"breast"` | `"breasts"` | `"chest"` | `"nipple"` | `"nipples"` | `"masturbationBreasts"` | `"masturbationNipples"` | `"bottom"` | `"anus"` | `"anal"` | `"ass"` | `"butt"` | `"masturbationAnal"` | `"masturbationAss"` | `"genital"` | `"genitals"` | `"penis"` | `"penile"` | `"pussy"` | `"vaginal"` | `"vagina"` | `"masturbationGenital"` | `"masturbationPenis"` | `"masturbationVagina"` | `"maso"` | `"time"`
+      parameters:
+        - 'number |+ "masturbation"|"mouth"|"oral"|"lips"|"masturbationMouth"|"masturbationOral"|"breast"|"breasts"|"chest"|"nipple"|"nipples"|"masturbationBreasts"|"masturbationNipples"|"bottom"|"anus"|"anal"|"ass"|"butt"|"masturbationAnal"|"masturbationAss"|"genital"|"genitals"|"penis"|"penile"|"pussy"|"vaginal"|"vagina"|"masturbationGenital"|"masturbationPenis"|"masturbationVagina"|"maso"|"time"'
+    arousalcaption:
+      name: arousalcaption
+    arousalclamp:
+      name: arousalclamp
+    arousalError:
+      description: |-
+        Stores a up to 50 arousal errors
+
+        `$arousalError` is an array of arousal errors
+
+        Eligible for deprecation
+
+        `<<arousalError firstArg secondArg>>`
+        - **firstArg**: `any` - something to store
+        - **secondArg**: `any` - something else to store
+      tags: ["unused"]
+    askrough:
+      name: askrough
+    assignmenttip:
+      name: assignmenttip
+    asylumassessment:
+      name: asylumassessment
+    asylumeffects:
+      name: asylumeffects
+    asylumend:
+      name: asylumend
+    asylumescape:
+      name: asylumescape
+    asylumevents:
+      name: asylumevents
+    asylumoptions:
+      name: asylumoptions
+    asylumpunish:
+      name: asylumpunish
+      tags: ["unused"]
+    asylumpunish2:
+      name: asylumpunish2
+    asylumstats:
+      name: asylumstats
+    asylumstatus:
+      description: |-
+        Adds status to asylum in regards to pc
+
+        `$asylumstatus` is status of pc in the asylum where 0 is not liked (0-100)
+
+        `<<suspicion change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    asylumtreatments:
+      name: asylumtreatments
+    athletics:
+      name: athletics
+    athleticsdifficulty:
+      name: athleticsdifficulty
+    attach_leash:
+      description: |-
+        Attaches leash to pc's collar
+
+        Can be used to gain infinite collars and keepCursed isn't universal. Consider refactoring
+
+        `<<attach_leash pcCanRemove? noRebuy?>>`
+        - **keepCursed** _optional_: `bool` - collar will not be cursed unless original collar was already (truthy)
+          - Defaults to `false`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool |+ bool"
+      tags: ["refactor"]
+    attackstat:
+      name: attackstat
+    attitudes:
+      name: attitudes
+    attitudesControlCheck:
+      name: attitudesControlCheck
+    audience:
+      name: audience
+    audiencecamera:
+      name: audiencecamera
+    audiencecameraswarm:
+      name: audiencecameraswarm
+    audiencespeech:
+      name: audiencespeech
+    autoTakePillCheck:
+      name: autoTakePillCheck
+    averyscore:
+      name: averyscore
+    awareness:
+      description: |-
+        Adds awareness to pc's state, with appropriate modifiers
+
+        `$awareness` is measure of pc's knowledge of lewdity where negative is innocent and 0 is unaware (-200-1,000)
+
+        `<<awareness change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    awarenessup:
+      name: awarenessup
+    babyRent:
+      name: babyRent
+    babyRentDisplay:
+      name: babyRentDisplay
+    babyType:
+      name: babyType
+      tags: ["unused"]
+    backComp:
+      name: backComp
+    balloonRobinAngryHelp:
+      name: balloonRobinAngryHelp
+      tags: ["text"]
+    balloonRobinAngryPurchase:
+      name: balloonRobinAngryPurchase
+      tags: ["text"]
+    balloonRobinGrateful:
+      name: balloonRobinGrateful
+      tags: ["text"]
+    balloonRobinHelped:
+      name: balloonRobinHelped
+      tags: ["text"]
+    balloonRobinSabotaged:
+      name: balloonRobinSabotaged
+    balloonRobinTalk:
+      name: balloonRobinTalk
+      tags: ["text"]
+    ballsize:
+      description: |-
+        Prints random adjective describing pc's `$ballssize`
+    barb:
+      name: barb
+    barbeventend:
+      name: barbeventend
+    barbexposed:
+      name: barbexposed
+      tags: ["unused"]
+    barbquick:
+      name: barbquick
+    barn_img:
+      name: barn_img
+    baseClothingImg:
+      name: baseClothingImg
+    baseClothingStrings:
+      name: baseClothingStrings
+    basegloryholespeech:
+      name: basegloryholespeech
+    basespeech:
+      name: basespeech
+    bastard:
+      description: |-
+        Prints `bastard` or `whore` depending on pc's appearance
+      tags: ["text"]
+    bathroomLink:
+      name: bathroomLink
+    beach_cave_caught:
+      name: beach_cave_caught
+    beach_cave_end:
+      name: beach_cave_end
+    beach_cave_init:
+      name: beach_cave_init
+    beach_cave_pursuit:
+      name: beach_cave_pursuit
+    beachday1:
+      name: beachday1
+    beachday2:
+      name: beachday2
+    beachday3:
+      name: beachday3
+    beachday4:
+      name: beachday4
+    beachday5:
+      name: beachday5
+    beachday6:
+      name: beachday6
+    beachex1:
+      name: beachex1
+    beachex2:
+      name: beachex2
+    beachnight1:
+      name: beachnight1
+    beachnight2:
+      name: beachnight2
+    beast:
+      name: beast
+    beast_claws_text:
+      description: |-
+        Prints `talons` or type of claws for active NPC's type
+      tags: ["unused", "text"]
+    beast_growling_text:
+      description: |-
+        Prints `growling` verbs for active NPC's type
+      tags: ["text"]
+    beast_growls_text:
+      description: |-
+        Prints `growls` verbs for active NPC's type
+      tags: ["text"]
+    beast_jaws_text:
+      description: |-
+        Prints `beak` or `jaws` for active NPC's type
+      tags: ["text"]
+    beast_Jaws_text:
+      description: |-
+        Prints `Beak` or `Jaws` for active NPC's type
+      tags: ["text"]
+    beast_teeth_text:
+      description: |-
+        Prints `beak` or `teeth` for active NPC's type
+      tags: ["text"]
+    beastAttractionSettings:
+      name: beastAttractionSettings
+    beastattribute:
+      name: beastattribute
+    beastclothing:
+      name: beastclothing
+    beastCombatInit:
+      name: beastCombatInit
+    beastejaculation:
+      description: |-
+        Performs end of combat ejaculation description for all combat beast NPCs
+
+        All beast NPCs, including named, should go through here to get pre and post ejac descriptions
+
+        `<<beastejaculation ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation to perform
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+          - `"knot"`: Player is temporarily tied to beast at end of ejac
+      parameters:
+        - '|+ "short"|"knot"'
+      tags: ["text"]
+    beastescape:
+      name: beastescape
+    beastGenders:
+      name: beastGenders
+    beastimgdoggy:
+      name: beastimgdoggy
+    beastimggenitals:
+      name: beastimggenitals
+    beastimggenitalsmissionary:
+      name: beastimggenitalsmissionary
+    beastimgidle:
+      name: beastimgidle
+    beastimgmissionary:
+      name: beastimgmissionary
+    beastlick:
+      name: beastlick
+    beastMaleChanceSplitControls:
+      name: beastMaleChanceSplitControls
+    beastNEWinit:
+      name: beastNEWinit
+    beastNNPCinit:
+      name: beastNNPCinit
+      tags: ["unused"]
+    beastNOGENinit:
+      name: beastNOGENinit
+    beastSettings:
+      name: beastSettings
+    beastspeech:
+      name: beastspeech
+    beastSplitBy:
+      name: beastSplitBy
+    beastSplitByFull:
+      name: beastSplitByFull
+    beastsplural:
+      description: |-
+        Prints plural beast type of provided NPC
+
+        `<<beasttype npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to 0
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    beastTrainGenerate:
+      name: beastTrainGenerate
+    beasttype:
+      description: |-
+        Prints beast type of NPC
+
+        `<<beasttype npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to 0
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    beasttypes:
+      description: |-
+        Prints beast type of first NPC with posssessive apostraphe s
+      tags: ["text"]
+    beastwound:
+      name: beastwound
+    beauty:
+      description: |-
+        Adds beauty to pc's state
+
+        `$beauty` is a measure of pc's base beauty that grows over time from lack of trauma where 0 is none (0-10,000)
+
+        `<<beauty change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    becomePinch:
+      description: |-
+        Morphs the pc into either Lew or Pinch
+
+        **Should be used after `<<freezePlayerStats>>`**
+
+        `<<becomePinch characterName>>`
+        - **characterName**: `string` - name of the character to morph into
+          - `"Lew"` | `"Pinch"`
+      parameters:
+        - '"Lew"|"Pinch"'
+    bedclotheson:
+      name: bedclotheson
+    bellyDescription:
+      description: |-
+        Prints description of a belly based on its size
+
+        `<<bellyDescription sizeSource forcePregDesc?>>`
+        - **sizeSource**: `number|string` - source where size is pulled from
+          - `number`: Direct size value
+          - `"pc"`: Take size from pc
+          - `namedNPC`: Take size from named npc
+          - %namedNPCDesc%
+        - **forcePregDesc** _optional_: `bool` - use pregnant version of description regardless of pregnancy awareness (truthy)
+          - Defaults to `false`
+      parameters:
+        - '|+ number|"pc"|%namedNPC% |+ bool'
+    bestialityTrait:
+      description: |-
+        Prints `| Tamer` or `| Bitch` depending on pc's `$submissive`
+      tags: ["unused", "text"]
+    bhe:
+      description: |-
+        Prints singular pronoun of current beast (he/she/it)
+
+        See `<<bHe>>` for capitalised prose
+
+        Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<he>>` for named npcs. Consider refactoring to not personselect but allow named
+
+        `<<bhe npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to output
+          - Defaults to `0`
+      parameters:
+        - "|+ number"
+      tags: ["text", "refactor"]
+    bHe:
+      description: |-
+        Prints capitalised singular pronoun of current beast (He/She/It)
+
+        See `<<bhe>>` for un-capitalised prose
+
+        Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<He_Short>>` for named npcs. Consider refactoring to not personselect but allow named
+
+        `<<bHe npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to output
+          - Defaults to `0`
+      parameters:
+        - "|+ number"
+      tags: ["text", "refactor"]
+    bhers:
+      description: |-
+        Prints singular possessive pronoun as predicate adjective of current beast (his/hers/its)
+
+        See `<<bhis>>` for general possessive pronoun
+
+        Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<his>>` for named npcs. Consider refactoring to not personselect but allow named
+
+        `<<bhers npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to output
+          - Defaults to `0`
+      parameters:
+        - "|+ number"
+      tags: ["text", "refactor"]
+    bhes:
+      description: |-
+        Prints singular pronoun as is/has contraction of current beast (he's/she's/it's)
+
+        See `<<bHes>>` for capitalised prose
+
+        Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<Himself>>` for named npcs. Consider refactoring to not personselect but allow named
+
+        `<<bHimself npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to output
+          - Defaults to `0`
+      parameters:
+        - "|+ number"
+      tags: ["unused", "text", "refactor"]
+    bHes:
+      name: bHes
+    bhim:
+      description: |-
+        Prints singular objective pronoun of current beast (him/her/it)
+
+        See `<<bHim>>` for capitalised prose
+
+        Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<him>>` for named npcs. Consider refactoring to not personselect but allow named
+
+        `<<bhim npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to output
+          - Defaults to `0`
+      parameters:
+        - "|+ number"
+      tags: ["text", "refactor"]
+    bHim:
+      description: |-
+        Prints capitalised singular objective pronoun of current beast (Him/Her/It)
+
+        See `<<bhim>>` for uncapitalised prose
+
+        Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<Him>>` for named npcs. Consider refactoring to not personselect but allow named
+
+        `<<bHim npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to output
+          - Defaults to `0`
+      parameters:
+        - "|+ number"
+      tags: ["unused", "text", "refactor"]
+    bhimself:
+      description: |-
+        Prints singular objective pronoun as reflexive form of current beast (Himself/Herself/Itself)
+
+        See `<<bHimself>>` for capitalised prose
+
+        Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<himself>>` for named npcs. Consider refactoring to not personselect but allow named
+
+        `<<bhimself npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to output
+          - Defaults to `0`
+      parameters:
+        - "|+ number"
+      tags: ["unused", "text", "refactor"]
+    bHimself:
+      description: |-
+        Prints capitalised singular objective pronoun as reflexive form of current beast (Himself/Herself/Itself)
+
+        See `<<bhimself>>` for uncapitalised prose
+
+        Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<Himself>>` (because it doesn't exist) for named npcs.
+        Consider refactoring to not personselect but allow named
+
+        `<<bHimself npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to output
+          - Defaults to `0`
+      parameters:
+        - "|+ number"
+      tags: ["unused", "text", "refactor"]
+    bhis:
+      description: |-
+        Prints singular possessive pronoun of current beast (his/her/its)
+
+        See `<bHis>>` for capitalised prose or `<<bhers>>` for general possessive pronoun as predicate adjective (hers)
+
+        Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<his>>` for named npcs. Consider refactoring to not personselect but allow named
+
+        `<<bhis npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to output
+          - Defaults to `0`
+      parameters:
+        - "|+ number"
+      tags: ["text", "refactor"]
+    bHis:
+      description: |-
+        Prints capitalised singular possessive pronoun of current beast (his/hers/its)
+
+        See `<<bhis>>` for uncapitalised prose
+
+        Does not `<<personselect>>` to provided npc, set pronoun, or behave like `<<His>>` for named npcs. Consider refactoring to not personselect but allow named
+
+        `<<bHis npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to output
+          - Defaults to `0`
+      parameters:
+        - "|+ number"
+      tags: ["text", "refactor"]
+    bhisnext:
+      name: bhisnext
+    bimboCheck:
+      name: bimboCheck
+    bimboUpdate:
+      name: bimboUpdate
+    bind:
+      name: bind
+    bindings:
+      name: bindings
+    bindtemp:
+      name: bindtemp
+    bird_fly_options:
+      name: bird_fly_options
+    bird_greeting:
+      name: bird_greeting
+    bird_hunt_return:
+      name: bird_hunt_return
+    bird_init:
+      name: bird_init
+    bird_loot:
+      name: bird_loot
+    bird_loot_random:
+      name: bird_loot_random
+    bird_loot_select:
+      name: bird_loot_select
+    bird_pass:
+      name: bird_pass
+    bird_perch_options:
+      name: bird_perch_options
+    bird_schedule:
+      name: bird_schedule
+    bird_stockholm:
+      name: bird_stockholm
+    birthChildElement:
+      name: birthChildElement
+    birthUi:
+      name: birthUi
+    bishop:
+      description: |-
+        Prints `bishop` if confessor has had intro, otherwise `<<priest>>`
+      tags: ["text"]
+    bishop_hands:
+      description: |-
+        Prints `bishop's hands` or its parts
+
+        `<<bishop_hands length?>>`
+        - **length** _optional_: `string` - type of description
+          - `"long"`: Individual hands that make up the bishop's hands (currently unused)
+      parameters:
+        - '|+ "long"'
+    bitch:
+      description: |-
+        Prints `bitch`
+      tags: ["text"]
+    bitch_pirate:
+      description: |-
+        Prints `dog` or `bitch` depending on pc's appearance
+      tags: ["text"]
+    blackjackCalculate:
+      name: blackjackCalculate
+    blackjackCaughtCheatingSurrender:
+      name: blackjackCaughtCheatingSurrender
+    blackjackCaughtControls:
+      name: blackjackCaughtControls
+    blackjackCheatingAlertsFooter:
+      name: blackjackCheatingAlertsFooter
+    blackjackCheatingCaught:
+      name: blackjackCheatingCaught
+    blackjackCheatingChoicesGenerate:
+      name: blackjackCheatingChoicesGenerate
+    blackjackCheatingPeekingChoiceGenerate:
+      name: blackjackCheatingPeekingChoiceGenerate
+    blackjackControls:
+      name: blackjackControls
+    blackjackControlsChoices:
+      name: blackjackControlsChoices
+    blackjackControlsPostGameSuspicion:
+      name: blackjackControlsPostGameSuspicion
+    blackjackEnd:
+      name: blackjackEnd
+    blackjackGetCanMarkCount:
+      name: blackjackGetCanMarkCount
+    blackjackHelp:
+      name: blackjackHelp
+    blackjackPostGameBettingResult:
+      name: blackjackPostGameBettingResult
+    blackjackPostGameThrowTips:
+      name: blackjackPostGameThrowTips
+    blackjackResultText:
+      name: blackjackResultText
+    blackjackScore:
+      name: blackjackScore
+    blackjackShowCards:
+      name: blackjackShowCards
+    blackjackStart:
+      name: blackjackStart
+    blackjackSuspicion:
+      name: blackjackSuspicion
+    blackwolfhand:
+      name: blackwolfhand
+    blackwolfhealth:
+      name: blackwolfhealth
+    blindfoldintro:
+      name: blindfoldintro
+    blindfoldremove:
+      name: blindfoldremove
+    body_size_text:
+      description: |-
+        Prints random appropriate description of pc's physique
+      tags: ["text"]
+    body_tip:
+      name: body_tip
+    bodycommentsetdata:
+      name: bodycommentsetdata
+    bodyliquid:
+      description: |-
+        Applies specified liquid(s) to specified bodypart(s)
+
+        [].deleteAt is used incorrectly here and repeated arguments should be the last.
+        Consider refactoring to accept array and fixing delete behavior
+
+        `<<bodyliquid bodypart ...liquidTypes amount?>>`
+        - **bodypart**: `string` - bodypart(s) to apply liquid to
+          - `"all"` | `"clear"`: all bodyparts
+          - `"inside"`: inner bodyparts
+          - `"outside"`: all bodyparts without inner bodyparts
+          - %bodyLiquidPartsDesc%
+        - ...**liquidTypes**: `string` - type of liquid(s) to apply
+          - %liquidTypesDesc%
+        - **amount** _optional_: `int` - amount of liquid to apply to bodypart(s)
+          - Defaults to `1`
+      parameters:
+        - '"all"|"inside"|"outside"|%bodyLiquidParts% &+ ...(%liquidTypes%|number|var|bareword)'
+        - '"all"|"inside"|"outside"|%bodyLiquidParts% &+ "all" |+ number|var|bareword'
+        - '"clear" &+ ...(%liquidTypes%)'
+      tags: ["refactor"]
+    bodypart:
+      name: bodypart
+    bodypart_admire:
+      name: bodypart_admire
+    bodypart_admire_arrow:
+      name: bodypart_admire_arrow
+    bodypart_admire_bestiality:
+      name: bodypart_admire_bestiality
+    bodypart_admire_boyish:
+      name: bodypart_admire_boyish
+    bodypart_admire_chance:
+      name: bodypart_admire_chance
+    bodypart_admire_combat:
+      name: bodypart_admire_combat
+    bodypart_admire_criminal:
+      name: bodypart_admire_criminal
+    bodypart_admire_cum:
+      name: bodypart_admire_cum
+    bodypart_admire_cum_convert:
+      name: bodypart_admire_cum_convert
+    bodypart_admire_cum_heavy:
+      name: bodypart_admire_cum_heavy
+    bodypart_admire_cum_light:
+      name: bodypart_admire_cum_light
+    bodypart_admire_exhibitionism:
+      name: bodypart_admire_exhibitionism
+    bodypart_admire_generic:
+      name: bodypart_admire_generic
+    bodypart_admire_girly:
+      name: bodypart_admire_girly
+    bodypart_admire_impreg:
+      name: bodypart_admire_impreg
+    bodypart_admire_kylar:
+      name: bodypart_admire_kylar
+    bodypart_admire_lewd:
+      name: bodypart_admire_lewd
+    bodypart_admire_named:
+      name: bodypart_admire_named
+    bodypart_admire_parasite:
+      name: bodypart_admire_parasite
+    bodypart_admire_parasite_comment:
+      name: bodypart_admire_parasite_comment
+    bodypart_admire_parasite_convert:
+      name: bodypart_admire_parasite_convert
+    bodypart_admire_plant:
+      name: bodypart_admire_plant
+    bodypart_admire_pregnancy:
+      name: bodypart_admire_pregnancy
+    bodypart_admire_promiscuity:
+      name: bodypart_admire_promiscuity
+    bodypart_admire_prostitution:
+      name: bodypart_admire_prostitution
+    bodypart_admire_rape:
+      name: bodypart_admire_rape
+    bodypart_admire_violence:
+      name: bodypart_admire_violence
+    bodyPregCalc:
+      name: bodyPregCalc
+      tags: ["unused"]
+    bodyremarkcapitalise:
+      name: bodyremarkcapitalise
+    bodyremarkcomma:
+      name: bodyremarkcomma
+    bodyremarkstop:
+      name: bodyremarkstop
+    bodywriting:
+      name: bodywriting
+    bodywriting_beauty_select:
+      name: bodywriting_beauty_select
+    bodywriting_bestiality_select:
+      name: bodywriting_bestiality_select
+    bodywriting_clear:
+      name: bodywriting_clear
+    bodywriting_clear_all:
+      name: bodywriting_clear_all
+      tags: ["unused"]
+    bodywriting_criminal:
+      name: bodywriting_criminal
+    bodywriting_criminal_select:
+      name: bodywriting_criminal_select
+    bodywriting_dungeon_select:
+      name: bodywriting_dungeon_select
+    bodywriting_exhibitionism_select:
+      name: bodywriting_exhibitionism_select
+    bodywriting_finalisation:
+      name: bodywriting_finalisation
+    bodywriting_impreg_select:
+      name: bodywriting_impreg_select
+    bodywriting_init:
+      name: bodywriting_init
+    bodywriting_machine:
+      name: bodywriting_machine
+    bodywriting_normal_select:
+      name: bodywriting_normal_select
+    bodywriting_npc:
+      name: bodywriting_npc
+    bodywriting_npc_bodypart:
+      name: bodywriting_npc_bodypart
+    bodywriting_npc_kylar:
+      name: bodywriting_npc_kylar
+    bodywriting_npc_normal:
+      name: bodywriting_npc_normal
+    bodywriting_npc_picture:
+      name: bodywriting_npc_picture
+    bodywriting_npc_special:
+      name: bodywriting_npc_special
+    bodywriting_npc_sydney:
+      name: bodywriting_npc_sydney
+    bodywriting_npc_sydney_book:
+      name: bodywriting_npc_sydney_book
+    bodywriting_npc_sydney_friendly:
+      name: bodywriting_npc_sydney_friendly
+    bodywriting_npc_sydney_science:
+      name: bodywriting_npc_sydney_science
+    bodywriting_npc_whitney:
+      name: bodywriting_npc_whitney
+    bodywriting_pregnancy_select:
+      name: bodywriting_pregnancy_select
+    bodywriting_prostitution_check:
+      name: bodywriting_prostitution_check
+      tags: ["unused"]
+    bodywriting_prostitution_select:
+      name: bodywriting_prostitution_select
+    bodywriting_rape_select:
+      name: bodywriting_rape_select
+    bodywriting_scrap_select:
+      name: bodywriting_scrap_select
+    bodywriting_sex_select:
+      name: bodywriting_sex_select
+    bodywritingExposureCheck:
+      name: bodywritingExposureCheck
+    bodywritingMenu:
+      name: bodywritingMenu
+    bodywritingMenuLinks:
+      name: bodywritingMenuLinks
+    bodywritingOptions:
+      name: bodywritingOptions
+    bookCriminal:
+      name: bookCriminal
+    bookRentalOptions:
+      name: bookRentalOptions
+    bottom:
+      name: bottom
+    bottom_sensitivity:
+      description: |-
+        Changes sensitivity of bottom by provided amount
+
+        `<<bottom_sensitivity amount>>`
+        - **amount**: `number` - change to sensitivity
+      parameters:
+        - "number"
+    bottom_wiggle:
+      name: bottom_wiggle
+    bottomaside:
+      description: |-
+        Prints name of innermost bottom clothing layer that can be seen or `bottom` if everything is exposed
+
+        Does not take into account over_bottom. Consider refactoring
+      tags: ["refactor", "text"]
+    bottomdifficulty:
+      description: |-
+        Prints color-coded adjective of bottom action difficulty in current combat
+      tags: ["text"]
+    bottomejacstat:
+      name: bottomejacstat
+    bottoms:
+      description: |-
+        Prints lower clothing layer, taking into account if it is part of an outfit
+      tags: ["text"]
+    bottomsensitivity:
+      name: bottomsensitivity
+    BottomShop:
+      name: BottomShop
+    bottomskill:
+      description: |-
+        Adds bottom skill to pc's state
+
+        `$bottomskill` is a measure of pc's proficiency using their buttocks where 0 is awkward (0-1,000)
+
+        `<<bottomskill change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    bottomskilluse:
+      name: bottomskilluse
+    bottomstat:
+      name: bottomstat
+    bottomtext:
+      description: |-
+        Prints color-coded adjective of active bottom skill usage
+      tags: ["text"]
+    boughtOnce:
+      name: boughtOnce
+    bound2init:
+      name: bound2init
+      tags: ["unused"]
+    boundBodyParts:
+      description: |-
+        Prints description of bound body parts if there are any
+
+        Output is also stored in `_boundparts` for convenience
+      tags: ["text", "temp"]
+    bra:
+      description: |-
+        Prints descriptor of active NPC's inner_upper clothing
+
+        See `<<panties>> for inner_lower clothing or `<<dress>>` for upper clothing
+
+        See `<<npcClothesText>>` for full name of clothes
+      tags: ["text"]
+    brat:
+      name: brat
+    breast_sensitivity:
+      description: |-
+        Changes sensitivity of breasts by provided amount
+
+        `<<breast_sensitivity amount>>`
+        - **amount**: `number` - change to sensitivity
+      parameters:
+        - "number"
+    breastarousal:
+      deprecatedSuggestions:
+        - <<arousal X "breasts">>
+      description: |-
+        Adds breast-focused arousal to pc with appropriate modifiers
+
+        `<<breastsarousal change source>>`
+        - **change**: `number` - +/- change to apply
+      tags: ["unused"]
+    breastfed:
+      name: breastfed
+    breastfeed:
+      description: |-
+        Milks the pc and applies effects of being milked
+
+        Amount extracted is between 1x-5x amount with possible additional 2x multiplier for cow transform
+
+        `<<breastfeed amount? storage?>>`
+        - **amount** _optional_: `number` - multiplier to random amount of milk extracted
+          - Defaults to `1`
+        - **storage** _optional_: `string` - method used to gather milk
+          - `"pump"`: a breastpump is being used
+          - Defaults to not storing
+      parameters:
+        - '|+ number |+ "pump"'
+    breastFlavorText:
+      name: breastFlavorText
+    breasts:
+      name: breasts
+    breastsactive:
+      name: breastsactive
+    breastsactivemissionary:
+      name: breastsactivemissionary
+    breastsaside:
+      description: |-
+        Prints name of innermost top clothing layer that can be seen or `<<breasts>>` if everything is exposed
+
+        See `<<topaside>>`
+
+        Does not take into account over_top. Consider refactoring
+      tags: ["refactor", "text"]
+    breastsensitivity:
+      name: breastsensitivity
+    breastsidle:
+      name: breastsidle
+    breastsidlemissionary:
+      name: breastsidlemissionary
+    breastsizedesc:
+      name: breastsizedesc
+    breastssimple:
+      name: breastssimple
+    bred:
+      description: |-
+        Prints `bred` or `fucked` depending on pc's pregnancy speech settings
+
+        Bug reports of it sometimes showing up as `bread` are just rumours
+      tags: ["text"]
+    brothel_bukkake:
+      name: brothel_bukkake
+    brothel_bukkake_end:
+      name: brothel_bukkake_end
+    brothel_bukkake_init:
+      name: brothel_bukkake_init
+    brothel_bukkake_links:
+      name: brothel_bukkake_links
+    brothel_show_security:
+      name: brothel_show_security
+    brothelshowintro:
+      name: brothelshowintro
+    brothelshowoptions:
+      name: brothelshowoptions
+    brothers_and_sisters:
+      description: |-
+        Prints `brothers and sisters` unless player has mono-gendered the world
+
+        See `<<monks_and_nuns>>`
+      tags: ["text"]
+    browsColourPreview:
+      name: browsColourPreview
+    browsDyeReset:
+      name: browsDyeReset
+    bruise:
+      name: bruise
+    busmoveinit:
+      name: busmoveinit
+      tags: ["unused"]
+    busstationex1:
+      name: busstationex1
+    buswait:
+      name: buswait
+    buttplugon:
+      name: buttplugon
+    buyToy:
+      name: buyToy
+    buyTryOnClothes:
+      name: buyTryOnClothes
+    bwpcinteraction:
+      name: bwpcinteraction
+    cabinothers:
+      name: cabinothers
+    cabintime:
+      name: cabintime
+    cafecoffeeflasharousal:
+      name: cafecoffeeflasharousal
+    cafecoffeesip:
+      name: cafecoffeesip
+    CafeExhibitionismLegsPartEnd:
+      name: CafeExhibitionismLegsPartEnd
+    CafeExhibitionismLegsPartNormalTerminate:
+      description: |-
+        End Cafe Exhibitionism event and link to Cliff Street
+
+        ```dart
+        // :: Cafe Exhibitionism Legs Part
+        //   <<CafeExhibitionismLegsPartSuccessS1>>
+        //   <<CafeExhibitionismLegsPartPhotoDecision>>
+        //   <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
+           <<CafeExhibitionismLegsPartNormalTerminate>>
+        // :: Cafe Exhibitionism Legs Part Pantiless
+        //   <<CafeExhibitionismLegsPartPantilessPhotoDecision>>
+           <<CafeExhibitionismLegsPartNormalTerminate>>
+        ```
+      tags: ["links"]
+    CafeExhibitionismLegsPartPantilessPhotoDecision:
+      description: |-
+        Link to Cafe Exhibitionism Legs Part Pantiless Photo/No Photo Passages
+        ```dart
+        // :: Cafe Exhibitionism Legs Part Pantiless
+           <<CafeExhibitionismLegsPartPantilessPhotoDecision>>
+        //   <<CafeExhibitionismLegsPartNormalTerminate>>
+        ```
+      tags: ["links"]
+    CafeExhibitionismLegsPartPantyTakeoffDecision:
+      description: |-
+        ```dart
+        // :: Cafe Exhibitionism Legs Part
+        //   <<CafeExhibitionismLegsPartSuccessS1>>
+           <<CafeExhibitionismLegsPartPhotoDecision>>
+        //   <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
+        //   <<CafeExhibitionismLegsPartNormalTerminate>>
+        // :: Cafe Exhibitionism Legs Part Photo
+        //   <<CafeExhibitionismLegsPartSuccessS2>>
+           <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
+        //   <<CafeExhibitionismLegsPartEnd>>
+        ```
+      tags: ["links"]
+    CafeExhibitionismLegsPartPhotoDecision:
+      description: |-
+        ```dart
+        // :: Cafe Exhibitionism Legs Part
+        //   <<CafeExhibitionismLegsPartSuccessS1>>
+           <<CafeExhibitionismLegsPartPhotoDecision>>
+        //   <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
+        //   <<CafeExhibitionismLegsPartNormalTerminate>>
+        ```
+      tags: ["links"]
+    CafeExhibitionismLegsPartSuccessS1:
+      description: |-
+        ```dart
+        // :: Cafe Exhibitionism Legs Part
+           <<CafeExhibitionismLegsPartSuccessS1>>
+        //   <<CafeExhibitionismLegsPartPhotoDecision>>
+        //   <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
+        //   <<CafeExhibitionismLegsPartNormalTerminate>>
+        ```
+      tags: ["links"]
+    CafeExhibitionismLegsPartSuccessS2:
+      description: |-
+        ```dart
+        // :: Cafe Exhibitionism Legs Part Photo
+           <<CafeExhibitionismLegsPartSuccessS2>>
+        //   <<CafeExhibitionismLegsPartPantyTakeoffDecision>>
+        //   <<CafeExhibitionismLegsPartEnd>>
+        ```
+      tags: ["links"]
+    calchairlengthstage:
+      name: calchairlengthstage
+    calculateallure:
+      name: calculateallure
+    calculateBlackjackLuckStats:
+      name: calculateBlackjackLuckStats
+    callJanet:
+      description: |-
+        Freezes the story variables, then morphs the pc into Janet, also altering the location and time
+    campFurnitureMessage:
+      name: campFurnitureMessage
+    canvas-model-override:
+      name: canvas-model-override
+    canvas-player-base-body:
+      name: canvas-player-base-body
+    canvasanimate:
+      description: |-
+        Insert HTML <canvas> element right here
+
+        Renders, prints, and animates previously prepared images into it
+
+        [Low-Level Canvas API Overview](%workspaceDir%/game/base-clothing/canvas.twee#L2)
+
+        `<<canvasanimate className>>`
+        - **className**: `string` - class or space-separated classes of canvas element to be inserted when placed in the DOM
+      parameters:
+        - "|+ text"
+      tags: ["dom", "unused"]
+    canvasColoursEditor:
+      name: canvasColoursEditor
+    canvasdraw:
+      description: |-
+        Insert HTML <canvas> element right here
+
+        Renders, prints, and animates previously prepared images into it
+
+        [Low-Level Canvas API Overview](%workspaceDir%/game/base-clothing/canvas.twee#L2)
+
+        `<<canvasdraw frameCount className>>`
+        - **frameCount**: `number` - frame count to use for splitting canvas
+          - Defaults to 1
+        - **className**: `string` - class or space-separated classes of canvas element to be inserted when placed in the DOM
+      parameters:
+        - "|+ number |+ text"
+      tags: ["dom", "unused"]
+    canvasimg:
+      name: canvasimg
+    canvaslayer:
+      description: |-
+        Prepares a layer to be rendered
+
+        [Low-Level Canvas API Overview](%workspaceDir%/game/base-clothing/canvas.twee#L2)
+
+        `<<canvaslayer zIndex sourceUrl ...options>>`
+        - **zIndex**: `number` - z-index of the layer (bigger above lower)
+        - **sourceUrl**: `string` - path to image
+        - ...**options**: extra CompositeLayerSpec option objects
+          - Are merged, last has most priority
+      parameters:
+        - number &+ text &+ ...(bareword|var)
+      tags: ["unused"]
+    canvasLayersEditor:
+      name: canvasLayersEditor
+    canvasModelEditor:
+      name: canvasModelEditor
+    canvasstart:
+      description: |-
+        Creates an off-screen <canvas> element
+
+        [Low-Level Canvas API Overview](%workspaceDir%/game/base-clothing/canvas.twee#L2)
+
+        `<<canvasstart width height frames>>`
+        - **width**: `number` - positive integer corresponding to HTMLCanvasElement.width
+        - **height**: `number` - positive integer corresponding to HTMLCanvasElement.height
+        - **frames**: `number` - positive integer multiplied to width for creating horizontal spritesheet
+      parameters:
+        - number &+ number &+ number
+      tags: ["unused"]
+    capitalise:
+      description: |-
+        Capitalises the first letter of `_text_output`
+
+        Example:
+        ```
+        <<widget "The">><<silently>>
+          <<set _text_output to "the">>
+          <<capitalise>>
+        <</silently>>_text_output<</widget>>
+        ```
+    capitalise2:
+      container: true
+      description: |-
+        Capitalises the inner contents of this widget
+
+        Example:
+        ```
+        <<capitalise2>>
+          the
+        <</captialise2>>
+        ```
+      tags: ["unused"]
+    caption_clamp:
+      name: caption_clamp
+    card_clothes_lost:
+      name: card_clothes_lost
+    card_clothes_rebuy_calculate:
+      name: card_clothes_rebuy_calculate
+    card_pot_collected:
+      name: card_pot_collected
+    card_pot_confiscated:
+      name: card_pot_confiscated
+    cardImage:
+      name: cardImage
+    cards_arousal_check:
+      name: cards_arousal_check
+    cards_bottom_cover:
+      name: cards_bottom_cover
+    cards_bra_cover:
+      name: cards_bra_cover
+    cards_cheating_virginity_warning:
+      name: cards_cheating_virginity_warning
+    cards_exposure_text:
+      name: cards_exposure_text
+    cards_lap_clothes:
+      name: cards_lap_clothes
+    cards_lap_clothes_intro:
+      name: cards_lap_clothes_intro
+    cards_lap_return:
+      name: cards_lap_return
+    cards_naked_cover:
+      name: cards_naked_cover
+    cards_naked_end:
+      name: cards_naked_end
+    cards_oral_options:
+      name: cards_oral_options
+    cards_panties_cover:
+      name: cards_panties_cover
+      tags: ["unused"]
+    cards_play_options:
+      name: cards_play_options
+    cards_start_play_options:
+      name: cards_start_play_options
+    cards_strip_text:
+      name: cards_strip_text
+    cards_top_cover:
+      name: cards_top_cover
+    cards_underwear_cover:
+      name: cards_underwear_cover
+    cards_virginity_all_warnings:
+      name: cards_virginity_all_warnings
+    cards_virginity_warning:
+      name: cards_virginity_warning
+    cardText:
+      name: cardText
+      tags: ["unused"]
+    carriedSend:
+      name: carriedSend
+    carryblock:
+      name: carryblock
+    cassBoy:
+      name: cassBoy
+    cast_aside_clothes:
+      description: |-
+        Prints sentence describing what an npc does with forcibly stripped clothing
+
+        Out of date and underutilised. Consider refactoring
+      tags: ["text", "refactor"]
+    cat:
+      description: |-
+        Prints `| Cat`
+      tags: ["text"]
+    catacombs_end:
+      name: catacombs_end
+    catacombs_exit_indicator:
+      name: catacombs_exit_indicator
+    catacombs_init:
+      name: catacombs_init
+    catacombs_skip:
+      name: catacombs_skip
+    catacombs_torch:
+      name: catacombs_torch
+    catacombs_torch_text:
+      name: catacombs_torch_text
+    catcall:
+      description: |-
+        Prints random catcall
+      tags: ["text"]
+    catHeterochromiaTF:
+      name: catHeterochromiaTF
+    catTransform:
+      name: catTransform
+    cell_trouble:
+      name: cell_trouble
+    chalets_bags:
+      name: chalets_bags
+    chalets_end:
+      name: chalets_end
+    chalets_end_link:
+      name: chalets_end_link
+    chalets_fall_events:
+      name: chalets_fall_events
+    chalets_links:
+      name: chalets_links
+    chalets_start:
+      name: chalets_start
+    changeCChildbirthDate:
+      name: changeCChildbirthDate
+      tags: ["unused"]
+    changeCChildConceptionDate:
+      name: changeCChildConceptionDate
+      tags: ["unused"]
+    changeCChildId:
+      name: changeCChildId
+      tags: ["unused"]
+    changeCNPCEventTimer:
+      name: changeCNPCEventTimer
+      tags: ["unused"]
+    changeCNPCPregnancyAvoidance:
+      name: changeCNPCPregnancyAvoidance
+      tags: ["unused"]
+    changeCNPCPregnancyTimer:
+      name: changeCNPCPregnancyTimer
+      tags: ["unused"]
+    changingRoom:
+      name: changingRoom
+    changingRoomFeelings:
+      name: changingRoomFeelings
+    changingrooms:
+      name: changingrooms
+      tags: ["unused"]
+    characteristic-box:
+      name: characteristic-box
+    characteristic-box-modifier:
+      name: characteristic-box-modifier
+    characteristic-text:
+      name: characteristic-text
+    characteristics:
+      name: characteristics
+    characterSettings:
+      name: characterSettings
+    charles:
+      description: |-
+        Prints the name Morgan gives the player based on appearance
+      tags: ["text"]
+    charLight:
+      description: |-
+        Render and print light behind character model
+
+        `<<charLight xOffset yOffset className?>>`
+        - **xOffset**: `number` - CSS x offset
+          - Assumes px
+        - **yOffset**: `number` - CSS y offset
+          - Assumes px
+        - **className** _optional_: `string` - class or space-separated classes of div element to be inserted when placed in the DOM
+      parameters:
+        - number|text &+ number|text |+ text
+      tags: ["dom"]
+    charLightCombat:
+      description: |-
+        Render and print light behind character model
+
+        `<<charLight position? prop?>>`
+        - **position** _optional_: `string` - combat position
+          - %combatPositionsDesc%
+        - **prop** _optional_: `string` - prop being rendered in combat
+          - %combatPropsDesc%
+        - **className** _optional_: `string` - class or space-separated classes of div element to be inserted when placed in the DOM
+      parameters:
+        - "|+ %combatPositions% |+ %combatProps% |+ text"
+      tags: ["dom"]
+    chastityBreakWraith:
+      name: chastityBreakWraith
+    cheatBodyliquidOnPart:
+      name: cheatBodyliquidOnPart
+    cheatMenuEyesSelected:
+      name: cheatMenuEyesSelected
+    cheatParasiteToggle:
+      name: cheatParasiteToggle
+    cheatPregnancyNPC:
+      name: cheatPregnancyNPC
+    cheatPregnancyNPCReset:
+      name: cheatPregnancyNPCReset
+    cheats:
+      name: cheats
+    cheats-characterStats:
+      name: cheats-characterStats
+    cheats-characterVisual:
+      name: cheats-characterVisual
+    cheats-npcs:
+      name: cheats-npcs
+    cheats-other:
+      name: cheats-other
+    cheats-teleport:
+      name: cheats-teleport
+    cheatsImpreg:
+      name: cheatsImpreg
+    cheatsImpregOptions:
+      name: cheatsImpregOptions
+    cheatsPregnancyOptions:
+      name: cheatsPregnancyOptions
+    cheatStart:
+      name: cheatStart
+    cheatVirginityToggle:
+      name: cheatVirginityToggle
+    checkdroptowel:
+      name: checkdroptowel
+    checkfloor:
+      name: checkfloor
+    checkforloveinterests:
+      name: checkforloveinterests
+    checkWraith:
+      name: checkWraith
+    cheeklick:
+      description: |-
+        Prints some facial reaction by NPC to pc's mouth usage
+
+        `<<ejaculation-eden npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to 0
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    chefspeechoptions:
+      name: chefspeechoptions
+    chefwork:
+      name: chefwork
+    chest:
+      name: chest
+    chest_section:
+      name: chest_section
+    chestactionDifficulty:
+      name: chestactionDifficulty
+    chestactionDifficultyTentacle:
+      name: chestactionDifficultyTentacle
+    chestActionInit:
+      name: chestActionInit
+    chestActionInitStruggle:
+      name: chestActionInitStruggle
+    chestActionInitTentacle:
+      name: chestActionInitTentacle
+    chestActions:
+      name: chestActions
+    chestActionsTentacle:
+      name: chestActionsTentacle
+    chestdifficulty:
+      description: |-
+        Prints color-coded adjective of chest action difficulty in current combat
+      tags: ["text"]
+    chestejacstat:
+      name: chestejacstat
+    chestsimple:
+      name: chestsimple
+    chestskill:
+      description: |-
+        Adds chest skill to pc's state
+
+        `$chestskill` is a measure of pc's proficiency using their chest where 0 is awkward (0-1,000)
+
+        `<<chestskill change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    chestskilluse:
+      name: chestskilluse
+    cheststat:
+      name: cheststat
+    chesttext:
+      description: |-
+        Prints color-coded adjective of active chest skill usage
+      tags: ["text"]
+    chikanattention:
+      name: chikanattention
+    chikanmolestactions:
+      name: chikanmolestactions
+    childActivity:
+      name: childActivity
+    childAge:
+      name: childAge
+    childChangeClothes:
+      name: childChangeClothes
+      tags: ["unused"]
+    childcry:
+      name: childcry
+    childCry:
+      name: childCry
+      tags: ["unused"]
+    childFirstWord:
+      name: childFirstWord
+      tags: ["unused"]
+    childgiggles:
+      name: childgiggles
+    childhair:
+      name: childhair
+      tags: ["unused"]
+    childhand:
+      name: childhand
+    childhands:
+      name: childhands
+    childhe:
+      name: childhe
+    childHe:
+      name: childHe
+    childhers:
+      name: childhers
+      tags: ["unused"]
+    childHers:
+      name: childHers
+      tags: ["unused"]
+    childherself:
+      name: childherself
+    childhim:
+      name: childhim
+    childHim:
+      name: childHim
+    childhimself:
+      name: childhimself
+    childhis:
+      name: childhis
+    childHis:
+      name: childHis
+    childInteratedWith:
+      name: childInteratedWith
+    childname:
+      name: childname
+    childRename:
+      name: childRename
+      tags: ["unused"]
+    childrenEvents:
+      name: childrenEvents
+    childrenNames:
+      name: childrenNames
+    childrenSetup:
+      name: childrenSetup
+    childrenToysUI:
+      name: childrenToysUI
+    childrenToysUIReplace:
+      name: childrenToysUIReplace
+    childSelect:
+      name: childSelect
+    childSelectRandom:
+      description: |-
+        Sets `$childSelected` to a random child
+
+        `$childSelected` is a `{Child}` object from `$children`.
+        It being synced with the original cannot be guaranteed between passages
+
+        `<<childSelectRandom location>>`
+        - **location** _optional_: `string` - location string to select from randomly
+          - Defaults to all if no location is provided
+      parameters:
+        - string
+    childtoy:
+      name: childtoy
+    childTransform:
+      name: childTransform
+    childtype:
+      name: childtype
+    childViewerDisplay:
+      name: childViewerDisplay
+    childViewerDisplayElements:
+      name: childViewerDisplayElements
+    childViewerElement:
+      name: childViewerElement
+    childViewerHiddenElements:
+      name: childViewerHiddenElements
+    childViewerHiddenElementsUnhide:
+      name: childViewerHiddenElementsUnhide
+    childViewerPageUpdate:
+      name: childViewerPageUpdate
+    chokeTrait:
+      description: |-
+        Prints `| Asphyxiophilia`
+      tags: ["text"]
+    christmas_options:
+      name: christmas_options
+    christmas_robin:
+      name: christmas_robin
+    christmas_robin_visit:
+      name: christmas_robin_visit
+    clamp:
+      name: clamp
+    clampgoo:
+      name: clampgoo
+    classgrades:
+      name: classgrades
+    classRoomEarSlime:
+      description: |-
+        Checks if ear slime wants the player to skip specified class and interrupt passage
+
+        Sets `_earSlimeClassRoomBlock` to true if slime outputs enough text to warrant a passage block
+
+        `<<classRoomEarSlime class>>`
+        - **class**: `string` - name of class to check
+          - `"english"` | `"history"` | `"maths"` | `"science"` | `"swimming"`
+      parameters:
+        - '"english"|"history"|"maths"|"science"|"swimming"'
+      tags: ["links", "text", "temp"]
+    cleanupOnWardrobeExit:
+      name: cleanupOnWardrobeExit
+    clear_pillory:
+      name: clear_pillory
+    clear_plot:
+      name: clear_plot
+    clearAllWarning:
+      name: clearAllWarning
+    clearAnimalTransformations:
+      name: clearAnimalTransformations
+    clearDivineTransformations:
+      name: clearDivineTransformations
+    cleareventpool:
+      name: cleareventpool
+    clearingactions:
+      name: clearingactions
+    clearingedenactions:
+      name: clearingedenactions
+    clearnpc:
+      description: |-
+        Clears active npcs, saving persistent npcs if present
+
+        See `<<clearsinglenpc>>` to clear just a single active npc
+    clearNPC:
+      description: |-
+        Fully clears data about a specific persistent npc
+
+        Not to be confused with `<<clearnpc>>`. Consider refactoring
+
+        `<<clearNPC name>>`
+        - **name**: `string` - npc key to clear data from
+          - spaces should be avoided if possible
+      parameters:
+        - "text"
+      tags: ["refactor"]
+    clearPronouns:
+      description: |-
+        Resets NPC object's `pronouns` property back to empty
+
+        `<<clearPronouns npcObject>>`
+        - **npcObject**: `object` - NPC to unfill
+      parameters:
+        - "var"
+      tags: ["unused"]
+    clearSaveMenu:
+      name: clearSaveMenu
+    clearsinglenpc:
+      description: |-
+        Clears single active npc
+
+        Does not save persistent npcs when cleared
+
+        `<<clearsinglenpc slot>>`
+        - **slot**: `number` - slot number to clear (zero-based)
+      parameters:
+        - "number"
+    clearToDeleteParasiteFetus:
+      name: clearToDeleteParasiteFetus
+    clearWraith:
+      name: clearWraith
+    cliff:
+      name: cliff
+    cliff_top_desc:
+      name: cliff_top_desc
+    cliffeventend:
+      name: cliffeventend
+    cliffexposed:
+      name: cliffexposed
+      tags: ["unused"]
+    cliffquick:
+      name: cliffquick
+    clit:
+      name: clit
+    clock:
+      description: |-
+        Prints an analogue clock set to current time
+      tags: ["dom"]
+    closeButton:
+      name: closeButton
+    closeButtonMobile:
+      name: closeButtonMobile
+    closeimg:
+      name: closeimg
+    clothesactive:
+      name: clothesactive
+    clothesactivemissionary:
+      name: clothesactivemissionary
+    clothescolour:
+      name: clothescolour
+      tags: ["unused"]
+    clothesidle:
+      name: clothesidle
+    clothesidlemissionary:
+      name: clothesidlemissionary
+    clotheson:
+      name: clotheson
+    clothesonplant:
+      name: clothesonplant
+    clothesontowel:
+      name: clothesontowel
+    clothesruined:
+      description: |-
+        Destroys pc's main body clothing slots, whether worn or carried
+
+        This includes over_upper, upper, under_upper, over_lower, lower, and under_lower slot clothing
+    clothesruinstat:
+      name: clothesruinstat
+    clothesspeech:
+      name: clothesspeech
+    clothesstrip:
+      name: clothesstrip
+    clothesstripstat:
+      name: clothesstripstat
+    clothing_arrays:
+      name: clothing_arrays
+    clothing_data:
+      name: clothing_data
+    clothingCaptionChastityEffect:
+      name: clothingCaptionChastityEffect
+      tags: ["unused"]
+    clothingCaptionExposed:
+      name: clothingCaptionExposed
+    clothingCaptionText:
+      name: clothingCaptionText
+    clothingCaptionTextGender:
+      name: clothingCaptionTextGender
+    clothingCaptionTextGenitals:
+      name: clothingCaptionTextGenitals
+    clothingCaptionTextHandheld:
+      name: clothingCaptionTextHandheld
+    clothingCaptionTextMask:
+      name: clothingCaptionTextMask
+    clothingCaptionTextMiddle:
+      name: clothingCaptionTextMiddle
+    clothingCaptionTextNothing:
+      name: clothingCaptionTextNothing
+    clothingCaptionTextOver:
+      name: clothingCaptionTextOver
+    clothingCaptionTextPreggy:
+      name: clothingCaptionTextPreggy
+    clothingCaptionTextStrip:
+      name: clothingCaptionTextStrip
+    clothingCaptionTextUnder:
+      name: clothingCaptionTextUnder
+    clothinginit:
+      name: clothinginit
+    clothingReset:
+      name: clothingReset
+    clothingResetOwnedReset:
+      name: clothingResetOwnedReset
+    clothingShop-main:
+      name: clothingShop-main
+    clothingshopChangePage:
+      name: clothingshopChangePage
+    clothingShopLegend:
+      name: clothingShopLegend
+    clothingShopv2:
+      description: |-
+        1. `<<clothingShopv2 shopName slot>>`
+
+        2. `<<clothingShopv2 shopName slot outfits?>>`
+          - **shopName**: `string` - name of shop
+          - `"clothing"` | `"forest"` | `"school"`"*slot**: `string` - name of clothing slot"
+          - `"all"` | %clothesTypesDesc%
+          - `"over_upper"` | `"upper"` | `"under_upper"`"*outfits** _optional_: `string|bool` - display outfits version of slots"
+          - `"outfits"` | `"non-outfits"` | `true` | `false`
+      parameters:
+        - '"clothing"|"forest"|"school" &+ "all"|%clothesTypes%'
+        - '"clothing"|"forest"|"school" &+ "over_upper"|"upper"|"under_upper" |+ "outfits"|"non-outfits"|bool'
+      tags: ["dom"]
+    clothingstatecompare:
+      name: clothingstatecompare
+    clothingtrait:
+      description: |-
+        ```dart
+        /*  <<shoptraits>>  */
+          <<clothingtrait trait noOutput?>>
+        /*    <<shopTraitDescription trait>>  */
+        ```
+
+        <<clothingtrait trait noOutput?>>
+        - **trait**: `string` - trait key in lowercase
+        - **noOutput** _optional_: `bool` - suppress output (truthy)
+      parameters:
+        - text |+ bool|text|number
+      tags: ["text", "img"]
+    colourCodes:
+      name: colourCodes
+    combat_deviancy_text:
+      name: combat_deviancy_text
+    combat_lewdity_text:
+      name: combat_lewdity_text
+    combat_promiscuity_text:
+      name: combat_promiscuity_text
+    combat-dildo-on-anus:
+      name: combat-dildo-on-anus
+    combat-dildo-on-anusentrance:
+      name: combat-dildo-on-anusentrance
+    combat-dildo-on-penis:
+      name: combat-dildo-on-penis
+    combat-dildo-on-penisentrance:
+      name: combat-dildo-on-penisentrance
+    combat-dildo-on-vagina:
+      name: combat-dildo-on-vagina
+    combat-dildo-on-vaginaentrance:
+      name: combat-dildo-on-vaginaentrance
+    combat-dildospank:
+      name: combat-dildospank
+    combat-get-other-hand:
+      name: combat-get-other-hand
+    combat-hand-hypnosis:
+      name: combat-hand-hypnosis
+    combat-hand-hypnosis-cover:
+      name: combat-hand-hypnosis-cover
+    combat-hand-hypnosis-masochism:
+      name: combat-hand-hypnosis-masochism
+    combat-hand-hypnosis-orgasm:
+      name: combat-hand-hypnosis-orgasm
+    combat-hand-hypnosis-scream:
+      name: combat-hand-hypnosis-scream
+    combat-hand-on-anus:
+      name: combat-hand-on-anus
+    combat-hand-on-anusentrance:
+      name: combat-hand-on-anusentrance
+    combat-hand-on-arms:
+      name: combat-hand-on-arms
+    combat-hand-on-bottom:
+      name: combat-hand-on-bottom
+    combat-hand-on-buttplug:
+      name: combat-hand-on-buttplug
+    combat-hand-on-chastity:
+      name: combat-hand-on-chastity
+    combat-hand-on-clothes:
+      name: combat-hand-on-clothes
+    combat-hand-on-hair:
+      name: combat-hand-on-hair
+    combat-hand-on-hand:
+      name: combat-hand-on-hand
+    combat-hand-on-head_breasts:
+      name: combat-hand-on-head_breasts
+    combat-hand-on-head_nipples:
+      name: combat-hand-on-head_nipples
+    combat-hand-on-lowerclothes:
+      name: combat-hand-on-lowerclothes
+    combat-hand-on-lube:
+      name: combat-hand-on-lube
+    combat-hand-on-mask:
+      name: combat-hand-on-mask
+    combat-hand-on-mouth:
+      name: combat-hand-on-mouth
+    combat-hand-on-one-arm:
+      name: combat-hand-on-one-arm
+    combat-hand-on-overlowerclothes:
+      name: combat-hand-on-overlowerclothes
+    combat-hand-on-overupperclothes:
+      name: combat-hand-on-overupperclothes
+    combat-hand-on-penis:
+      name: combat-hand-on-penis
+    combat-hand-on-penisentrance:
+      name: combat-hand-on-penisentrance
+    combat-hand-on-sextoy:
+      name: combat-hand-on-sextoy
+    combat-hand-on-shackle:
+      name: combat-hand-on-shackle
+    combat-hand-on-shackle-imminent:
+      name: combat-hand-on-shackle-imminent
+    combat-hand-on-shoes:
+      name: combat-hand-on-shoes
+    combat-hand-on-socks:
+      name: combat-hand-on-socks
+    combat-hand-on-throat:
+      name: combat-hand-on-throat
+    combat-hand-on-underlowerclothes:
+      name: combat-hand-on-underlowerclothes
+    combat-hand-on-underupperclothes:
+      name: combat-hand-on-underupperclothes
+    combat-hand-on-upperclothes:
+      name: combat-hand-on-upperclothes
+    combat-hand-on-vagina:
+      name: combat-hand-on-vagina
+    combat-hand-on-vaginaentrance:
+      name: combat-hand-on-vaginaentrance
+    combat-lift-skirt:
+      name: combat-lift-skirt
+    combat-pen-on-bodypart:
+      name: combat-pen-on-bodypart
+    combat-pull-clothing-down:
+      name: combat-pull-clothing-down
+    combat-pull-clothing-state:
+      name: combat-pull-clothing-state
+    combat-pull-clothing-to-side:
+      name: combat-pull-clothing-to-side
+    combat-pull-clothing-up:
+      name: combat-pull-clothing-up
+    combat-pull-outfit-down:
+      name: combat-pull-outfit-down
+    combat-pull-outfit-up:
+      name: combat-pull-outfit-up
+    combat-remove-buttplug:
+      name: combat-remove-buttplug
+    combat-reset-hand:
+      name: combat-reset-hand
+    combat-reset-tool:
+      name: combat-reset-tool
+    combat-reveal-sextoy:
+      name: combat-reveal-sextoy
+    combat-set-hand-start:
+      name: combat-set-hand-start
+    combat-set-hand-target:
+      name: combat-set-hand-target
+    combat-spank:
+      name: combat-spank
+    combat-stroker-on-penis:
+      name: combat-stroker-on-penis
+    combat-stroker-on-penisentrance:
+      name: combat-stroker-on-penisentrance
+    combat-tug-clothing:
+      name: combat-tug-clothing
+    combatApologise:
+      name: combatApologise
+    combataware:
+      description: |-
+        Prints `Awareness X` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+
+        `<<combataware level>>`
+        - **level**: `number` - required level for this action
+          - `1-5`: level and color
+          - `0`: just text
+      parameters:
+        - "number"
+      tags: ["text"]
+    combatBreast:
+      name: combatBreast
+    combatButtonAdjustments:
+      name: combatButtonAdjustments
+    combatcontrol:
+      description: |-
+        Adds control to pc and updates effects of it
+
+        Modifies `$controlstart` to track when changes should be output in combat
+
+        `change` is technically optional but should not be. Consider refactoring
+
+        `<<trauma change?>>`
+        - **change** _optional_: `number` - +/- change to apply
+          - if not provided, just clamps pc's control
+      parameters:
+        - "number"
+      tags: ["refactor"]
+    combatcrime:
+      description: |-
+        Prints `Crime X` where X is type of crime
+
+        `<<combatX>>` widgets should be used in combat
+
+        `<<combatcrime type>>`
+        - **type**: `string` - type in setup.crimeNames
+          - %crimeTypesDesc%
+      parameters:
+        - "%crimeTypes%"
+      tags: ["text"]
+    combatDefaults:
+      name: combatDefaults
+    combatdeviancy1:
+      name: combatdeviancy1
+      tags: ["unused"]
+    combatdeviancy2:
+      name: combatdeviancy2
+      tags: ["unused"]
+    combatdeviancy3:
+      name: combatdeviancy3
+      tags: ["unused"]
+    combatdeviancy4:
+      name: combatdeviancy4
+      tags: ["unused"]
+    combatdeviancy5:
+      name: combatdeviancy5
+    combatdeviancy6:
+      name: combatdeviancy6
+      tags: ["unused"]
+    combatdeviancyN:
+      name: combatdeviancyN
+    combatdeviant:
+      description: |-
+        Prints `Deviancy X` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+
+        `<<combatdeviant level>>`
+        - **level**: `number` - required level for this action
+          - `1-6`: level and color
+          - `0`: just text
+      parameters:
+        - "number"
+      tags: ["unused", "text"]
+    combatdeviant1:
+      description: |-
+        Prints `Deviancy 1` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["unused", "text"]
+    combatdeviant2:
+      description: |-
+        Prints `Deviancy 1` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["unused", "text"]
+    combatdeviant3:
+      description: |-
+        Prints `Deviancy 1` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["unused", "text"]
+    combatdeviant4:
+      description: |-
+        Prints `Deviancy 1` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["unused", "text"]
+    combatdeviant5:
+      description: |-
+        Prints `Deviancy 1` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["unused", "text"]
+    combatdeviant6:
+      description: |-
+        Prints `Deviancy 1` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["unused", "text"]
+    combateffects:
+      name: combateffects
+    combatexhibitionist:
+      description: |-
+        Prints `Exhibitionism X` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+
+        `<<combatexhibitionist level>>`
+        - **level**: `number` - required level for this action
+          - `1-6`: level and color
+          - `0`: just text
+      parameters:
+        - "number"
+      tags: ["unused", "text"]
+    combatexhibitionist1:
+      description: |-
+        Prints `Exhibitionism 1` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatexhibitionist2:
+      description: |-
+        Prints `Exhibitionism 2` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatexhibitionist3:
+      description: |-
+        Prints `Exhibitionism 3` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatexhibitionist4:
+      description: |-
+        Prints `Exhibitionism 4` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatexhibitionist5:
+      description: |-
+        Prints `Exhibitionism 5` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatexhibitionist6:
+      description: |-
+        Prints `!Exhibitionism 6!` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["unused", "text"]
+    combathandguide:
+      name: combathandguide
+    combathandhold:
+      name: combathandhold
+    combatimg:
+      name: combatimg
+    combatinit:
+      name: combatinit
+    combatListColor:
+      description: |-
+        Use `combatListColor()` instead
+      name: combatListColor
+      tags: ["unused"]
+    combatMasturbate:
+      name: combatMasturbate
+    combatMouthOtherAnus:
+      name: combatMouthOtherAnus
+    combatNipple:
+      name: combatNipple
+    combatOthervagina:
+      name: combatOthervagina
+    combatPenisEntrance:
+      name: combatPenisEntrance
+    combatPenisImminent:
+      name: combatPenisImminent
+    combatPenisPenetrated:
+      name: combatPenisPenetrated
+    combatperson:
+      name: combatperson
+    combatPerson:
+      name: combatPerson
+    combatpersons:
+      name: combatpersons
+    combatpromiscuity1:
+      name: combatpromiscuity1
+    combatpromiscuity2:
+      name: combatpromiscuity2
+    combatpromiscuity3:
+      name: combatpromiscuity3
+    combatpromiscuity4:
+      name: combatpromiscuity4
+    combatpromiscuity5:
+      name: combatpromiscuity5
+    combatpromiscuity6:
+      name: combatpromiscuity6
+    combatpromiscuityN:
+      name: combatpromiscuityN
+    combatpromiscuous:
+      description: |-
+        Prints `Promiscuous X` or `Deviancy X` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+
+        `<<combatpromiscuous level>>`
+        - **level**: `number` - required level for this action
+          - `1-6`: level and color
+          - `0`: just text
+      parameters:
+        - "number"
+      tags: ["unused", "text"]
+    combatpromiscuous1:
+      description: |-
+        Prints `Promiscuous 1` or `Deviancy 1` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatpromiscuous2:
+      description: |-
+        Prints `Promiscuous 2` or `Deviancy 2` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatpromiscuous3:
+      description: |-
+        Prints `Promiscuous 3` or `Deviancy 3` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatpromiscuous4:
+      description: |-
+        Prints `Promiscuous 4` or `Deviancy 4` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatpromiscuous5:
+      description: |-
+        Prints `Promiscuous 5` or `Deviancy 5` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatpromiscuous6:
+      description: |-
+        Prints `!Promiscuous 6!` or `!Deviancy 6!` with appropriate color for level
+
+        `<<combatX>>` widgets should be used in combat
+      tags: ["text"]
+    combatskulduggeryskilluse:
+      name: combatskulduggeryskilluse
+    combatspeech:
+      name: combatspeech
+    combatstate:
+      name: combatstate
+    combatTrainAdvance:
+      name: combatTrainAdvance
+    combattrauma:
+      description: |-
+        Adds trauma to pc based on control and trait modifiers
+
+        This trauma is half of normal trauma gain
+
+        Trauma effects on pc are not updated after change.
+        Consider refactoring to call `<<trauma>>` instead of `<<traumaclamp>>`
+
+        `<<combattrauma change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "|+ number"
+      tags: ["refactor"]
+    commaButtPlug:
+      name: commaButtPlug
+      tags: ["unused"]
+    commercial:
+      name: commercial
+    commercialdrain:
+      name: commercialdrain
+    commercialdraineventend:
+      name: commercialdraineventend
+    commercialdrainlinks:
+      name: commercialdrainlinks
+    commercialdrainquick:
+      name: commercialdrainquick
+    commercialeventend:
+      name: commercialeventend
+    commercialex1:
+      name: commercialex1
+    commercialex2:
+      name: commercialex2
+    commercialex3:
+      name: commercialex3
+    commercialexposed:
+      name: commercialexposed
+      tags: ["unused"]
+    commercialquick:
+      name: commercialquick
+    completeassignment:
+      name: completeassignment
+    compoundoptions:
+      name: compoundoptions
+    compressionVerifier:
+      name: compressionVerifier
+      tags: ["unused"]
+    compressNPC:
+      description: |-
+        Puts an active npc in a persistent slot after compressing it
+
+        `<<compressNPC slot name>>`
+        - **slot**: `number` - slot number to put npc data at (zero-based)
+        - **name**: `string` - key to load npc's data from
+          - spaces should be avoided if possible
+      parameters:
+        - "number &+ string|text"
+    compute:
+      container: true
+      name: compute
+    condition:
+      name: condition
+      tags: ["unused"]
+    condomDesc:
+      name: condomDesc
+    condomsPrice:
+      name: condomsPrice
+    condomsSidebar:
+      name: condomsSidebar
+    connector-box:
+      name: connector-box
+    connudatus:
+      name: connudatus
+    connudatuseventend:
+      name: connudatuseventend
+    connudatusexposed:
+      name: connudatusexposed
+      tags: ["unused"]
+    connudatusMarketsLewdEvents:
+      name: connudatusMarketsLewdEvents
+    connudatusMarketsProductsEvents:
+      name: connudatusMarketsProductsEvents
+    connudatusMarketsStatusEvents:
+      name: connudatusMarketsStatusEvents
+    connudatusquick:
+      name: connudatusquick
+    connudatuswallet:
+      name: connudatuswallet
+    consensual:
+      name: consensual
+    consensualman:
+      name: consensualman
+      tags: ["unused"]
+    containerInfo:
+      name: containerInfo
+    containersInit:
+      name: containersInit
+    containersLink:
+      name: containersLink
+    continueWraith:
+      name: continueWraith
+    control:
+      description: |-
+        Adds control to pc and updates effects of it
+
+        `$control` is pc's control over their life choices where higher numbers are healthy (0-1,000)
+
+        See `<<combatcontrol>>` for other use cases
+
+        `change` is technically optional but should not be. Consider refactoring
+
+        `<<trauma change?>>`
+        - **change** _optional_: `number` - +/- change to apply
+          - if not provided, just clamps pc's control
+      parameters:
+        - "number"
+      tags: ["refactor"]
+    controlcaption:
+      name: controlcaption
+    controlloss:
+      name: controlloss
+    convertToDDFormat:
+      name: convertToDDFormat
+      tags: ["unused"]
+    convertToDMYFormat:
+      name: convertToDMYFormat
+      tags: ["unused"]
+    corruption:
+      description: |-
+        Adds corruption to pc and applies corruption effects
+
+        `<<corruption change skipSubmissive?>>`
+        - **change**: `number` - +/- change to apply
+        - **skipSubmissive** _optional_: `bool` - do not add `$submissive` to pc even if they qualify (truthy)
+          - Defaults to false
+      parameters:
+        - "number |+ bool"
+    CosmeticsGenericDepartment:
+      name: CosmeticsGenericDepartment
+    cottage_bailey_options:
+      name: cottage_bailey_options
+    courtyard:
+      name: courtyard
+    cover_end:
+      name: cover_end
+    covered:
+      description: |-
+        Prints text description of player attempting to cover their lewdness
+      tags: ["text"]
+    cow:
+      description: |-
+        Prints `| Cow`
+      tags: ["text"]
+    cowTransform:
+      name: cowTransform
+    cream_arousal:
+      name: cream_arousal
+    cream_audience:
+      name: cream_audience
+    cream_damage:
+      name: cream_damage
+    cream_description:
+      name: cream_description
+    cream_end:
+      name: cream_end
+    cream_events:
+      name: cream_events
+    cream_fail:
+      name: cream_fail
+    cream_finish:
+      name: cream_finish
+    cream_init:
+      name: cream_init
+    cream_walk:
+      name: cream_walk
+    creampie:
+      name: creampie
+    creatureActivity:
+      name: creatureActivity
+    creatureContainersProgressDay:
+      name: creatureContainersProgressDay
+    creatureTooltip:
+      name: creatureTooltip
+    creatureVisit:
+      name: creatureVisit
+    crime:
+      description: |-
+        Prints `Crime X` where X is type of crime
+
+        `<<crime type>>`
+        - **type**: `string` - type in setup.crimeNames
+          - %crimeTypesDesc%
+      parameters:
+        - "%crimeTypes%"
+      tags: ["text"]
+    crimeClear:
+      name: crimeClear
+    crimeClearEvent:
+      name: crimeClearEvent
+    crimeDown:
+      name: crimeDown
+    crimeParade:
+      name: crimeParade
+    crimes:
+      description: |-
+        Prints list of crimes
+
+        `<<crimes ...type>>`
+        - ...**type**: `string` - type in setup.crimeNames
+          - %crimeTypesDesc%
+      parameters:
+        - "...%crimeTypes%"
+      tags: ["text"]
+    crimeType:
+      description: |-
+        Prints type of crime
+
+        `<<crimeType type>>`
+        - **type**: `string` - type in setup.crimeNames
+          - %crimeTypesDesc%
+      parameters:
+        - "%crimeTypes%"
+      tags: ["text"]
+    crimeUp:
+      name: crimeUp
+    crimeUpFlat:
+      name: crimeUpFlat
+    crossdressing_check:
+      name: crossdressing_check
+    crotch:
+      description: |-
+        Prints outermost non-naked lower clothing layer
+      tags: ["text"]
+    cumspeech:
+      name: cumspeech
+    cumswallow:
+      name: cumswallow
+    cunnilingusejacstat:
+      name: cunnilingusejacstat
+    cunnilingusstat:
+      name: cunnilingusstat
+    cursedtext:
+      description: |-
+        Prints hint on getting cursed item off (ie, `| Perhaps the X can help.`)
+
+        Does not allow multiple items despite partial implementation. Consider refactoring
+
+        `<<cursedtext ...cursedItemNames>>`
+        - ...**cursedItemNames**: `string` - name of cursed items to print hint for
+          - `"collar"`: `| Perhaps the police can help.`
+          - `"chastity belt"`: `| Perhaps the temple can help.`
+      parameters:
+        - '...("collar"|"chastity belt")'
+      tags: ["text"]
+    cute:
+      description: |-
+        Prints random gender-appropriate synonym for cute
+
+        Could use more synonyms. Consider refactoring
+      tags: ["text", "refactor"]
+    dailySellProduce:
+      name: dailySellProduce
+      tags: ["unused"]
+    damage_farm:
+      name: damage_farm
+    damageClothing:
+      name: damageClothing
+      tags: ["unused"]
+    damageFaceCover:
+      name: damageFaceCover
+    dance_crossdress_reveal:
+      name: dance_crossdress_reveal
+    dance_job_end:
+      name: dance_job_end
+    dance_job_init:
+      name: dance_job_init
+    dance_job_interest:
+      name: dance_job_interest
+    dance_job_text:
+      name: dance_job_text
+    dance_npc_masturbation:
+      name: dance_npc_masturbation
+    dance_npc_masturbation_chance:
+      name: dance_npc_masturbation_chance
+    dance_private_init:
+      name: dance_private_init
+    dance_stage_cum:
+      name: dance_stage_cum
+    danceactions:
+      name: danceactions
+    danceaudience:
+      name: danceaudience
+    dancebriar:
+      name: dancebriar
+    dancebrothelrobin:
+      name: dancebrothelrobin
+    danceCorruption:
+      name: danceCorruption
+    dancedarryl:
+      name: dancedarryl
+    dancedifficulty:
+      name: dancedifficulty
+    dancedrink:
+      name: dancedrink
+    dancedrunktrip:
+      name: dancedrunktrip
+    danceeffects:
+      name: danceeffects
+    dancefall:
+      name: dancefall
+    dancefinish:
+      name: dancefinish
+    danceinit:
+      name: danceinit
+    danceleighton:
+      name: danceleighton
+    dancelight:
+      name: dancelight
+    dancelonging:
+      name: dancelonging
+    dancemolest:
+      name: dancemolest
+    dancenote:
+      name: dancenote
+    danceprivate:
+      name: danceprivate
+    dancepull:
+      name: dancepull
+    dancerape:
+      name: dancerape
+    dancesalivate:
+      name: dancesalivate
+    dancesamfinish:
+      name: dancesamfinish
+    danceskill:
+      name: danceskill
+    danceskilluse:
+      name: danceskilluse
+    dancespeech:
+      name: dancespeech
+    dancestat:
+      name: dancestat
+    dancestrip:
+      name: dancestrip
+    danceStripActionObject:
+      name: danceStripActionObject
+    dancestripactions:
+      name: dancestripactions
+    dancestripeffects:
+      name: dancestripeffects
+    dancestrippertrouble:
+      name: dancestrippertrouble
+    danceStudioIntro:
+      name: danceStudioIntro
+    dancetext:
+      description: |-
+        Prints color-coded adjective of active dance skill usage
+      tags: ["text"]
+    dancetripfinish:
+      name: dancetripfinish
+    dancetriprape:
+      name: dancetriprape
+    dancevip:
+      name: dancevip
+    danceWraith:
+      name: danceWraith
+    dancingclothes:
+      name: dancingclothes
+    dangerousText:
+      description: |-
+        Prints `| Dangerous`
+      tags: ["text"]
+    danube:
+      name: danube
+    danubeeventend:
+      name: danubeeventend
+    danubeexposed:
+      name: danubeexposed
+      tags: ["unused"]
+    danubemeal:
+      name: danubemeal
+    danubequick:
+      name: danubequick
+    daughter:
+      description: |-
+        Prints `son` or `daughter` depending on npc pronouns
+      tags: ["text"]
+    daylight:
+      description: |-
+        Prints amount ambient light based on time of day
+      tags: ["text"]
+    deactivateNPC:
+      name: deactivateNPC
+      tags: ["unused"]
+    def:
+      description: |-
+        Adds defiant quality to pc's state and applies effects
+
+        See `<<sub>>`
+
+        `<<def change>>`
+        - **change**: `number` - + change to apply
+      parameters:
+        - "number"
+    defeatnpc:
+      name: defeatnpc
+    defer:
+      name: defer
+      tags: ["unused"]
+    defiance:
+      name: defiance
+    defianttext:
+      description: |-
+        Prints `| Defiant`
+      tags: ["text"]
+    defileSacredGround:
+      name: defileSacredGround
+    deleteConfirm:
+      name: deleteConfirm
+    deleteoutfit:
+      name: deleteoutfit
+    deleteWarning:
+      name: deleteWarning
+    delinquency:
+      description: |-
+        Adds delinquency to pc's state
+
+        `$delinquency` is a historic measurement of how much trouble the pc is considered by the school where 0 is innocent (0-1,000).
+        `change` is multiplied by 4 here and in `<<detention>>`
+
+        See `<<detention>>` to adjust detention at the same time
+
+        `<<delinquency change modifier?>>`
+        - **change**: `number` - +/- change to apply
+        - **modifier** _optional_: `string` - type of modifier to apply
+          - `"bonus"`: additional reduction if pc attends with optional school trait clothes
+      parameters:
+        - 'number |+ "bonus"'
+    demon:
+      description: |-
+        Prints `| Demon`
+      tags: ["text"]
+    demonTransform:
+      name: demonTransform
+    deskText:
+      name: deskText
+    destination:
+      name: destination
+    destination_catacombs:
+      name: destination_catacombs
+    destination_farm:
+      name: destination_farm
+    destination_farm_ride:
+      name: destination_farm_ride
+    destination_lake_ice:
+      name: destination_lake_ice
+    destination_pool:
+      name: destination_pool
+    destination_prison:
+      name: destination_prison
+    destination_prison_walkway:
+      name: destination_prison_walkway
+    destination_tentacle_forest:
+      name: destination_tentacle_forest
+    destination5:
+      name: destination5
+    destinationbondage:
+      name: destinationbondage
+    destinationdrain:
+      name: destinationdrain
+    destinationeventend:
+      name: destinationeventend
+    destinationexposed:
+      name: destinationexposed
+      tags: ["unused"]
+    destinationfarmroad:
+      name: destinationfarmroad
+    destinationlake:
+      name: destinationlake
+    destinationlakeruin:
+      name: destinationlakeruin
+    destinationsewers:
+      name: destinationsewers
+    destinationsewersrandom:
+      name: destinationsewersrandom
+    destinationsmuggler:
+      name: destinationsmuggler
+    destinationstormdrain:
+      name: destinationstormdrain
+    destinationwolfcave:
+      name: destinationwolfcave
+    detach_leash:
+      description: |-
+        Dettaches leash from pc's collar
+
+        Can be used to gain infinite collars and keepCursed isn't universal. Consider refactoring
+
+        `<<detach_leash pcCanRemove? noRebuy?>>`
+        - **keepCursed** _optional_: `bool` - collar will not be cursed unless original collar was already (truthy)
+          - Defaults to `false`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool |+ bool"
+      tags: ["refactor"]
+    detention:
+      description: |-
+        Adds detention and delinquency to pc's state
+
+        `$detention` is a measurement of how much trouble the pc is in per day where 0 is innocent (0-100).
+        `change` is multiplied by 10
+
+        See `<<delinquency>>` to adjust only delinquency
+
+        `<<detention change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    deviancy1:
+      name: deviancy1
+    deviancy2:
+      name: deviancy2
+    deviancy3:
+      name: deviancy3
+    deviancy4:
+      name: deviancy4
+    deviancy5:
+      name: deviancy5
+    deviancy6:
+      name: deviancy6
+      tags: ["unused"]
+    deviancyN:
+      name: deviancyN
+    deviant:
+      description: |-
+        Prints `Deviancy X` with appropriate color for level
+
+        `<<deviant level>>`
+        - **level**: `number` - required level for this action
+          - `1-6`: level and color
+          - `0`: just text
+      parameters:
+        - "number"
+      tags: ["unused", "text"]
+    deviant1:
+      description: |-
+        Prints `Deviancy 1` with appropriate color for level
+      tags: ["text"]
+    deviant2:
+      description: |-
+        Prints `Deviancy 2` with appropriate color for level
+      tags: ["text"]
+    deviant3:
+      description: |-
+        Prints `Deviancy 3` with appropriate color for level
+      tags: ["text"]
+    deviant4:
+      description: |-
+        Prints `Deviancy 4` with appropriate color for level
+      tags: ["text"]
+    deviant5:
+      description: |-
+        Prints `Deviancy 5` with appropriate color for level
+      tags: ["text"]
+    deviant6:
+      description: |-
+        Prints `Deviancy 6` with appropriate color for level
+      tags: ["unused", "text"]
+    difficulty:
+      name: difficulty
+    dildoSelfAnusEntrance:
+      name: dildoSelfAnusEntrance
+    dildoSelfPussyEntrance:
+      name: dildoSelfPussyEntrance
+    disable:
+      name: disable
+    disablearms:
+      name: disablearms
+    disableleftarm:
+      name: disableleftarm
+    disablerightarm:
+      name: disablerightarm
+    dismissAvery:
+      name: dismissAvery
+    dismissKylar:
+      name: dismissKylar
+    dismissWhitney:
+      name: dismissWhitney
+    display_plot:
+      name: display_plot
+    display_quality:
+      name: display_quality
+    displayFeat:
+      name: displayFeat
+    displayFeatFake:
+      name: displayFeatFake
+    displayLinks:
+      name: displayLinks
+    displayMonthday:
+      name: displayMonthday
+      tags: ["unused"]
+    displaySettings:
+      name: displaySettings
+    displaySubsection:
+      name: displaySubsection
+    distinction_stat:
+      name: distinction_stat
+    dock_security:
+      name: dock_security
+    dock_security_text:
+      name: dock_security_text
+    dockclotheson:
+      name: dockclotheson
+    dockdogfucked:
+        name: dockdogfucked
+    dockeffects:
+      name: dockeffects
+    dockoptions:
+      name: dockoptions
+    dockpubdestination:
+      name: dockpubdestination
+    dockpuboptions:
+      name: dockpuboptions
+    dockpubquiz:
+      name: dockpubquiz
+    dockstatus:
+      name: dockstatus
+    dockstatustext:
+      name: dockstatustext
+    dockunbindoffer:
+      name: dockunbindoffer
+    dockwork:
+      name: dockwork
+    doggyimg:
+      name: doggyimg
+    domus:
+      name: domus
+    domuseventend:
+      name: domuseventend
+    domusexposed:
+      name: domusexposed
+    domusquick:
+      name: domusquick
+    dontHideForNow:
+      name: dontHideForNow
+    dontHideRevert:
+      name: dontHideRevert
+    doubleslider:
+      name: doubleslider
+      tags: ["unused"]
+    doVersionCheck:
+      name: doVersionCheck
+    draindescription:
+      name: draindescription
+    drainexit:
+      name: drainexit
+    drainexiteventend:
+      name: drainexiteventend
+    drainexitlinks:
+      name: drainexitlinks
+    drainexitquick:
+      name: drainexitquick
+    drainladderdownlink:
+      name: drainladderdownlink
+    drainlinks:
+      name: drainlinks
+    drench:
+      name: drench
+    drenchfromgroup:
+      name: drenchfromgroup
+    dress:
+      description: |-
+        Prints descriptor of active NPC's upper clothing
+
+        See `<<skirt>>` for lower clothing or `<<bra>>` for inner_upper clothing
+
+        See `<<npcClothesText>>` for full name of clothes
+      tags: ["text"]
+    droptowel:
+      name: droptowel
+    druggedcaption:
+      name: druggedcaption
+    drugs:
+      description: |-
+        Adds drugs to pc's system
+
+        `$drugged` is a measure of non-hallucinogenic drugs in pc's system where 0 is none (0-1,000)
+
+        `<<drugs change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    drunkcaption:
+      name: drunkcaption
+    dry:
+      name: dry
+    dry_full:
+      name: dry_full
+    dry_towel:
+      name: dry_towel
+    dungeonescape:
+      name: dungeonescape
+    dyeSwatch:
+      name: dyeSwatch
+    dynamic:
+      description: |-
+        Prints and registers a widget which will be re-rendered dynamically
+
+        [High-Level Dynamic API Overview](%workspaceDir%/game/base-system/tools/dynamicRendering.js#L2)
+
+        `<<dynamic widgetName htmlId? ...widgetArgs?>>`
+        - **widgetName**: `string` - name of widget
+        - **htmlId** _optional_: `string` - optional DOM id for css selectors
+        - ...**widgetArgs** _optional_: `any` - space separated args to pass to widget as if called directly
+      parameters:
+        - "text |+ text |+ ...(var|bareword)"
+    dynamicblock:
+      container: true
+      description: |-
+        Prints and registers a block which will be re-rendered dynamically
+
+        [High-Level Dynamic API Overview](%workspaceDir%/game/base-system/tools/dynamicRendering.js#L2)
+
+        `<<dynamicblock ...properties>>`
+        - ...**properties**: `string` - additional properties to attach to block
+          - `"delay": only evaluate after `Dynamic.render()` has been called
+          - `"id=X"`: id of the div element where X is the DOM id (auto-generated by default)
+          - `"class=X"`: class of the div element where X is the DOM classlist
+      parameters:
+        - "|+ ...text"
+    earnAllFeats:
+      name: earnAllFeats
+    earnFeat:
+      name: earnFeat
+    earSlimeCafeLinks:
+      description: |-
+        Prints eating at cafe links as modified by earslime's command over pc
+
+        `<<earSlimeCafeLinks linkName?>>`
+        - **linkName** _optional_: `string` - example kind to output
+          - `"Obey"`: An option to obey or defy is given to pc
+          - `"Next"`: pc must comply with order. Default state
+      parameters:
+        - '|+ "Next"|"Obey"'
+      tags: ["links", "text"]
+    earSlimeDaily:
+      description: |-
+        Applies and updates effects of pc's earslime
+
+        `<<earSlimeDaily passageEffects?>>`
+        - **passageEffects** _optional_: `bool` - apply effects of ear slime passage as well (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    earSlimeFocusChoice:
+      name: earSlimeFocusChoice
+    earSlimePoundLinks:
+      name: earSlimePoundLinks
+    earSlimePregnancy:
+      name: earSlimePregnancy
+    earSlimeSeenActions:
+      name: earSlimeSeenActions
+    earSlimeShoppingExhibitionism:
+      name: earSlimeShoppingExhibitionism
+    edenCagedCoopSave:
+      name: edenCagedCoopSave
+    edenCagedSave:
+      name: edenCagedSave
+    edenlust:
+      name: edenlust
+    edenpreystart:
+      name: edenpreystart
+    effects:
+      name: effects
+    effects_prison:
+      name: effects_prison
+    effectsabomination:
+      name: effectsabomination
+    effectsanuspenisdoublefuck:
+      name: effectsanuspenisdoublefuck
+    effectsanuspenisfuck:
+      name: effectsanuspenisfuck
+    effectsanustopenis:
+      name: effectsanustopenis
+    effectsanustopenisdouble:
+      name: effectsanustopenisdouble
+    effectsarousalsoak:
+      name: effectsarousalsoak
+    effectsCoverAnus:
+      name: effectsCoverAnus
+    effectsCoverPenis:
+      name: effectsCoverPenis
+    effectsCoverVagina:
+      name: effectsCoverVagina
+    effectsdildowhack:
+      name: effectsdildowhack
+    effectsdissociation:
+      name: effectsdissociation
+    effectsDropSexToy:
+      name: effectsDropSexToy
+    effectshandpull:
+      name: effectshandpull
+    effectshandsclothes:
+      name: effectshandsclothes
+    effectshandsfreeface:
+      name: effectshandsfreeface
+    effectshypnosiswhack:
+      name: effectshypnosiswhack
+    effectsinsertions:
+      name: effectsinsertions
+    effectsmakeup:
+      name: effectsmakeup
+    effectsman:
+      name: effectsman
+    effectsorgasm:
+      name: effectsorgasm
+    effectspain:
+      name: effectspain
+    effectspenisanusfuck:
+      name: effectspenisanusfuck
+    effectspenistoanus:
+      name: effectspenistoanus
+    effectspenistopenis:
+      name: effectspenistopenis
+    effectspenistopenisfuck:
+      name: effectspenistopenisfuck
+    effectspenistovagina:
+      name: effectspenistovagina
+    effectspenisvaginafuck:
+      name: effectspenisvaginafuck
+    effectspenwhack:
+      name: effectspenwhack
+    effectsPickupSexToy:
+      name: effectsPickupSexToy
+    effectspossessed:
+      name: effectspossessed
+    effectsremovebuttplug:
+      name: effectsremovebuttplug
+    effectsshacklewhack:
+      name: effectsshacklewhack
+    effectsspray:
+      name: effectsspray
+    effectssteal:
+      name: effectssteal
+    effectstentacleadv:
+      name: effectstentacleadv
+    effectstentacles:
+      name: effectstentacles
+    effectsvaginapenisdoublefuck:
+      name: effectsvaginapenisdoublefuck
+    effectsvaginapenisfuck:
+      name: effectsvaginapenisfuck
+    effectsvaginatopenis:
+      name: effectsvaginatopenis
+    effectsvaginatopenisdouble:
+      name: effectsvaginatopenisdouble
+    effectsvaginatovagina:
+      name: effectsvaginatovagina
+    effectsvaginatovaginafuck:
+      name: effectsvaginatovaginafuck
+    effectswater:
+      name: effectswater
+    effectsWraith:
+      name: effectsWraith
+    ejacstat:
+      name: ejacstat
+    ejacTrait:
+      description: |-
+        Prints `| Cumoisseur` or `| Cum Dump` depending on pc's `$submissive`
+      tags: ["text"]
+    ejaculate:
+      name: ejaculate
+    ejaculation:
+      description: |-
+        Prints end of combat ejaculation description for all combat NPCs
+
+        All NPCs, including named, should go through here to get pre and post ejac descriptions
+
+        Alex, Avery, and Whitney descriptions are contained here until they have dedicated widgets
+
+        `<<ejaculation ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation to perform
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-alex:
+      description: |-
+        Prints end of combat ejaculation description for Alex
+
+        `<<ejaculation-alex ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-eden:
+      description: |-
+        Prints end of combat ejaculation description for Eden
+
+        `<<ejaculation-eden ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-gloryhole:
+      description: |-
+        Prints end of combat ejaculation description for player at a gloryhole
+
+        Gloryhole encounter assumes NPC cannot reach or see PC and vice versa
+
+        Assumes NPCs believe PC may have following combat
+
+        Assumes all other forms of finishing in place and encounters can be either consensual or non-con
+
+        Non-con encounters assume PC is restrained to hole with no arms available, though genital encounters were left in place in case of future use
+
+        Currently non-con gloryhole is oral-only and so focus is on these cases; the rear-body non-con is captured by $position="wall".
+        As game changes this can be reviewed
+
+        Consensual gloryhole has all combat options available currently
+
+        `<<ejaculation-gloryhole ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-kylar:
+      description: |-
+        Prints end of combat ejaculation description for Kylar
+
+        `<<ejaculation-kylar ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-leighton:
+      description: |-
+        Prints end of combat ejaculation description for Leighton
+
+        `<<ejaculation-leighton ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-pillory:
+      description: |-
+        Prints end of combat ejaculation description for player in a pillory
+
+        `<<ejaculation-pillory ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-plant:
+      description: |-
+        Prints end of combat ejaculation description for plant people
+
+        `<<ejaculation-plant ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-robin:
+      description: |-
+        Prints end of combat ejaculation description for Robin
+
+        `<<ejaculation-robin ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-sydney:
+      description: |-
+        Prints end of combat ejaculation description for Sydney
+
+        `<<ejaculation-sydney ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-urinate:
+      description: |-
+        Prints description of angry post-combat golden shower humiliation
+      tags: ["text"]
+    ejaculation-wall:
+      description: |-
+        Prints end of combat ejaculation description for NPCs that are only able to access front or back of player (player stuck in wall)
+
+        Wall encounter assumes NPC at back of PC cannot reach around to front, and vice versa, and that PC cannot see what's happening behind them
+
+        Assumes NPCs believe PC may have following combat due to being stuck in wall unaided
+
+        Gloryhole removed as of v2.6 and front facing combat only left in place in case of future work
+
+        `<<ejaculation-wall ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejaculation-wraith:
+      description: |-
+        Prints end of combat ejaculation description for Ivory Wraith
+
+        `<<ejaculation-wraith ejacType?>>`
+        - **ejacType** _optional_: `string` - type of ejaculation
+          - `"short"`: Quick ejac that prevents angry post-sex actions
+      parameters:
+        - '|+ "short"'
+      tags: ["text"]
+    ejacW:
+      name: ejacW
+    elk:
+      name: elk
+    elkeventend:
+      name: elkeventend
+    elkexposed:
+      name: elkexposed
+      tags: ["unused"]
+    elkquick:
+      name: elkquick
+    embarrassment:
+      description: |-
+        Prints sentence describing pc's arousal level as if it was embarrassment
+      tags: ["text"]
+    emptyClassroomCaughtOrgasm:
+      name: emptyClassroomCaughtOrgasm
+    emptyClassroomMasturbationDescription:
+      name: emptyClassroomMasturbationDescription
+    emptyClassroomMasturbationIntro:
+      name: emptyClassroomMasturbationIntro
+    enable_rescue:
+      name: enable_rescue
+    enableSchoolRescue:
+      name: enableSchoolRescue
+    encountersteal:
+      name: encountersteal
+    end_moor_captive:
+      name: end_moor_captive
+    end_npc_pillory:
+      name: end_npc_pillory
+    endcombat:
+      description: |-
+        Ends combat by applying pc effects, displaying necessary descriptions of them, and resetting combat variables back to defaults
+
+        `<<endcombat eventType?>>`
+        - **eventType** _optional_: `string` - type of event to end when calling `<<endevent>>`
+          - `"phaseless"`: phase variables will not be reset
+      parameters:
+        - '|+ "phaseless"'
+      tags: ["text"]
+    endconfession:
+      name: endconfession
+    endconfessionself:
+      name: endconfessionself
+    endevent:
+      description: |-
+        Ends ongoing event by resetting all event variables to default
+
+        Superceded by `<<endcombat>>`
+
+        `<<endevent type?>>`
+        - **type** _optional_: `string` - type of event to end
+          - `"phaseless"`: phase variables will not be reset
+      parameters:
+        - '|+ "phaseless"'
+    endmasturbation:
+      name: endmasturbation
+    endnpc:
+      name: endnpc
+    endNpcPregnancy:
+      name: endNpcPregnancy
+    endPlayerPregnancy:
+      name: endPlayerPregnancy
+    endRainWraith:
+      name: endRainWraith
+    endstall:
+      name: endstall
+    endWraith:
+      name: endWraith
+    enemyarousal:
+      name: enemyarousal
+    english_skill_up_text:
+      name: english_skill_up_text
+    englishdifficulty:
+      name: englishdifficulty
+    englishNudeReactions:
+      description: |-
+        Prints classmate reactions for pc's nude state
+
+        Should check if npcs are already generated before generating. Consider refactoring
+      tags: ["text", "refactor"]
+    englishplayfinish:
+      name: englishplayfinish
+    englishplaystart:
+      name: englishplaystart
+    englishskill:
+      name: englishskill
+    englishstart:
+      name: englishstart
+    enterChangingRoomLink:
+      name: enterChangingRoomLink
+      tags: ["unused"]
+    enumeratedGroup:
+      description: |-
+        Prints summarised gender makeup of currently active npcs with numbers (ie, `2 men and 3 women`)
+
+        See `<<group>>` for no numbers, `<<EnumeratedGroup>> for capitalised, or `<<fullGroup>>` for a list
+      tags: ["text"]
+    EnumeratedGroup:
+      description: |-
+        Prints capitalised and summarised gender makeup of currently active npcs with numbers (ie, `2 Men and 3 Women`)
+
+        See `<<group>>` for no numbers, `<<enumeratedGroup>> for uncapitalised, or `<<fullGroup>>` for a list
+      tags: ["unused", "text"]
+    equipClothesItemFromDefault:
+      description: |-
+        Applies clothing item to pc's slot based on setup object
+
+        Does NOT respect cursed items
+
+        `<<equipClothesItemFromDefault slot itemIndex colour? accessoryColour?>>`
+        - **slot**: `string` - slot to put clothing on
+          - %clothesTypesDesc%
+        - **itemIndex**: `number` - index of clothing item from setup to copy from
+        - **colour** _optional_: `string` - primary colour
+          - `"custom"`: pulls values from `$customColors` object
+          - `text`: valid colour in any format
+        - **accessoryColour** _optional_: `object` - secondary colour
+          - `"custom"`: pulls values from `$customColors` object
+          - `text`: valid colour in any format
+      parameters:
+        - '%clothesTypes% &+ number |+ "custom"|text |+ "custom"|text'
+    equipNPCCondom:
+      name: equipNPCCondom
+    equipPlayerCondom:
+      name: equipPlayerCondom
+    error:
+      name: error
+    errorp:
+      name: errorp
+    estate_betting_start:
+      name: estate_betting_start
+    estate_cards_bet:
+      name: estate_cards_bet
+    estate_cards_finish:
+      name: estate_cards_finish
+    estate_chaos:
+      name: estate_chaos
+    estate_chaos_bar:
+      name: estate_chaos_bar
+    estate_end:
+      name: estate_end
+    estate_init:
+      name: estate_init
+    estate_security:
+      name: estate_security
+    estate_stone_links:
+      name: estate_stone_links
+    event_trigger:
+      name: event_trigger
+    eventAmbient:
+      name: eventAmbient
+    eventbog:
+      name: eventbog
+    eventbogsafe:
+      name: eventbogsafe
+    eventforest:
+      name: eventforest
+    eventforestdeep:
+      name: eventforestdeep
+    eventforestitem:
+      name: eventforestitem
+    eventforestoutskirts:
+      name: eventforestoutskirts
+    eventforestsafe:
+      name: eventforestsafe
+    eventlake:
+      name: eventlake
+    eventlakeice:
+      name: eventlakeice
+    eventlakesafe:
+      name: eventlakesafe
+    eventlakewater:
+      name: eventlakewater
+    eventParkStreakEnd:
+      name: eventParkStreakEnd
+    events_farm_exhibitionism:
+      name: events_farm_exhibitionism
+    events_prison:
+      name: events_prison
+    events_prison_attention:
+      name: events_prison_attention
+    events_prison_triggered:
+      name: events_prison_triggered
+    events_skul_dock:
+      name: events_skul_dock
+    events_stalk:
+      name: events_stalk
+    events_stalk_nnpc:
+      name: events_stalk_nnpc
+    eventsbartending:
+      name: eventsbartending
+    eventsbartendinglisten:
+      name: eventsbartendinglisten
+    eventsbeach:
+      name: eventsbeach
+    eventsbondage:
+      name: eventsbondage
+    eventsbondageeast:
+      name: eventsbondageeast
+    eventsbondagenorth:
+      name: eventsbondagenorth
+    eventsbondagesouth:
+      name: eventsbondagesouth
+    eventsbondagewest:
+      name: eventsbondagewest
+    eventscave:
+      name: eventscave
+    eventscavesafe:
+      name: eventscavesafe
+    eventscavetreasure:
+      name: eventscavetreasure
+    eventschalets:
+      name: eventschalets
+    eventschef:
+      name: eventschef
+    eventschoolhallwaysexposed:
+      name: eventschoolhallwaysexposed
+    eventscourtyard:
+      name: eventscourtyard
+    eventsdance:
+      name: eventsdance
+    eventsdeepsea:
+      name: eventsdeepsea
+    eventsdrain:
+      name: eventsdrain
+    eventsenglish:
+      name: eventsenglish
+    eventsenglishsafe:
+      name: eventsenglishsafe
+    eventsfarm:
+      name: eventsfarm
+    eventshistory:
+      name: eventshistory
+    eventshistorysafe:
+      name: eventshistorysafe
+    eventsmaths:
+      name: eventsmaths
+    eventsmathssafe:
+      name: eventsmathssafe
+    eventsmoorhigh:
+      name: eventsmoorhigh
+    eventsmoorlow:
+      name: eventsmoorlow
+    eventsmoormid:
+      name: eventsmoormid
+    eventsSchoolChangingRoomsBoys:
+      name: eventsSchoolChangingRoomsBoys
+    eventsschoolhallways:
+      name: eventsschoolhallways
+    eventsschoolstump:
+      name: eventsschoolstump
+    eventsschooltoilets:
+      name: eventsschooltoilets
+    eventsscience:
+      name: eventsscience
+    eventssciencesafe:
+      name: eventssciencesafe
+    eventssea:
+      name: eventssea
+    eventsseabeach:
+      name: eventsseabeach
+    eventssewers:
+      name: eventssewers
+    eventsstall:
+      name: eventsstall
+    eventsstreet:
+      name: eventsstreet
+    eventsstreetday:
+      name: eventsstreetday
+    eventsstreetnight:
+      name: eventsstreetnight
+    eventsswimming:
+      name: eventsswimming
+    eventsswimmingsafe:
+      name: eventsswimmingsafe
+    eventstemple:
+      name: eventstemple
+    eventstoilets:
+      name: eventstoilets
+    eventstoiletssafe:
+      name: eventstoiletssafe
+      tags: ["unused"]
+    eventstrash:
+      name: eventstrash
+    eventsWhitneyStreet:
+      name: eventsWhitneyStreet
+    eventwolfcave:
+      name: eventwolfcave
+    ex_effects:
+      name: ex_effects
+      tags: ["unused"]
+    ex_end:
+      name: ex_end
+      tags: ["unused"]
+    ex_init:
+      name: ex_init
+      tags: ["unused"]
+    exam:
+      name: exam
+    exam_cheat:
+      name: exam_cheat
+    exam_difficulty:
+      name: exam_difficulty
+    exam_result:
+      name: exam_result
+    execremovebottom:
+      name: execremovebottom
+    execremovedress:
+      name: execremovedress
+    execremoveshoes:
+      name: execremoveshoes
+    execremovetop:
+      name: execremovetop
+    execremoveunderbottom:
+      name: execremoveunderbottom
+    execremoveundertop:
+      name: execremoveundertop
+    execstriporder:
+      name: execstriporder
+    execstripperform:
+      name: execstripperform
+    exhibitionclassroom:
+      name: exhibitionclassroom
+    exhibitionism:
+      name: exhibitionism
+    exhibitionism1:
+      name: exhibitionism1
+    exhibitionism2:
+      name: exhibitionism2
+    exhibitionism3:
+      name: exhibitionism3
+    exhibitionism4:
+      name: exhibitionism4
+    exhibitionism5:
+      name: exhibitionism5
+    exhibitionism6:
+      name: exhibitionism6
+      tags: ["unused"]
+    exhibitionismbuilding:
+      name: exhibitionismbuilding
+    exhibitionismgarden:
+      name: exhibitionismgarden
+    exhibitionismN:
+      name: exhibitionismN
+    exhibitionismoutputlinecapitalise:
+      name: exhibitionismoutputlinecapitalise
+    exhibitionismoutputlinecomma:
+      name: exhibitionismoutputlinecomma
+    exhibitionismoutputlinestop:
+      name: exhibitionismoutputlinestop
+    exhibitionismroof:
+      name: exhibitionismroof
+    exhibitionismsetdata:
+      name: exhibitionismsetdata
+    exhibitionist:
+      description: |-
+        Prints `Exhibitionism X` with appropriate color for level
+
+        `<<exhibitionist level>>`
+        - **level**: `number` - required level for this action
+          - `1-6`: level and color
+          - `0`: just text
+      parameters:
+        - "number"
+      tags: ["text"]
+    exhibitionist1:
+      description: |-
+        Prints `Exhibitionism 1` with appropriate color for level
+      tags: ["text"]
+    exhibitionist2:
+      description: |-
+        Prints `Exhibitionism 2` with appropriate color for level
+      tags: ["text"]
+    exhibitionist3:
+      description: |-
+        Prints `Exhibitionism 3` with appropriate color for level
+      tags: ["text"]
+    exhibitionist4:
+      description: |-
+        Prints `Exhibitionism 4` with appropriate color for level
+      tags: ["text"]
+    exhibitionist5:
+      description: |-
+        Prints `Exhibitionism 5` with appropriate color for level
+      tags: ["text"]
+    exhibitionist6:
+      description: |-
+        Prints `!Exhibitionism 6!` with appropriate color for level
+      tags: ["unused", "text"]
+    exhibitorgasm:
+      name: exhibitorgasm
+    exit:
+      description: |-
+        Stops processing of remaining Passage or Widget
+
+        This doesn't propagate through the stack.
+        Calling this from inside a Widget will exit the Widget and return to next location from where it was called from
+
+        See `<<exitAll>>`
+    exitAll:
+      description: |-
+        Stops processing of all remaining Widgets and Passages
+
+        This propagates through the stack.
+        All Widgets that would have been called after this Widget will be ignored
+
+        The equivalent of calling `<<exit>>` on every Widget and Passage currently being processed
+    exitclothingshop:
+      name: exitclothingshop
+    exitWraith:
+      name: exitWraith
+    exportsettings:
+      name: exportsettings
+    exposedcheck:
+      name: exposedcheck
+    exposedlower:
+      description: |-
+        Prints outermost unexposed lower layer
+      tags: ["text"]
+    exposedupper:
+      description: |-
+        Prints outermost unexposed upper layer
+      tags: ["text"]
+    exposure:
+      description: |-
+        Updates player exposure values based on location and state of dress
+    extraStatistics:
+      name: extraStatistics
+    extraStatisticsPregnancyType:
+      name: extraStatisticsPregnancyType
+    extraStatisticsWarning:
+      name: extraStatisticsWarning
+    EZbig:
+      name: EZbig
+    EZdisgusting:
+      name: EZdisgusting
+    EZpenis:
+      name: EZpenis
+    EZsmall:
+      name: EZsmall
+    fa-icon:
+      description: |-
+        Prints a fa-icon
+
+        `<<fa-icon iconName>>`
+        - **iconName**: `string` - fa-icon css classname
+      parameters:
+        - text
+      tags: ["img", "unused"]
+    faceejacstat:
+      name: faceejacstat
+    faceimg:
+      name: faceimg
+    faceintegrity:
+      name: faceintegrity
+    faceon:
+      name: faceon
+      tags: ["unused"]
+    faceruined:
+      description: |-
+        Destroys pc's face slot clothing, whether worn or carried
+
+        `<<faceruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    facesend:
+      name: facesend
+    FaceShop:
+      name: FaceShop
+    facesitFlavorText:
+      name: facesitFlavorText
+    facesteal:
+      name: facesteal
+      tags: ["unused"]
+    facestrip:
+      name: facestrip
+    faceundress:
+      name: faceundress
+    facewear:
+      name: facewear
+    fallenangel:
+      description: |-
+        Prints `| Fallen Angel`
+      tags: ["text"]
+    fallenButNotOut:
+      name: fallenButNotOut
+    fallenDescend:
+      name: fallenDescend
+    fallenTransform:
+      name: fallenTransform
+    fame:
+      description: |-
+        Changes fame values without any checks or safeguards
+
+        `<<fame changeValue ...type >>`
+        - **changeValue**: `number` - value to change fame by
+        - ...**type**: `string` - type(s) of fame to change
+          - %fameTypesDesc%
+      parameters:
+        - "number &+ %fameTypes% |+ ...%fameTypes%"
+      tags: ["unused"]
+    famebestiality:
+      description: |-
+        Changes pc's fame for bestiality
+
+        `<<famebestiality value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    famebusiness:
+      description: |-
+        Changes pc's fame for business
+
+        `<<famebusiness value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    fameclamp:
+      name: fameclamp
+    famedance:
+      description: |-
+        Increments pc's fame for dancing based on audience size
+    fameexhibitionism:
+      description: |-
+        Changes pc's fame for exhibitionism
+
+        `<<fameexhibitionism value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    famegood:
+      description: |-
+        Changes pc's fame for being good
+
+        `<<famegood value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    fameimpreg:
+      description: |-
+        Changes pc's fame for impregnating others (fathering children)
+
+        `<<fameimpreg value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    famemodel:
+      description: |-
+        Changes pc's fame for modelling
+
+        `<<famemodel value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"` | `"art"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid"|"art" |+ bool'
+    famepimp:
+      description: |-
+        Changes pc's fame for being pimped out
+
+        Currently unused
+
+        `<<famepimp value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    famepregnancy:
+      description: |-
+        Changes pc's fame for being pregnant (mothering children)
+
+        `<<famepregnancy value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    fameProse:
+      description: |-
+        Prints full description of provided fame key
+
+        `<<fameProse type>>`
+        - **type**: `string` - type of fame
+          - `%fameTypesDesc%`
+      parameters:
+        - "%fameTypes%"
+      tags: ["text"]
+    fameprostitution:
+      description: |-
+        Changes pc's fame for prostitution
+
+        `<<fameprostitution value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    famerape:
+      description: |-
+        Changes pc's fame for being raped
+
+        `<<famerape value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    famesalute:
+      name: famesalute
+    fameschoolex:
+      description: |-
+        Changes pc's fame for exhibitionism amongst students
+
+        Consider using `<<fameexhibitionsim>>` instead as this behavior is not implemented and lightly deprecated
+
+        `<<fameschoolex value>>`
+        - **changeValue**: `number` - value to change fame by
+      parameters:
+        - "number"
+      tags: ["refactor"]
+    famescrap:
+      description: |-
+        Changes pc's fame for fighting
+
+        `<<famescrap value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    famesex:
+      description: |-
+        Changes pc's having sex fame
+
+        `<<famesex value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    famesocial:
+      description: |-
+        Changes pc's fame for social status
+
+        `<<famesocial value type? forceChange?>>`
+        - **changeValue**: `number` - value to change fame by
+        - **type** _optional_: `string` - type of event giving fame
+          - `"none"` | `"pic"` | `"vid"`
+        - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
+      parameters:
+        - 'number |+ "none"|"pic"|"vid" |+ bool'
+    farm_actions:
+      name: farm_actions
+    farm_aggro:
+      name: farm_aggro
+    farm_alex:
+      name: farm_alex
+    farm_assault_actions:
+      name: farm_assault_actions
+    farm_assault_alex:
+      name: farm_assault_alex
+    farm_assault_attack_options:
+      name: farm_assault_attack_options
+    farm_assault_end:
+      name: farm_assault_end
+    farm_assault_flight:
+      name: farm_assault_flight
+    farm_assault_info:
+      name: farm_assault_info
+    farm_assault_init:
+      name: farm_assault_init
+    farm_assault_intro:
+      name: farm_assault_intro
+    farm_assault_intruders:
+      name: farm_assault_intruders
+    farm_assault_location:
+      name: farm_assault_location
+    farm_assault_no:
+      name: farm_assault_no
+    farm_assault_options:
+      name: farm_assault_options
+    farm_assault_progress:
+      name: farm_assault_progress
+    farm_assault_thugs:
+      name: farm_assault_thugs
+    farm_assault_unbind:
+      name: farm_assault_unbind
+    farm_attack_auto:
+      name: farm_attack_auto
+    farm_brush:
+      name: farm_brush
+    farm_build_day:
+      name: farm_build_day
+    farm_cattle:
+      name: farm_cattle
+    farm_cottage_options:
+      name: farm_cottage_options
+    farm_cottage_tv_options:
+      name: farm_cottage_tv_options
+    farm_count:
+      name: farm_count
+    farm_damage_report:
+      name: farm_damage_report
+    farm_dogs:
+      name: farm_dogs
+    farm_fence:
+      name: farm_fence
+    farm_fence_damage:
+      name: farm_fence_damage
+    farm_fight_alex:
+      name: farm_fight_alex
+    farm_fight_door:
+      name: farm_fight_door
+    farm_fight_end:
+      name: farm_fight_end
+      tags: ["unused"]
+    farm_fight_init:
+      name: farm_fight_init
+    farm_fight_options:
+      name: farm_fight_options
+    farm_forest_event:
+      name: farm_forest_event
+    farm_gen:
+      name: farm_gen
+    farm_gen_all:
+      name: farm_gen_all
+    farm_guard_paid:
+      name: farm_guard_paid
+    farm_guard_pay:
+      name: farm_guard_pay
+    farm_guard_wage:
+      name: farm_guard_wage
+    farm_he:
+      description: |-
+        Prints singular pronoun (he/she) for beast on farm, modified by hallucinations
+
+        `<<farm_he type>>`
+        - **type**: `string` - type of `$farmwork` being performed
+          - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
+      parameters:
+        - '"dog"|"pig"|"horse"|"cattle"'
+      tags: ["text"]
+    farm_He:
+      description: |-
+        Prints capitalised singular pronoun (He/She) for beast on farm, modified by hallucinations
+
+        `<<farm_He type>>`
+        - **type**: `string` - type of `$farmwork` being performed
+          - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
+      parameters:
+        - '"dog"|"pig"|"horse"|"cattle"'
+      tags: ["text"]
+    farm_him:
+      description: |-
+        Prints objective singular pronoun (him/her) for beast on farm, modified by hallucinations
+
+        `<<farm_him type>>`
+        - **type**: `string` - type of `$farmwork` being performed
+          - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
+      parameters:
+        - '"dog"|"pig"|"horse"|"cattle"'
+      tags: ["text"]
+    farm_his:
+      description: |-
+        Prints possessive pronoun (his/her) for beast on farm, modified by hallucinations
+
+        `<<farm_his type>>`
+        - **type**: `string` - type of `$farmwork` being performed
+          - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
+      parameters:
+        - '"dog"|"pig"|"horse"|"cattle"'
+      tags: ["text"]
+    farm_His:
+      description: |-
+        Prints capitalised possessive pronoun (His/Her) for beast on farm, modified by hallucinations
+
+        `<<farm_His type>>`
+        - **type**: `string` - type of `$farmwork` being performed
+          - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
+      parameters:
+        - '"dog"|"pig"|"horse"|"cattle"'
+      tags: ["text"]
+    farm_horses:
+      name: farm_horses
+    farm_init:
+      name: farm_init
+    farm_knotted:
+      name: farm_knotted
+    farm_milk_actions:
+      name: farm_milk_actions
+    farm_milk_check:
+      name: farm_milk_check
+    farm_pigs:
+      name: farm_pigs
+    farm_relax_chat:
+      name: farm_relax_chat
+    farm_relax_end:
+      name: farm_relax_end
+    farm_ride_events:
+      name: farm_ride_events
+    farm_sleep_options:
+      name: farm_sleep_options
+    farm_status:
+      name: farm_status
+    farm_stock:
+      name: farm_stock
+    farm_stock_init:
+      name: farm_stock_init
+    farm_tell_alex:
+      name: farm_tell_alex
+    farm_tending_alex_events:
+      name: farm_tending_alex_events
+    farm_tending_events:
+      name: farm_tending_events
+    farm_text:
+      description: |-
+        Prints singular type of beast on farm, modified by hallucinations
+
+        `<<farm_text type>>`
+        - **type**: `string` - type of `$farmwork` being performed
+          - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
+      parameters:
+        - '"dog"|"pig"|"horse"|"cattle"'
+      tags: ["text"]
+    farm_text_many:
+      description: |-
+        Prints plural type of beasts on farm, modified by hallucinations
+
+        `<<farm_text type>>`
+        - **type**: `string` - type of `$farmwork` being performed
+          - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
+      parameters:
+        - '"dog"|"pig"|"horse"|"cattle"'
+      tags: ["text"]
+    farm_trust:
+      name: farm_trust
+    farm_update:
+      name: farm_update
+    farm_upgrades_current:
+      name: farm_upgrades_current
+    farm_upgrades_status:
+      name: farm_upgrades_status
+    farm_var_set:
+      description: |-
+        Resets farm vars if appropriate
+    farm_work:
+      name: farm_work
+    farm_work_time:
+      name: farm_work_time
+    farm_work_update:
+      name: farm_work_update
+    farm_yield:
+      description: |-
+        Adds tier to daily farm_yield gain
+
+        `$farm_yield` is the daily buildup of extra farm productivity where 0 is none (0+)
+
+        `$farm_yield_alex` is the total built-up extra farm productivity Alex will award pc as money where 0 is none (0+)
+
+        `<<farm_yield change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    farmCatchChance:
+      name: farmCatchChance
+    farmStage4:
+      name: farmStage4
+    farmStage5:
+      name: farmStage5
+    farmStage6:
+      name: farmStage6
+    farmVisitor:
+      name: farmVisitor
+    father:
+      name: father
+    Father:
+      name: Father
+    featExplanation:
+      name: featExplanation
+    featName:
+      name: featName
+    feats:
+      name: feats
+    featSettings:
+      name: featSettings
+    featsList:
+      name: featsList
+    featsMenu:
+      name: featsMenu
+    featsMerge:
+      name: featsMerge
+    featsMergePre:
+      name: featsMergePre
+    featsPointsMenu:
+      name: featsPointsMenu
+    featsPointsMenuButtons:
+      name: featsPointsMenuButtons
+    featsPointsMenuReset:
+      name: featsPointsMenuReset
+    featsTattooOptions:
+      name: featsTattooOptions
+    feet_confront:
+      name: feet_confront
+    feet_hide:
+      name: feet_hide
+    feet_hobble:
+      name: feet_hobble
+    feet_run:
+      name: feet_run
+    feet_stand:
+      name: feet_stand
+    feet_strut:
+      name: feet_strut
+    feet_walk:
+      name: feet_walk
+    feetactionDifficulty:
+      name: feetactionDifficulty
+    feetactionDifficultyMachine:
+      name: feetactionDifficultyMachine
+      tags: ["unused"]
+    feetactionDifficultySelf:
+      name: feetactionDifficultySelf
+      tags: ["unused"]
+    feetactionDifficultyStruggle:
+      name: feetactionDifficultyStruggle
+      tags: ["unused"]
+    feetactionDifficultySwarm:
+      name: feetactionDifficultySwarm
+      tags: ["unused"]
+    feetactionDifficultyTentacle:
+      name: feetactionDifficultyTentacle
+    feetActionInit:
+      name: feetActionInit
+    feetActionInitMachine:
+      name: feetActionInitMachine
+    feetActionInitSelf:
+      name: feetActionInitSelf
+    feetActionInitStruggle:
+      name: feetActionInitStruggle
+    feetActionInitSwarm:
+      name: feetActionInitSwarm
+    feetActionInitTentacle:
+      name: feetActionInitTentacle
+    feetActions:
+      name: feetActions
+    feetactionSetupTentacle:
+      name: feetactionSetupTentacle
+    feetActionsMachine:
+      name: feetActionsMachine
+    feetActionsSelf:
+      name: feetActionsSelf
+    feetActionsStruggle:
+      name: feetActionsStruggle
+    feetActionsSwarm:
+      name: feetActionsSwarm
+    feetActionsTentacle:
+      name: feetActionsTentacle
+    feetdifficulty:
+      description: |-
+        Prints color-coded adjective of feet action difficulty in current combat
+      tags: ["text"]
+    feetejacstat:
+      name: feetejacstat
+    feetgrabnew:
+      name: feetgrabnew
+    feetGrabRub:
+      name: feetGrabRub
+    feetit:
+      description: |-
+        Prints an objective case pronoun (them/it) for worn `"feet"` slot
+      tags: ["text"]
+    feetKick:
+      name: feetKick
+    feeton:
+      name: feeton
+      tags: ["unused"]
+    feetOthervagina:
+      name: feetOthervagina
+    feetruined:
+      description: |-
+        Destroys pc's feet slot clothing, whether worn or carried
+
+        `<<feetruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    feetRunClothed:
+      name: feetRunClothed
+      tags: ["unused"]
+    feetsend:
+      name: feetsend
+      tags: ["unused"]
+    feetshoes:
+      name: feetshoes
+    FeetShop:
+      name: FeetShop
+    feetskill:
+      description: |-
+        Adds feet skill to pc's state
+
+        `$feetskill` is a measure of pc's proficiency using their feet where 0 is awkward (0-1,000)
+
+        `<<feetskill change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    feetskilluse:
+      name: feetskilluse
+    feetsocks:
+      name: feetsocks
+    feetstat:
+      name: feetstat
+    feetsteal:
+      name: feetsteal
+    feetstrip:
+      name: feetstrip
+    feettentacledisable:
+      name: feettentacledisable
+    feettext:
+      description: |-
+        Prints color-coded adjective of active feet skill usage
+      tags: ["text"]
+    feetthat:
+      description: |-
+        Prints plural/singular prose of that (those/that) for worn `"feet"` slot
+      tags: ["unused", "text"]
+    feetundress:
+      name: feetundress
+    feetwear:
+      name: feetwear
+    fertilisefromgroup:
+      name: fertilisefromgroup
+      tags: ["unused"]
+    fertiliseParasites:
+      name: fertiliseParasites
+    fertilityCycles:
+      name: fertilityCycles
+    fetishPregnancyImg:
+      name: fetishPregnancyImg
+    fetishSettings:
+      name: fetishSettings
+    fields_init:
+      name: fields_init
+    filterreveal:
+      name: filterreveal
+    flashbackbeach:
+      name: flashbackbeach
+    flashbackhome:
+      name: flashbackhome
+    flashbackschool:
+      name: flashbackschool
+    flashbacktown:
+      name: flashbacktown
+    flashbackunderground:
+      name: flashbackunderground
+    flashcrotchunderskirt:
+      name: flashcrotchunderskirt
+    flats_alarm_end:
+      name: flats_alarm_end
+    flats_alarm_links:
+      name: flats_alarm_links
+    flats_alarm_time:
+      name: flats_alarm_time
+    flats_auction_end:
+      name: flats_auction_end
+    flats_canal:
+      name: flats_canal
+    flats_canal_defeat:
+      name: flats_canal_defeat
+    flats_canal_run:
+      name: flats_canal_run
+    flats_vents_end:
+      name: flats_vents_end
+      tags: ["unused"]
+    flats_vents_init:
+      name: flats_vents_init
+      tags: ["unused"]
+    flats_vents_links:
+      name: flats_vents_links
+      tags: ["unused"]
+    flaunting:
+      description: |-
+        Prints player opinion of their state based on trauma, stress, and arousal
+
+        Description is without subject and capitalised
+
+        Example:
+        ```
+        <<flaunting>> you make an example of yourself.
+        ```
+      tags: ["text"]
+    flight_effects:
+      name: flight_effects
+    flight_text:
+      description: |-
+        Prints `| Wings` or `| Strong wings` depending on pc's wing strength
+      tags: ["text"]
+    flight_time_check:
+      name: flight_time_check
+    foldout:
+      container: true
+      name: foldout
+    forestBullyLeaves:
+      name: forestBullyLeaves
+    forestCabinReturnLinks:
+      name: forestCabinReturnLinks
+    forestdeeper:
+      name: forestdeeper
+    foresthunt:
+      name: foresthunt
+    forestlessdeep:
+      name: forestlessdeep
+    forestmove:
+      name: forestmove
+    forestRescueFail:
+      name: forestRescueFail
+    forestRescueSetup:
+      name: forestRescueSetup
+    forestsearch:
+      name: forestsearch
+    forestShop-intro:
+      name: forestShop-intro
+    forestShop-leave:
+      name: forestShop-leave
+    forestShop-main:
+      name: forestShop-main
+    forestShop-text:
+      name: forestShop-text
+    forestspider:
+      name: forestspider
+      tags: ["unused"]
+    formatList:
+      name: formatList
+      tags: ["unused"]
+    formatmoney:
+      description: |-
+        Converts amount in pennies to formatted string of currency
+
+        Sets `_printmoney` as output
+
+        `<<formatmoney amountInPennies>>`
+        - **amountInPennies**: `number` - amount in pennies, positive or negative
+      parameters:
+        - "number"
+      tags: ["temp"]
+    fox:
+      description: |-
+        Prints `| Foxboy` or `| Vixen` depending on pc's appearance
+      tags: ["text"]
+    fox_gen:
+      name: fox_gen
+    fox_text:
+      name: fox_text
+    foxnickname:
+      name: foxnickname
+    foxTransform:
+      name: foxTransform
+    friend:
+      description: |-
+        Prints Robin's maximum friendship status with the pc (girlfriend/best friend/friend)
+
+        `<<friend modifier?>>`
+        - **modifier** _optional_: `string` - allowed alternative
+          - `"bff"`: Robin can call pc their best friend
+      parameters:
+        - '|+ "bff"'
+      tags: ["text"]
+    fringecheck:
+      name: fringecheck
+      tags: ["unused"]
+    fringedescription:
+      name: fringedescription
+      tags: ["unused"]
+    fullGroup:
+      description: |-
+        Prints gender makeup of currently active npcs as a list (ie, `Robin, man, and woman`)
+
+        See `<<enumeratedGroup>>` for numbers as well or `<<group>>` for a summary
+
+        `<<fullGroup formatting?>>`
+        - **formatting** _optional_: `string` - formatting to apply
+          - `"cap"`: capitalise output
+      parameters:
+        - '|+ "cap"'
+      tags: ["text"]
+    furnitureCatalogue:
+      name: furnitureCatalogue
+    furnitureDowngrade:
+      name: furnitureDowngrade
+    furnitureLinks:
+      name: furnitureLinks
+    furnitureList:
+      name: furnitureList
+    furnitureUpdate:
+      name: furnitureUpdate
+    furnitureWarning:
+      description: |-
+        Prints `| This will replace your X`
+
+        `<<furnitureWarning type>>`
+        - **type**: `string` - type of furniture being replaced
+          - `"decoration"` | `"windowsill"` | `"wallpaper"` | `"poster"`
+      parameters:
+        - '"decoration"|"windowsill"|"wallpaper"|"poster"'
+      tags: ["unused", "text"]
+    gacceptance:
+      description: |-
+        Prints `| + Acceptance`
+      tags: ["text"]
+    gadeviancy:
+      description: |-
+        Prints `| + Alex's Deviancy`
+      tags: ["unused", "text"]
+    gagged_speech:
+      name: gagged_speech
+    gaggro:
+      description: |-
+        Prints `| + Remy's Encroachment`
+      tags: ["text"]
+    galcohol:
+      description: |-
+        Prints `| + Alcohol`
+      tags: ["text"]
+    gallerySettings:
+      name: gallerySettings
+    gameMode:
+      name: gameMode
+    gameSettings:
+      name: gameSettings
+    gameStartOnly:
+      name: gameStartOnly
+    ganalskill:
+      description: |-
+        Prints `| Anal skill`
+      tags: ["text"]
+    ganginit:
+      name: ganginit
+    gapproval:
+      name: gapproval
+      tags: ["text"]
+    garage:
+      description: |-
+        Prints `| + Rage`
+      tags: ["text"]
+    garousal:
+      description: |-
+        Prints `| + Arousal`
+      tags: ["text"]
+    gaspair:
+      name: gaspair
+    gathletics:
+      description: |-
+        Prints `| + Athletics`
+      tags: ["text"]
+    gattention:
+      description: |-
+        Prints `| + Attention` if more prison attention can be gained today
+
+        `<<gattention type>>`
+        - **type**: `string` - type of attention to check if should be visible
+          - `"prison"`
+      parameters:
+        - '|+ "prison"'
+      tags: ["text"]
+    gawareness:
+      description: |-
+        Prints `| + Awareness` or `| - Innocence`
+      tags: ["text"]
+    gbaton:
+      description: |-
+        Prints `| + Baton proficiency`
+      tags: ["text"]
+    gbeauty:
+      description: |-
+        Prints `| + Beauty`
+      tags: ["unused", "text"]
+    gbirdstockholm:
+      name: gbirdstockholm
+      tags: ["text"]
+    gbodywriting:
+      description: |-
+        Prints `| + Bodywriting`
+      tags: ["text"]
+    gbottomskill:
+      description: |-
+        Prints `| + Ass skill`
+      tags: ["text"]
+    gcamp_concealment:
+      name: gcamp_concealment
+      tags: ["unused", "text"]
+    gchaos:
+      description: |-
+        Prints `| + Chaos`
+      tags: ["text"]
+    gchestskill:
+      description: |-
+        Prints `| + Chest skill`
+      tags: ["text"]
+    gcombatcontrol:
+      description: |-
+        Prints `| + Control`
+      tags: ["text"]
+    gcomprehension:
+      description: |-
+        Prints `| + Comprehension`
+      tags: ["text"]
+    gcondoms:
+      description: |-
+        Gives player and Prints `| + X Condoms`
+
+        `<<gcondoms numberGained?>>`
+        - **numberGained** _optional_: `number` - number of condoms to give player
+          - Defaults to 1
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    gcontrol:
+      description: |-
+        Prints `| + Control`
+      tags: ["text"]
+    gcool:
+      description: |-
+        Prints `| + Status`
+      tags: ["text"]
+    gcorruption:
+      description: |-
+        Prints `| + Corruption`
+      tags: ["text"]
+    gcrime:
+      description: |-
+        Prints `| + Crime X` where X is type of crime
+
+        `<<gcrime type>>`
+        - **type**: `string` - type in setup.crimeNames
+          - %crimeTypesDesc%
+      parameters:
+        - "|+ %crimeTypes%"
+      tags: ["text"]
+    gdanceskill:
+      description: |-
+        Prints `| + Dance skill`
+      tags: ["text"]
+    gdaring:
+      description: |-
+        Prints `| + Daring`
+      tags: ["text"]
+    gdef:
+      description: |-
+        Prints `| + Defiance`
+      tags: ["unused", "text"]
+    gdelinquency:
+      description: |-
+        Prints `| + Delinquency`
+      tags: ["text"]
+    gdom:
+      description: |-
+        Prints `| + Dominance` or `| + NPCName's Dominance` if provided
+
+        `<<gdom NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+          - `"Robin"`: Displays "Confidence" instead
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    gdrugged:
+      description: |-
+        Prints `| + Drugged`
+      tags: ["text"]
+    gencolourpicker:
+      name: gencolourpicker
+    gencolourselector:
+      name: gencolourselector
+    gencoloursquares:
+      name: gencoloursquares
+    gendear:
+      description: |-
+        Prints `| + Endearment`
+      tags: ["text"]
+    gender:
+      name: gender
+    gender_posture:
+      name: gender_posture
+    gendercheck:
+      description: |-
+        Prints error if pc's gender appearance is not `m` or `f`
+      tags: ["text"]
+    genderswap:
+      name: genderswap
+    genderswapPlayer:
+      name: genderswapPlayer
+      tags: ["unused"]
+    generalOn:
+      name: generalOn
+    generalRuined:
+      description: |-
+        Destroy and delete clothing in specified slot
+
+        Relies on `_noRebuy` already being set to determine whether to call `<<generalRuinedRebuy>>`
+
+        `<<generalRuined slot ruinAll?>>`
+        - **slot**: `string` - clothing slot to target
+          - %clothesTypesDesc%
+        - **ruinAll** _optional_: `bool` - ruin all other parts when provided an outfit (truthy)
+          - defaults to `false`
+      parameters:
+        - "%clothesTypes% |+ bool|text|number"
+      tags: ["temp"]
+    generalRuinedRebuy:
+      description: |-
+        Rebuys provided clothing item
+
+        This should be called in the middle of `<<generalRuined>>` before the item has been completely destroyed as it relies on the item still existing
+
+        Part of the larger [Example API hyperlink]
+
+        `<<generalRuinedRebuy slot structure>>`
+        - **slot**: `string` - clothing slot to target
+          - %clothesTypesDesc%
+        - **structure**: `object` - state structure where clothing item is currently located
+          - `$worn` | `$carried`
+      parameters:
+        - "%clothesTypes% &+ var|bareword"
+    generalSend:
+      name: generalSend
+    generalSteal:
+      name: generalSteal
+    generalStoreon:
+      name: generalStoreon
+    generalStrip:
+      name: generalStrip
+    generalUndress:
+      name: generalUndress
+    generalWear:
+      description: |-
+        Applies clothing item to pc's slot
+
+        Does nothing if blocked by cursed items
+
+        `<<generalWear slot itemIndex colour? accessoryColour?>>`
+        - **slot**: `string` - slot to put clothing on
+          - %clothesTypesDesc%
+        - **itemIndex**: `number` - index of clothing item from setup to copy from
+        - **colour** _optional_: `string` - primary colour
+          - `"custom"`: pulls values from `$customColors` object
+          - `text`: valid colour in any format
+        - **accessoryColour** _optional_: `object` - secondary colour
+          - `"custom"`: pulls values from `$customColors` object
+          - `text`: valid colour in any format
+      parameters:
+        - '%clothesTypes% &+ number |+ "custom"|text |+ "custom"|text'
+    generalWearFromWardrobe:
+      name: generalWearFromWardrobe
+    generate_anxious_guard:
+      name: generate_anxious_guard
+    generate_beast_traits:
+      name: generate_beast_traits
+    generate_methodical_guard:
+      name: generate_methodical_guard
+    generate_npc_skills:
+      name: generate_npc_skills
+    generate_npc_traits:
+      name: generate_npc_traits
+    generate_relaxed_guard:
+      name: generate_relaxed_guard
+    generate_scarred_inmate:
+      name: generate_scarred_inmate
+    generate_struggle_creature:
+      name: generate_struggle_creature
+    generate_tattooed_inmate:
+      name: generate_tattooed_inmate
+    generate_veteran_guard:
+      name: generate_veteran_guard
+    generate1:
+      name: generate1
+    generate2:
+      name: generate2
+    generate3:
+      name: generate3
+    generate4:
+      name: generate4
+    generate5:
+      name: generate5
+    generate6:
+      name: generate6
+    generateActionsAbomination:
+      name: generateActionsAbomination
+    generateActionsMachine:
+      name: generateActionsMachine
+    generateActionsMan:
+      name: generateActionsMan
+    generateActionsOmni:
+      name: generateActionsOmni
+    generateActionsStruggle:
+      name: generateActionsStruggle
+    generateActionsSwarm:
+      name: generateActionsSwarm
+    generateActionsTentacle:
+      name: generateActionsTentacle
+    generateActionsVore:
+      name: generateActionsVore
+    generateActionsVorentacles:
+      name: generateActionsVorentacles
+    generateAdultShopCustomer:
+      name: generateAdultShopCustomer
+    generatebear1:
+      name: generatebear1
+      tags: ["unused"]
+    generatebear2:
+      name: generatebear2
+      tags: ["unused"]
+    generatebear3:
+      name: generatebear3
+      tags: ["unused"]
+    generatebear4:
+      name: generatebear4
+      tags: ["unused"]
+    generatebear5:
+      name: generatebear5
+      tags: ["unused"]
+    generatebear6:
+      name: generatebear6
+      tags: ["unused"]
+    generateBEAST:
+      name: generateBEAST
+    generateboar1:
+      name: generateboar1
+      tags: ["unused"]
+    generateboar2:
+      name: generateboar2
+      tags: ["unused"]
+    generateboar3:
+      name: generateboar3
+      tags: ["unused"]
+    generateboar4:
+      name: generateboar4
+      tags: ["unused"]
+    generateboar5:
+      name: generateboar5
+      tags: ["unused"]
+    generateboar6:
+      name: generateboar6
+      tags: ["unused"]
+    generatec1:
+      name: generatec1
+    generatec2:
+      name: generatec2
+    generatec3:
+      name: generatec3
+    generatec4:
+      name: generatec4
+      tags: ["unused"]
+    generatec5:
+      name: generatec5
+      tags: ["unused"]
+    generatec6:
+      name: generatec6
+      tags: ["unused"]
+    generatecat1:
+      name: generatecat1
+      tags: ["unused"]
+    generatecat2:
+      name: generatecat2
+      tags: ["unused"]
+    generatecat3:
+      name: generatecat3
+      tags: ["unused"]
+    generatecat4:
+      name: generatecat4
+      tags: ["unused"]
+    generatecat5:
+      name: generatecat5
+      tags: ["unused"]
+    generatecat6:
+      name: generatecat6
+      tags: ["unused"]
+    generatecf1:
+      name: generatecf1
+      tags: ["unused"]
+    generatecf2:
+      name: generatecf2
+      tags: ["unused"]
+    generatecf3:
+      name: generatecf3
+      tags: ["unused"]
+    generatecf4:
+      name: generatecf4
+      tags: ["unused"]
+    generatecf5:
+      name: generatecf5
+      tags: ["unused"]
+    generatecf6:
+      name: generatecf6
+      tags: ["unused"]
+    generatecm1:
+      name: generatecm1
+      tags: ["unused"]
+    generatecm2:
+      name: generatecm2
+      tags: ["unused"]
+    generatecm3:
+      name: generatecm3
+      tags: ["unused"]
+    generatecm4:
+      name: generatecm4
+      tags: ["unused"]
+    generatecm5:
+      name: generatecm5
+      tags: ["unused"]
+    generatecm6:
+      name: generatecm6
+      tags: ["unused"]
+    generateCombatAction:
+      name: generateCombatAction
+    generateCombatActionList:
+      name: generateCombatActionList
+    generateCombatActionOthers:
+      name: generateCombatActionOthers
+    generateCombatActionOthersList:
+      name: generateCombatActionOthersList
+    generateCombatActionOthersRadio:
+      name: generateCombatActionOthersRadio
+    generateCombatActionRadio:
+      name: generateCombatActionRadio
+    generateCombatActionTentacle:
+      name: generateCombatActionTentacle
+    generateCombatActionTentacleList:
+      name: generateCombatActionTentacleList
+    generateCombatActionTentacleRadio:
+      name: generateCombatActionTentacleRadio
+    generateConfessor:
+      name: generateConfessor
+    generatecreature1:
+      name: generatecreature1
+      tags: ["unused"]
+    generatecreature2:
+      name: generatecreature2
+      tags: ["unused"]
+    generatecreature3:
+      name: generatecreature3
+      tags: ["unused"]
+    generatecreature4:
+      name: generatecreature4
+      tags: ["unused"]
+    generatecreature5:
+      name: generatecreature5
+      tags: ["unused"]
+    generatecreature6:
+      name: generatecreature6
+      tags: ["unused"]
+    generateCultist:
+      name: generateCultist
+    generateDemon:
+      name: generateDemon
+    generateDoctor:
+      name: generateDoctor
+    generatedog1:
+      name: generatedog1
+      tags: ["unused"]
+    generatedog2:
+      name: generatedog2
+      tags: ["unused"]
+    generatedog3:
+      name: generatedog3
+      tags: ["unused"]
+    generatedog4:
+      name: generatedog4
+      tags: ["unused"]
+    generatedog5:
+      name: generatedog5
+      tags: ["unused"]
+    generatedog6:
+      name: generatedog6
+      tags: ["unused"]
+    generatedolphin1:
+      name: generatedolphin1
+      tags: ["unused"]
+    generatedolphin2:
+      name: generatedolphin2
+      tags: ["unused"]
+    generatedolphin3:
+      name: generatedolphin3
+      tags: ["unused"]
+    generatedolphin4:
+      name: generatedolphin4
+      tags: ["unused"]
+    generatedolphin5:
+      name: generatedolphin5
+      tags: ["unused"]
+    generatedolphin6:
+      name: generatedolphin6
+      tags: ["unused"]
+    generatef1:
+      name: generatef1
+    generatef2:
+      name: generatef2
+    generatef3:
+      name: generatef3
+    generatef4:
+      name: generatef4
+    generatef5:
+      name: generatef5
+    generatef6:
+      name: generatef6
+    generatefox1:
+      name: generatefox1
+      tags: ["unused"]
+    generatefox2:
+      name: generatefox2
+      tags: ["unused"]
+    generatefox3:
+      name: generatefox3
+      tags: ["unused"]
+    generatefox4:
+      name: generatefox4
+      tags: ["unused"]
+    generatefox5:
+      name: generatefox5
+      tags: ["unused"]
+    generatefox6:
+      name: generatefox6
+      tags: ["unused"]
+    generateFurnitureShopStock:
+      name: generateFurnitureShopStock
+    generatel:
+      name: generatel
+    generatelizard1:
+      name: generatelizard1
+      tags: ["unused"]
+    generatelizard2:
+      name: generatelizard2
+      tags: ["unused"]
+    generatelizard3:
+      name: generatelizard3
+      tags: ["unused"]
+    generatelizard4:
+      name: generatelizard4
+      tags: ["unused"]
+    generatelizard5:
+      name: generatelizard5
+      tags: ["unused"]
+    generatelizard6:
+      name: generatelizard6
+      tags: ["unused"]
+    generatem1:
+      name: generatem1
+    generatem2:
+      name: generatem2
+    generatem3:
+      name: generatem3
+    generatem4:
+      name: generatem4
+    generatem5:
+      name: generatem5
+    generatem6:
+      name: generatem6
+    generateManager:
+      name: generateManager
+    generateMickey:
+      name: generateMickey
+    generateNewStrapon:
+      name: generateNewStrapon
+    generateNPC:
+      name: generateNPC
+    generateNPCClothes:
+      name: generateNPCClothes
+    generateNPCNameHairAndEyeColors:
+      description: |-
+        Applies canonical hair and eye colour to all unset named NPCs
+
+        If not present, generates random values
+    generateNPCvirginity:
+      name: generateNPCvirginity
+    generatep2:
+      name: generatep2
+    generatep3:
+      name: generatep3
+    generatep4:
+      name: generatep4
+      tags: ["unused"]
+    generatep5:
+      name: generatep5
+      tags: ["unused"]
+    generatep6:
+      name: generatep6
+      tags: ["unused"]
+    generatepenisremark:
+      name: generatepenisremark
+    generatepig1:
+      name: generatepig1
+      tags: ["unused"]
+    generatepig2:
+      name: generatepig2
+      tags: ["unused"]
+    generatepig3:
+      name: generatepig3
+      tags: ["unused"]
+    generatepig4:
+      name: generatepig4
+      tags: ["unused"]
+    generatepig5:
+      name: generatepig5
+      tags: ["unused"]
+    generatepig6:
+      name: generatepig6
+      tags: ["unused"]
+    generatePlant:
+      name: generatePlant
+      tags: ["unused"]
+    generatePlant1:
+      name: generatePlant1
+    generatePlant2:
+      name: generatePlant2
+      tags: ["unused"]
+    generatePlant3:
+      name: generatePlant3
+      tags: ["unused"]
+    generatePlant4:
+      name: generatePlant4
+      tags: ["unused"]
+    generatePlant5:
+      name: generatePlant5
+      tags: ["unused"]
+    generatePlant6:
+      name: generatePlant6
+      tags: ["unused"]
+    generatePolice:
+      name: generatePolice
+    generatePronouns:
+      description: |-
+        Fills NPC object's `pronouns` property based on `pronoun` property
+
+        `<<generatePronouns npcObject>>`
+        - **npcObject**: `object` - NPC to fill
+        - `pronoun` property can be:
+          - `"m"` : he/him...
+          - `"f"` : she/her...
+          - `"i"` : it/it...
+          - `"n"` : one/them...
+          - `"t"` : they/them...
+      parameters:
+        - "var"
+    generateRole:
+      name: generateRole
+    generates1:
+      name: generates1
+    generates2:
+      name: generates2
+    generates3:
+      name: generates3
+    generates4:
+      name: generates4
+    generates5:
+      name: generates5
+    generates6:
+      name: generates6
+    generateSailor:
+      name: generateSailor
+    generateSecurity:
+      name: generateSecurity
+    generatesf1:
+      name: generatesf1
+    generatesf2:
+      name: generatesf2
+    generatesf3:
+      name: generatesf3
+    generatesf4:
+      name: generatesf4
+    generatesf5:
+      name: generatesf5
+    generatesf6:
+      name: generatesf6
+    generateshoppage:
+      name: generateshoppage
+    generateSleepLinks:
+      name: generateSleepLinks
+    generatesm1:
+      name: generatesm1
+    generatesm2:
+      name: generatesm2
+    generatesm3:
+      name: generatesm3
+    generatesm4:
+      name: generatesm4
+    generatesm5:
+      name: generatesm5
+    generatesm6:
+      name: generatesm6
+    generatespider1:
+      name: generatespider1
+      tags: ["unused"]
+    generatespider2:
+      name: generatespider2
+      tags: ["unused"]
+    generatespider3:
+      name: generatespider3
+      tags: ["unused"]
+    generatespider4:
+      name: generatespider4
+      tags: ["unused"]
+    generatespider5:
+      name: generatespider5
+      tags: ["unused"]
+    generatespider6:
+      name: generatespider6
+      tags: ["unused"]
+    generateSweaterWearer:
+      name: generateSweaterWearer
+    generateTemple:
+      name: generateTemple
+    generateTipsList:
+      name: generateTipsList
+    generatev1:
+      name: generatev1
+    generatev2:
+      name: generatev2
+    generatev3:
+      name: generatev3
+    generatev4:
+      name: generatev4
+    generatev5:
+      name: generatev5
+      tags: ["unused"]
+    generatev6:
+      name: generatev6
+      tags: ["unused"]
+    generatewolf1:
+      name: generatewolf1
+      tags: ["unused"]
+    generatewolf2:
+      name: generatewolf2
+      tags: ["unused"]
+    generatewolf3:
+      name: generatewolf3
+      tags: ["unused"]
+    generatewolf4:
+      name: generatewolf4
+      tags: ["unused"]
+    generatewolf5:
+      name: generatewolf5
+      tags: ["unused"]
+    generatewolf6:
+      name: generatewolf6
+      tags: ["unused"]
+    generateWraith:
+      name: generateWraith
+    generatey1:
+      name: generatey1
+    generatey2:
+      name: generatey2
+    generatey3:
+      name: generatey3
+    generatey4:
+      name: generatey4
+    generatey5:
+      name: generatey5
+    generatey6:
+      name: generatey6
+    generateyf1:
+      name: generateyf1
+    generateyf2:
+      name: generateyf2
+    generateyf3:
+      name: generateyf3
+    generateyf4:
+      name: generateyf4
+    generateyf5:
+      name: generateyf5
+    generateyf6:
+      name: generateyf6
+    generateym1:
+      name: generateym1
+    generateym2:
+      name: generateym2
+    generateym3:
+      name: generateym3
+    generateym4:
+      name: generateym4
+    generateym5:
+      name: generateym5
+    generateym6:
+      name: generateym6
+    generateyp2:
+      name: generateyp2
+    generateyp3:
+      name: generateyp3
+    generateyp4:
+      name: generateyp4
+      tags: ["unused"]
+    generateyp5:
+      name: generateyp5
+      tags: ["unused"]
+    generateyp6:
+      name: generateyp6
+      tags: ["unused"]
+    generateyTemple:
+      name: generateyTemple
+    generateyv1:
+      name: generateyv1
+    generateyv2:
+      name: generateyv2
+    generateyv3:
+      name: generateyv3
+    generateyv4:
+      name: generateyv4
+    generateyv5:
+      name: generateyv5
+    generateyv6:
+      name: generateyv6
+    genericCondomEjaculation:
+      name: genericCondomEjaculation
+    genericGenders:
+      name: genericGenders
+    genglish:
+      description: |-
+        Prints `| + English`
+      tags: ["text"]
+    genital_sensitivity:
+      description: |-
+        Changes sensitivity of genitals by provided amount
+
+        `<<genital_sensitivity amount>>`
+        - **amount**: `number` - change to sensitivity
+      parameters:
+        - "number"
+    genitalarousal:
+      deprecatedSuggestions:
+        - <<arousal X "genitals">>
+      description: |-
+        Adds genitals-focused arousal to pc with appropriate modifiers
+
+        `<<genitalarousal change>>`
+        - **change**: `number` - +/- change to apply
+      tags: ["unused"]
+    genitals:
+      name: genitals
+    genitals_are:
+      name: genitals_are
+    genitalsandbreasts:
+      name: genitalsandbreasts
+    genitalsensitivity:
+      name: genitalsensitivity
+    GenitalShop:
+      name: GenitalShop
+      tags: ["unused"]
+    genitalsimg:
+      name: genitalsimg
+    genitalsintegrity:
+      name: genitalsintegrity
+      tags: ["unused"]
+    genitalsplural:
+      description: |-
+        Prints a present indicative (are/is) for the worn `"genitals"` slot
+      tags: ["unused"]
+    genitalsruined:
+      description: |-
+        Destroys pc's genitals slot clothing, whether worn or carried
+
+        `<<genitalsruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    genitalssend:
+      name: genitalssend
+      tags: ["unused"]
+    genitalstate:
+      name: genitalstate
+    genitalsthat:
+      description: |-
+        Prints plural/singular prose of that (those/that) for worn `"genitals"` slot
+      tags: ["unused", "text"]
+    genitalsundress:
+      name: genitalsundress
+      tags: ["unused"]
+    genitalswear:
+      name: genitalswear
+    genitalsword:
+      description: |-
+        Prints an indefinite article (a/an) if needed for worn genitals
+      tags: ["unused", "text"]
+    gentleman:
+      description: |-
+        Prints `man` or `lady` depending on pc's appearance
+
+        See `<<lady>>`
+      tags: ["text"]
+    get_pillory_npc:
+      name: get_pillory_npc
+    getadultshopstate:
+      name: getadultshopstate
+    getCChildBirthDate:
+      name: getCChildBirthDate
+      tags: ["unused"]
+    getCChildConceptionDate:
+      name: getCChildConceptionDate
+      tags: ["unused"]
+    getCChildId:
+      name: getCChildId
+      tags: ["unused"]
+    getChildrenIds:
+      name: getChildrenIds
+    getCNPCEventTimer:
+      name: getCNPCEventTimer
+      tags: ["unused"]
+    getCNPCPregnancyAvoidance:
+      name: getCNPCPregnancyAvoidance
+      tags: ["unused"]
+    getCNPCPregnancyTimer:
+      name: getCNPCPregnancyTimer
+      tags: ["unused"]
+    getCombatDefaultsType:
+      name: getCombatDefaultsType
+    getCombatDefaultsTypeClear:
+      name: getCombatDefaultsTypeClear
+    getDoubleTargetList:
+      name: getDoubleTargetList
+    getfluidsfromgroup:
+      name: getfluidsfromgroup
+    getNNPCClothes:
+      name: getNNPCClothes
+    getPussyTargetList:
+      name: getPussyTargetList
+      tags: ["unused"]
+    getSameBirthChildrenIds:
+      name: getSameBirthChildrenIds
+    getTarget:
+      name: getTarget
+    getTargetList:
+      name: getTargetList
+    getTentacleColour:
+      name: getTentacleColour
+    getUsedChildrenNames:
+      name: getUsedChildrenNames
+      tags: ["unused"]
+    gfabric:
+      description: |-
+        Prints `| + Fabric`
+      tags: ["text"]
+    gfarm:
+      description: |-
+        Prints `| + Farm yield`
+      tags: ["text"]
+    gfeetskill:
+      description: |-
+        Prints `| + Feet skill`
+      tags: ["text"]
+    gferocity:
+      description: |-
+        Adds 1 to wolfpack's ferocity and prints `| + Ferocity`
+
+        `$wolfpackferocity` is a measure of how fearce the wolfpack is where 0 is not at all (0-20)
+
+        See `<<lferocity>>`
+      tags: ["text"]
+    ggadeviancy:
+      description: |-
+        Prints `| + + Alex's Deviancy`
+      tags: ["unused", "text"]
+    ggaggro:
+      description: |-
+        Prints `| + + Remy's Encroachment`
+      tags: ["text"]
+    ggalcohol:
+      description: |-
+        Prints `| + + Alcohol`
+      tags: ["text"]
+    ggapproval:
+      name: ggapproval
+      tags: ["text"]
+    ggarage:
+      description: |-
+        Prints `| + + Rage`
+      tags: ["text"]
+    ggarousal:
+      description: |-
+        Prints `| + + Arousal`
+      tags: ["text"]
+    ggathletics:
+      description: |-
+        Prints `| + + Athletics`
+      tags: ["text"]
+    ggattention:
+      description: |-
+        Prints `| + + Attention` if more prison attention can be gained today
+
+        `<<ggattention type>>`
+        - **type**: `string` - type of attention to check if should be visible
+          - `"prison"`
+      parameters:
+        - '|+ "prison"'
+      tags: ["text"]
+    ggawareness:
+      description: |-
+        Prints `| + + Awareness` or `| - - Innocence`
+      tags: ["text"]
+    ggbaton:
+      description: |-
+        Prints `| + + Baton proficiency`
+      tags: ["unused", "text"]
+    ggbeauty:
+      description: |-
+        Prints `| + + Beauty`
+      tags: ["unused", "text"]
+    ggbodywriting:
+      description: |-
+        Prints `| + + Bodywriting`
+      tags: ["unused", "text"]
+    ggchaos:
+      description: |-
+        Prints `| + + Chaos`
+      tags: ["text"]
+    ggcombatcontrol:
+      description: |-
+        Prints `| + + Control`
+      tags: ["unused", "text"]
+    ggcomprehension:
+      name: ggcomprehension
+      tags: ["text"]
+    ggcontrol:
+      description: |-
+        Prints `| + + Control`
+      tags: ["text"]
+    ggcool:
+      description: |-
+        Prints `| + + Status`
+      tags: ["text"]
+    ggcorruption:
+      description: |-
+        Prints `| + + Corruption`
+      tags: ["text"]
+    ggcrime:
+      description: |-
+        Prints `| + + Crime X` where X is type of crime
+
+        `<<ggcrime type>>`
+        - **type**: `string` - type in setup.crimeNames
+          - %crimeTypesDesc%
+      parameters:
+        - "|+ %crimeTypes%"
+      tags: ["text"]
+    ggdanceskill:
+      description: |-
+        Prints `| + + Dance skill`
+      tags: ["unused", "text"]
+    ggdaring:
+      description: |-
+        Prints `| + + Daring`
+      tags: ["text"]
+    ggdef:
+      description: |-
+        Prints `| + + Defiance`
+      tags: ["unused", "text"]
+    ggdelinquency:
+      description: |-
+        Prints `| + + Delinquency`
+      tags: ["text"]
+    ggdom:
+      description: |-
+        Prints `| + + Dominance` or `| + + NPCName's Dominance` if provided
+
+        `<<ggdom NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+          - `"Robin"`: Displays "Confidence" instead
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    ggdrugged:
+      description: |-
+        Prints `| + + Drugged`
+      tags: ["unused", "text"]
+    ggendear:
+      description: |-
+        Prints `| + + Endearment`
+      tags: ["text"]
+    ggenglish:
+      description: |-
+        Prints `| + + English`
+      tags: ["text"]
+    ggfarm:
+      description: |-
+        Prints `| + + Farm yield`
+      tags: ["text"]
+    gggadeviancy:
+      description: |-
+        Prints `| + + + Alex's Deviancy`
+      tags: ["unused", "text"]
+    gggaggro:
+      description: |-
+        Prints `| + + + Remy's Encroachment`
+      tags: ["unused", "text"]
+    gggalcohol:
+      description: |-
+        Prints `| + + + Alcohol`
+      tags: ["unused", "text"]
+    gggapproval:
+      name: gggapproval
+      tags: ["text"]
+    gggarage:
+      description: |-
+        Prints `| + + + Rage`
+      tags: ["text"]
+    gggarousal:
+      description: |-
+        Prints `| + + Arousal`
+      tags: ["text"]
+    gggathletics:
+      description: |-
+        Prints `| + + + Athletics`
+      tags: ["unused", "text"]
+    gggattention:
+      description: |-
+        Prints `| + + + Attention` if more prison attention can be gained today
+
+        `<<gggattention type>>`
+        - **type**: `string` - type of attention to check if should be visible
+          - `"prison"`
+      parameters:
+        - '|+ "prison"'
+      tags: ["text"]
+    gggawareness:
+      description: |-
+        Prints `| + + + Awareness` or `| - - - Innocence`
+      tags: ["text"]
+    gggbaton:
+      description: |-
+        Prints `| + + + Baton proficiency`
+      tags: ["unused", "text"]
+    gggbeauty:
+      description: |-
+        Prints `| + + + Beauty`
+      tags: ["unused", "text"]
+    gggbodywriting:
+      description: |-
+        Prints `| + + + Bodywriting`
+      tags: ["text"]
+    gggchaos:
+      description: |-
+        Prints `| + + + Chaos`
+      tags: ["text"]
+    gggcombatcontrol:
+      description: |-
+        Prints `| + + + Control`
+      tags: ["unused", "text"]
+    gggcomprehension:
+      name: gggcomprehension
+      tags: ["text"]
+    gggcontrol:
+      description: |-
+        Prints `| + + + Control`
+      tags: ["text"]
+    gggcool:
+      description: |-
+        Prints `| + + + Status`
+      tags: ["text"]
+    gggcorruption:
+      description: |-
+        Prints `| + + + Corruption`
+      tags: ["unused", "text"]
+    gggcrime:
+      description: |-
+        Prints `| + + + Crime X X` where X is type of crime
+
+        `<<gggcrime type>>`
+        - **type**: `string` - type in setup.crimeNames
+          - %crimeTypesDesc%
+      parameters:
+        - "|+ %crimeTypes%"
+      tags: ["text"]
+    gggdanceskill:
+      description: |-
+        Prints `| + + + Dance skill`
+      tags: ["unused", "text"]
+    gggdaring:
+      description: |-
+        Prints `| + + + Daring`
+      tags: ["unused", "text"]
+    gggdef:
+      description: |-
+        Prints `| + + + Defiance`
+      tags: ["unused", "text"]
+    gggdelinquency:
+      description: |-
+        Prints `| + + + Delinquency`
+      tags: ["text"]
+    gggdom:
+      description: |-
+        Prints `| + + + Dominance` or `| + + + NPCName's Dominance` if provided
+
+        `<<gggdom NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+          - `"Robin"`: Displays "Confidence" instead
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    gggdrugged:
+      description: |-
+        Prints `| + + + Drugged`
+      tags: ["text"]
+    gggendear:
+      description: |-
+        Prints `| + + + Endearment`
+      tags: ["text"]
+    gggenglish:
+      description: |-
+        Prints `| + + + English`
+      tags: ["text"]
+    gggfarm:
+      description: |-
+        Prints `| + + + Farm yield`
+      tags: ["text"]
+    ggggrace:
+      description: |-
+        Prints `| + + + Grace` if proper tier is met
+
+        `<<ggggrace tier?>>`
+        - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
+          - `"monk"` | `"priest"` | `"bishop"`
+      parameters:
+        - '|+ "monk"|"priest"|"bishop"'
+      tags: ["text"]
+    ggghallucinogens:
+      description: |-
+        Prints `| + + + Hallucinogens`
+      tags: ["text"]
+    ggghistory:
+      description: |-
+        Prints `| + + + History`
+      tags: ["unused", "text"]
+    ggghope:
+      description: |-
+        Prints `| + + + Hope`
+      tags: ["text"]
+    ggghousekeeping:
+      description: |-
+        Prints `| + + + housekeeping` if below limit
+
+        `<<ggghousekeeping limit?>>`
+        - **limit** _optional_: `number` - maximum housekeeping this task can raise to
+      parameters:
+        - "|+ number"
+      tags: ["unused", "text"]
+    ggghunger:
+      description: |-
+        Prints `| + + + Hunger`
+      tags: ["unused", "text"]
+    gggimpatience:
+      description: |-
+        Prints `| + + + Impatience`
+      tags: ["text"]
+    ggginterest:
+      description: |-
+        Prints `| + + + Interest`
+      tags: ["text"]
+    gggksuspicion:
+      description: |-
+        Prints `| + + + Jealousy`
+      tags: ["text"]
+    ggglewdity:
+      description: |-
+        Prints `| + + + Lewdity`
+      tags: ["unused", "text"]
+    ggglove:
+      description: |-
+        Prints `| + + + Love` or `| + + + NPCName's Love` if provided
+
+        `<<ggglove NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their love
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    ggglust:
+      description: |-
+        Prints `| + + + Lust` or `| + + + NPCName's Lust` if provided
+
+        `<<ggglust NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    gggmaths:
+      description: |-
+        Prints `| + + + Maths`
+      tags: ["text"]
+    gggobey:
+      description: |-
+        Prints `| + + + Obedience`
+      tags: ["text"]
+    gggpain:
+      description: |-
+        Prints `| + + + Pain`
+      tags: ["text"]
+    gggphysique:
+      description: |-
+        Prints `| + + + Physique`
+      tags: ["unused", "text"]
+    gggpound_status:
+      name: gggpound_status
+      tags: ["unused", "text"]
+    gggpurity:
+      description: |-
+        Prints `| + + + Purity`
+      tags: ["text"]
+    gggrace:
+      description: |-
+        Prints `| + + Grace` if proper tier is met
+
+        `<<gggrace tier?>>`
+        - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
+          - `"monk"` | `"priest"` | `"bishop"`
+      parameters:
+        - '|+ "monk"|"priest"|"bishop"'
+      tags: ["text"]
+    gggreadiness:
+      name: gggreadiness
+      tags: ["text"]
+    gggreb:
+      description: |-
+        Prints `| + + + Rebelliousness`
+      tags: ["text"]
+    gggrespect:
+      description: |-
+        Prints `| + + + Respect` if proper tier is met
+
+        `<<gggrace tier?>>`
+        - **tier**: `string` - tier below which respect is changed
+          - `"scum"` | `"mate"`
+      tags: ["text"]
+    gggrtrauma:
+      description: |-
+        Prints `| + + + Robin's Trauma`, unless at max value
+
+        `<<gggrtrauma force?>>`
+        - **force** _optional_: `bool` - prints even if trauma is 20
+      parameters:
+        - "|+ bool"
+      tags: ["unused", "text"]
+    gggsaltiness:
+      description: |-
+        Prints `| + + + Saltiness`
+      tags: ["unused", "text"]
+    gggsarousal:
+      name: gggsarousal
+      tags: ["unused"]
+    gggscience:
+      description: |-
+        Prints `| + + + Science`
+      tags: ["text"]
+    gggsecurity:
+      description: |-
+        Prints `| + + + Security`
+      tags: ["unused", "text"]
+    gggseduction:
+      description: |-
+        Prints `| + + + Seduction`
+      tags: ["unused", "text"]
+    gggshame:
+      description: |-
+        Prints `| + + + Shame`
+      tags: ["unused", "text"]
+    gggskulduggery:
+      description: |-
+        Prints `| + + + Skulduggery`
+      tags: ["unused", "text"]
+    gggslust:
+      description: |-
+        Prints `| + + + Sydney's Lust`
+      tags: ["unused", "text"]
+    gggspain:
+      name: gggspain
+      tags: ["unused"]
+    gggspurity:
+      description: |-
+        Prints `| + + + Sydney's Purity` or `| - - - Sydney's Purity`
+      tags: ["unused", "text"]
+    gggstockholm:
+      description: |-
+        Prints `| + + + Stockholm Syndrome`
+      tags: ["text"]
+    gggstress:
+      description: |-
+        Prints `| + + + Stress`
+      tags: ["text"]
+    gggsuspicion:
+      description: |-
+        Prints `| + + + Suspicion`
+      tags: ["text"]
+    gggswimming:
+      description: |-
+        Prints `| + + + Swimming`
+      tags: ["unused", "text"]
+    gggtanned:
+      description: |-
+        Prints `| + + + Tan`
+      tags: ["text"]
+    gggtending:
+      description: |-
+        Prints `| + + + Tending`
+      tags: ["unused", "text"]
+    gggtiredness:
+      description: |-
+        Prints `| + + + Fatigue`
+      tags: ["text"]
+    gggtrauma:
+      description: |-
+        Prints `| + + + Trauma`
+      tags: ["text"]
+    gggtrust:
+      description: |-
+        Prints `| + + + Trust`
+      tags: ["text"]
+    gggwhip:
+      description: |-
+        Prints `| + + + Whip proficiency`
+      tags: ["unused", "text"]
+    gggwillpower:
+      description: |-
+        Prints `| + + + Willpower`
+      tags: ["text"]
+    gghallucinogens:
+      description: |-
+        Prints `| + + Hallucinogens`
+      tags: ["text"]
+    gghistory:
+      description: |-
+        Prints `| + + History`
+      tags: ["text"]
+    gghope:
+      description: |-
+        Prints `| + + Hope`
+      tags: ["text"]
+    gghousekeeping:
+      description: |-
+        Prints `| + + + housekeeping` if below limit
+
+        `<<gghousekeeping limit?>>`
+        - **limit** _optional_: `number` - maximum housekeeping this task can raise to
+      parameters:
+        - "|+ number"
+      tags: ["unused", "text"]
+    gghunger:
+      description: |-
+        Prints `| + + Hunger`
+      tags: ["unused", "text"]
+    ggimpatience:
+      description: |-
+        Prints `| + + Impatience`
+      tags: ["text"]
+    gginterest:
+      description: |-
+        Prints `| + + Interest`
+      tags: ["text"]
+    ggksuspicion:
+      description: |-
+        Prints `| + + Jealousy`
+      tags: ["text"]
+    gglewdity:
+      description: |-
+        Prints `| + + Lewdity`
+      tags: ["unused", "text"]
+    gglove:
+      description: |-
+        Prints `| + + Love` or `| + + NPCName's Love` if provided
+
+        `<<gglove NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their love
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    gglust:
+      description: |-
+        Prints `| + + Lust` or `| + + NPCName's Lust` if provided
+
+        `<<gglust NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    ggmaths:
+      description: |-
+        Prints `| + + Maths`
+      tags: ["text"]
+    ggobey:
+      description: |-
+        Prints `| + + Obedience`
+      tags: ["text"]
+    ggpain:
+      description: |-
+        Prints `| + + Pain`
+      tags: ["text"]
+    ggphysique:
+      description: |-
+        Prints `| + + Physique`
+      tags: ["text"]
+    ggpound_status:
+      name: ggpound_status
+    ggpurity:
+      description: |-
+        Prints `| + + Purity`
+      tags: ["text"]
+    ggrace:
+      description: |-
+        Prints `| + Grace` if proper tier is met
+
+        `<<ggrace tier?>>`
+        - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
+          - `"monk"` | `"priest"` | `"bishop"`
+      parameters:
+        - '|+ "monk"|"priest"|"bishop"'
+      tags: ["text"]
+    ggreadiness:
+      name: ggreadiness
+    ggreb:
+      description: |-
+        Prints `| + + Rebelliousness`
+      tags: ["text"]
+    ggrespect:
+      description: |-
+        Prints `| + + Respect` if proper tier is met
+
+        `<<gggrace tier?>>`
+        - **tier**: `string` - tier below which respect is changed
+          - `"scum"` | `"mate"`
+      tags: ["text"]
+    ggrtrauma:
+      description: |-
+        Prints `| + + Robin's Trauma`, unless at max value
+
+        `<<ggrtrauma force?>>`
+        - **force** _optional_: `bool` - prints even if trauma is 20
+      parameters:
+        - "|+ bool"
+      tags: ["unused", "text"]
+    ggsaltiness:
+      description: |-
+        Prints `| + + Saltiness`
+      tags: ["unused", "text"]
+    ggsarousal:
+      name: ggsarousal
+      tags: ["unused"]
+    ggscience:
+      description: |-
+        Prints `| + + Science`
+      tags: ["text"]
+    ggsecurity:
+      description: |-
+        Prints `| + + Security`
+      tags: ["text"]
+    ggseduction:
+      description: |-
+        Prints `| + + Seduction`
+      tags: ["unused", "text"]
+    ggshame:
+      description: |-
+        Prints `| + + Shame`
+      tags: ["unused", "text"]
+    ggskulduggery:
+      description: |-
+        Prints `| + + Skulduggery`
+      tags: ["unused", "text"]
+    ggslust:
+      description: |-
+        Prints `| + + Sydney's Lust`
+      tags: ["text"]
+    ggspain:
+      name: ggspain
+    ggspurity:
+      description: |-
+        Prints `| + + Sydney's Purity` or `| - - Sydney's Purity`
+      tags: ["text"]
+    ggstockholm:
+      description: |-
+        Prints `| + + Stockholm Syndrome`
+      tags: ["text"]
+    ggstress:
+      description: |-
+        Prints `| + + Stress`
+      tags: ["text"]
+    ggsuspicion:
+      description: |-
+        Prints `| + + Suspicion`
+      tags: ["text"]
+    ggswimming:
+      description: |-
+        Prints `| + + Swimming`
+      tags: ["unused", "text"]
+    ggtanned:
+      description: |-
+        Prints `| + + Tan`
+      tags: ["text"]
+    ggtending:
+      description: |-
+        Prints `| + + Tending`
+      tags: ["text"]
+    ggtiredness:
+      description: |-
+        Prints `| + + Fatigue`
+      tags: ["text"]
+    ggtrauma:
+      description: |-
+        Prints `| + + Trauma`
+      tags: ["text"]
+    ggtrust:
+      description: |-
+        Prints `| + + Trust`
+      tags: ["unused", "text"]
+    ggwalnut:
+      name: ggwalnut
+    ggwhip:
+      description: |-
+        Prints `| + + Whip proficiency`
+      tags: ["unused", "text"]
+    ggwillpower:
+      description: |-
+        Prints `| + + Willpower`
+      tags: ["text"]
+    ghallucinogens:
+      description: |-
+        Prints `| + Hallucinogens`
+      tags: ["text"]
+    ghandskill:
+      description: |-
+        Prints `| + Hand skill`
+    gharass:
+      description: |-
+        Prints `| Increases chance of harassment`
+      tags: ["text"]
+    gharmony:
+      description: |-
+        Adds 1 to wolfpack's harmony and prints `| + Harmony`
+
+        `$wolfpackharmony` is a measure of how harmonious the wolfpack is where 0 is not at all (0-20)
+
+        See `<<lharmony>>`
+      tags: ["text"]
+    ghistory:
+      description: |-
+        Prints `| + History`
+      tags: ["text"]
+    ghope:
+      description: |-
+        Prints `| + Hope`
+      tags: ["text"]
+    ghousekeeping:
+      description: |-
+        Prints `| + housekeeping` or `You're too skilled for this to improve your housekeeping.` if below limit
+
+        `<<ghousekeeping limit?>>`
+        - **limit** _optional_: `number` - maximum housekeeping this task can raise to
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    ghunger:
+      description: |-
+        Prints `| + Hunger`
+      tags: ["unused", "text"]
+    giftSexToys:
+      name: giftSexToys
+    gimpatience:
+      description: |-
+        Prints `| + Impatience`
+      tags: ["text"]
+    ginsecurity:
+      description: |-
+        Prints `| + Insecurity` if acceptance hasn't been reached for specified part
+
+        `<<ginsecurity part>>`
+        - **paramNumber1**: `string` - part to gain insecurity in
+          - %insecurityTypesDesc%
+      parameters:
+        - "%insecurityTypes%"
+      tags: ["text"]
+    ginterest:
+      description: |-
+        Prints `| + Interest`
+      tags: ["text"]
+    girl:
+      name: girl
+    girlfriend:
+      name: girlfriend
+    girls:
+      name: girls
+    gisland_tide:
+      name: gisland_tide
+    giveNNPCnewstrapon:
+      name: giveNNPCnewstrapon
+    giveNPCCondom:
+      name: giveNPCCondom
+    giveNPCsextoy:
+      name: giveNPCsextoy
+    givestartclothing:
+      name: givestartclothing
+    gknowledge:
+      description: |-
+        Prints `| + Knowledge`
+      tags: ["text"]
+    gksuspicion:
+      description: |-
+        Prints `| + Jealousy`
+      tags: ["text"]
+    glans:
+      description: |-
+        Prints noun describing part of pc's penis depending on if in use
+      tags: ["text"]
+    glewdity:
+      description: |-
+        Prints `| + Lewdity`
+      tags: ["text"]
+    glove:
+      description: |-
+        Prints `| + Love` or `| + NPCName's Love` if provided
+
+        `<<glove NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their love
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    glust:
+      description: |-
+        Prints `| + Lust` or `| + NPCName's Lust` if provided
+
+        `<<glust NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    gmaths:
+      description: |-
+        Prints `| + Maths`
+      tags: ["text"]
+    gmystery:
+      description: |-
+        Prints `| + ????`
+      tags: ["text"]
+    gnet:
+      description: |-
+        Prints `| + Net proficiency`
+      tags: ["text"]
+    gobey:
+      description: |-
+        Prints `| + Obedience`
+      tags: ["text"]
+    gobsession:
+      name: gobsession
+    goo:
+      name: goo
+    goocount:
+      name: goocount
+    goralskill:
+      description: |-
+        Prints `| + Oral skill`
+      tags: ["text"]
+    goxygen:
+      description: |-
+        Prints `| + Air`
+      tags: ["unused", "text"]
+    gpain:
+      description: |-
+        Prints `| + Pain`
+      tags: ["text"]
+    gpenileskill:
+      description: |-
+        Prints `| + Penile skill`
+      tags: ["unused", "text"]
+    gpenisacceptance:
+      description: |-
+        Adds acceptance to pc's state for appropriate penis size
+
+        `<<gpenisacceptance change>>`
+        - **change**: `number` - + change to apply
+      parameters:
+        - "number"
+    gphysique:
+      description: |-
+        Prints `| + Physique`
+      tags: ["text"]
+    gpound_status:
+      name: gpound_status
+    gpurity:
+      description: |-
+        Prints `| + Purity`
+      tags: ["text"]
+    gpursuit:
+      name: gpursuit
+    grace:
+      description: |-
+        Adds grace to pc's state
+
+        `$grace` is a measure of the church's endorsement of pc where -100 is against, and 0 is neutral (-100-100)
+
+        `<<grace change tier?>>`
+        - **change**: `number` - +/- change to apply
+        - **tier** _optional_: `string` - rank source, pc ranks equal or above this will not change grace
+          - `"monk"` | `"priest"` | `"bishop"`
+          - Defaults to any rank
+      parameters:
+        - 'number |+ "monk"|"priest"|"bishop"'
+    greadiness:
+      name: greadiness
+    greb:
+      description: |-
+        Prints `| + Rebelliousness`
+      tags: ["text"]
+    grespect:
+      description: |-
+        Prints `| + Respect` if proper tier is met
+
+        `<<gggrace tier?>>`
+        - **tier**: `string` - tier below which respect is changed
+          - `"scum"` | `"mate"`
+      tags: ["text"]
+    groin:
+      description: |-
+        Prints genitals description through physically accessible clothing layers
+      tags: ["text"]
+    group:
+      description: |-
+        Prints summarised gender makeup of currently active npcs (ie, `men and women`)
+
+        See `<<enumeratedGroup>>` for numbers as well or `<<fullGroup>>` for a list
+      tags: ["text"]
+    grtrauma:
+      description: |-
+        Prints `| + Robin's Trauma`, unless at max value
+
+        `<<grtrauma force?>>`
+        - **force** _optional_: `bool` - prints even if trauma is 20
+      parameters:
+        - "|+ bool"
+      tags: ["unused", "text"]
+    gsaltiness:
+      description: |-
+        Prints `| + Saltiness`
+      tags: ["unused", "text"]
+    gsarousal:
+      name: gsarousal
+    gschool:
+      description: |-
+        Prints `| + School`
+      tags: ["text"]
+    gscience:
+      description: |-
+        Prints `| + Science`
+      tags: ["text"]
+    gsecurity:
+      description: |-
+        Prints `| + Security`
+      tags: ["text"]
+    gseduction:
+      description: |-
+        Prints `| + Seduction`
+      tags: ["unused", "text"]
+    gshame:
+      description: |-
+        Prints `| + Shame`
+      tags: ["unused", "text"]
+    gskulduggery:
+      description: |-
+        Prints `| + Skulduggery`
+      tags: ["text"]
+    gslust:
+      description: |-
+        Prints `| + Sydney's Lust`
+      tags: ["text"]
+    gspain:
+      name: gspain
+    gspray:
+      description: |-
+        Prints `| + 1 pepper spray`
+      tags: ["text"]
+    gspraymax:
+      description: |-
+        Prints `| + 1 pepper spray capacity`
+      tags: ["text"]
+    gspurity:
+      description: |-
+        Prints `| + Sydney's Purity` or `| - Sydney's Purity`
+      tags: ["text"]
+    gstockholm:
+      description: |-
+        Prints `| + Stockholm Syndrome`
+      tags: ["text"]
+    gstray_happiness:
+      name: gstray_happiness
+    gstress:
+      description: |-
+        Prints `| + Stress`
+      tags: ["text"]
+    gsuspicion:
+      description: |-
+        Prints `| + Suspicion`
+      tags: ["text"]
+    gswimming:
+      description: |-
+        Prints `| + Swimming`
+      tags: ["text"]
+    gsydneytoy:
+      description: |-
+        This widget examples all over the place
+
+        `<<gsydneytoy toyName>>`
+        - **toyName**: `string` - complete toy name
+          - `"dildo"` | `"length of anal beads"` | `"riding crop"` | `"flog"`
+      parameters:
+        - '"dildo"|"length of anal beads"|"riding crop"|"flog"'
+    gtanned:
+      description: |-
+        Prints `| + Tan`
+      tags: ["text"]
+    gtending:
+      description: |-
+        Prints `| + Tending`
+      tags: ["text"]
+    gthighskill:
+      description: |-
+        Prints `| + Thigh skill`
+      tags: ["text"]
+    gtiredness:
+      description: |-
+        Prints `| + Fatigue`
+      tags: ["text"]
+    gtorch:
+      name: gtorch
+    gtrauma:
+      description: |-
+        Prints `| + Trauma`
+      tags: ["text"]
+    gtreasure:
+      description: |-
+        Prints `| Increases chance of finding treasure`
+      tags: ["text"]
+    gtrust:
+      description: |-
+        Prints `| + Trust`
+      tags: ["text"]
+    guard_skill_text:
+      name: guard_skill_text
+    guard_terms:
+      name: guard_terms
+    gvaginalskill:
+      description: |-
+        Prints `| + Vaginal skill`
+      tags: ["unused", "text"]
+    gwalnut:
+      name: gwalnut
+    gwhip:
+      description: |-
+        Prints `| + Whip proficiency`
+      tags: ["text"]
+    gwillpower:
+      description: |-
+        Prints `| + Willpower`
+      tags: ["text"]
+    gwood:
+      name: gwood
+    gwylanForestRescue:
+      name: gwylanForestRescue
+    gwylanitem:
+      name: gwylanitem
+      tags: ["unused"]
+    gwylanRescueApology:
+      name: gwylanRescueApology
+    gwylanRescueApologyShop:
+      name: gwylanRescueApologyShop
+    gwylanRescueApologySpeech:
+      name: gwylanRescueApologySpeech
+    gwylanRescueFail:
+      name: gwylanRescueFail
+    hair_data:
+      name: hair_data
+    haircheck:
+      name: haircheck
+      tags: ["unused"]
+    haircolourtext:
+      description: |-
+        Prints colour of `$haircolour` or `two-toned`
+    hairDescription:
+      name: hairDescription
+    hairDressersOptions:
+      name: hairDressersOptions
+    hairDressersOptionsSydney:
+      name: hairDressersOptionsSydney
+    hairdressersPricelist:
+      name: hairdressersPricelist
+    hairdressersReset:
+      name: hairdressersReset
+    hairdressersResetAlt:
+      name: hairdressersResetAlt
+    hairdressersSession:
+      name: hairdressersSession
+    hairejacstat:
+      name: hairejacstat
+    hairfringecolourtext:
+      description: |-
+        Prints colour of `$hairfringecolour` or `two-toned`
+    hairgelApply:
+      name: hairgelApply
+    hairgelDesc:
+      name: hairgelDesc
+    hairgelLinks:
+      name: hairgelLinks
+    hairmapcolourtext:
+      description: |-
+        Prints colour corresponding to `setup.colours.hair_map`
+
+        Fallback behaviour changes if `_colour` is not set
+
+        `<<hairmapcolourtext colour>>`
+        - **colour**: `string` - colour to print
+          - `valid key` : name of colour in hair_map
+          - `text` : parameter is now fallback if `_colour` is not set
+      parameters:
+        - "text"
+      tags: ["temp"]
+    halloweenkylar:
+      name: halloweenkylar
+    halloweenwhitney:
+      name: halloweenwhitney
+    hallucinogen:
+      description: |-
+        Adds hallucinogenic drugs to pc's system
+
+        `$hallucinogen` is a measure of hallucinogenic drugs in pc's system where 0 is none (0-1,000)
+
+        `<<hallucinogen change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    hallucinogencaption:
+      name: hallucinogencaption
+    hand_gag:
+      name: hand_gag
+    hand_section:
+      name: hand_section
+    hand_section_two:
+      name: hand_section_two
+    handdifficulty:
+      description: |-
+        Prints color-coded adjective of hand action difficulty in current combat
+      tags: ["text"]
+    handejacstat:
+      name: handejacstat
+    handheldon:
+      name: handheldon
+    handheldruined:
+      name: handheldruined
+    HandheldShop:
+      name: HandheldShop
+    handheldstrip:
+      name: handheldstrip
+    handheldundress:
+      name: handheldundress
+    handheldwear:
+      name: handheldwear
+    handholdingvirginitywarning:
+      description: |-
+        Prints `This action will take your handholding virginity.` if handholding virginity can still be lost
+
+        Takes combat state into account to display starting pipe `| `
+      tags: ["text"]
+    handsActionsStruggleColumnRadio:
+      name: handsActionsStruggleColumnRadio
+    handsActionsStruggleRadio:
+      name: handsActionsStruggleRadio
+    handsActionsStruggleRadiobkp:
+      name: handsActionsStruggleRadiobkp
+      tags: ["unused"]
+    handsimg:
+      name: handsimg
+    handsit:
+      description: |-
+        Prints an objective case pronoun (them/it) for worn `"hand"` slot
+    handskill:
+      description: |-
+        Adds hand skill to pc's state
+
+        `$handskill` is a measure of pc's proficiency using their hands where 0 is awkward (0-1,000)
+
+        `<<handskill change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    handskilluse:
+      name: handskilluse
+    handson:
+      name: handson
+      tags: ["unused"]
+    handsruined:
+      description: |-
+        Destroys pc's hands slot clothing, whether worn or carried
+
+        `<<handsruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    handssend:
+      name: handssend
+      tags: ["unused"]
+    HandsShop:
+      name: HandsShop
+    handssteal:
+      name: handssteal
+      tags: ["unused"]
+    handsstrip:
+      name: handsstrip
+    handsstrugglefreebodypart:
+      name: handsstrugglefreebodypart
+    handstat:
+      name: handstat
+    handsthat:
+      description: |-
+        Prints plural/singular prose of that (those/that) for worn `"hands"` slot
+      tags: ["unused"]
+    handsundress:
+      name: handsundress
+    handswear:
+      name: handswear
+    handtext:
+      description: |-
+        Prints colour-coded adjective of active hand skill usage
+      tags: ["text"]
+    harper_intro:
+      name: harper_intro
+    harpy:
+      description: |-
+        Prints `| Harpy` or `| Bird` based on pc's hallucination state and bestiality toggle
+      tags: ["text"]
+    harpyTransform:
+      name: harpyTransform
+    harvest:
+      name: harvest
+    harvesteventend:
+      name: harvesteventend
+    harvestexposed:
+      name: harvestexposed
+      tags: ["unused"]
+    harvestquick:
+      name: harvestquick
+    has:
+      description: |-
+        Prints plural/singular prose of has (have/has) for provided clothing slot
+
+        `<<has slot>>`
+        - **slot**: `string` - category of worn clothing to check
+          - %clothesTypesDesc%
+      parameters:
+        - "%clothesTypes%"
+    hawkText:
+      name: hawkText
+    he:
+      description: |-
+        Prints singular pronoun of current npc (he/she/they)
+
+        See `<<He>>` for start of sentence introduction or `<<He_Short>>` for exact equivalent, just capitalised
+
+        Does not `<<personselect>>` to provided npc or behave like `<<He>>` for unnamed npcs. Consider refactoring to not personselect but allow unnamed
+
+        `<<he namedNPC?>>`
+        - **namedNPC** _optional_: `string` - name of npc to override pronoun for
+          - %namedNPCDesc%
+      parameters:
+        - "|+ %namedNPC%"
+      tags: ["text", "refactor"]
+    He:
+      description: |-
+        Prints capitalised singular pronoun of current npc (He/She/They), with full npc introduction if it is appropriate
+
+        See `<<he>>` for un-capitalised version or `<<He_Short>>` for no risk of full npc introduction
+
+        Does not `<<personselect>>` to provided unnamed npc. Consider refactoring to not personselect but allow unnamed
+
+        `<<He npcOverride?>>`
+        - **npcOverride** _optional_: `string|number` - npc to override pronoun for
+          - %namedNPCDesc%: Sets pronoun and outputs
+          - `number`: Switches selected npc to zero-based index and outputs
+      parameters:
+        - "|+ %namedNPC%|number"
+      tags: ["text", "refactor"]
+    He_Short:
+      description: |-
+        Prints capitalised singular pronoun of current npc (He/She/They)
+
+        See `<<he>>` for un-capitalised version or `<<He>>` for full npc introduction
+
+        Does not use arguments like `<<He>>` or `<<he>>`. Consider refactoring to match
+      parameters:
+        - ""
+      tags: ["text"]
+    head_down:
+      name: head_down
+    head_turn:
+      name: head_turn
+    head_up:
+      name: head_up
+    headbind:
+      name: headbind
+    headon:
+      name: headon
+      tags: ["unused"]
+    headruined:
+      description: |-
+        Destroys pc's head slot clothing, whether worn or carried
+
+        `<<headruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    headsend:
+      name: headsend
+      tags: ["unused"]
+    HeadShop:
+      name: HeadShop
+    headsteal:
+      name: headsteal
+      tags: ["unused"]
+    headstrip:
+      name: headstrip
+    headundress:
+      name: headundress
+    headwear:
+      name: headwear
+    heat:
+      description: |-
+        Prints `| Heat`
+      tags: ["text"]
+    heatRutDisplay:
+      name: heatRutDisplay
+    heelsUpdate:
+      name: heelsUpdate
+    heldSexToy:
+      name: heldSexToy
+    hers:
+      name: hers
+    Hers:
+      name: Hers
+      tags: ["unused"]
+    hes:
+      name: hes
+    Hes:
+      name: Hes
+    hideDisplay:
+      name: hideDisplay
+    hidelayer:
+      description: |-
+        Hide layer
+
+        [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
+
+        `<<hidelayer layerName>>`
+        - **layerName**: `string` - layer name corresponding to #CanvasModel.layer
+      parameters:
+        - text
+      tags: ["unused"]
+    hideTransformations:
+      description: |-
+        Use to temporarily hide all transformation parts
+
+        Stores the hidden transformation data into `$saveTransformations`
+
+        Use `<<showTransformations>>` to restore the parts this widget hid
+      tags: ["unused"]
+    high:
+      name: high
+    higheventend:
+      name: higheventend
+    highexposed:
+      name: highexposed
+      tags: ["unused"]
+    highLowCalculate:
+      name: highLowCalculate
+      tags: ["unused"]
+    highLowControls:
+      name: highLowControls
+      tags: ["unused"]
+    highLowEnd:
+      name: highLowEnd
+      tags: ["unused"]
+    highLowStart:
+      name: highLowStart
+      tags: ["unused"]
+    highquick:
+      name: highquick
+    him:
+      name: him
+    Him:
+      name: Him
+    himself:
+      description: |-
+        Prints singular reflexive pronoun for active npc
+
+        See `<<nnpc_himself>>` for alternative use or `<<bhimself>>` for beasts
+
+        Does not `<<personselect>>` to provided npc or behave like `<<He>>` for unnamed npcs. Consider refactoring to not personselect but allow unnamed
+
+        `<<himself namedNPC?>>`
+        - **namedNPC** _optional_: `string` - name of npc to override pronoun for
+          - %namedNPCDesc%
+      parameters:
+        - "|+ %namedNPC%"
+      tags: ["text", "refactor"]
+    hirsuteHideCheck:
+      name: hirsuteHideCheck
+    his:
+      description: |-
+        Prints singular possessive pronoun of current npc (his/her/their)
+
+        See `<<His>>` for capitalised prose
+
+        Does not `<<personselect>>` to provided npc or behave like `<<He>>` for unnamed npcs. Consider refactoring to not personselect but allow unnamed
+
+        `<<His namedNPC?>>`
+        - **namedNPC** _optional_: `string` - name of npc to override pronoun for
+          - %namedNPCDesc%
+      parameters:
+        - "|+ %namedNPC%"
+      tags: ["text", "refactor"]
+    His:
+      description: |-
+        Prints capitalised singular possessive pronoun of current npc (His/Her/Their)
+
+        See `<<his>>` for un-capitalised prose
+
+        Does not `<<personselect>>` to provided npc or behave like `<<He>>` for unnamed npcs. Consider refactoring to not personselect but allow unnamed
+
+        `<<His namedNPC?>>`
+        - **namedNPC** _optional_: `string` - name of npc to override pronoun for
+          - %namedNPCDesc%
+      parameters:
+        - "|+ %namedNPC%"
+      tags: ["text", "refactor"]
+    his1:
+      description: |-
+        Prints singular possessive pronoun after switching active npc to first npc (`NPCList[0]`)
+
+        One-indexed for legacy support. Eligible for deprecation.
+      tags: ["unused", "text"]
+    his2:
+      description: |-
+        Prints singular possessive pronoun after switching active npc to second npc (`NPCList[1]`)
+
+        One-indexed for legacy support. Eligible for deprecation.
+      tags: ["unused", "text"]
+    his3:
+      description: |-
+        Prints singular possessive pronoun after switching active npc to third npc (`NPCList[2]`)
+
+        One-indexed for legacy support. Eligible for deprecation.
+      tags: ["unused", "text"]
+    his4:
+      description: |-
+        Prints singular possessive pronoun after switching active npc to fourth npc (`NPCList[3]`)
+
+        One-indexed for legacy support. Eligible for deprecation.
+      tags: ["unused", "text"]
+    his5:
+      description: |-
+        Prints singular possessive pronoun after switching active npc to fifth npc (`NPCList[4]`)
+
+        One-indexed for legacy support. Eligible for deprecation.
+      tags: ["unused", "text"]
+    his6:
+      description: |-
+        Prints singular possessive pronoun after switching active npc to sixth npc (`NPCList[5]`)
+
+        One-indexed for legacy support. Eligible for deprecation.
+      tags: ["unused", "text"]
+    hisselect:
+      description: |-
+        Prints singular possessive pronoun after switching active npc (his/her/their)
+
+        `<<hisselect npcIndex>>`
+        - **npcIndex**: `number` - zero-based index of active npcs
+      parameters:
+        - "number"
+      tags: ["text"]
+    history_skill_up_text:
+      name: history_skill_up_text
+    historyrequired:
+      name: historyrequired
+      tags: ["unused"]
+    historyskill:
+      name: historyskill
+    hitchhike:
+      name: hitchhike
+    hitchhike_journey:
+      name: hitchhike_journey
+    hitchhike_journey_nude:
+      name: hitchhike_journey_nude
+    hitstat:
+      name: hitstat
+    home_effects:
+      name: home_effects
+    home_outside:
+      name: home_outside
+    homeBabyIntro:
+      name: homeBabyIntro
+    homeevent:
+      name: homeevent
+    homeeventalex:
+      name: homeeventalex
+    homeeventchef:
+      name: homeeventchef
+    homeeventhopehi:
+      name: homeeventhopehi
+    homeeventhopelo:
+      name: homeeventhopelo
+    homeeventkylar:
+      name: homeeventkylar
+    homeeventnorm:
+      name: homeeventnorm
+    homeeventpond:
+      name: homeeventpond
+    homeeventrebhi:
+      name: homeeventrebhi
+    homeeventreblo:
+      name: homeeventreblo
+    homeeventriver:
+      name: homeeventriver
+    homeeventwhitney:
+      name: homeeventwhitney
+    homeStudyOptions:
+      name: homeStudyOptions
+    hookah_init:
+      name: hookah_init
+    hookah_juice:
+      name: hookah_juice
+    hookah_master:
+      name: hookah_master
+    hope:
+      description: |-
+        Adds hope to orphanage
+
+        `$orphan_hope` is measure of hope levels in orphanage where negative is no hope and 0 is neutral (-50-50)
+
+        `<<hope change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    horsegenitalsdesc:
+      description: |-
+        Prints adjective describing active horse's genital state
+
+        `<<horsegenitalsdesc size?>>`
+        - **size** _optional_: `bool` - print size adjective instead of state (truthy)
+      parameters:
+        - "|+ bool|var|bareword"
+    hospitalparasite:
+      name: hospitalparasite
+    housekeeping:
+      name: housekeeping
+    housekeeping_text:
+      description: |-
+        Prints colour-coded description of how good the player is at housekeeping
+      tags: ["unused", "text"]
+    housekeepingdifficulty:
+      name: housekeepingdifficulty
+    housekeepingtext:
+      description: |-
+        Prints colour-coded adjective of active housekeeping skill usage
+      tags: ["unused", "text"]
+    humanChildActivity:
+      name: humanChildActivity
+    humanChildActivityNoToy:
+      name: humanChildActivityNoToy
+    humanSettings:
+      name: humanSettings
+    humanSplitBy:
+      name: humanSplitBy
+    humanSplitByFull:
+      name: humanSplitByFull
+    hunger:
+      name: hunger
+    hunger_description:
+      name: hunger_description
+    hygiene:
+      name: hygiene
+      tags: ["unused"]
+    hypnotised:
+      name: hypnotised
+    icon:
+      description: |-
+        Prints icon image from icon folder
+
+        `<<icon imagePath ...additionalClass?>>`
+        - **imagePath**: `string` - path to image file including extension relative to icon folder
+        - ...**whitespaceOption** _optional_: `string` - trim whitespace character at end of output
+          - `"nowhitespace"`: no trailing whitespace for formatting
+          - `"infront"`: layer icon in front of next icon
+      parameters:
+        - text |+ ...("nowhitespace"|"infront")
+      tags: ["img"]
+    imgOpacity:
+      name: imgOpacity
+    importConfirmDetails:
+      name: importConfirmDetails
+    importDetailsDisplay:
+      description: |-
+        Validate and imports preset object into state
+
+        `<<importDetailsDisplay presetObject>>`
+        - **presetObject**: `object` - object to be imported
+      parameters:
+        - bareword|var
+    impregnateParasite:
+      name: impregnateParasite
+    imprison_leighton:
+      name: imprison_leighton
+    imprison_npc:
+      name: imprison_npc
+      tags: ["unused"]
+    imprison_whitney:
+      name: imprison_whitney
+    incggpenisinsecurity:
+      description: |-
+        Adds double amount of default penis insecurity to the player and prints stat change
+      tags: ["text"]
+    incgpenisinsecurity:
+      description: |-
+        Adds penis insecurity to the player and prints stat change
+
+        `<<incgpenisinsecurity change?>>`
+        - **change** _optional_: `number` - + change to apply
+          - Defaults to `10`
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    incompletePregnancy:
+      name: incompletePregnancy
+    incrementautosave:
+      name: incrementautosave
+      tags: ["unused"]
+    industrial:
+      name: industrial
+    industrialdrain:
+      name: industrialdrain
+    industrialdraineventend:
+      name: industrialdraineventend
+    industrialdrainlinks:
+      name: industrialdrainlinks
+    industrialdrainquick:
+      name: industrialdrainquick
+    industrialeventend:
+      name: industrialeventend
+    industrialex1:
+      name: industrialex1
+    industrialex2:
+      name: industrialex2
+    industrialex3:
+      name: industrialex3
+    industrialexposed:
+      name: industrialexposed
+      tags: ["unused"]
+    industrialquick:
+      name: industrialquick
+    infirmary_excused:
+      name: infirmary_excused
+    init_bodywriting_objects:
+      name: init_bodywriting_objects
+    init_hairfringe:
+      name: init_hairfringe
+    init_hairsides:
+      name: init_hairsides
+    init_locations:
+      name: init_locations
+    init_names:
+      name: init_names
+    init_npc_clothes:
+      name: init_npc_clothes
+    init_plant_objects:
+      name: init_plant_objects
+    init_tips:
+      name: init_tips
+    initAllNNPCVirginities:
+      description: |-
+        Sets all named NPC to canonical starting virginities
+    initEstatePersistent:
+      name: initEstatePersistent
+    initNNPCClothes:
+      name: initNNPCClothes
+    initNNPCstrapon:
+      name: initNNPCstrapon
+    initNNPCVirginity:
+      description: |-
+        Sets named NPC to canonical starting virginity
+
+        `<<initNNPCVirginity namedNPCIndex>>`
+        - **namedNPCIndex**: `number` - zero-based index of named NPC to be init'd
+      parameters:
+        - number
+    initnpc:
+      name: initnpc
+    initnpcgender:
+      name: initnpcgender
+    initnpcgendersingle:
+      name: initnpcgendersingle
+    initnpcskin:
+      name: initnpcskin
+    initnpcskinsingle:
+      name: initnpcskinsingle
+    initsettings:
+      name: initsettings
+    inittemple:
+      name: inittemple
+    initWraith:
+      name: initWraith
+    innocencecaption:
+      name: innocencecaption
+    insecurity:
+      description: |-
+        Adds insecurity to pc's state concerning specific part and applies effects
+
+        `$insecurity_X` are measures of insecure pc is towards specific traumas where 0 is not insecure (0-1,000)
+
+        `<<insecurity part change>>`
+        - **part**: `string` - part to gain insecurity in
+          - %insecurityTypesDesc%
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "%insecurityTypes% &+ number"
+    inspectionexpect:
+      name: inspectionexpect
+    integrity:
+      name: integrity
+    integritycheck:
+      name: integritycheck
+    integrityWord:
+      description: |-
+        Use `integrityWord()` instead
+      name: integrityWord
+      tags: ["unused"]
+    internalejac:
+      name: internalejac
+    internet_photo:
+      description: |-
+        Adds a photo type to the list of ones circulating the internet
+
+        `<<internet_photo key>>`
+        - **key**: `string` - key to add to list
+          - `"whitney_roof_cute"` | `"whitney_roof_erotic"` | `"whitney_roof_erotic_pantiless"` | `"whitney_roof_erotic_panties"`
+      parameters:
+        - '"whitney_roof_cute"|"whitney_roof_erotic"|"whitney_roof_erotic_pantiless"|"whitney_roof_erotic_panties"'
+    internet_video:
+      description: |-
+        Adds a video type to the list of ones circulating the internet
+
+        `<<internet_video key>>`
+        - **key**: `string` - key to add to list
+          - `"whitney_roof_cute"` | `"whitney_roof_erotic"` | `"whitney_roof_erotic_pantiless"` | `"whitney_roof_erotic_panties"`
+      parameters:
+        - '"whitney_roof_cute"|"whitney_roof_erotic"|"whitney_roof_erotic_pantiless"|"whitney_roof_erotic_panties"'
+    island_end:
+      name: island_end
+    island_explore_end:
+      name: island_explore_end
+    island_init:
+      name: island_init
+    island_pass:
+      name: island_pass
+    island_rope_bow:
+      name: island_rope_bow
+    island_rope_end:
+      name: island_rope_end
+    island_rope_options:
+      name: island_rope_options
+    island_rope_shout:
+      name: island_rope_shout
+    island_tattoo:
+      name: island_tattoo
+    island_tattoo_check:
+      name: island_tattoo_check
+    island_tide:
+      name: island_tide
+    island_tide_options:
+      name: island_tide_options
+    island_tide_text:
+      name: island_tide_text
+    island_var_list:
+      name: island_var_list
+      tags: ["unused"]
+    islandBuildOption:
+      name: islandBuildOption
+    islander_language:
+      name: islander_language
+    it:
+      description: |-
+        Prints an objective case pronoun (them/it) for provided clothing slot
+
+        `<<it slot>>`
+        - **slot**: `string` - category of worn clothing to check
+          - %clothesTypesDesc%
+      parameters:
+        - "%clothesTypes%"
+    itis:
+      description: |-
+        Prints a pronoun/ present indicative pair (they are/it is) describing provided clothing slot
+
+        Pronoun is subjective case for usability
+
+        `<<itis slot>>`
+        - **slot**: `string` - category of worn clothing to check
+          - %clothesTypesDesc%
+      parameters:
+        - "%clothesTypes%"
+    journal:
+      name: journal
+    journalNotes:
+      name: journalNotes
+    journalNotesTextarea:
+      name: journalNotesTextarea
+    journalNotesTextareaSave:
+      name: journalNotesTextareaSave
+    kennel_intro:
+      name: kennel_intro
+    kennel_play_options:
+      name: kennel_play_options
+    kennel_treat_options:
+      name: kennel_treat_options
+    kennel_treats:
+      name: kennel_treats
+    kissvirginitywarning:
+      description: |-
+        Prints `This action will take your first kiss.` if your first kiss can still be lost
+
+        Takes combat state into account to display starting pipe `| `
+      tags: ["text"]
+    kissWraith:
+      name: kissWraith
+    knot_stat:
+      name: knot_stat
+    kylar_abduction_end:
+      name: kylar_abduction_end
+    kylar_abduction_init:
+      name: kylar_abduction_init
+    kylar_abduction_rage:
+      name: kylar_abduction_rage
+    kylar_abduction_return:
+      name: kylar_abduction_return
+    kylar_parents_trust:
+      name: kylar_parents_trust
+    kylar_pet_name:
+      name: kylar_pet_name
+    kylar_stockholm_start:
+      name: kylar_stockholm_start
+    kylarangry:
+      name: kylarangry
+    kylarFinish:
+      name: kylarFinish
+    kylargag:
+      name: kylargag
+    kylarhallways:
+      name: kylarhallways
+    kylarLibrary:
+      description: |-
+        Prints partial passage of Kylar in the library
+      tags: ["text", "links"]
+    kylarLibraryStalkChat1:
+      description: |-
+        Prints paragraph chatting with Kylar in the library
+      tags: ["text"]
+    kylaroptions:
+      name: kylaroptions
+    kylaroptionsleave:
+      name: kylaroptionsleave
+    kylaroptionstext:
+      name: kylaroptionstext
+    kylarRandomUnderwear:
+      name: kylarRandomUnderwear
+    kylarStockholmDefaultRape:
+      name: kylarStockholmDefaultRape
+    kylarwatched:
+      name: kylarwatched
+    lactation_pressure:
+      description: |-
+        Adds pressure to pc's lactation pressure
+
+        `$lactation_pressure` is counter for when pc starts lactating from daily effects (0-100, no change above 30)
+
+        `<<lactation_pressure change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    ladeviancy:
+      description: |-
+        Prints `| - Alex's Deviancy`
+      tags: ["unused", "text"]
+    lady:
+      description: |-
+        Prints `man` or `lady` depending on pc's appearance
+
+        See `<<gentleman>>`
+      tags: ["text"]
+    laggro:
+      description: |-
+        Prints `| - Remy's Encroachment`
+      tags: ["text"]
+    lake:
+      name: lake
+    lakeclothes:
+      name: lakeclothes
+    lakeeffects:
+      name: lakeeffects
+    lakeeventend:
+      name: lakeeventend
+    lakejourney:
+      name: lakejourney
+    lakequick:
+      name: lakequick
+    lakereturnjourney:
+      name: lakereturnjourney
+    landryoptions:
+      name: landryoptions
+    lapproval:
+      name: lapproval
+    larage:
+      description: |-
+        Prints `| - Rage`
+      tags: ["text"]
+    large_text:
+      description: |-
+        Prints appropriate `| Large body` descriptor that allowed this text option
+      tags: ["text"]
+    larousal:
+      description: |-
+        Prints `| - Arousal`
+      tags: ["text"]
+    lass:
+      name: lass
+    lattention:
+      description: |-
+        Prints `| - Attention`
+      tags: ["unused", "text"]
+    laughs:
+      description: |-
+        Prints random appropriate laugh verb for active NPC
+      tags: ["text"]
+    lawareness:
+      description: |-
+        Prints `| - Awareness` or `| + Innocence`
+      tags: ["text"]
+    lcamp_concealment:
+      name: lcamp_concealment
+    lchaos:
+      description: |-
+        Prints `| - Chaos`
+      tags: ["unused", "text"]
+    lcombatcontrol:
+      description: |-
+        Prints `| - Control`
+      tags: ["unused", "text"]
+    lcontrol:
+      description: |-
+        Prints `| - Control`
+      tags: ["text"]
+    lcool:
+      description: |-
+        Prints `| - Status`
+      tags: ["text"]
+    lcorruption:
+      description: |-
+        Prints `| - Corruption`
+    ldaring:
+      description: |-
+        Prints `| - Daring`
+      tags: ["text"]
+    ldef:
+      description: |-
+        Prints `| - Defiance`
+      tags: ["unused", "text"]
+    ldelinquency:
+      description: |-
+        Prints `| - Delinquency`
+      tags: ["text"]
+    ldom:
+      description: |-
+        Prints `| - Dominance` or `| - NPCName's Dominance` if provided
+
+        `<<ldom NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+          - `"Robin"`: Displays "Confidence" instead
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    leash:
+      name: leash
+    left_pursuit_grab:
+      name: left_pursuit_grab
+    leftactionBoundBanish:
+      name: leftactionBoundBanish
+    leftactionDifficulty:
+      name: leftactionDifficulty
+    leftactionDifficultyMachine:
+      name: leftactionDifficultyMachine
+      tags: ["unused"]
+    leftactionDifficultySelf:
+      name: leftactionDifficultySelf
+    leftactionDifficultyStruggle:
+      name: leftactionDifficultyStruggle
+      tags: ["unused"]
+    leftactionDifficultySwarm:
+      name: leftactionDifficultySwarm
+      tags: ["unused"]
+    leftactionDifficultyTentacle:
+      name: leftactionDifficultyTentacle
+    leftactionDifficultyVore:
+      name: leftactionDifficultyVore
+      tags: ["unused"]
+    leftActionInit:
+      name: leftActionInit
+    leftActionInitMachine:
+      name: leftActionInitMachine
+    leftActionInitSelf:
+      name: leftActionInitSelf
+    leftActionInitStruggle:
+      name: leftActionInitStruggle
+    leftActionInitSwarm:
+      name: leftActionInitSwarm
+    leftActionInitTentacle:
+      name: leftActionInitTentacle
+    leftActionInitVore:
+      name: leftActionInitVore
+    leftActions:
+      name: leftActions
+    leftactionSetupTentacle:
+      name: leftactionSetupTentacle
+    leftActionsMachine:
+      name: leftActionsMachine
+    leftActionsSelf:
+      name: leftActionsSelf
+    leftActionsStruggle:
+      name: leftActionsStruggle
+    leftActionsSwarm:
+      name: leftActionsSwarm
+    leftActionsTentacle:
+      name: leftActionsTentacle
+    leftActionsVore:
+      name: leftActionsVore
+    leftarmtentacledisable:
+      name: leftarmtentacledisable
+    leftcamerapose:
+      name: leftcamerapose
+    leftchoke:
+      name: leftchoke
+    leftclothesnew:
+      name: leftclothesnew
+    leftCondom:
+      name: leftCondom
+    leftcoverface:
+      name: leftcoverface
+    leftdefault:
+      name: leftdefault
+    leftdildowhack:
+      name: leftdildowhack
+    leftFixAndCoverActions:
+      name: leftFixAndCoverActions
+    leftgrabnew:
+      name: leftgrabnew
+    lefthandinit:
+      name: lefthandinit
+      tags: ["unused"]
+    lefthandpull:
+      name: lefthandpull
+    lefthypnosiswhack:
+      name: lefthypnosiswhack
+    leftNPCCondom:
+      name: leftNPCCondom
+    leftpenwhacknew:
+      name: leftpenwhacknew
+    leftplaynew:
+      name: leftplaynew
+    leftshacklewhack:
+      name: leftshacklewhack
+    leftspraynew:
+      name: leftspraynew
+    leftstealnew:
+      name: leftstealnew
+    leftUndressOther:
+      name: leftUndressOther
+    leg_position:
+      name: leg_position
+    leg_unbind:
+      name: leg_unbind
+    legbind:
+      name: legbind
+    legLock:
+      name: legLock
+    legLocked:
+      name: legLocked
+    legsit:
+      description: |-
+        Prints an objective case pronoun (them/it) for worn `"legs"` slot
+    legson:
+      name: legson
+      tags: ["unused"]
+    legsruined:
+      description: |-
+        Destroys pc's legs slot clothing, whether worn or carried
+
+        `<<legsruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    legssend:
+      name: legssend
+      tags: ["unused"]
+    LegsShop:
+      name: LegsShop
+    legssteal:
+      name: legssteal
+      tags: ["unused"]
+    legsstrip:
+      name: legsstrip
+    legsthat:
+      description: |-
+        Prints plural/singular prose of that (those/that) for worn `"legs"` slot
+    legsundress:
+      name: legsundress
+    legswear:
+      name: legswear
+    lemonade_stand_options:
+      name: lemonade_stand_options
+    lendear:
+      description: |-
+        Prints `| - Endearment`
+      tags: ["text"]
+    lenglish:
+      description: |-
+        Prints `| - English`
+      tags: ["text"]
+    lessonEnd:
+      description: |-
+        Prints end of lesson text for specified classes
+
+        `class` seems overly specific. Consider refactoring
+
+        `<<lessonEnd class pcAction?>>`
+        - **class**: `string` - class to end and update state on
+          - `"englishClassroom"` | `"historyClassroom"` | `"mathsClassroom"` | `"scienceClassroom"`
+        - **pcAction** _optional_: `string` - action pc should react from
+          - `"sleep"`: pc is woken up by end of class
+      parameters:
+        - '"englishClassroom"|"historyClassroom"|"mathsClassroom"|"scienceClassroom" |+ "sleep"'
+      tags: ["text", "refactor"]
+    lessonEvents:
+      description: |-
+        Pulls from appropriate event pool for class based on danger
+
+        `<<lessonEvents class dangerModifier?>>`
+        - **class**: `string` - class to pull events from
+          - `"english"` | `"history"` | `"maths"` | `"science"`
+        - **dangerModifier** _optional_: `number` - modifier to apply to danger calculations
+          - Defaults to `1`
+      parameters:
+        - '"english"|"history"|"maths"|"science" |+ number'
+    lewdcatcall:
+      description: |-
+        Prints random lewd catcall
+    lewditycaption:
+      name: lewditycaption
+    lewdness:
+      description: |-
+        Prints exposed player clothing or just `lewdness`
+      tags: ["text"]
+    lfarm:
+      description: |-
+        Prints `| - Farm yield`
+    lferocity:
+      description: |-
+        Adds 1 to wolfpack's ferocity and prints `| - Ferocity`
+
+        See `<<gferocity>>`
+      tags: ["text"]
+    lgrace:
+      description: |-
+        Prints `| - Grace` if proper tier is met
+
+        `<<lgrace tier?>>`
+        - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
+          - `"monk"` | `"priest"` | `"bishop"`
+      parameters:
+        - '|+ "monk"|"priest"|"bishop"'
+      tags: ["text"]
+    lharass:
+      description: |-
+        Prints `| Decreases chance of harassment`
+      tags: ["text"]
+    lharmony:
+      description: |-
+        Subtracts 1 from wolfpack's harmony and prints `| - Harmony`
+
+        See `<<gharmony>>`
+      tags: ["text"]
+    lhistory:
+      description: |-
+        Prints `| - History`
+      tags: ["text"]
+    lhope:
+      description: |-
+        Prints `| - Hope`
+      tags: ["text"]
+    lhunger:
+      description: |-
+        Prints `| - Hunger`
+      tags: ["text"]
+    limpatience:
+      description: |-
+        Prints `| - Impatience`
+      tags: ["unused", "text"]
+    linkradiogroup:
+      name: linkradiogroup
+    linterest:
+      description: |-
+        Prints `| - Interest`
+      tags: ["text"]
+    lisland_tide:
+      name: lisland_tide
+    listCrimeCheats:
+      name: listCrimeCheats
+    listdancingclothes:
+      name: listdancingclothes
+    listoutfits:
+      name: listoutfits
+    listoutfitsPassage:
+      name: listoutfitsPassage
+    listsleepoutfits:
+      name: listsleepoutfits
+    listswimoutfits:
+      name: listswimoutfits
+    livestock_bodywriting:
+      name: livestock_bodywriting
+    livestock_cows:
+      name: livestock_cows
+    livestock_end:
+      name: livestock_end
+      tags: ["unused"]
+    livestock_horse:
+      name: livestock_horse
+    livestock_horses:
+      name: livestock_horses
+    livestock_init:
+      name: livestock_init
+    livestock_lock_cleanup:
+      description: |-
+        Unsets farm lock variables
+    livestock_lock_desc:
+      description: |-
+        Prints description of farm lock strength
+
+        `$farmLockStr` is a measure of how damaged the farm lock is where 100 is undamaged (0-100)
+      tags: ["text"]
+    livestock_obey:
+      description: |-
+        Adds obedience in being cattle to pc's state
+
+        `$livestock_obey` is a measure of how compliant the pc is being Remy's cattle where 0 is uncompliant (0-100)
+
+        `<<livestock_obey change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    livestock_obey_description:
+      name: livestock_obey_description
+    livestock_overhear:
+      name: livestock_overhear
+    livestock_patrol:
+      description: |-
+        Prints description of farm guard location and how effective your attempt to break the lock is
+
+        Decreases `$farmLockStr` based on physique
+
+        `$farmPatrol` is a measure of how far the farmhand is where 0 is near (0-100)
+      tags: ["text", "stat"]
+    livestock_sleep:
+      name: livestock_sleep
+    livestockescape:
+      name: livestockescape
+    livestockFieldGrassEvents:
+      name: livestockFieldGrassEvents
+    lksuspicion:
+      description: |-
+        Prints `| - Jealousy`
+      tags: ["text"]
+    lladeviancy:
+      description: |-
+        Prints `| - - Alex's Deviancy`
+      tags: ["unused", "text"]
+    llaggro:
+      description: |-
+        Prints `| - - Remy's Encroachment`
+      tags: ["text"]
+    llapproval:
+      name: llapproval
+      tags: ["unused"]
+    llarage:
+      description: |-
+        Prints `| - - Rage`
+      tags: ["unused", "text"]
+    llarousal:
+      description: |-
+        Prints `| - - Arousal`
+      tags: ["text"]
+    llattention:
+      description: |-
+        Prints `| - - Attention`
+      tags: ["unused", "text"]
+    llawareness:
+      description: |-
+        Prints `| - - Awareness` or `| + + Innocence`
+      tags: ["text"]
+    llchaos:
+      description: |-
+        Prints `| - - Chaos`
+      tags: ["unused", "text"]
+    llcombatcontrol:
+      description: |-
+        Prints `| - - Control`
+      tags: ["unused", "text"]
+    llcontrol:
+      description: |-
+        Prints `| - - Control`
+      tags: ["text"]
+    llcool:
+      description: |-
+        Prints `| - - Status`
+      tags: ["text"]
+    llcorruption:
+      description: |-
+        Prints `| - - Corruption`
+    lldaring:
+      description: |-
+        Prints `| - - Daring`
+      tags: ["unused", "text"]
+    lldef:
+      description: |-
+        Prints `| - - Defiance`
+      tags: ["unused", "text"]
+    lldelinquency:
+      description: |-
+        Prints `| - - Delinquency`
+      tags: ["text"]
+    lldom:
+      description: |-
+        Prints `| - - Dominance` or `| - - NPCName's Dominance` if provided
+
+        `<<lldom NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+          - `"Robin"`: Displays "Confidence" instead
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    llendear:
+      description: |-
+        Prints `| - - Endearment`
+      tags: ["text"]
+    llewdity:
+      description: |-
+        Prints `| - Lewdity`
+      tags: ["unused", "text"]
+    llfarm:
+      description: |-
+        Prints `| - - Farm yield`
+    llgrace:
+      description: |-
+        Prints `| - - Grace` if proper tier is met
+
+        `<<llgrace tier?>>`
+        - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
+          - `"monk"` | `"priest"` | `"bishop"`
+      parameters:
+        - '|+ "monk"|"priest"|"bishop"'
+      tags: ["text"]
+    llhope:
+      description: |-
+        Prints `| - - Hope`
+      tags: ["text"]
+    llhunger:
+      description: |-
+        Prints `| - - Hunger`
+      tags: ["text"]
+    llimpatience:
+      description: |-
+        Prints `| - - Impatience`
+      tags: ["unused", "text"]
+    llinterest:
+      description: |-
+        Prints `| - - Interest`
+      tags: ["text"]
+    llksuspicion:
+      description: |-
+        Prints `| - - Jealousy`
+      tags: ["text"]
+    llladeviancy:
+      description: |-
+        Prints `| - - - Alex's Deviancy`
+      tags: ["unused", "text"]
+    lllaggro:
+      description: |-
+        Prints `| - - - Remy's Encroachment`
+      tags: ["text"]
+    lllapproval:
+      name: lllapproval
+      tags: ["unused"]
+    lllarage:
+      description: |-
+        Prints `| - - - Rage`
+      tags: ["text"]
+    lllarousal:
+      description: |-
+        Prints `| - - - Arousal`
+      tags: ["text"]
+    lllattention:
+      description: |-
+        Prints `| - - - Attention`
+      tags: ["unused", "text"]
+    lllawareness:
+      description: |-
+        Prints `| - - - Awareness` or `| + + + Innocence`
+      tags: ["text"]
+    lllchaos:
+      description: |-
+        Prints `| - - - Chaos`
+      tags: ["unused", "text"]
+    lllcombatcontrol:
+      description: |-
+        Prints `| - - - Control`
+      tags: ["unused", "text"]
+    lllcontrol:
+      description: |-
+        Prints `| - - - Control`
+      tags: ["text"]
+    lllcool:
+      description: |-
+        Prints `| - - - Status`
+      tags: ["text"]
+    lllcorruption:
+      description: |-
+        Prints `| - - - Corruption`
+    llldaring:
+      description: |-
+        Prints `| - - - Daring`
+      tags: ["unused", "text"]
+    llldef:
+      description: |-
+        Prints `| - - - Defiance`
+      tags: ["unused", "text"]
+    llldelinquency:
+      description: |-
+        Prints `| - - - Delinquency`
+      tags: ["text"]
+    llldom:
+      description: |-
+        Prints `| - - - Dominance` or `| - - - NPCName's Dominance` if provided
+
+        `<<llldom NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+          - `"Robin"`: Displays "Confidence" instead
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    lllendear:
+      description: |-
+        Prints `| - - - Endearment`
+      tags: ["unused", "text"]
+    lllewdity:
+      description: |-
+        Prints `| - - Lewdity`
+      tags: ["unused", "text"]
+    lllfarm:
+      description: |-
+        Prints `| - - - Farm yield`
+      tags: ["unused"]
+    lllgrace:
+      description: |-
+        Prints `| - - - Grace` if proper tier is met
+
+        `<<lllgrace tier?>>`
+        - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
+          - `"monk"` | `"priest"` | `"bishop"`
+      parameters:
+        - '|+ "monk"|"priest"|"bishop"'
+      tags: ["text"]
+    lllhope:
+      description: |-
+        Prints `| - - - Hope`
+      tags: ["text"]
+    lllhunger:
+      description: |-
+        Prints `| - - - Hunger`
+      tags: ["text"]
+    lllimpatience:
+      description: |-
+        Prints `| - - - Impatience`
+      tags: ["unused", "text"]
+    lllinterest:
+      description: |-
+        Prints `| - - - Interest`
+      tags: ["unused", "text"]
+    lllksuspicion:
+      description: |-
+        Prints `| - - - Jealousy`
+      tags: ["text"]
+    llllewdity:
+      description: |-
+        Prints `| - - - Lewdity`
+      tags: ["unused", "text"]
+    llllove:
+      description: |-
+        Prints `| - - - Love` or `| - - - NPCName's Love` if provided
+
+        `<<llllove NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their love
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    llllust:
+      description: |-
+        Prints `| - - - Lust` or `| - - - NPCName's Lust` if provided
+
+        `<<llllust NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    lllobey:
+      description: |-
+        Prints `| - - - Obedience`
+      tags: ["text"]
+    lllove:
+      description: |-
+        Prints `| - - Love` or `| - - NPCName's Love` if provided
+
+        `<<lllove NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their love
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    lllpain:
+      description: |-
+        Prints `| - - - Pain`
+      tags: ["text"]
+    lllphysique:
+      description: |-
+        Prints `| - - - Physique`
+      tags: ["unused", "text"]
+    lllpound_status:
+      name: lllpound_status
+    lllpurity:
+      description: |-
+        Prints `| - - - Purity`
+      tags: ["text"]
+    lllreb:
+      description: |-
+        Prints `| - - - Rebelliousness`
+      tags: ["unused", "text"]
+    lllrespect:
+      description: |-
+        Prints `| - - - Respect`
+      tags: ["unused", "text"]
+    lllrtrauma:
+      description: |-
+        Prints `| - - - Robin's Trauma`, unless at min value
+
+        `<<lllrtrauma force?>>`
+        - **force** _optional_: `bool` - prints even if trauma is 0
+      parameters:
+        - "|+ bool"
+      tags: ["unused", "text"]
+    lllsaltiness:
+      description: |-
+        Prints `| - - - Saltiness`
+      tags: ["unused", "text"]
+    lllsarousal:
+      name: lllsarousal
+      tags: ["unused"]
+    lllsecurity:
+      description: |-
+        Prints `| - - - Security`
+      tags: ["unused", "text"]
+    lllshame:
+      description: |-
+        Prints `| - - - Shame`
+      tags: ["unused", "text"]
+    lllslust:
+      description: |-
+        Prints `| - - - Sydney's Lust`
+      tags: ["text"]
+    lllspain:
+      name: lllspain
+    lllspurity:
+      description: |-
+        Prints `| - - - Sydney's Purity` or `| + + + Sydney's Purity`
+      tags: ["unused", "text"]
+    lllstockholm:
+      description: |-
+        Prints `| - - - Stockholm Syndrome`
+      tags: ["text"]
+    lllstress:
+      description: |-
+        Prints `| - - - Stress`
+      tags: ["text"]
+    lllsuspicion:
+      description: |-
+        Prints `| - - - Suspicion`
+      tags: ["text"]
+    llltiredness:
+      description: |-
+        Prints `| - - - Fatigue`
+      tags: ["unused", "text"]
+    llltrauma:
+      description: |-
+        Prints `| - - - Trauma`
+      tags: ["text"]
+    llltrust:
+      description: |-
+        Prints `| - - - Trust`
+      tags: ["text"]
+    lllust:
+      description: |-
+        Prints `| - - Lust` or `| - - NPCName's Lust` if provided
+
+        `<<lllust NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    llobey:
+      description: |-
+        Prints `| - - Obedience`
+      tags: ["text"]
+    llove:
+      description: |-
+        Prints `| - Love` or `| - NPCName's Love` if provided
+
+        `<<llove NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their love
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    llpain:
+      description: |-
+        Prints `| - - Pain`
+      tags: ["text"]
+    llphysique:
+      description: |-
+        Prints `| - - Physique`
+      tags: ["unused", "text"]
+    llpound_status:
+      name: llpound_status
+    llpurity:
+      description: |-
+        Prints `| - - Purity`
+      tags: ["text"]
+    llreb:
+      description: |-
+        Prints `| - - Rebelliousness`
+      tags: ["unused", "text"]
+    llrespect:
+      description: |-
+        Prints `| - - Respect`
+      tags: ["text"]
+    llrtrauma:
+      description: |-
+        Prints `| - - Robin's Trauma`, unless at min value
+
+        `<<llrtrauma force?>>`
+        - **force** _optional_: `bool` - prints even if trauma is 0
+      parameters:
+        - "|+ bool"
+      tags: ["unused", "text"]
+    llsaltiness:
+      description: |-
+        Prints `| - - Saltiness`
+      tags: ["unused", "text"]
+    llsarousal:
+      name: llsarousal
+    llsecurity:
+      description: |-
+        Prints `| - - Security`
+      tags: ["unused", "text"]
+    llshame:
+      description: |-
+        Prints `| - - Shame`
+      tags: ["unused", "text"]
+    llslust:
+      description: |-
+        Prints `| - - Sydney's Lust`
+      tags: ["unused", "text"]
+    llspain:
+      name: llspain
+      tags: ["unused"]
+    llspurity:
+      description: |-
+        Prints `| - - Sydney's Purity` or `| + + Sydney's Purity`
+      tags: ["text"]
+    llstockholm:
+      description: |-
+        Prints `| - - Stockholm Syndrome`
+      tags: ["unused", "text"]
+    llstress:
+      description: |-
+        Prints `| - - Stress`
+      tags: ["text"]
+    llsuspicion:
+      description: |-
+        Prints `| - - Suspicion`
+      tags: ["text"]
+    lltiredness:
+      description: |-
+        Prints `| - - Fatigue`
+      tags: ["unused", "text"]
+    lltrauma:
+      description: |-
+        Prints `| - - Trauma`
+      tags: ["text"]
+    lltrust:
+      description: |-
+        Prints `| - - Trust`
+      tags: ["text"]
+    llust:
+      description: |-
+        Prints `| - Lust` or `| - NPCName's Lust` if provided
+
+        `<<llust NPCName?>>`
+        - **NPCName** _optional_: `string` - name to display as their lust
+      parameters:
+        - "|+ text"
+      tags: ["text"]
+    lmaths:
+      description: |-
+        Prints `| - Maths`
+      tags: ["text"]
+    loadAllFeats:
+      name: loadAllFeats
+    loadBoxIronmanCheater:
+      name: loadBoxIronmanCheater
+    loadBoxIronmanSafetyCancel:
+      name: loadBoxIronmanSafetyCancel
+    loadConfirm:
+      name: loadConfirm
+    loadconfirmcompat:
+      name: loadconfirmcompat
+      tags: ["unused"]
+    loadFiltersMenu:
+      name: loadFiltersMenu
+    loadingAllFeats:
+      name: loadingAllFeats
+    loadIronmanCheater:
+      name: loadIronmanCheater
+    loadIronmanSafetyCancel:
+      name: loadIronmanSafetyCancel
+    loadNPC:
+      description: |-
+        Loads persistent npc from named slot
+
+        See `<<saveNPC>>`, `<<updateNPC>>`, & `<<clearNPC>>`
+
+        `<<loadNPC slot name>>`
+        - **slot**: `number` - slot number to put npc data at (zero-based)
+        - **name**: `string` - key to load npc's data from
+          - spaces should be avoided if possible
+      parameters:
+        - "number &+ string|text"
+    loadShopOptions:
+      name: loadShopOptions
+    loadTempHairStyle:
+      name: loadTempHairStyle
+    loadWarning:
+      name: loadWarning
+    loadwarningcompat:
+      name: loadwarningcompat
+    lobey:
+      description: |-
+        Prints `| - Obedience`
+      tags: ["text"]
+    lobsession:
+      name: lobsession
+    location:
+      name: location
+    location_text:
+      description: |-
+        Prints `$location` as noun
+
+        Out of date and underutilised. Consider refactoring
+      tags: ["text", "refactor"]
+    locker_suspicion:
+      description: |-
+        Adds suspicion of being the panty thief to pc's state
+
+        `$locker_suspicion` is a measure of how suspicious pc is in the eyes of the school where 0 is not (0-100)
+
+        `<<locker_suspicion change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    lockerclothes:
+      description: |-
+        Manages storage of handheld items in `lockers` location
+
+        See `<<lockers2>>` for second slot
+    lockerclothes2:
+      description: |-
+        Manages storage of handheld items in `lockers2` location
+
+        See `<<lockers>>` for first slot
+    lockerevent:
+      name: lockerevent
+    lockereventnext:
+      name: lockereventnext
+    lockereventpassages:
+      name: lockereventpassages
+    log:
+      name: log
+      tags: ["unused"]
+    loiter:
+      name: loiter
+    loveInterest:
+      name: loveInterest
+    loveInterestFunction:
+      name: loveInterestFunction
+    lowerhas:
+      description: |-
+        Prints plural/singular prose of has (have/has) for worn `"lower"` slot
+    lowerimg:
+      name: lowerimg
+    lowerintegrity:
+      name: lowerintegrity
+      tags: ["unused"]
+    lowerit:
+      description: |-
+        Prints an objective case pronoun (them/it) for worn `"lower"` slot
+    loweritis:
+      description: |-
+        Prints a pronoun/ present indicative pair (they are/it is) describing worn `"lower"` slot
+    loweron:
+      name: loweron
+    lowerplural:
+      description: |-
+        Prints a present indicative (are/is) for the worn `"lower"` slot
+    lowerruined:
+      description: |-
+        Destroys pc's lower slot clothing, whether worn or carried
+
+        `<<lowerruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    lowersend:
+      name: lowersend
+    lowerslither:
+      name: lowerslither
+      tags: ["unused"]
+    lowersteal:
+      name: lowersteal
+    lowerstrip:
+      name: lowerstrip
+    lowerthat:
+      description: |-
+        Prints plural/singular prose of that (those/that) for worn `"lower"` slot
+      tags: ["unused"]
+    lowerundress:
+      name: lowerundress
+    lowerwear:
+      name: lowerwear
+    lowerwet:
+      description: |-
+        Adds wetness to pc's lower clothing state
+
+        `$lowerwet` is a measure of how wet pc's lower clothing is where 0 is dry (0-200)
+
+        `$lowerwetstate` is a measure of effects due to wetness of pc's lower clothing where 0 is dry (0-3)
+
+        Over clothes don't take into account wetness. Consider refactoring to expand
+
+        `<<lowerwet change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+      tags: ["refactor"]
+    loxygen:
+      description: |-
+        Prints `| + Air`
+      tags: ["text"]
+    lpain:
+      description: |-
+        Prints `| - Pain`
+      tags: ["text"]
+    lphysique:
+      description: |-
+        Prints `| - Physique`
+      tags: ["unused", "text"]
+    lpound_status:
+      name: lpound_status
+    lpurity:
+      description: |-
+        Prints `| - Purity`
+      tags: ["text"]
+    lpursuit:
+      name: lpursuit
+    lreb:
+      description: |-
+        Prints `| - Rebelliousness`
+      tags: ["text"]
+    lrespect:
+      description: |-
+        Prints `| - Respect`
+      tags: ["text"]
+    lrtrauma:
+      description: |-
+        Prints `| - Robin's Trauma`, unless at min value
+
+        `<<lrtrauma force?>>`
+        - **force** _optional_: `bool` - prints even if trauma is 0
+      parameters:
+        - "|+ bool"
+      tags: ["unused", "text"]
+    lsaltiness:
+      description: |-
+        Prints `| - Saltiness`
+      tags: ["unused", "text"]
+    lsarousal:
+      name: lsarousal
+    lscience:
+      description: |-
+        Prints `| - Science`
+      tags: ["text"]
+    lsecurity:
+      description: |-
+        Prints `| - Security`
+      tags: ["text"]
+    lshame:
+      description: |-
+        Prints `| - Shame`
+      tags: ["unused", "text"]
+    lslust:
+      description: |-
+        Prints `| - Sydney's Lust`
+      tags: ["text"]
+    lspain:
+      name: lspain
+    lspurity:
+      description: |-
+        Prints `| - Sydney's Purity` or `| + Sydney's Purity`
+      tags: ["text"]
+    lstockholm:
+      description: |-
+        Prints `| - Stockholm Syndrome`
+      tags: ["unused", "text"]
+    lstress:
+      description: |-
+        Prints `| - Stress`
+      tags: ["text"]
+    lsuspicion:
+      description: |-
+        Prints `| - Suspicion`
+      tags: ["text"]
+    ltiredness:
+      description: |-
+        Prints `| - Fatigue`
+      tags: ["text"]
+    ltorch:
+      name: ltorch
+    ltrauma:
+      description: |-
+        Prints `| - Trauma`
+      tags: ["text"]
+    ltreasure:
+      description: |-
+        Prints `| Increases chance of finding treasure`
+      tags: ["unused", "text"]
+    ltrust:
+      description: |-
+        Prints `| - Trust`
+      tags: ["text"]
+    lubePrice:
+      name: lubePrice
+    luxuryTooltip:
+      name: luxuryTooltip
+    lwalnut:
+      name: lwalnut
+    lwood:
+      name: lwood
+      tags: ["unused"]
+    machine_actions:
+      name: machine_actions
+    machine_anal_disable:
+      name: machine_anal_disable
+    machine_arm_chains_disable:
+      name: machine_arm_chains_disable
+    machine_combat:
+      name: machine_combat
+    machine_damage:
+      name: machine_damage
+    machine_effects:
+      name: machine_effects
+    machine_end:
+      name: machine_end
+    machine_init:
+      name: machine_init
+    machine_leg_chains_disable:
+      name: machine_leg_chains_disable
+    machine_speed:
+      name: machine_speed
+    machine_state:
+      name: machine_state
+    machine_vaginal_disable:
+      name: machine_vaginal_disable
+    machine_violent_arms:
+      name: machine_violent_arms
+    machine_violent_legs:
+      name: machine_violent_legs
+    makeAbomination:
+      name: makeAbomination
+    makeAwareOfDetails:
+      name: makeAwareOfDetails
+    makeupPresets:
+      name: makeupPresets
+    makeupPresetsItem:
+      name: makeupPresetsItem
+    male:
+      name: male
+    maleChanceSplitControls:
+      name: maleChanceSplitControls
+    man:
+      name: man
+    man-combat:
+      name: man-combat
+    man-pursuit:
+      name: man-pursuit
+    man-stalk:
+      name: man-stalk
+    managePill:
+      name: managePill
+      tags: ["unused"]
+    managerLove:
+      name: managerLove
+    mancombat_choke:
+      name: mancombat_choke
+    mancombat_strangle:
+      name: mancombat_strangle
+    manend:
+      description: |-
+        Clears speech variables related to man combat
+
+        Superceded by `<<endcombat>>`
+    maninit:
+      name: maninit
+    mannequin:
+      name: mannequin
+    mannequinHairdresser:
+      name: mannequinHairdresser
+    manspeech:
+      name: manspeech
+    map:
+      name: map
+    mapLocations:
+      name: mapLocations
+    masochism:
+      description: |-
+        Adds masochism to pc's state
+
+        `$masochism` is a measure of pc's progression towards being masochistic where 0 is no progress (0-1,000)
+
+        `<<masochism change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    mason_actions:
+      name: mason_actions
+    mason_greet:
+      name: mason_greet
+    mason_greet_lust:
+      name: mason_greet_lust
+    masopain:
+      description: |-
+        Adds pain and corresponding arousal to pc's state regardless of whether they're masochistic
+
+        Balance is different than regular `<<pain>>` and cannot actually increase masochism. Consider refactoring
+
+        `<<masopain change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+      tags: ["refactor"]
+    master:
+      description: |-
+        Prints `master` or `mistress` depending on npc pronouns
+      tags: ["text"]
+    Master:
+      description: |-
+        Prints `Master` or `Mistress` depending on npc pronouns
+      tags: ["text"]
+    masturbationactions:
+      name: masturbationactions
+    masturbationAudienceIncrement:
+      description: |-
+        Generates new masturbation audience member if less than max
+
+        `<<masturbationAudienceIncrement type?>>`
+        - **type** _optional_: `string` - type of audience member to generate
+          - `"student"`: audience member is a student
+      parameters:
+        - '|+ "student"'
+    masturbationbowl:
+      name: masturbationbowl
+    masturbationbowlimage:
+      name: masturbationbowlimage
+    masturbationControls:
+      name: masturbationControls
+    masturbationeffects:
+      name: masturbationeffects
+    masturbationSlimeControl:
+      name: masturbationSlimeControl
+    masturbationstart:
+      name: masturbationstart
+    masturbationStopControls:
+      name: masturbationStopControls
+    maths_skill_up_text:
+      name: maths_skill_up_text
+    mathsLessonEnd:
+      name: mathsLessonEnd
+    mathsLessonEvent:
+      name: mathsLessonEvent
+    mathsphone:
+      name: mathsphone
+    mathsprojectfinish:
+      name: mathsprojectfinish
+    mathsprojectstart:
+      name: mathsprojectstart
+    mathsskill:
+      name: mathsskill
+    mathsWhitneyAttendChance:
+      name: mathsWhitneyAttendChance
+    mathsWhitneyGropeOrgasm:
+      name: mathsWhitneyGropeOrgasm
+    maxDefaultActionSetsclamp:
+      name: maxDefaultActionSetsclamp
+      tags: ["unused"]
+    meditateoptions:
+      name: meditateoptions
+    meek:
+      name: meek
+    meetingattention:
+      name: meetingattention
+    meetingmolestactions:
+      name: meetingmolestactions
+    meetingpetactions:
+      name: meetingpetactions
+    menstruationCycle:
+      name: menstruationCycle
+    menstruationCycleState:
+      name: menstruationCycleState
+    mer:
+      name: mer
+    mereventend:
+      name: mereventend
+    merexposed:
+      name: merexposed
+      tags: ["unused"]
+    mergeNPCData:
+      name: mergeNPCData
+      tags: ["unused"]
+    merquick:
+      name: merquick
+    methodical_guard:
+      name: methodical_guard
+    middleruined:
+      description: |-
+        Destroys pc's upper and lower slot clothing, whether worn or carried
+    milk_amount:
+      description: |-
+        Adds milk to pc's milk supply
+
+        `$milk_amount` is the current pc milk amount remaining
+
+        `change` is technically optional. Consider refactoring
+
+        `<<milk_amount change?>>`
+        - **change**: `number` - +/- change to apply
+          - if not provided, just updates milk effects
+      parameters:
+        - "number"
+    milking_img:
+      name: milking_img
+      tags: ["unused"]
+    milkTrait:
+      description: |-
+        Prints `| Milk Enthusiast` or `| Milk Addict` depending on pc's `$submissive`
+      tags: ["unused", "text"]
+    milkvolume:
+      description: |-
+        Adds milk to pc's milk capacity with appropriate checks
+
+        `$milkvolume` is the current maximum pc milk capacity (0-3,000)
+
+        `<<milkvolume change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    mines_crystals:
+      name: mines_crystals
+    mines_end:
+      name: mines_end
+    mines_init:
+      name: mines_init
+    mines_suspicion:
+      name: mines_suspicion
+    mines_suspicion_text:
+      name: mines_suspicion_text
+    mirror:
+      name: mirror
+    mirrorAppearance:
+      name: mirrorAppearance
+    mirrorAppearancePregnancy:
+      name: mirrorAppearancePregnancy
+    mirrorDebug:
+      name: mirrorDebug
+    mirrorDisplay:
+      name: mirrorDisplay
+    mirrorHair:
+      name: mirrorHair
+    mirrorhairControls:
+      name: mirrorhairControls
+    mirrorhairdisplay:
+      name: mirrorhairdisplay
+    mirrorhairdisplayClick:
+      name: mirrorhairdisplayClick
+    mirrorhairdisplayElements:
+      name: mirrorhairdisplayElements
+    mirrorhairdisplayFilter:
+      name: mirrorhairdisplayFilter
+    mirrorhairdisplayLinks:
+      name: mirrorhairdisplayLinks
+    mirrorhairdisplaySave:
+      name: mirrorhairdisplaySave
+    mirrorhairOptions:
+      name: mirrorhairOptions
+    mirrorHairSave:
+      name: mirrorHairSave
+    mirrorHairSaveOptions:
+      name: mirrorHairSaveOptions
+    mirrorHairTraitList:
+      name: mirrorHairTraitList
+    mirrorhairTraits:
+      name: mirrorhairTraits
+    mirrorMakeup:
+      name: mirrorMakeup
+    mirrorMakeupPart:
+      name: mirrorMakeupPart
+    mirrorMenu:
+      name: mirrorMenu
+    mirrormodel:
+      name: mirrormodel
+    mirrorSkin:
+      name: mirrorSkin
+    mirrorTransformation:
+      name: mirrorTransformation
+    mirrorwet:
+      name: mirrorwet
+    missionaryimg:
+      name: missionaryimg
+    mobileStats:
+      name: mobileStats
+    mobileStatsColor:
+      name: mobileStatsColor
+    mobileStatsColorAllure:
+      name: mobileStatsColorAllure
+    mobileStatsColorSet:
+      name: mobileStatsColorSet
+    mobileStatsColorSetIverted:
+      name: mobileStatsColorSetIverted
+    mobileStatsTime:
+      name: mobileStatsTime
+    modelfilter:
+      description: |-
+        Set model filter object
+
+        Will do a copy, so you can safely edit filter options
+
+        [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
+
+        `<<modelfilter filterName filter>>`
+        - **filterName**: `string` - filter name corresponding to #CanvasModel.options.filters
+        - **filter**: `object` - Filter object to set at filterName
+      parameters:
+        - text &+ bareword|var
+    modelfilterset:
+      description: |-
+        Set model filter object property
+
+        [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
+
+        `<<modelfilterset filterName propertyName property>>`
+        - **filterName**: `string` - filter name corresponding to #CanvasModel.options.filters
+        - **propertyName**: `string` - property name of filter to set
+        - **property**: `string|number` - property value
+      parameters:
+        - text &+ text &+ text|number
+    modelprepare-player-body:
+      name: modelprepare-player-body
+    modelprepare-player-clothes:
+      name: modelprepare-player-clothes
+    molestbusinit:
+      name: molestbusinit
+    molested:
+      name: molested
+    moleststat:
+      name: moleststat
+    molestTrait:
+      description: |-
+        Prints `| Graceful` or `| Plaything` depending on pc's `$submissive`
+      tags: ["unused", "text"]
+    moneyGain:
+      description: |-
+        Prints and adds money to pc's state
+
+        See `<<moneyGainDisplay>>` to print before actually gaining
+
+        See `<<printmoney>>` and `<<formatmoney>>` to just print raw amounts
+
+        Sets `_money_gain` to result of calculation
+
+        `<<moneyGain amount notExactly? stolen?>>`
+        - **amount**: `number` - £ to give to pc (decimals supported)
+        - **notExactly** _optional_: `bool` - apply random +/- 20% to amount
+          - Defaults to `false`
+        - **stolen** _optional_: `bool` - stolen money scales with skulduggery and impacts crime
+          - Defaults to `false`
+      parameters:
+        - "number |+ bool |+ bool"
+      tags: ["text", "temp"]
+    moneyGainDisplay:
+      description: |-
+        Prints a theoretically added amount of money but does not actually change pc's state
+
+        See `<<moneyGain>>` to actually gain
+
+        See `<<printmoney>>` and `<<formatmoney>>` to just print raw amounts
+
+        Sets `_money_gain` to result of calculation
+
+        Widget documentation and codebase regularly uses manual adjustments instead of `<<moneyGain>>`. Consider refactoring
+
+        Example:
+        ```
+        This example shows you <<moneyGainDisplay 100 true true>> that you could steal.
+
+        <<link [[Take it|Example Passage]]>><<moneyGain _money_gain false true>><</link>><<crime "petty">>
+        <br>
+        <<link [[Leave|Example Passage]]>><</link>>
+        ```
+
+        `<<moneyGainDisplay amount notExactly? stolen?>>`
+        - **amount**: `number` - £ to give to pc (decimals supported)
+        - **notExactly** _optional_: `bool` - apply random +/- 20% to amount
+          - Defaults to `false`
+        - **stolen** _optional_: `bool` - stolen money scales with skulduggery and impacts crime
+          - Defaults to `false`
+      parameters:
+        - "number |+ bool |+ bool"
+      tags: ["text", "temp", "refactor"]
+    monk:
+      description: |-
+        Prints `monk` or `nun` depending on active NPC pronoun
+
+        `<<monk modifier?>>`
+        - **modifier** _optional_: `string` - additional information to include
+          - `"desc"`: include full NPC description before noun
+      parameters:
+        - '|+ "desc"'
+      tags: ["text"]
+    monkapo:
+      description: |-
+        Prints `monk's` or `nun's` depending on active NPC pronoun
+      tags: ["text"]
+    monks:
+      description: |-
+        Prints `monks` or `nuns` depending on active NPC pronoun
+      tags: ["text"]
+    monks_and_nuns:
+      description: |-
+        Prints `monks and nuns` unless player has mono-gendered the world
+
+        See `<<Monks_and_Nuns>>` and `<<brothers_and_sisters>>`
+      tags: ["text"]
+    Monks_and_Nuns:
+      description: |-
+        Prints `Monks and nuns` unless player has mono-gendered the world
+
+        See `<<monks_and_nuns>>` and `<<brothers_and_sisters>>`
+      tags: ["text"]
+    monster_passage:
+      description: |-
+        Sets `_monster_passage` to random gender chance
+
+        Doesn't do anything. Consider refactoring
+      tags: ["unused", "temp", "refactor"]
+    monsterSettings:
+      name: monsterSettings
+    monstrance_accost:
+      name: monstrance_accost
+    moor_binding_text:
+      name: moor_binding_text
+    moor_captive_actions:
+      name: moor_captive_actions
+    moor_captive_init:
+      name: moor_captive_init
+    moor_fox:
+      name: moor_fox
+    moor_hunt:
+      name: moor_hunt
+    moor_hunt_start:
+      name: moor_hunt_start
+    morgancaught:
+      name: morgancaught
+    morganhunt:
+      name: morganhunt
+    morganoptions:
+      name: morganoptions
+    morgantext:
+      name: morgantext
+    mouth:
+      name: mouth
+    mouth_sensitivity:
+      description: |-
+        Changes sensitivity of mouth by provided amount
+
+        `<<mouth_sensitivity amount>>`
+        - **amount**: `number` - change to sensitivity
+      parameters:
+        - "number"
+    mouthactionDifficulty:
+      name: mouthactionDifficulty
+    mouthactionDifficultyStruggle:
+      name: mouthactionDifficultyStruggle
+      tags: ["unused"]
+    mouthactionDifficultyTentacle:
+      name: mouthactionDifficultyTentacle
+    mouthActionInit:
+      name: mouthActionInit
+    mouthActionInitStruggle:
+      name: mouthActionInitStruggle
+    mouthActionInitTentacle:
+      name: mouthActionInitTentacle
+    mouthActions:
+      name: mouthActions
+    mouthActionsTentacle:
+      name: mouthActionsTentacle
+    mouthsensitivity:
+      name: mouthsensitivity
+    movealongdrainwater:
+      name: movealongdrainwater
+    moveChildren:
+      name: moveChildren
+      tags: ["unused"]
+    moveCreature:
+      name: moveCreature
+    mummy:
+      name: mummy
+    Mummy:
+      name: Mummy
+    museumAntiqueStatus:
+      name: museumAntiqueStatus
+    museumAntiqueText:
+      name: museumAntiqueText
+    museumdonate:
+      name: museumdonate
+    museumtalk:
+      name: museumtalk
+    namedNpcComments:
+      name: namedNpcComments
+    namedNpcPregnancy:
+      name: namedNpcPregnancy
+    neckejacstat:
+      name: neckejacstat
+    neckimg:
+      name: neckimg
+    neckon:
+      name: neckon
+      tags: ["unused"]
+    neckruined:
+      description: |-
+        Destroys pc's neck slot clothing, whether worn or carried
+
+        `<<neckruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    necksend:
+      name: necksend
+      tags: ["unused"]
+    NeckShop:
+      name: NeckShop
+    necksteal:
+      name: necksteal
+      tags: ["unused"]
+    neckstrip:
+      name: neckstrip
+    neckundress:
+      name: neckundress
+    neckwear:
+      name: neckwear
+    nectarfed:
+      name: nectarfed
+    nervously:
+      description: |-
+        Prints adverb of pc's willingness to engage in exhibitionism
+      tags: ["text"]
+    neutral:
+      name: neutral
+    neutralbreast:
+      name: neutralbreast
+    neutralgenitals:
+      name: neutralgenitals
+    new_npc_pillory:
+      name: new_npc_pillory
+    newNamedNpc:
+      description: |-
+        Generates new NPC object to add to old saves
+
+        Expects npc template object of the form
+        ```js
+        {
+          nam: "Example", // Name of the New NPC
+          title: "tester", // How the game should refer to them
+          insecurity: "looks", // What the NPC is insecure about. skill, looks,
+          adult: 1, // (optional) If the PC is an adult
+          teen: 1, // (optional) If the PC is a teen
+          <any>: <any>, // Additional properties to attach to NPC
+        }
+        ```
+      parameters:
+        - var|bareword &+ ...bareword
+    nexttext:
+      description: |-
+        Doesn't do anything, sort of
+
+        Next links have stopped receiving this widget for a while now. Consider refactoring
+      tags: ["legacy", "refactor"]
+    nightingale:
+      name: nightingale
+    nightingaleeventend:
+      name: nightingaleeventend
+    nightingaleexposed:
+      name: nightingaleexposed
+      tags: ["unused"]
+    nightingalequick:
+      name: nightingalequick
+    nightmareCheck:
+      name: nightmareCheck
+    nightmareEnd:
+      name: nightmareEnd
+    nightmareStart:
+      name: nightmareStart
+    nightmareWakeDifficulty:
+      name: nightmareWakeDifficulty
+    nipple:
+      name: nipple
+    nippleFlavorText:
+      name: nippleFlavorText
+    nipples:
+      name: nipples
+    nnpc_brother:
+      description: |-
+        Prints `brother` or `sister` for named NPC
+
+        `<<nnpc_Sister namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_Brother:
+      description: |-
+        Prints `Brother` or `Sister` for named NPC
+
+        `<<nnpc_Brother namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_gender:
+      description: |-
+        Prints `man` or `woman` for named NPC
+
+        See `<<nnpc_gender>>` for young version
+
+        `<<nnpc_gender namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_gendery:
+      description: |-
+        Prints `boy` or `girl` for named NPC
+
+        See `<<nnpc_gender>>` for old version
+
+        `<<nnpc_gendery namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_genitals:
+      description: |-
+        Prints `penis` or `vagina` based on named NPC's pronoun
+
+        Doesn't take into account herm or crossdressing NNPC. Consider refactoring
+
+        `<<nnpc_genitals namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text", "refactor"]
+    nnpc_girlfriend:
+      description: |-
+        Prints `boyfriend` or `girlfriend` for named NPC
+
+        `<<nnpc_girlfriend namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_he:
+      description: |-
+        Prints singular pronoun (he/she) for named NPC
+
+        `<<nnpc_he namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_He:
+      description: |-
+        Prints capitalised singular pronoun (He/She) for named NPC
+
+        `<<nnpc_He namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_hers:
+      description: |-
+        Prints possessive plural pronoun (his/hers) for named NPC
+
+        `<<nnpc_hers namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_hes:
+      description: |-
+        Prints contracted singular pronoun (he's/she's) for named NPC
+
+        `<<nnpc_hes namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_Hes:
+      description: |-
+        Prints capitalised contracted singular pronoun (He's/She's) for named NPC
+
+        `<<nnpc_Hes namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_him:
+      description: |-
+        Prints objective pronoun (him/her) for named NPC
+
+        `<<nnpc_her namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_Him:
+      description: |-
+        Prints capitalised objective pronoun (he/she) for named NPC
+
+        `<<nnpc_Him namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["unused", "text"]
+    nnpc_himself:
+      description: |-
+        Prints reflexive pronoun (himself/herself) for named NPC
+
+        `<<nnpc_himself namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_his:
+      description: |-
+        Prints possessive pronoun (his/her) for named NPC
+
+        `<<nnpc_his namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_His:
+      description: |-
+        Prints capitalised possessive pronoun (His/Her) for named NPC
+
+        `<<nnpc_His namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_lass:
+      description: |-
+        Prints `lad` or `lass` for named NPC
+
+        `<<nnpc_lass namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_title:
+      description: |-
+        Prints title of named NPC
+
+        `<<nnpc_title namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_Title:
+      description: |-
+        Prints capitalised title of named NPC
+
+        `<<nnpc_Title namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    nnpc_wife:
+      description: |-
+        Prints `husband` or `wife` for named NPC
+
+        `<<nnpc_wife namedNPCName>>`
+        - **namedNPCName**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+      tags: ["text"]
+    noClothingCheck:
+      name: noClothingCheck
+    noharass:
+      description: |-
+        Prints `| No chance of harassment`
+      tags: ["text"]
+    note:
+      description: |-
+        Prints `| Note` style note
+
+        `<<note text class>>`
+        - **text**: `string` - note to display
+        - **class**: `string` - HTML class property to attach to note
+      parameters:
+        - "string |+ string"
+      tags: ["text"]
+    nounderwearcheck:
+      description: |-
+        Checks if the PC is pantiless, but otherwise decent
+
+        Results in low level exhibitionism increases
+    npc:
+      name: npc
+    npc_attempt_sex:
+      name: npc_attempt_sex
+    npc_pillory:
+      name: npc_pillory
+    npc_pillory_abuse:
+      name: npc_pillory_abuse
+    npc_pillory_appearance:
+      name: npc_pillory_appearance
+    npc_pillory_detail:
+      name: npc_pillory_detail
+    npc_pillory_release_schedule:
+      name: npc_pillory_release_schedule
+    npc_submissive:
+      name: npc_submissive
+    npcAnus:
+      description: |-
+        Prints descriptor of active NPC's anus
+
+        `<<npcAnus npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to current `$index`
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    npcAttractionSettings:
+      name: npcAttractionSettings
+    npcattribute:
+      name: npcattribute
+    npcChest:
+      description: |-
+        Prints descriptor of active NPC's chest
+
+        `<<npcChest npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to current `$index`
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    npcClothesName:
+      name: npcClothesName
+    npcClothesText:
+      description: |-
+        Prints name of npc's clothes
+
+        `<<npcClothesText npcObject clothesSlot>>`
+        - **npcObject**: `object` - NPC object to check
+        - **clothesSlot**: `string` - slot on npc object to check
+          - `"upper"` | `"lower"` | `"both"`
+      parameters:
+        - 'bareword|var &+ "upper"|"lower"|"both"'
+      tags: ["text"]
+    npcClothesType:
+      name: npcClothesType
+    npcCondomEquipImmediate:
+      name: npcCondomEquipImmediate
+    npcdamage:
+      name: npcdamage
+    npcexhibit:
+      name: npcexhibit
+    npcexpose:
+      name: npcexpose
+    npcexposetext:
+      description: |-
+        Prints description of active NPC undressing and revealing their genitals
+
+        Currently describes genitals of first active NPC always. Consider refactoring
+      tags: ["refactor"]
+    npcfence:
+      name: npcfence
+    npcgangstrip:
+      name: npcgangstrip
+    npcGenitalReaction:
+      description: |-
+        Prints a random player reaction to the sight of a very large or very small NPC penis
+
+        `<<npcGenitalReaction npcObject>>`
+        - **npcObject**: `object` - npc object to be checked
+      parameters:
+        - "var|bareword"
+    npcGenitals:
+      description: |-
+        Prints descriptor(s) of active NPC's full genitals
+
+        `<<npcGenitals npcIndex? descType?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to current `$index`
+        - **descType** _optional_: `string` - type of description to provide
+          - `"simple"`: Uses `<<npcPenisSimple>>` instead of full description
+      parameters:
+        - '|+ number |+ "simple"'
+      tags: ["text"]
+    npcgloryhole:
+      name: npcgloryhole
+    npcgrapplestripall:
+      name: npcgrapplestripall
+    npcHairColour:
+      description: |-
+        Prints hair colour of a named NPC
+
+        `<<npcHairColour namedNPCIndex>>`
+        - **namedNPCIndex**: `string` - named NPC name
+          - %namedNPCDesc%
+      parameters:
+        - "%namedNPC%"
+    npchand:
+      name: npchand
+    npcHurt:
+      name: npcHurt
+      parameters:
+        - '|+ "Robin"'
+      tags: ["text", "refactor"]
+    npcidlegenitals:
+      name: npcidlegenitals
+    npcincr:
+      name: npcincr
+    npckiss:
+      name: npckiss
+    npcList:
+      name: npcList
+    npcNamed:
+      name: npcNamed
+    npcNamedUpdate:
+      description: |-
+        Updates $npcNamedVersion and underlying data from previous versions if necessary
+
+        Current version is 2
+    npcoral:
+      name: npcoral
+    npcPenis:
+      description: |-
+        Prints descriptor of active NPC's penis with full description
+
+        Does not handle strapons
+
+        See `<<npcPenisSimple>>` for no description
+
+        `<<npcPenis npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to current `$index`
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    npcPenisColored:
+      description: |-
+        Prints colored-descriptor of active NPC's penis with full description
+
+        See `<<npcPenisColored>>` for no description
+
+        `<<npcPenis npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to current `$index`
+      parameters:
+        - "|+ number"
+      tags: ["unused", "text"]
+    npcPenisSimple:
+      description: |-
+        Prints descriptor of active NPC's penis
+
+        See `<<npcPenis>>` for full description
+
+        `<<npcPenis npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to current `$index`
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    npcPregnancyUpdater:
+      name: npcPregnancyUpdater
+    npcrelationship:
+      name: npcrelationship
+    npcRevealText:
+      description: |-
+        Prints description of npc's genitals being revealed
+
+        Does not include ending punctuation
+
+        Example:
+        ```
+        The <<person>> <<npcUndressText _npc "lower" "self">>, <<npcRevealText _npc "lower">>.
+        ```
+
+        `<<npcUndressText npcObject clothesSlot mod?>>`
+        - **npcObject**: `object` - NPC object to check
+        - **clothesSlot**: `string` - slot on npc object to undress
+          - `"upper"` | `"lower"` | `"both"`
+        - **mod**: `string` - how NPC should be referred to
+          - `"name"`: NPC's Name or description if name is unknown
+          - `"desc"`: NPC's description
+          - `default`: `<<his>>`
+      parameters:
+        - 'bareword|var &+ "upper"|"lower"|"both" |+ "name"|"desc"'
+      tags: ["text"]
+    npcset:
+      name: npcset
+    npcSettings:
+      name: npcSettings
+    npcSettingsMenu:
+      name: npcSettingsMenu
+    NPCSettingsReset:
+      name: NPCSettingsReset
+    npcspank:
+      name: npcspank
+    npcspankgag:
+      name: npcspankgag
+    npcstrapon:
+      name: npcstrapon
+    npcstrip:
+      name: npcstrip
+    npcstripall:
+      name: npcstripall
+    npcUndressText:
+      description: |-
+        Prints description of npc undressing
+
+        Does not actually change any state of their clothing
+
+        Example:
+        ```
+        You try to <<npcUndressText _npc _clothesTarget>>, but this is just an example
+        ```
+
+        `<<npcUndressText npcObject clothesSlot selfUndress?>>`
+        - **npcObject**: `object` - NPC object to check
+        - **clothesSlot**: `string` - slot on npc object to undress
+          - `"upper"` | `"lower"` | `"both"`
+        - **selfUndress**: `bool` - NPC is undressing themselves (truthy)
+          - Defaults to `false`
+      parameters:
+        - 'bareword|var &+ "upper"|"lower"|"both" |+ bool|"self"'
+      tags: ["text"]
+    npcVagina:
+      description: |-
+        Prints descriptor of active NPC's vagina
+
+        `<<npcVagina npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to current `$index`
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    NPCVirginityTakenByOther:
+      name: NPCVirginityTakenByOther
+    NPCvirginitywarning:
+      description: |-
+        Prints warning for named npc if virginity is available to lose
+
+        `<<NPCvirginitywarning namedNPCName virginityType>>`
+        - **namedNPCName**: `string` - name of named NPC
+          - %namedNPCDesc%
+        - **virginityType**: `string` - type of virginity to check and warn
+          - %virginityTypesDesc%
+      parameters:
+        - "%namedNPC% &+ %virginityTypes%"
+    nude_text:
+      description: |-
+        Prints general exposure state as adjective
+
+        Example:
+        ```
+        Everyone sees you are just a <<nude_text>> example.
+        ```
+
+        Out of date and underutilised. Consider refactoring
+      tags: ["text", "refactor"]
+    nudity:
+      description: |-
+        Prints description of pc's nudity
+
+        Example:
+        ```
+        You feel them ogle your <<nudity>>.
+        ```
+
+        Does not take into account over_top or over_bottom. Consider refactoring
+      tags: ["refactor", "text"]
+    number:
+      description: |-
+        Prints a number as spelled-out cardinal form (first, second, etc)
+
+        Numbers outside of 100 are not spelled-out for style reasons
+
+        `<<number numberAsInt output>>`
+        - **numberAsInt**: `number` - number to convert
+        - **output** _optional_: `string` - how to output text
+          - `default`: Prints output
+          - `"silent"`: Stores output in `_text_output`
+      parameters:
+        - 'number |+ "silent"'
+      tags: ["text", "temp"]
+    Number:
+      description: |-
+        Prints a number as capitalised spelled-out cardinal form (First, Second, etc)
+
+        Numbers outside of 100 are not spelled-out for style reasons
+
+        `<<Number numberAsInt>>`
+        - **numberAsInt**: `number` - number to convert
+      parameters:
+        - "number"
+      tags: ["text"]
+    numberify:
+      name: numberify
+    numberpool:
+      name: numberpool
+      tags: ["unused"]
+    numberslider:
+      name: numberslider
+    nurseinit:
+      name: nurseinit
+    office_manager:
+      name: office_manager
+    officeafterhours:
+      name: officeafterhours
+    officebusinesshours:
+      name: officebusinesshours
+    officecheckcomplaints:
+      name: officecheckcomplaints
+    officecomplaintsextreme:
+      name: officecomplaintsextreme
+    officecomplaintshigh:
+      name: officecomplaintshigh
+    officecomplaintslow:
+      name: officecomplaintslow
+    officecomplaintsmedium:
+      name: officecomplaintsmedium
+    officeliftdescend:
+      name: officeliftdescend
+    officepassout:
+      name: officepassout
+    officestreakactions:
+      name: officestreakactions
+    officestreakhide:
+      name: officestreakhide
+    officeupdatecomplaints:
+      name: officeupdatecomplaints
+    ohe:
+      description: |-
+        Prints singular pronoun for current npc regardless of being a beast (`<<bhe>>`) or man (`<<he>>`)
+
+        Eligible for deprecation. Consider refactoring this functionality into `<<he>>`
+      tags: ["text", "refactor"]
+    oldWardrobeList:
+      description: |-
+        Printss provided slots of wardrobe
+
+        `<<oldWardrobeList slot showType?>>`
+        - **slot**: `string` - clothing slot to enumerate from current wardrobe
+          - %clothesTypesDesc%
+        - **showType** _optional_: `string` - outfits or non-outfits
+          - Defaults to showing both
+          - `"outfits"` | `"non-outfits"`
+      parameters:
+        - '%clothesTypes% |+ "outfits"|"non-outfits"'
+      tags: ["dom", "legacy"]
+    oldWardrobeListDisplay:
+      deprecatedSuggestions:
+        - wardrobeContents
+      description: |-
+        Enumerates and prints wardrobe contents
+      tags: ["dom", "legacy"]
+    oldWardrobeMinorOptions:
+      description:
+        - Enumerates and prints alternative wear options for current clothing
+      tags: ["dom", "legacy"]
+    openinghours:
+      description: |-
+        Prints `A sign reads "Opening hours: 8:00 - 21:00"` in user set time format
+      tags: ["text"]
+    optionsadvanced:
+      name: optionsadvanced
+    optionsExportImport:
+      name: optionsExportImport
+    optionsgeneral:
+      name: optionsgeneral
+    optionsperformance:
+      name: optionsperformance
+    optionstheme:
+      name: optionstheme
+    optionsThemeDefault:
+      name: optionsThemeDefault
+    oral:
+      name: oral
+    oraldifficulty:
+      description: |-
+        Prints color-coded adjective of oral action difficulty in current combat
+      tags: ["text"]
+    oralejacstat:
+      name: oralejacstat
+    oralnew:
+      name: oralnew
+    oralpassage:
+      name: oralpassage
+    oralskill:
+      description: |-
+        Adds oral skill to pc's state
+
+        `$oralskill` is a measure of pc's proficiency giving oral where 0 is awkward (0-1,000)
+
+        `<<oralskill change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    oralskilluse:
+      name: oralskilluse
+    oralstat:
+      name: oralstat
+    oralswallownew:
+      name: oralswallownew
+    oraltext:
+      description: |-
+        Prints color-coded adjective of active oral skill usage
+      tags: ["text"]
+    oralvirginitywarning:
+      description: |-
+        Prints `This action will take your oral virginity.` if oral virginity can still be lost
+
+        Takes combat state into account to display starting pipe `| `
+      tags: ["text"]
+    orgasm:
+      name: orgasm
+    orgasmbeach:
+      name: orgasmbeach
+    orgasmbog:
+      name: orgasmbog
+    orgasmcount:
+      name: orgasmcount
+    orgasmforest:
+      name: orgasmforest
+    orgasmHourlyRecovery:
+      name: orgasmHourlyRecovery
+    orgasmLocation:
+      name: orgasmLocation
+    orgasmstage:
+      name: orgasmstage
+    orgasmstat:
+      name: orgasmstat
+    orgasmstreet:
+      name: orgasmstreet
+    orgasmTrait:
+      description: |-
+        Prints `| Hedonist` or `| Orgasm Addict` depending on pc's `$submissive`
+      tags: ["unused", "text"]
+    orphanageWard:
+      name: orphanageWard
+    orphanageWardOptions:
+      name: orphanageWardOptions
+    otherOutfitChecks:
+      name: otherOutfitChecks
+    othersFeelings:
+      name: othersFeelings
+    outergoo:
+      name: outergoo
+    outfit:
+      description: |-
+        Prints name of middle clothing layer as outfit or if it was an outfit
+
+        Also sets `$stripset` to determine if both layers should be removed together
+      tags: ["text"]
+    outfitChecks:
+      description: |-
+        Sets temporary variables (as bools) according to state of pc's dress
+
+        - `_underOutfit`:  under clothes are complete outfit
+        T.middleOutfit = middle clothes are complete outfit
+        T.overOutfit = over clothes are complete outfit
+
+        T.underNaked = under clothes are completely naked
+        T.middleNaked = middle clothes are completely naked
+        T.overNaked = over clothes are completely naked
+        T.topless = top clothes are essentially naked
+        T.bottomless = bottom clothes are completely naked
+        T.fullyNaked = all clothes are completely naked
+      tags: ["temp"]
+    outfitChecksExposed:
+      name: outfitChecksExposed
+    outfitEditor:
+      name: outfitEditor
+    outfitEditorDefaultFilter:
+      name: outfitEditorDefaultFilter
+    outfitEditorFilter:
+      name: outfitEditorFilter
+    outfitEditorItem:
+      name: outfitEditorItem
+    outfitEditorItemClothes:
+      name: outfitEditorItemClothes
+    outfitEditorItemColour:
+      name: outfitEditorItemColour
+    outfitEditorList:
+      name: outfitEditorList
+    outfitEditorPageControls:
+      name: outfitEditorPageControls
+    outfitEditorPageSetup:
+      name: outfitEditorPageSetup
+    outfitEditorUpdateFilter:
+      name: outfitEditorUpdateFilter
+    outfiton:
+      name: outfiton
+      tags: ["unused"]
+    OutfitShop:
+      name: OutfitShop
+    overheadon:
+      name: overheadon
+      tags: ["unused"]
+    overheadruined:
+      description: |-
+        Destroys pc's over_head slot clothing, whether worn or carried
+
+        `<<overheadruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    overheadsend:
+      name: overheadsend
+      tags: ["unused"]
+    overheadsteal:
+      name: overheadsteal
+      tags: ["unused"]
+    overheadstrip:
+      name: overheadstrip
+      tags: ["unused"]
+    overheadundress:
+      name: overheadundress
+    overheadwear:
+      name: overheadwear
+      tags: ["unused"]
+    overlayReplace:
+      name: overlayReplace
+    overlower:
+      name: overlower
+      tags: ["unused"]
+    overlowerhas:
+      description: |-
+        Prints plural/singular prose of has (have/has) for worn `"over_lower"` slot
+      tags: ["unused"]
+    overlowerimg:
+      name: overlowerimg
+    overlowerintegrity:
+      name: overlowerintegrity
+      tags: ["unused"]
+    overlowerit:
+      description: |-
+        Prints an objective case pronoun (them/it) for worn `"over_lower"` slot
+    overloweritis:
+      description: |-
+        Prints a pronoun/ present indicative pair (they are/it is) describing worn `"over_lower"` slot
+    overloweron:
+      name: overloweron
+      tags: ["unused"]
+    overlowerplural:
+      description: |-
+        Prints a present indicative (are/is) for the worn `"over_lower"` slot
+    overlowerruined:
+      description: |-
+        Destroys pc's over_lower slot clothing, whether worn or carried
+
+        `<<overlower noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    overlowersend:
+      name: overlowersend
+      tags: ["unused"]
+    overlowersteal:
+      name: overlowersteal
+      tags: ["unused"]
+    overlowerstrip:
+      name: overlowerstrip
+    overlowerthat:
+      description: |-
+        Prints plural/singular prose of that (those/that) for worn `"over_lower"` slot
+    overlowerundress:
+      name: overlowerundress
+    overlowerwear:
+      name: overlowerwear
+    OverOutfitShop:
+      name: OverOutfitShop
+    overpulldown:
+      description: |-
+        Prints verb of player pulling lower clothing into an exposed state
+
+        Does not actually set clothing into exposed or pulled state. Consider refactoring
+      tags: ["unused", "text", "refactor"]
+    overpullsdown:
+      description: |-
+        Prints plural verb of player pulling lower clothing into an exposed state
+
+        Does not actually set clothing into exposed or pulled state. Consider refactoring
+      tags: ["unused", "text", "refactor"]
+    overpullsup:
+      description: |-
+        Prints verb of player pulling upper clothing into an exposed state
+
+        Does not actually set clothing into exposed or pulled state. Consider refactoring
+      tags: ["unused", "text", "refactor"]
+    overpullup:
+      description: |-
+        Prints verb of player pulling upper clothing into an exposed state
+
+        Does not actually set clothing into exposed or pulled state. Consider refactoring
+      tags: ["unused", "text", "refactor"]
+    overruined:
+      description: |-
+        Destroys pc's over_upper and over_lower slot clothing, whether worn or carried
+
+        `<<overruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    OverTopShop: #undeclared
+      name: OverTopShop
+    overupperhas:
+      description: |-
+        Prints plural/singular prose of has (have/has) for worn `"over_upper"` slot
+      tags: ["unused"]
+    overupperimg:
+      name: overupperimg
+    overupperintegrity:
+      name: overupperintegrity
+      tags: ["unused"]
+    overupperit:
+      description: |-
+        Prints an objective case pronoun (them/it) for worn `"over_upper"` slot
+    overupperitis:
+      description: |-
+        Prints a pronoun/ present indicative pair (they are/it is) describing worn `"over_upper"` slot
+      tags: ["unused"]
+    overupperon:
+      name: overupperon
+      tags: ["unused"]
+    overupperplural:
+      description: |-
+        Prints a present indicative (are/is) for the worn `"over_upper"` slot
+    overupperruined:
+      description: |-
+        Destroys pc's over_upper slot clothing, whether worn or carried
+
+        `<<overupperruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    overuppersend:
+      name: overuppersend
+      tags: ["unused"]
+    overuppersteal:
+      name: overuppersteal
+      tags: ["unused"]
+    overupperstrip:
+      name: overupperstrip
+    overupperthat:
+      description: |-
+        Prints plural/singular prose of that (those/that) for worn `"over_upper"` slot
+    overupperundress:
+      name: overupperundress
+    overupperwear:
+      name: overupperwear
+    overworld_nickname:
+      description: |-
+        Prints pc's nickname used in the overworld
+
+        See `<<underworld_nickname>>`
+
+        `<<overworld_nickname textTransform>>`
+        - **textTransform**: `string` - transformation to apply to text before printing
+          - `"cap"`: Capitalise
+      parameters:
+        - '|+ "cap"'
+      tags: ["text"]
+    overwriteoutfit:
+      name: overwriteoutfit
+    oxford:
+      name: oxford
+    oxfordeventend:
+      name: oxfordeventend
+    oxfordexposed:
+      name: oxfordexposed
+      tags: ["unused"]
+    oxfordquick:
+      name: oxfordquick
+    oxygen:
+      name: oxygen
+    oxygencaption:
+      name: oxygencaption
+    oxygenrefresh:
+      name: oxygenrefresh
+    pain:
+      description: |-
+        Adds pain to pc's state
+
+        `$pain` is pc's pain amount where 0 is not-in-pain (0-200)
+
+        `<<pain change modifier?>>`
+        - **change**: `number` - +/- change to apply
+        - **modifier** _optional_: `number` - multiplier mod to apply to change
+          - Defaults to `4`
+      parameters:
+        - "number |+ number"
+    paincaption:
+      name: paincaption
+    painclamp:
+      name: painclamp
+    panties:
+      description: |-
+        Prints descriptor of active NPC's inner_lower clothing
+
+        See `<<bra>>` for inner_upper clothing or `<<skirt>>` for lower clothing
+
+        See `<<npcClothesText>>` for full name of clothes
+      tags: ["text"]
+    pantsable:
+      description: |-
+        Checks if pc's lower clothing can be pulled down/ flipped up
+
+        `_pantsable` will be set to 0 or 1 if lower can be pulled down
+        `_upskirt` will be set to 0 or 1 if lower can be flipped up
+      tags: ["temp"]
+    pantsdowncomments:
+      name: pantsdowncomments
+    pantsdownevents:
+      name: pantsdownevents
+    pantsdowngender:
+      name: pantsdowngender
+    pantsdownlewd:
+      name: pantsdownlewd
+    pantsdownscene:
+      name: pantsdownscene
+    pantsdowntime:
+      name: pantsdowntime
+    parasite:
+      name: parasite
+    parasiteinit:
+      name: parasiteinit
+    park:
+      name: park
+    parkeventend:
+      name: parkeventend
+    parkex1:
+      name: parkex1
+    parkex2:
+      name: parkex2
+    parkex3:
+      name: parkex3
+    parkexposed:
+      name: parkexposed
+      tags: ["unused"]
+    parkquick:
+      name: parkquick
+    parkrun:
+      name: parkrun
+    pass:
+      description: |-
+        Advances time by an amount
+
+        `<<pass timeToPass units?>>`
+        - **timeToPass**: `number` - number of units
+        - **units** _optional_: `string` - units of number
+          - `"sec"` | `"seconds"` | `"min"` | `"mins"` | `"minute"` | `"minutes"` | `"hour"` | `"hours"` | `"day"` | `"days"` | `"week"` | `"weeks"`
+          - Defaults to `"min"`
+      parameters:
+        - 'number |+ "sec"|"seconds"|"min"|"mins"|"minute"|"minutes"|"hour"|"hours"|"day"|"days"|"week"|"weeks"'
+    passagestrip:
+      description: |-
+        Strips player and prints a paragraph of description of the sequence
+
+        `<<passagestrip limit?>>`
+        - **limit** _optional_: `string` - maximum layer to strip down to
+          - `"undies"`
+      parameters:
+        - '|+ "undies"'
+    passiveStudy:
+      name: passiveStudy
+    passout:
+      description: |-
+        Applies stat changes from passing out and ruffles hair
+    passout_flats:
+      description: |-
+        Passes out and prints links for players in at the Flats
+      tags: ["links"]
+    passout_mines:
+      description: |-
+        Passes out and prints links for players in the Mines
+      tags: ["links"]
+    passout_moor:
+      description: |-
+        Passes out and prints links for players in the Moor
+      tags: ["links"]
+    passout_prison:
+      description: |-
+        Passes out and prints links for players in Prison
+      tags: ["links"]
+    passout_rut:
+      description: |-
+        Passes out and prints links for players in the Prison Rut
+      tags: ["links"]
+    passoutadultshop:
+      description: |-
+        Passes out and prints links for players in the Adult Shop
+      tags: ["links"]
+    passoutalley:
+      description: |-
+        Passes out and prints links for players in the Alley
+      tags: ["links"]
+    passoutarcade:
+      description: |-
+        Passes out and prints links for players in the Arcade
+      tags: ["links"]
+    passoutasylum:
+      description: |-
+        Passes out and prints links for players in the Asylum
+      tags: ["links"]
+    passoutbeach:
+      description: |-
+        Passes out and prints links for players at the Beach
+      tags: ["links"]
+    passoutbog:
+      description: |-
+        Passes out and prints links for players in the Bog
+      tags: ["links"]
+    passoutbus:
+      description: |-
+        Passes out and prints links for players on the Bus
+      tags: ["links"]
+    passoutcatacombs:
+      description: |-
+        Passes out and prints links for players in the Catacombs
+      tags: ["links"]
+    passoutcave:
+      description: |-
+        Passes out and prints links for players in the Seaside Cave
+      tags: ["links"]
+    passoutcompound:
+      description: |-
+        Passes out and prints links for players at the Compound
+      tags: ["links"]
+    passoutdrain:
+      description: |-
+        Passes out and prints links for players in the Storm Drain
+      tags: ["links"]
+    passoutfarmroad:
+      description: |-
+        Passes out and prints links for players along the Farm Road
+      tags: ["links"]
+    passoutforest:
+      description: |-
+        Passes out and prints links for players in the Forest
+      tags: ["links"]
+    passouthome:
+      description: |-
+        Passes out and prints links for players at the Orphanage
+      tags: ["links"]
+    passouthospital:
+      description: |-
+        Passes out and prints links for players in the Hospital
+      tags: ["links"]
+    passoutlake:
+      description: |-
+        Passes out and prints links for players at the Lake
+      tags: ["links"]
+    passoutpark:
+      description: |-
+        Passes out and prints links for players in the Park
+      tags: ["links"]
+    passoutpirates:
+      description: |-
+        Passes out and prints links for players on the Pirate Ship
+      tags: ["links"]
+    passoutremy:
+      description: |-
+        Passes out and prints links for players in Remy's hands
+      tags: ["links"]
+    passoutsea:
+      description: |-
+        Passes out and prints links for players at Sea
+      tags: ["links"]
+    passoutshop:
+      description: |-
+        Passes out and prints links for players in the Shopping Centre
+      tags: ["links"]
+    passoutstreet:
+      description: |-
+        Passes out and prints links for players on the Street
+      tags: ["links"]
+    passouttemple:
+      description: |-
+        Passes out and prints links for players in the Temple (Sydney does not rescue)
+      tags: ["links"]
+    passouttempleSydney:
+      description: |-
+        Passes out and prints links for players in the Temple (Sydney rescues)
+      tags: ["links"]
+    passouttentacleworld:
+      description: |-
+        Passes out and prints links for players in the Tentacle World
+      tags: ["links"]
+    passouttrash:
+      description: |-
+        Passes out and prints links for players in the Landfill
+      tags: ["links"]
+    passPercent:
+      description: |-
+        Prints `| X% pass chance`
+
+        `<<passPercent percentAsInt>>`
+        - **percentAsInt**: `number` - percent to output
+          `0-100`
+      parameters:
+        - "number"
+      tags: ["text"]
+    passTimeUntil:
+      description: |-
+        Advances time until hours:minutes exactly
+
+        `<<passTimeUntil hour minute?>>`
+        - **hour**: `number` - hour to advance to
+        - **minute** _optional_: `number` - minute in hour to advance to
+          - Defaults to `0`
+      parameters:
+        - "number |+ number"
+    pbhairinit:
+      name: pbhairinit
+    pcFarmBirth:
+      name: pcFarmBirth
+    pcpetname:
+      description: |-
+        Print's named NPC's pet name for pc's
+
+        See `<<pcPetname>>` for capitalised version
+
+        Uses too many versions of NPC's names as inputs. Consider refactoring to use just one
+
+        `<<pcpetname npcName npcEmotionMod?>>`
+        - **npcName**: `string` - example kind to output
+          - `"Avery"` | `"Wraith"`
+        - **npcEmotionMod** _optional_: `string` - npc's emotional intention when using this pet name
+          - `"angry"` | `"nice`
+      parameters:
+        - '"Avery"|"Wraith"'
+        - '"Wraith" |+ "angry"|"nice"'
+      tags: ["text"]
+    pcPetname:
+      description: |-
+        Print's capitalised prose of named NPC's pet name for pc's
+
+        See `<<pcpetname>>` for non-capitalised version
+
+        Does not take into account second parameter of base widget. Consider refactoring
+
+        `<<pcPetname npcName>>`
+        - **npcName**: `string` - example kind to output
+          - `"Avery"` | `"Wraith"`
+      parameters:
+        - '"Avery"|"Wraith"'
+      tags: ["text", "refactor"]
+    pcPregnancyRevealToAlex:
+      name: pcPregnancyRevealToAlex
+    penetrationPainCalculate:
+      name: penetrationPainCalculate
+    peniledifficulty:
+      description: |-
+        Prints color-coded adjective of penile action difficulty in current combat
+      tags: ["text"]
+    penileejacstat:
+      name: penileejacstat
+    penileskill:
+      description: |-
+        Adds penile skill to pc's state
+
+        `$penileskill` is a measure of pc's proficiency using their penis where 0 is awkward (0-1,000)
+
+        `<<penileskill change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    penileskilluse:
+      name: penileskilluse
+    penilestat:
+      name: penilestat
+    peniletext:
+      description: |-
+        Prints color-coded adjective of active penile skill usage
+      tags: ["text"]
+    penilevirginitywarning:
+      description: |-
+        Prints `This action will deflower you` if penile virginity can still be lost and not protected by strap-on
+
+        Takes combat state into account to display starting pipe `| `
+      tags: ["text"]
+    penis:
+      name: penis
+    penis_lube_amount:
+      description: |-
+        Prints the amount of lube around player penis
+
+        Relies on `_penis_lube_amount` being set already
+
+        See `<<penis_lube_text>>`
+      tags: ["text", "temp"]
+    penis_lube_text:
+      description: |-
+        Prints qualified description of lube around the penis prior to penetration
+
+        Example:
+        ```
+        <<penis_lube_text>> the example can be performed without a problem.
+        ```
+      tags: ["text"]
+    penisactionDifficulty:
+      name: penisactionDifficulty
+    penisactionDifficultyTentacle:
+      name: penisactionDifficultyTentacle
+    penisActionInit:
+      name: penisActionInit
+    penisActionInitStruggle:
+      name: penisActionInitStruggle
+    penisActionInitTentacle:
+      name: penisActionInitTentacle
+    penisActions:
+      name: penisActions
+    penisActionsTentacle:
+      name: penisActionsTentacle
+    penises:
+      name: penises
+    penisinit:
+      name: penisinit
+    penisinspection:
+      name: penisinspection
+    penisinspection2:
+      name: penisinspection2
+    penisinspectionstudents:
+      name: penisinspectionstudents
+    penisraped:
+      name: penisraped
+    penisremark:
+      name: penisremark
+      tags: ["unused"]
+    Penisremark:
+      name: Penisremark
+      tags: ["unused"]
+    penisremarkcomma:
+      name: penisremarkcomma
+      tags: ["unused"]
+    Penisremarkcomma:
+      name: Penisremarkcomma
+      tags: ["unused"]
+    penisremarkcommaquote:
+      name: penisremarkcommaquote
+      tags: ["unused"]
+    Penisremarkcommaquote:
+      name: Penisremarkcommaquote
+      tags: ["unused"]
+    penisremarkquote:
+      name: penisremarkquote
+      tags: ["unused"]
+    Penisremarkquote:
+      name: Penisremarkquote
+    penisremarkstop:
+      name: penisremarkstop
+      tags: ["unused"]
+    Penisremarkstop:
+      name: Penisremarkstop
+      tags: ["unused"]
+    penisremarkstopquote:
+      name: penisremarkstopquote
+      tags: ["unused"]
+    Penisremarkstopquote:
+      name: Penisremarkstopquote
+    penisSimple:
+      description: |-
+        Prints `strap-on` or `penis` based on pc's active penis
+    penissize:
+      name: penissize
+    people:
+      description: |-
+        Prints `men and women` unless player has mono-gendered the world
+
+        See `<<peopley>>`
+      tags: ["text"]
+    peopley:
+      description: |-
+        Prints `boys and girls` unless player has mono-gendered the world
+
+        See `<<people>>`
+      tags: ["text"]
+    peppersprays:
+      name: peppersprays
+    perNPCSettingsMenu:
+      name: perNPCSettingsMenu
+    person:
+      name: person
+    person_dance:
+      name: person_dance
+    person1:
+      name: person1
+    person2:
+      name: person2
+    person3:
+      name: person3
+    person4:
+      name: person4
+    person5:
+      name: person5
+    person6:
+      name: person6
+    personname:
+      name: personname
+    personpenis:
+      name: personpenis
+    persons:
+      name: persons
+    personselect:
+      name: personselect
+    personsimple:
+      name: personsimple
+    persony:
+      description: |-
+        Prints `boy` or `girl` randomly based on world gender distribution
+
+        Extremely different behavior to `<<person>>`. Consider refactoring
+      tags: ["text", "refactor"]
+    PetShopBoughtItem:
+      name: PetShopBoughtItem
+    pharmnurseinit:
+      name: pharmnurseinit
+      tags: ["unused"]
+    pheat:
+      name: pheat
+    pher:
+      description: |-
+        Prints singular possessive pronoun of pc (her/his)
+
+        See `<<pHer>>` for capitalised prose, or `<<phers>>` as predicate adjective
+      tags: ["text"]
+    pHer:
+      description: |-
+        Prints capitalised singular possessive pronoun of pc (Her/His)
+
+        See `<<pher>>` for uncapitalised prose
+      tags: ["text"]
+    phers:
+      description: |-
+        Prints singular possessive pronoun as predicate adjective of pc (his/hers)
+
+        See `<<pher>>` for general possessive pronoun
+      tags: ["text"]
+    pherself:
+      description: |-
+        Prints singular objective pronoun as reflexive form of pc (herself/himself)
+
+        See `<<pHerself>>` for capitalised prose
+      tags: ["text"]
+    pHerself:
+      description: |-
+        Prints capitalised singular objective pronoun as reflexive form of pc (Herself/Himself)
+
+        See `<<pherself>>` for uncapitalised prose
+      tags: ["unused", "text"]
+    phim:
+      description: |-
+        Prints singular objective pronoun as reflexive form of pc (her/him)
+
+        See `<<pHim>>` for capitalised prose
+      tags: ["text"]
+    pHim:
+      description: |-
+        Prints capitalised singular objective pronoun as reflexive form of pc (Her/Him)
+
+        See `<<phim>>` for uncapitalised prose
+      tags: ["text"]
+    photo_end:
+      name: photo_end
+    photo_evidence_upload:
+      name: photo_evidence_upload
+    physicalAdjustments:
+      name: physicalAdjustments
+    physicalAdjustmentsInit:
+      name: physicalAdjustmentsInit
+    physique:
+      name: physique
+    physique_loss:
+      name: physique_loss
+    physiquedifficulty:
+      name: physiquedifficulty
+    pickupSexToy:
+      name: pickupSexToy
+    pillory_type:
+      name: pillory_type
+    pillorypeniscomment:
+      name: pillorypeniscomment
+    pinchEnd:
+      description: |-
+        Restores the values frozen by `<<pinchStart>>`, keeping the player's progress of reading the book
+
+        If the player does not currently have the book, either stolen or rented, also removes Pinch from persistent NPCs
+    pinchhe:
+      name: pinchhe
+    pinchHe:
+      name: pinchHe
+    pinchhim:
+      name: pinchhim
+    pinchhis:
+      name: pinchhis
+    pinchHis:
+      name: pinchHis
+    pinchStart:
+      description: |-
+        Freezes the story variables, then modifies weather and time
+    pirate_attack_end:
+      description: |-
+        Unsets pirate attack variables to end the event
+    pirate_attack_init:
+      description: |-
+        Sets pirate attack variables to initial values to start the event
+    pirate_attention:
+      description: |-
+        Adds attention away from the pirates to pc's state
+
+        `$pirate_attention` is a measure of how distracting the player is during pirate events where 0 is not distracting (0+)
+
+        `<<pirate_attention change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    pirate_clothes_up:
+      description: |-
+        Dresses pc in pirate clothes appropriate to their status
+    pirate_mate_work:
+      description: |-
+        Prints passage of pc being assigned a task for being in a location
+
+        `<<pirate_mate_work location>>`
+        - **location**: `string` - current location of pc
+          - `"deck"` | `"cabin"` | `"bilge"`
+      parameters:
+        - '"deck"|"cabin"|"bilge"'
+      tags: ["text"]
+    pirate_mate_work_end_links:
+      description: |-
+        Prints end links after pirate mate work has been completed
+
+        Relies on `$phase` being set from `<<pirate_mate_work>>` to determine location to send pc back to
+      tags: ["links"]
+    pirate_rescue:
+      description: |-
+        Enables rescue from combat if pirate rank is high enough
+    pirate_status:
+      description: |-
+        Changes `$pirate_status` as long as appropriate tier is met
+
+        `$pirate_status` is a `0-100` measurement of the pc's status amongst the pirates
+
+        If a tier is provided, it must match that tier exactly
+
+        `<<pirate_status change qualifyingTier?>>`
+        - **change**: `number` - status to gain
+        - **qualifyingTier**: `string` - tier to meet to gain status
+          - Defaults to `1`
+      parameters:
+        - 'number |+ "scum"|"mate"'
+    pirate_watch:
+      description: |-
+        Changes `$pirate_watch` by value
+
+        `$pirate_watch` is a `0-100` measurement of how much attention the player has gained from pirates noticing them
+
+        `<<pirate_watch change>>`
+        - **change**: `number` - amount to change by
+      parameters:
+        - "number"
+    plant_details:
+      description: |-
+        Prints season and location appropriate details for a plant person's hair
+
+        `<<plant_details locationOverride?>>`
+        - **locationOverride** _optional_: `string` - location to match details to
+          - `default`: pc's current `$location`
+          - `"moor"` | `"forest"` | `"bog"`
+      parameters:
+        - '|+ "moor"|"forest"|"bog"'
+      tags: ["text"]
+    Plant_details:
+      description: |-
+        Prints capitalised season and location appropriate details for a plant person's hair
+
+        `<<Plant_details locationOverride?>>`
+        - **locationOverride** _optional_: `string` - location to match details to
+          - `default`: pc's current `$location`
+          - `"moor"` | `"forest"` | `"bog"`
+      parameters:
+        - '|+ "moor"|"forest"|"bog"'
+      tags: ["text"]
+    plantlower:
+      name: plantlower
+    plantspeech:
+      name: plantspeech
+    plantup:
+      name: plantup
+    plantupper:
+      name: plantupper
+    player-base-body:
+      name: player-base-body
+    playerEndWaterBreaking:
+      name: playerEndWaterBreaking
+      tags: ["unused"]
+    playerPrebirth:
+      name: playerPrebirth
+    playerPregnancy:
+      name: playerPregnancy
+    playerPregnancyAttempt:
+      name: playerPregnancyAttempt
+    playerPregnancyHawkAttempt:
+      name: playerPregnancyHawkAttempt
+    playLinePool:
+      name: playLinePool
+    playReadiness:
+      name: playReadiness
+    playWithBreasts:
+      name: playWithBreasts
+    plot_effects:
+      name: plot_effects
+    plots_init:
+      name: plots_init
+    plural:
+      description: |-
+        Prints a present indicative (are/is) for provided clothing slot
+
+        `<<plural slot>>`
+        - **slot**: `string` - category of worn clothing to check
+          - %clothesTypesDesc%
+      parameters:
+        - "%clothesTypes%"
+    pmother:
+      description: |-
+        Prints respectful title for pc as a parent (mother/father)
+
+        See `<<pMother>>` for capitalised prose
+      tags: ["unused", "text"]
+    pMother:
+      description: |-
+        Prints capitalised respectful title for pc as a parent (Mother/Father)
+
+        See `<<pmother>>` for uncapitalised prose
+      tags: ["unused", "text"]
+    police_computer_action:
+      name: police_computer_action
+    popcornEat:
+      name: popcornEat
+    popcornSpill:
+      name: popcornSpill
+      tags: ["text"]
+    portalPantiesClear:
+      name: portalPantiesClear
+    portalPantiesDisplay:
+      name: portalPantiesDisplay
+      tags: ["unused"]
+    portalPantiesDisplayItem:
+      name: portalPantiesDisplayItem
+    portalPantiesDisplayMessage:
+      name: portalPantiesDisplayMessage
+    portalPantiesDisplayVirginity:
+      name: portalPantiesDisplayVirginity
+    portalPantiesFillHole:
+      name: portalPantiesFillHole
+    portalPantiesFuck:
+      name: portalPantiesFuck
+    portalPantiesPass:
+      name: portalPantiesPass
+      tags: ["unused"]
+    portalPantiesPlayerCum:
+      name: portalPantiesPlayerCum
+      tags: ["unused"]
+    portalPantiesPortalCum:
+      name: portalPantiesPortalCum
+    portalPantiesSetup:
+      name: portalPantiesSetup
+      tags: ["unused"]
+    postMirror:
+      name: postMirror
+    pound_compete_text:
+      name: pound_compete_text
+    pound_init:
+      name: pound_init
+    pound_muzzle:
+      name: pound_muzzle
+    pound_punishment_links:
+      name: pound_punishment_links
+    pound_stats:
+      name: pound_stats
+    pound_status:
+      name: pound_status
+    pound_text:
+      name: pound_text
+    pound_walk_end:
+      name: pound_walk_end
+    ppackbrother:
+      name: ppackbrother
+    pPackbrother:
+      name: pPackbrother
+    ppackbrothers:
+      name: ppackbrothers
+    pPackbrothers:
+      name: pPackbrothers
+    prayerend:
+      name: prayerend
+    prayerRoomEnd:
+      description: |-
+        Restores the values frozen by at the start of the prayer room scene
+
+        Keeps Sydney at the first slot of `$NPCList`
+
+        Keeps the world corruption and some other values that can be modified during the scene
+    prayoptions:
+      name: prayoptions
+    PregEventsResult:
+      name: PregEventsResult
+    pregnancyBabyText:
+      name: pregnancyBabyText
+    pregnancyBirthBlackWolf:
+      name: pregnancyBirthBlackWolf
+    pregnancyBirthWolfCave:
+      name: pregnancyBirthWolfCave
+    pregnancyDailyEvent:
+      name: pregnancyDailyEvent
+    pregnancyFeats:
+      name: pregnancyFeats
+    pregnancyGendersText:
+      name: pregnancyGendersText
+    pregnancyMorningAfterPill:
+      name: pregnancyMorningAfterPill
+    pregnancySettings:
+      name: pregnancySettings
+    pregnancyTest:
+      name: pregnancyTest
+    pregnancyType:
+      name: pregnancyType
+    pregnancyVar:
+      name: pregnancyVar
+    pregnancyWatersBrokenPassout:
+      name: pregnancyWatersBrokenPassout
+    preMirror:
+      name: preMirror
+    prenancyObjectRepair:
+      name: prenancyObjectRepair
+    presetConfirm:
+      description: |-
+        Validates and applies Preset object into state variables
+
+        Relies on `_validatorObject` already being set
+
+        `<<presetConfirm presetObject useAltLabel?>>`
+        - **presetObject**: `object` - object to be imported
+        - **useAltLabel** _optional_: `bool` - truthy indicating to use sub-labels
+      parameters:
+        - var|bareword
+        - '"pronoun"|"gender"|"penissize"|"breastsize"|"bottomsize"|"gender_body"|"ballsExist"|"freckles" |+ bool|text|number'
+      tags: ["temp"]
+    presetConfirmDetails:
+      name: presetConfirmDetails
+    presets:
+      description: |-
+        Applies a preset to game and refreshes settings display to provided page
+
+        `<<presets presetName page? randomizeResult?>>`
+        - **presetName**: `string` - name of preset to apply
+        - **page** _optional_: `string` - page to display after preset is applied
+          - Defaults to "characterSettings". See <<displaySettings>> for additional values
+        - **randomizeResult** _optional_: `string` - JSON object containing preset results. Generally the return of randomizeSettings()
+      parameters:
+        - string |+ string
+        - '"randomize" &+ string &+ bareword|var'
+    priceSettings:
+      name: priceSettings
+    priest:
+      description: |-
+        Prints `priest` or `priestess` depending on active NPC pronoun
+      tags: ["text"]
+    priestapo:
+      description: |-
+        Prints `priest's` or `priestess'` depending on active NPC pronoun
+      tags: ["text"]
+    priestAttack:
+      name: priestAttack
+    priests:
+      description: |-
+        Prints `priests` or `priestesses` depending on active NPC pronoun
+      tags: ["text"]
+    printbuysendhome:
+      name: printbuysendhome
+    printChastity:
+      description: |-
+        Prints `$worn.genitals.name`
+
+        Used in a single spot that can be escaped. Consider refactoring
+      tags: ["text", "refactor"]
+    printCombatMenu:
+      name: printCombatMenu
+    printcursed:
+      name: printcursed
+    printmoney:
+      description: |-
+        Prints amount in pennies as formatted currency
+
+        `<<printmoney amountInPennies classlist?>>`
+        - **amountInPennies**: `number` - amount in pennies, positive or negative
+        - **classlist** _optional_: `number` - DOM classlist to be used to color text
+          - Defaults to `"gold"`
+      parameters:
+        - "number |+ text"
+      tags: ["text"]
+    printpreggy:
+      name: printpreggy
+    printShopColourOptions:
+      name: printShopColourOptions
+    printTipsList:
+      name: printTipsList
+    prison_attention:
+      name: prison_attention
+    prison_birds:
+      name: prison_birds
+    prison_birds_text:
+      name: prison_birds_text
+    prison_bondage_removal:
+      name: prison_bondage_removal
+    prison_day:
+      name: prison_day
+    prison_detach_leash:
+      name: prison_detach_leash
+    prison_end:
+      name: prison_end
+    prison_feat_check:
+      name: prison_feat_check
+    prison_guard_greet:
+      name: prison_guard_greet
+    prison_guard_watch:
+      name: prison_guard_watch
+    prison_guards:
+      name: prison_guards
+    prison_hope:
+      name: prison_hope
+    prison_init:
+      name: prison_init
+    prison_inmates:
+      name: prison_inmates
+    prison_laundry_options:
+      name: prison_laundry_options
+    prison_list:
+      name: prison_list
+    prison_list_dark:
+      name: prison_list_dark
+    prison_list_result:
+      name: prison_list_result
+    prison_list_speech:
+      name: prison_list_speech
+    prison_map:
+      name: prison_map
+    prison_medical_options:
+      name: prison_medical_options
+    prison_punishment_end:
+      name: prison_punishment_end
+    prison_punishment_init:
+      name: prison_punishment_init
+    prison_reb:
+      name: prison_reb
+    prison_rep:
+      name: prison_rep
+    prison_repunishment_options:
+      name: prison_repunishment_options
+    prison_revolt_options:
+      name: prison_revolt_options
+    prison_sleep_options:
+      name: prison_sleep_options
+    prison_spire_options:
+      name: prison_spire_options
+    prison_teeth:
+      name: prison_teeth
+    prison_teeth_text:
+      name: prison_teeth_text
+    prison_unbind:
+      name: prison_unbind
+    prison_work:
+      name: prison_work
+    prisoncrimeUp:
+      name: prisoncrimeUp
+    produceDisplay:
+      name: produceDisplay
+    produceDisplayConfirm:
+      name: produceDisplayConfirm
+    produceDisplayItem:
+      name: produceDisplayItem
+    prof:
+      description: |-
+        Adds proficiency to pc's stats for given category
+
+        `$prof[X]` are amount of player skill in given category where 0 is unskilled (0-1,000)
+
+        `<<prof category change>>`
+        - **category**: `string` - category of proficiency to add
+          - `"spray"` | `"net"` | `"whip"` | `"baton"`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - '"spray"|"net"|"whip"|"baton" &+ number'
+    projectoptions:
+      name: projectoptions
+    promiscuity1:
+      name: promiscuity1
+    promiscuity2:
+      name: promiscuity2
+    promiscuity3:
+      name: promiscuity3
+    promiscuity4:
+      name: promiscuity4
+    promiscuity5:
+      name: promiscuity5
+    promiscuity6:
+      name: promiscuity6
+      tags: ["unused"]
+    promiscuityN:
+      name: promiscuityN
+    promiscuous:
+      description: |-
+        Prints `Promiscuous X` with appropriate color for level
+
+        `<<promiscuous level>>`
+        - **level**: `number` - required level for this action
+          - `1-6`: level and color
+          - `0`: just text
+      parameters:
+        - "number"
+      tags: ["unused", "text"]
+    promiscuous1:
+      description: |-
+        Prints `Promiscuous 1` with appropriate color for level
+      tags: ["text"]
+    promiscuous2:
+      description: |-
+        Prints `Promiscuous 2` with appropriate color for level
+      tags: ["text"]
+    promiscuous3:
+      description: |-
+        Prints `Promiscuous 3` with appropriate color for level
+      tags: ["text"]
+    promiscuous4:
+      description: |-
+        Prints `Promiscuous 4` with appropriate color for level
+      tags: ["text"]
+    promiscuous5:
+      description: |-
+        Prints `Promiscuous 5` with appropriate color for level
+      tags: ["text"]
+    promiscuous6:
+      description: |-
+        Prints `!Promiscuous 6!` with appropriate color for level
+      tags: ["unused", "text"]
+    prop:
+      name: prop
+    prostate:
+      description: |-
+        Prints `womb` or `prostate` depending on if player has vagina
+      tags: ["text"]
+    pshe:
+      description: |-
+        Prints singular pronoun of pc (he/she)
+
+        See `<<pShe>>` for capitalised prose
+      tags: ["text"]
+    pShe:
+      description: |-
+        Prints capitalised singular pronoun of pc (He/She)
+
+        See `<<pshe>>` for uncapitalised prose
+      tags: ["text"]
+    pshes:
+      description: |-
+        Prints singular pronoun as is/has contraction of pc (he's/she's)
+
+        See `<<pShes>>` for capitalised prose
+      tags: ["text"]
+    pShes:
+      description: |-
+        Prints capitalised singular pronoun as is/has contraction of pc (He's/She's)
+
+        See `<<pshes>>` for uncapitalised prose
+      tags: ["text"]
+    psir:
+      description: |-
+        Prints respectful address for pc (sir/ma'am)
+
+        See `<<pSir>>` for capitalised prose
+      tags: ["text"]
+    pSir:
+      description: |-
+        Prints capitalised respectful address for pc (Sir/Ma'am)
+
+        See `<<pSir>>` for capitalised prose
+      tags: ["unused", "text"]
+    pub_cave_arrival:
+      name: pub_cave_arrival
+    pub_cave_intro:
+      name: pub_cave_intro
+    pubfameChange:
+      name: pubfameChange
+    pubfameComplete:
+      name: pubfameComplete
+    pubfameDifficulty:
+      name: pubfameDifficulty
+    pubfameOptions:
+      name: pubfameOptions
+    pubfameRemyPassword:
+      name: pubfameRemyPassword
+    pubfameReset:
+      name: pubfameReset
+    pulldown:
+      description: |-
+        Prints verb of player pulling lower clothing into an exposed state
+
+        Does not actually set clothing into exposed or pulled state. Consider refactoring
+      tags: ["text", "refactor"]
+    pulldownall:
+      description: |-
+        Prints description of player pulling all lower clothing into an exposed state
+
+        Does not actually set clothing into exposed or pulled state. Consider refactoring
+      tags: ["text", "refactor"]
+    pullsdown:
+      description: |-
+        Prints plural verb of player pulling lower clothing into an exposed state
+
+        Does not actually set clothing into exposed or pulled state. Consider refactoring
+      tags: ["unused", "text", "refactor"]
+    pullsup:
+      description: |-
+        Prints plural verb of player pulling upper clothing into an exposed state
+
+        Does not actually set clothing into exposed or pulled state. Consider refactoring
+      tags: ["text", "refactor"]
+    pullup:
+      description: |-
+        Prints verb of player pulling upper clothing into an exposed state
+
+        Does not actually set clothing into exposed or pulled state. Consider refactoring
+      tags: ["text", "refactor"]
+    pullupall:
+      description: |-
+        Prints description of player pulling all upper clothing into an exposed state
+
+        Does not actually set clothing into exposed or pulled state. Consider refactoring
+      tags: ["text", "refactor"]
+    purity:
+      description: |-
+        Adds purity to pc's state, with appropriate modifiers
+
+        `$purity` is measure of pc's physical distance from sex where 0 is demonic (0-1,000)
+
+        Dark clothing penalises awareness reductions. Consider refactoring
+
+        `<<awareness change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    push_nnpc_genderknown:
+      name: push_nnpc_genderknown
+    pushClothingCaption:
+      name: pushClothingCaption
+    pussies:
+      name: pussies
+    pussy:
+      name: pussy
+    pussyinspection:
+      name: pussyinspection
+    pussyinspectionherm:
+      name: pussyinspectionherm
+    quicksand_actions:
+      name: quicksand_actions
+    quicksand_end:
+      name: quicksand_end
+    quicksand_pull:
+      name: quicksand_pull
+    quickStart:
+      name: quickStart
+    quickStartOptions:
+      name: quickStartOptions
+    radio_addnews:
+      name: radio_addnews
+      tags: ["unused"]
+    radio_hardreset:
+      name: radio_hardreset
+      tags: ["unused"]
+    radio_listen:
+      name: radio_listen
+    radio_midnight:
+      name: radio_midnight
+      tags: ["unused"]
+    radio_placehere:
+      name: radio_placehere
+      tags: ["unused"]
+    radiogroup:
+      name: radiogroup
+      tags: ["unused"]
+    radiooutfits:
+      name: radiooutfits
+    radiovar:
+      container: true
+      name: radiovar
+    ragup:
+      name: ragup
+    raidLockers:
+      name: raidLockers
+    rainstreak:
+      name: rainstreak
+      tags: ["unused"]
+    rainWraith:
+      name: rainWraith
+    rainyDayHarass:
+      name: rainyDayHarass
+    random_goo:
+      name: random_goo
+    random_goo_head:
+      name: random_goo_head
+    random_semen:
+      name: random_semen
+    random_semen_head:
+      name: random_semen_head
+    randomPlay:
+      name: randomPlay
+    randomteacher:
+      description: |-
+        Prints name of a teacher the player knows
+    randomWear:
+      name: randomWear
+    raped:
+      name: raped
+    rapestat:
+      name: rapestat
+    rapeTrait:
+      description: |-
+        Prints `| Survivor` or `| Fucktoy` depending on pc's `$submissive`
+      tags: ["unused", "text"]
+    reb:
+      description: |-
+        Adds rebelliousness to orphanage
+
+        `$orphan_reb` is measure of rebelliousness levels in orphanage where negative is no rebelliousness and 0 is neutral (-50-50)
+
+        `<<reb change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    recordAnusSperm:
+      name: recordAnusSperm
+    recordSperm:
+      name: recordSperm
+    recordVaginalSperm:
+      name: recordVaginalSperm
+    relation-box:
+      name: relation-box
+    relation-box-simple:
+      name: relation-box-simple
+    relation-box-stat:
+      name: relation-box-stat
+    relation-box-wolves:
+      name: relation-box-wolves
+    relation-text:
+      name: relation-text
+      tags: ["unused"]
+    relationshipclamp:
+      name: relationshipclamp
+    relationshiptext:
+      name: relationshiptext
+    relaxed_guard:
+      name: relaxed_guard
+    remove_punishments:
+      name: remove_punishments
+    remove_shackle:
+      name: remove_shackle
+    removeBabyIntro:
+      name: removeBabyIntro
+    removeButtplug:
+      name: removeButtplug
+    removeCChildBirthDate:
+      name: removeCChildBirthDate
+      tags: ["unused"]
+    removeCChildConceptionDate:
+      name: removeCChildConceptionDate
+      tags: ["unused"]
+    removeCNPCEventTimer:
+      name: removeCNPCEventTimer
+      tags: ["unused"]
+    removeCNPCPregnancyTimer:
+      name: removeCNPCPregnancyTimer
+      tags: ["unused"]
+    removeCreature:
+      name: removeCreature
+    removeNNPCOutfit:
+      name: removeNNPCOutfit
+    removeNPCCondom:
+      name: removeNPCCondom
+    removeparasite:
+      name: removeparasite
+    removePlayerCondom:
+      name: removePlayerCondom
+    removeTryingOn:
+      name: removeTryingOn
+    rendermodel:
+      description: |-
+        Render and print model as a static image
+
+        [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
+
+        `<<rendermodel className? cssAnim?>>`
+        - **className**: `string` - class or space-separated classes of canvas element to be inserted when placed in the DOM
+        - **cssAnim** _optional_: `bool` - render multiple frames for css animation
+          - Defaults to false
+      parameters:
+        - "|+ text |+ bool|bareword|var"
+      tags: ["dom"]
+    rentday:
+      name: rentday
+    rentdue:
+      name: rentdue
+    rentduerobin:
+      name: rentduerobin
+    rentEdenTrade:
+      name: rentEdenTrade
+    rentmod:
+      name: rentmod
+    rentnopay:
+      name: rentnopay
+    rentpay:
+      name: rentpay
+    rentRobinPunishment:
+      name: rentRobinPunishment
+    replaceAction:
+      name: replaceAction
+      tags: ["unused"]
+    replaceActionLink:
+      name: replaceActionLink
+    replaceAskColour:
+      name: replaceAskColour
+      tags: ["unused"]
+    reqSkill:
+      name: reqSkill
+      tags: ["unused"]
+    reroute:
+      name: reroute
+      skipArgs: true
+      tags: ["unused"]
+    rescueWraith:
+      name: rescueWraith
+    resetEarSlime:
+      name: resetEarSlime
+    resetLastOptions:
+      name: resetLastOptions
+    resetPregButtons:
+      name: resetPregButtons
+    resetSaveMenu:
+      name: resetSaveMenu
+    residential:
+      name: residential
+    residentialdrain:
+      name: residentialdrain
+    residentialdraineventend:
+      name: residentialdraineventend
+    residentialdrainlinks:
+      name: residentialdrainlinks
+    residentialdrainquick:
+      name: residentialdrainquick
+    residentialeventend:
+      name: residentialeventend
+    residentialex1:
+      name: residentialex1
+    residentialex2:
+      name: residentialex2
+    residentialex3:
+      name: residentialex3
+    residentialexposed:
+      name: residentialexposed
+      tags: ["unused"]
+    residentialquick:
+      name: residentialquick
+    restartMenstruationCycle:
+      name: restartMenstruationCycle
+    returnCarried:
+      name: returnCarried
+    reveal:
+      name: reveal
+    right_pursuit_grab:
+      name: right_pursuit_grab
+    rightactionBoundBanish:
+      name: rightactionBoundBanish
+    rightactionDifficulty:
+      name: rightactionDifficulty
+    rightactionDifficultyMachine:
+      name: rightactionDifficultyMachine
+      tags: ["unused"]
+    rightactionDifficultySelf:
+      name: rightactionDifficultySelf
+    rightactionDifficultyStruggle:
+      name: rightactionDifficultyStruggle
+      tags: ["unused"]
+    rightactionDifficultySwarm:
+      name: rightactionDifficultySwarm
+      tags: ["unused"]
+    rightactionDifficultyTentacle:
+      name: rightactionDifficultyTentacle
+    rightactionDifficultyVore:
+      name: rightactionDifficultyVore
+      tags: ["unused"]
+    rightActionInit:
+      name: rightActionInit
+    rightActionInitMachine:
+      name: rightActionInitMachine
+    rightActionInitSelf:
+      name: rightActionInitSelf
+    rightActionInitStruggle:
+      name: rightActionInitStruggle
+    rightActionInitSwarm:
+      name: rightActionInitSwarm
+    rightActionInitTentacle:
+      name: rightActionInitTentacle
+    rightActionInitVore:
+      name: rightActionInitVore
+    rightActions:
+      name: rightActions
+    rightactionSetupTentacle:
+      name: rightactionSetupTentacle
+    rightActionsMachine:
+      name: rightActionsMachine
+    rightActionsSelf:
+      name: rightActionsSelf
+    rightActionsStruggle:
+      name: rightActionsStruggle
+    rightActionsSwarm:
+      name: rightActionsSwarm
+    rightActionsTentacle:
+      name: rightActionsTentacle
+    rightActionsVore:
+      name: rightActionsVore
+    rightarmtentacledisable:
+      name: rightarmtentacledisable
+    rightcamerapose:
+      name: rightcamerapose
+    rightchoke:
+      name: rightchoke
+    rightclothesnew:
+      name: rightclothesnew
+    rightCondom:
+      name: rightCondom
+    rightcoverface:
+      name: rightcoverface
+    rightdefault:
+      name: rightdefault
+    rightdildowhack:
+      name: rightdildowhack
+    rightFixAndCoverActions:
+      name: rightFixAndCoverActions
+    rightgrabnew:
+      name: rightgrabnew
+    righthandpull:
+      name: righthandpull
+    righthypnosiswhack:
+      name: righthypnosiswhack
+    rightNPCCondom:
+      name: rightNPCCondom
+    rightpenwhacknew:
+      name: rightpenwhacknew
+    rightplaynew:
+      name: rightplaynew
+    rightshacklewhack:
+      name: rightshacklewhack
+    rightspraynew:
+      name: rightspraynew
+    rightstealnew:
+      name: rightstealnew
+    rightUndressOther:
+      name: rightUndressOther
+    rng:
+      description: |-
+        Generates a new rng value between min and max to be stored in `$rng`
+
+        `$rng` is the pseudo-random value last generated by this call or passage start
+
+        `$rngOverride` is a fixed value debug variable to use for all `<<rng>>` calls in a passage
+
+        1. `<<rng max?>>`
+        - **max** _optional_: `number` - maximum (inclusive) value
+          - Defaults to `100`
+
+        2. `<<rng min max>>`
+        - **min**: `string` - minimum (inclusive) value
+          - Defaults to `1`
+      parameters:
+        - "|+ number |+ number"
+    rngWraith:
+      name: rngWraith
+    rngWraithSocial:
+      name: rngWraithSocial
+    robinbrothelappear:
+      name: robinbrothelappear
+    robinbully:
+      name: robinbully
+    robinChocolateOfferHelp:
+      name: robinChocolateOfferHelp
+    robinForestCostumeBuy:
+      name: robinForestCostumeBuy
+    robinForestCostumeOptions:
+      name: robinForestCostumeOptions
+    robinForestCostumePose:
+      name: robinForestCostumePose
+    robinhug:
+      name: robinhug
+    robinInfirmaryCDOptions:
+      name: robinInfirmaryCDOptions
+    robinInfirmaryCDUndressLower:
+      name: robinInfirmaryCDUndressLower
+    robinInfirmaryVariableCleanup:
+      name: robinInfirmaryVariableCleanup
+    robinOpen:
+      name: robinOpen
+    robinoptions:
+      name: robinoptions
+    robinpay:
+      name: robinpay
+    robinPayout:
+      name: robinPayout
+    robinPilloryFailure:
+      name: robinPilloryFailure
+    robinPilloryHour:
+      name: robinPilloryHour
+    robinPunishment:
+      name: robinPunishment
+    robinRentUnsafeMessage:
+      name: robinRentUnsafeMessage
+    robinroom:
+      name: robinroom
+    robinroom_link:
+      name: robinroom_link
+    robinTraumaMultiplierDecay:
+      name: robinTraumaMultiplierDecay
+    roomoptions:
+      name: roomoptions
+    ruffleHair:
+      name: ruffleHair
+    ruffleHairFromSleep:
+      name: ruffleHairFromSleep
+    ruined:
+      description: |-
+        Destroys all of the pc's clothing slots, whether worn or carried
+
+        This includes head, face, neck, over_upper, upper, under_upper, hands, over_lower, lower, under_lower, legs, and feet slot clothing
+    run_text:
+      name: run_text
+    runeventpool:
+      name: runeventpool
+    rut:
+      description: |-
+        Prints `| Rut`
+      tags: ["text"]
+    rut_end:
+      name: rut_end
+    rutCycle:
+      name: rutCycle
+    sadism:
+      description: |-
+        Adds sadism to pc's state
+
+        `$sadism` is a measure of pc's progression towards being sadistic where 0 is no progress (0-1,000)
+
+        `<<sadism change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    safereplace:
+      container: true
+      name: safereplace
+    save_anxious_guard:
+      name: save_anxious_guard
+    save_methodical_guard:
+      name: save_methodical_guard
+    save_relaxed_guard:
+      name: save_relaxed_guard
+    save_scarred_inmate:
+      name: save_scarred_inmate
+    save_tattooed_inmate:
+      name: save_tattooed_inmate
+      tags: ["unused"]
+    save_veteran_guard:
+      name: save_veteran_guard
+    saveConfirm:
+      name: saveConfirm
+    saveList:
+      name: saveList
+    saveNameSection:
+      name: saveNameSection
+    saveNPC:
+      description: |-
+        Saves persistent npc to named slot
+
+        See `<<loadNPC>>`, `<<updateNPC>>`, & `<<clearNPC>>`
+
+        `<<saveNPC slot name>>`
+        - **slot**: `number` - slot number to pull npc data from (zero-based)
+        - **name**: `string` - key to save npc's data to
+          - spaces should be avoided if possible
+      parameters:
+        - "number &+ string|text"
+    saves:
+      name: saves
+    saveTempHairStyle:
+      name: saveTempHairStyle
+    saveWarning:
+      name: saveWarning
+    sayexhibproud:
+      name: sayexhibproud
+    scarred_inmate:
+      name: scarred_inmate
+    schismEnd:
+      description: |-
+        Restores the values frozen by `<<schismStart>>` and passes time until 6:00am
+    schismStart:
+      description: |-
+        Freezes the story variables, then morphs the pc into Clánha
+    school_infirmary_options:
+      name: school_infirmary_options
+    school_mark:
+      name: school_mark
+    school_skill_change:
+      name: school_skill_change
+    school_skill_down:
+      name: school_skill_down
+    school_skill_up:
+      name: school_skill_up
+    school_skill_up_text:
+      name: school_skill_up_text
+    schoolbully:
+      name: schoolbully
+    schoolbullyoutside:
+      name: schoolbullyoutside
+    schoolcatcall:
+      description: |-
+        Prints random catcall appropriate for pc's peers to say
+    schoolChangingRoomLinks:
+      name: schoolChangingRoomLinks
+    schoolclothesreset:
+      name: schoolclothesreset
+    schoolday:
+      description: |-
+        Prints school schedule for today/ tomorrow if player is not trapped
+      tags: ["text"]
+    schooleffects:
+      name: schooleffects
+    schoolfameboard:
+      name: schoolfameboard
+    schoolperiod:
+      name: schoolperiod
+    schoolperiodtext:
+      name: schoolperiodtext
+    schoolpoolclothes:
+      name: schoolpoolclothes
+    schoolpoolclothesreset:
+      name: schoolpoolclothesreset
+    schoolpoolexposed:
+      name: schoolpoolexposed
+    schoolpoolmasoncheck:
+      description: |-
+        Check for bindings and prints quick unbinding description if Mason has to remove them immediately
+
+        Mason makes a mental note to bring chastity key from now on
+      tags: ["text"]
+    schoolPoolSwap:
+      name: schoolPoolSwap
+    schoolpoolundress:
+      name: schoolpoolundress
+    schoolrep:
+      description: |-
+        Changes school reputation and alerts named NPCs
+
+        Reputation is clamped between 0 and 5
+
+        See `<<schoolrep_naked>>` for autocalculated version
+
+        `<<schoolrep type change>>`
+        - **type**: `string` - type of reputation to change
+          - `"crossdress"` | `"herm"`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - '"crossdress"|"herm" &+ number'
+    schoolrep_naked:
+      description: |-
+        Changes school reputation by 1 in response to player being naked
+    schoolShop-main:
+      name: schoolShop-main
+    schoolskill:
+      name: schoolskill
+    schoolskillgeneral:
+      name: schoolskillgeneral
+    schoolspareclothes:
+      name: schoolspareclothes
+    schoolterm:
+      name: schoolterm
+    schoolVendingMachine:
+      name: schoolVendingMachine
+    science_skill_up_text:
+      name: science_skill_up_text
+    scienceprojectchance:
+      name: scienceprojectchance
+    scienceprojectfinish:
+      name: scienceprojectfinish
+    scienceprojectstart:
+      name: scienceprojectstart
+    scienceskill:
+      name: scienceskill
+    sea_chest:
+      name: sea_chest
+    sea_eye:
+      name: sea_eye
+    sea_pair_orgasm:
+      name: sea_pair_orgasm
+    sea_struggle:
+      name: sea_struggle
+    sea1:
+      name: sea1
+    sea2:
+      name: sea2
+    sea3:
+      name: sea3
+    sea4:
+      name: sea4
+    sea5:
+      name: sea5
+    sea6:
+      name: sea6
+    sea7:
+      name: sea7
+    seabeach:
+      name: seabeach
+    seabeach1:
+      name: seabeach1
+    seabeach2:
+      name: seabeach2
+    seabeacheventend:
+      name: seabeacheventend
+    seabeachquick:
+      name: seabeachquick
+    seacliffs:
+      name: seacliffs
+    seacliffseventend:
+      name: seacliffseventend
+    seacliffsquick:
+      name: seacliffsquick
+    seadocks:
+      name: seadocks
+    seadockseventend:
+      name: seadockseventend
+    seadocksquick:
+      name: seadocksquick
+    seaflotsam:
+      name: seaflotsam
+    seamove:
+      name: seamove
+    seamoveeventend:
+      name: seamoveeventend
+    seamovequick:
+      name: seamovequick
+    searape:
+      name: searape
+    searchWardrobeForItem:
+      name: searchWardrobeForItem
+    searocks:
+      name: searocks
+    searockseventend:
+      name: searockseventend
+    searocksquick:
+      name: searocksquick
+    seasonal_beverage:
+      description: |-
+        Prints beverage appropriate to the current season
+      tags: ["text"]
+    seatangle:
+      name: seatangle
+    seatedflashcrotchunderskirt:
+      name: seatedflashcrotchunderskirt
+    Seatedflashcrotchunderskirt:
+      name: Seatedflashcrotchunderskirt
+    seatedflashcrotchunderskirtcomma:
+      name: seatedflashcrotchunderskirtcomma
+      tags: ["unused"]
+    Seatedflashcrotchunderskirtcomma:
+      name: Seatedflashcrotchunderskirtcomma
+      tags: ["unused"]
+    seatedflashcrotchunderskirtline:
+      name: seatedflashcrotchunderskirtline
+    seatedflashcrotchunderskirtstop:
+      name: seatedflashcrotchunderskirtstop
+      tags: ["unused"]
+    Seatedflashcrotchunderskirtstop:
+      name: seatedflashcrotchunderskirtstop
+      tags: ["unused"]
+    seatentacles:
+      name: seatentacles
+    seavore:
+      name: seavore
+    seductioncheck:
+      name: seductioncheck
+    seductiondifficulty:
+      description: |-
+        Prints difficulty of seduction in current combat or estimate of difficulty out
+
+        `_text_output` is set to difficulty description for use with `noPrint`
+
+        `noPrint` styles differ depending on combat/ non-combat. Consider refactoring
+
+        `<<seductiondifficulty noPrint?>>`
+        - **noPrint** _optional_: `bool` - Suppress output and only write to temp (truthy)
+      parameters:
+        - "|+ bool"
+      tags: ["text", "temp", "refactor"]
+    seductionskill:
+      description: |-
+        Adds seduction skill to pc's state
+
+        `$seductionskill` is a measure of pc's proficiency seducing others where 0 is awkward (0-1,000)
+
+        `<<seductionskill change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    seductionskilluptext:
+      name: seductionskilluptext
+    seductionskilluse:
+      name: seductionskilluse
+    seductionskillusecombat:
+      name: seductionskillusecombat
+    seductiontext:
+      description: |-
+        Prints color-coded adjective of active seduction skill usage
+      tags: ["unused", "text"]
+    select_random_clothes:
+      name: select_random_clothes
+    selectmodel:
+      description: |-
+        Select model and prepare for rendering
+
+        Do not render instance multiple times on same passage
+
+        [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
+
+        `<<selectmodel modelName slot>>`
+        - **modelName**: `string` - CanvasModel name in Renderer.CanvasModels
+        - **slot**: `string` - id to speed up rendering between passages
+      parameters:
+        - text |+ text
+    selectNpcWithPartInPosition:
+      name: selectNpcWithPartInPosition
+    selectNpcWithPartInPositionAnus:
+      name: selectNpcWithPartInPositionAnus
+    selfsuckchecks:
+      name: selfsuckchecks
+    sellbuns:
+      name: sellbuns
+    semen:
+      name: semen
+      tags: ["unused"]
+    semen_amount:
+      description: |-
+        Adds semen to pc's semen supply
+
+        `$semen_amount` is the current pc semen amount remaining
+
+        `<<semen_amount change>>`
+        - **change**: `number` - +/- change to apply
+    semenOrgasm:
+      name: semenOrgasm
+    semenswallowedstat:
+      name: semenswallowedstat
+    semenvolume:
+      description: |-
+        Adds semen to pc's semen capacity with appropriate checks
+
+        `$semenvolume` is the current maximum pc semen capacity (0-3,000)
+
+        `<<semenvolume change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    sendItemsTo:
+      name: sendItemsTo
+    sendItemsToDropdown:
+      name: sendItemsToDropdown
+    sendToWardrobeFromDefault:
+      name: sendToWardrobeFromDefault
+    setBabyIntro:
+      name: setBabyIntro
+    setChildFirstWord:
+      name: setChildFirstWord
+      tags: ["unused"]
+    setfemininitymultiplierfromgender:
+      name: setfemininitymultiplierfromgender
+      tags: ["unused"]
+    setFont:
+      name: setFont
+    setKnowsAboutPregnancy:
+      name: setKnowsAboutPregnancy
+    setKnowsAboutPregnancyCurrentLoaded:
+      name: setKnowsAboutPregnancyCurrentLoaded
+    setKnowsAboutPregnancyInLocation:
+      name: setKnowsAboutPregnancyInLocation
+      tags: ["unused"]
+    setLocalPronouns:
+      name: setLocalPronouns
+      tags: ["unused"]
+    setnewtarget:
+      name: setnewtarget
+    setNPCStrapon:
+      name: setNPCStrapon
+    setShopCustomColors:
+      name: setShopCustomColors
+    setSkinColorBase:
+      name: setSkinColorBase
+    setSlimeSleepEvents:
+      name: setSlimeSleepEvents
+    setTalkedAboutPregnancy:
+      name: setTalkedAboutPregnancy
+    settextcolorfromfemininity:
+      name: settextcolorfromfemininity
+    settextcolorfromgender:
+      name: settextcolorfromgender
+    settings:
+      name: settings
+    settingsExit:
+      name: settingsExit
+    settingsExitConfirm:
+      name: settingsExitConfirm
+    settingsExitConfirmHistory:
+      name: settingsExitConfirmHistory
+      tags: ["unused"]
+    settingsExitFunction:
+      name: settingsExitFunction
+    settingsOptions:
+      name: settingsOptions
+    settingsStart:
+      name: settingsStart
+    settingsTabButton:
+      name: settingsTabButton
+    setup_pillory:
+      name: setup_pillory
+    setupDefaults:
+      name: setupDefaults
+    setupFeats:
+      name: setupFeats
+    setupMidOrgasm:
+      name: setupMidOrgasm
+    setupOptions:
+      name: setupOptions
+    setupTabs:
+      name: setupTabs
+    setupTransformationPiecesObject:
+      name: setupTransformationPiecesObject
+    sewerscountdown:
+      name: sewerscountdown
+    sewersend:
+      name: sewersend
+    sewerspassout:
+      name: sewerspassout
+    sewerssleep:
+      name: sewerssleep
+    sewerssleephour:
+      name: sewerssleephour
+    sewersstart:
+      name: sewersstart
+    sex:
+      name: sex
+    sexcheck:
+      name: sexcheck
+    sexControl:
+      name: sexControl
+    sexDefaults:
+      name: sexDefaults
+    sexToysFeatUI:
+      name: sexToysFeatUI
+    sexToysFeatUIColour:
+      name: sexToysFeatUIColour
+    sextoystat:
+      name: sextoystat
+    shackle_feet:
+      name: shackle_feet
+    shadyFan:
+      name: shadyFan
+    shame:
+      description: |-
+        Adds shame to pc's current exhibitionist stint
+
+        `$shame` is a measure of how embarrassed pc is to be exposed where 0 is unrepentant (0-100)
+
+        Shame as a concept is unused. Consider refactoring when clothes are easier to micromanage
+
+        `<<shame change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+      tags: ["unused", "refactor"]
+    sharp_eyes:
+      description: |-
+        Prints `| Sharp eyes`
+      tags: ["text"]
+    shavestrip:
+      name: shavestrip
+    shopBuyItemStatus:
+      name: shopBuyItemStatus
+    shopbuyv2:
+      description: |-
+        1. `<<shopbuyv2 slot action subAction?>>`
+
+        2. `<<shopbuyv2 slot "buy" "send" choiceIndex amount?>>`
+        - **slot**: `string` - clothing slot type to affect
+          - `"all"` | %clothesTypesDesc%
+        - **action**: `string` - action to apply to for specified slot
+          - `"reset"` | `"buy"` | `"steal"` | `"try"` | `"return"`
+        - **subAction** _optional_: `string` - action to do after acquiring the clothes
+          - `"wear"` | `"send"` | `null`
+        - **choiceIndex** _optional_: `number` - index of clothes setup object
+        - **amount** _optional_: `number` - amount to buy. Defaults to 1
+      parameters:
+        - '"all"|%clothesTypes% |+ "reset"|"buy"|"steal"|"try"|"return" |+
+          "wear"|"send"|null |+ number'
+        - '"all"|%clothesTypes% &+ "buy" &+ "send" &+ number &+ number'
+    shopCategoryReplace:
+      name: shopCategoryReplace
+    shopCategoryTabs:
+      name: shopCategoryTabs
+    shopclothingcustomcolourwheel:
+      description: |-
+        Wrapper for `window.shopClothCustomColorWheel()`
+
+        Prints customcolourwheel form for clothing shop
+
+        `<<shopclothingcustomcolourwheel type>>`
+        - **type**: `string` - custom clothing slots to pull from/ save to
+          - `"primary"` | `"secondary"`
+      parameters:
+        - '"primary"|"secondary"'
+      tags: ["form"]
+    shopClothingFilterReset:
+      name: shopClothingFilterReset
+    shopClothingFilterSettingsDefault:
+      name: shopClothingFilterSettingsDefault
+    shopClothingFilterToggle:
+      name: shopClothingFilterToggle
+    shopCommandoCheck:
+      description: |-
+        Checks if pc has left a shop without wearing underwear
+    shopDetailsv2:
+      name: shopDetailsv2
+    shopFullImage:
+      name: shopFullImage
+    shopFullImagePart:
+      name: shopFullImagePart
+    shopFullImageSlot:
+      name: shopFullImageSlot
+    shopFullImageToggle:
+      name: shopFullImageToggle
+    shopHoodCheck:
+      name: shopHoodCheck
+    shoptraits:
+      description: |-
+        Prints all clothing traits as DOM
+      tags: ["dom"]
+    showlayer:
+      description: |-
+        Show layer and optionally add filters
+
+        [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
+
+        `<<showlayer layerName ...filters?>>`
+        - **layerName**: `string` - layer name corresponding to CanvasModel.layer
+        - **filters** _optional_: `object` - Filter objects passed to layer
+          - Later filters have priority
+      parameters:
+        - text |+ ...(bareword|var)
+    showTransformations:
+      description: |-
+        Restores the transformations hidden by `<<hideTransformations>>`
+      tags: ["unused"]
+    ShowUnderEquip:
+      name: ShowUnderEquip
+    shredderactions:
+      name: shredderactions
+    sidebarlookdescription:
+      name: sidebarlookdescription
+    sir:
+      description: |-
+        Prints `sir` or `miss` depending on pc's appearance
+      tags: ["text"]
+    Sir:
+      description: |-
+        Prints capitalised `Sir` or `Miss` depending on pc's appearance
+      tags: ["text"]
+    sister:
+      name: sister
+    Sister:
+      name: Sister
+    sister_npc:
+      name: sister_npc
+    Sister_npc:
+      name: Sister_npc
+      tags: ["unused"]
+    sizeLimitsSettings:
+      name: sizeLimitsSettings
+    skill_difficulty:
+      name: skill_difficulty
+    skillDifficultyText:
+      name: skillDifficultyText
+    skinColorInit:
+      name: skinColorInit
+    skinColorInitOldSave:
+      name: skinColorInitOldSave
+    skinColourName:
+      name: skinColourName
+    skincolourtext:
+      description: |-
+        Prints `X skin colour.` modified by natural skin colour and tan levels
+      tags: ["text"]
+    skipToOrgasm:
+      name: skipToOrgasm
+    skirt:
+      description: |-
+        Prints descriptor of active NPC's lower clothing
+
+        See `<<dress>>` for upper clothing or `<<panties>>` for inner_lower clothing
+
+        See `<<npcClothesText>>` for full name of clothes
+      tags: ["text"]
+    skul_dock_contents:
+      name: skul_dock_contents
+    skul_dock_init:
+      name: skul_dock_init
+    skul_dock_location:
+      name: skul_dock_location
+    skul_dock_nav:
+      name: skul_dock_nav
+    skul_dock_state:
+      name: skul_dock_state
+    skulduggery:
+      description: |-
+        Adds skulduggery skill to pc's state
+
+        `$skulduggery` is a measure of pc's dexterity and guile where 0 is bad (0-1,000)
+
+        `<<skulduggery change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    skulduggerycheck:
+      description: |-
+        Performs an inline skulduggery check
+
+        `$skulduggerydifficulty` is a measure of the action difficulty where 0 is guaranteed (0-1,000)
+
+        `$skulduggerysuccess` is the result of the check where 0 is failed (0|1)
+
+        `<<skulduggerycheck outputModifier?>>`
+        - **outputModifier** _optional_: `string` - type of modifier to apply
+          - `"silent"`: Does not print results
+      parameters:
+        - '|+ "silent"'
+      tags: ["text"]
+    skulduggerydifficulty:
+      description: Prints color-coded adjective of skulduggery difficulty
+
+        Relies on `$skulduggerydifficulty`, see `<<skulduggerycheck>>`
+      tags: ["text"]
+    skulduggeryrequired:
+      description:
+        Prints minimum skulduggery level required to successfully lockpick
+
+        `$lock` is the minimum skulduggery skill required to unlock where 0 is guaranteed (0-1,000)
+      tags: ["text"]
+    skulduggeryskilluse:
+      name: skulduggeryskilluse
+    skulduggeryuse:
+      name: skulduggeryuse
+    skulshopevents:
+      name: skulshopevents
+    sleep:
+      description: |-
+        Process and apply sleep effects, with appropriate interruptions
+
+        `<<sleep skipWakeEvents?>>`
+        - **skipWakeEvents** _optional_: `bool` - skip events that could wake pc from sleep, even if they would normally occur
+      parameters:
+        - "|+ bool"
+    sleep_clamp:
+      name: sleep_clamp
+    sleepeffects:
+      name: sleepeffects
+    sleephour:
+      name: sleephour
+    sleepJanet:
+      description: |-
+        Restores the values frozen by `<<callJanet>>`
+    slime_wake_home:
+      name: slime_wake_home
+    slimeEventEnd:
+      name: slimeEventEnd
+    slimeEventResult:
+      name: slimeEventResult
+    slimePunishmentForest:
+      name: slimePunishmentForest
+    slimeSleepEvents:
+      name: slimeSleepEvents
+    slimeWakeAlleyway:
+      name: slimeWakeAlleyway
+    slimeWakeBodyliquid:
+      description: |-
+        Covers pc in random amounts of specified liquid from slime sleepwalking pc around town
+
+        `<<slimeWakeBodyliquid liquid>>`
+        - **liquid**: `string` - liquid to apply to pc
+          - %liquidTypesDesc%
+      parameters:
+        - "%liquidTypes%"
+    slimeWakeMasturbation:
+      description: |-
+        Activates forced slime masturbation outcome out of sleep
+      tags: ["links"]
+    slithering:
+      description: |-
+        Prints synonym for `slithering`
+      tags: ["text"]
+    slithers:
+      description: |-
+        Prints synonym for `slithers`
+      tags: ["text"]
+    slug_caught:
+      name: slug_caught
+    slug_cave_intro:
+      name: slug_cave_intro
+    slug_end:
+      name: slug_end
+    slug_init:
+      name: slug_init
+    slug_text:
+      name: slug_text
+    slut:
+      description: |-
+        Prints `pervert` or `slut` depending on pc's appearance
+      tags: ["text"]
+    small_text:
+      description: |-
+        Prints appropriate `| Small body` descriptor that allowed this text option
+      tags: ["text"]
+    smugglerdifficultyactions:
+      name: smugglerdifficultyactions
+    smugglerdifficultynpcs:
+      name: smugglerdifficultynpcs
+    smugglerdifficultytext:
+      name: smugglerdifficultytext
+    smugglerobject:
+      name: smugglerobject
+    social:
+      name: social
+    someone:
+      description: |-
+        Prints `<<him>>` of an NPC, either provided or previously selected
+
+        Modifies selected NPC
+
+        `<<someone npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to 0
+      parameters:
+        - "|+ number"
+    someones:
+      description: |-
+        Prints possessive pronoun of an NPC, either provided or previously selected
+
+        Modifies selected NPC if not `"two"`
+
+        `<<someones npcIndex?>>`
+        - **npcIndex** _optional_: `number|string` - zero-based index of active npcs
+          - `"two"` : does not select NPC, just prints `"their"`
+          - `0-5` : selects NPC and prints `<<his>>`
+      parameters:
+        - 'number|"two"'
+    spa_actions:
+      name: spa_actions
+    spa_breasts_strip:
+      name: spa_breasts_strip
+    spa_end:
+      name: spa_end
+    spa_event_select:
+      name: spa_event_select
+    spa_genitals_reaction:
+      name: spa_genitals_reaction
+    spa_genitals_strip:
+      name: spa_genitals_strip
+    spa_hand_failed:
+      name: spa_hand_failed
+    spa_init:
+      name: spa_init
+    spa_job_init:
+      name: spa_job_init
+    spa_rape_failed:
+      name: spa_rape_failed
+    spa_rob_options:
+      name: spa_rob_options
+    spa_tan_events:
+      name: spa_tan_events
+    spa_work:
+      name: spa_work
+    spankmaninit:
+      name: spankmaninit
+    spareclothesdomus:
+      name: spareclothesdomus
+    spareschoolswimshorts:
+      name: spareschoolswimshorts
+    spareschoolswimsuit:
+      name: spareschoolswimsuit
+    speak:
+      name: speak
+    specialClothesEffectsSetup:
+      name: specialClothesEffectsSetup
+    specialClothesHint:
+      description: |-
+        Sets the temporary array `_specialClothesHint` to static values
+        - Keys are lowercase special clothes names without spaces
+        - Values are the hints
+      tags: ["temp"]
+    specialClothesSetup:
+      name: specialClothesSetup
+    specialClothesUpdate:
+      name: specialClothesUpdate
+    speech-sydney:
+      name: speech-sydney
+    speechWraith:
+      description: |-
+        Prints up to two relevant wraith lines
+
+        `_line1` / `_line2` are two lines chosen
+
+        `"lines"` argument expects output to be silenced since it doesn't properly set `_speaks`.
+        Consider refactoring to either apply speaks or guarantee no output is generated
+
+        Sydney is a love interest but doesn't have argument override set. Consider refactoring
+
+        `<<speechWraith type?>>`
+        - **type** _optional_: `string` - type of extra modification to do on pool of lines to pull from
+          - `"none"`: Relevant lines (default)
+          - `"lines"`: Generic lines
+          - `loveInterestName`: Overrides present npcs to add relevant lines to pool
+          - %loveInterestDesc%
+      parameters:
+        - '|+ "none"|"lines"|%loveInterest%'
+      tags: ["text", "temp", "refactor"]
+    spouse:
+      name: spouse
+    spray:
+      description: |-
+        Adds amount of spray uses to pc's state
+
+        `$spray` is number of pepper spray uses available to player where 0 is none remaining
+
+        Consuming a charge does not grant proficiency skill when successfully conserving a charge or using infinite spray. Consider refactoring
+
+        `<<spray numberUses>>`
+        - **numberUses**: `number` - +/- charges to use
+          - `+number`: Adds additional use to pc
+          - `-number`: Consumes use of spray
+      parameters:
+        - "number"
+      tags: ["refactor"]
+    sprayspeech:
+      name: sprayspeech
+    stalk_athletics_difficulty:
+      name: stalk_athletics_difficulty
+    stalk_attack:
+      name: stalk_attack
+    stalk_catch:
+      name: stalk_catch
+    stalk_events_followup:
+      name: stalk_events_followup
+    stalk_flight:
+      name: stalk_flight
+    stalk_img:
+      name: stalk_img
+    stalk_init:
+      name: stalk_init
+    stalk_nnpc_name:
+      name: stalk_nnpc_name
+    stalk_nnpc_text_attack:
+      name: stalk_nnpc_text_attack
+    stalk_nnpc_text_confront:
+      name: stalk_nnpc_text_confront
+    stalk_nnpc_text_passed:
+      name: stalk_nnpc_text_passed
+    stalk_nnpc_text_threat:
+      name: stalk_nnpc_text_threat
+    stalk_pursuit:
+      name: stalk_pursuit
+    stalk_run:
+      name: stalk_run
+    stalk_run_events:
+      name: stalk_run_events
+    stalk_skulduggery_difficulty:
+      name: stalk_skulduggery_difficulty
+    stalk_walk_events:
+      name: stalk_walk_events
+    stall_actions:
+      name: stall_actions
+    stall_amount:
+      name: stall_amount
+    stall_chance:
+      name: stall_chance
+    stall_check_text:
+      name: stall_check_text
+    stall_init:
+      name: stall_init
+    stall_inventory:
+      name: stall_inventory
+    stall_sell:
+      name: stall_sell
+    stall_sell_actions:
+      name: stall_sell_actions
+    stall_sell_man:
+      name: stall_sell_man
+    stall_trust:
+      name: stall_trust
+    stallShop-text:
+      name: stallShop-text
+      tags: ["text"]
+    starfish:
+      name: starfish
+    starfisheventend:
+      name: starfisheventend
+    starfishexposed:
+      name: starfishexposed
+      tags: ["unused"]
+    starfishquick:
+      name: starfishquick
+    startbrothelshow:
+      name: startbrothelshow
+    startCaption:
+      name: startCaption
+    startDescriptions:
+      name: startDescriptions
+    startingPlayerImage:
+      name: startingPlayerImage
+    startingPlayerImageReset:
+      name: startingPlayerImageReset
+    startingPlayerImageUpdate:
+      name: startingPlayerImageUpdate
+    startOptions:
+      name: startOptions
+    startOptionsComplexityButton:
+      name: startOptionsComplexityButton
+    startWraith:
+      name: startWraith
+    statbar:
+      description: |-
+        Prints percentage-filled statbar representing values over 0
+
+        See `<<invertedstatbar>>` for unfilled version
+
+        `<<statbar min current max rightMeter? pin?>>`
+        - **min**: `number` - lower bound to clamp display to
+        - **current**: `number` - current amount to consider for percentage calculation
+        - **max**: `number` - max amount to consider for percentage calculation
+        - **rightMeter** _optional_: `bool` - display as small inline version
+          - Defaults to `false`
+        - **pin**: `number` - ensure current does not go above this value
+          - Defaults to max
+      parameters:
+        - "number &+ number &+ number |+ bool |+ number"
+      tags: ["dom"]
+    statbarinverted:
+      description: |-
+        Prints percentage-unfilled statbar representing values over 0
+
+        See `<<statbar>>` for filled version
+
+        `<<invertedstatbar current max rightMeter?>>`
+        - **current**: `number` - current amount to consider for percentage calculation
+        - **max**: `number` - max amount to consider for percentage calculation
+        - **rightMeter** _optional_: `bool` - display as small inline version
+          - Defaults to `false`
+      parameters:
+        - "number &+ number |+ bool"
+      tags: ["dom"]
+    stateabomination:
+      name: stateabomination
+    stateman:
+      name: stateman
+    statetentacles:
+      name: statetentacles
+    statistics:
+      name: statistics
+    statisticsTimeCompare:
+      description: |-
+        Prints time since provided DateTime in statistics formatting
+
+        `<<statisticsTimeCompare datetime>>`
+        - **datetime**: `DateTime|timestamp` - timestamp or DateTime object to be checked against
+      parameters:
+        - "number|var|bareword"
+    statsCaption:
+      name: statsCaption
+    statsMoneyNoImg:
+      name: statsMoneyNoImg
+    statsWraith:
+      name: statsWraith
+    status:
+      description: |-
+        Adds coolness to pc's state, scaled as appropriate
+
+        `$cool` is a measure of pc's coolness amongst their peers where 0 is not-cool (0-400)
+
+        `<<status change>>`
+        - **change**: `number` - +/- change to apply
+          - `+number`: linear, multiplied by number of coolness clothes
+          - `-number`: percentage subtracted from current coolness, values below `-100` are not allowed
+      parameters:
+        - "number"
+    steal:
+      name: steal
+    stealclothes:
+      name: stealclothes
+    steed_he:
+      name: steed_he
+    steed_He:
+      name: steed_He
+    steed_him:
+      name: steed_him
+    steed_his:
+      name: steed_his
+    steed_init:
+      name: steed_init
+    steed_text:
+      name: steed_text
+    sterlingFather:
+      name: sterlingFather
+    sterlingSir:
+      name: sterlingSir
+    sterlingTitle:
+      name: sterlingTitle
+    stockholmTrait:
+      description: |-
+        Prints `| Stockholm Syndrome: X`
 
-        `<<deviant level>>`
-        - **level**: `number` - required level for this action
-          - `1-6`: level and color
-          - `0`: just text
+        `<<stockholmTrait type?>>`
+        - **type** _optional_: `string` - additional label to apply to output
+      parameters:
+        - "|+ string"
+      tags: ["text"]
+    storeactions:
+      description: |-
+        Strip, print description of actions, and store clothes
+
+        Used as mini-menu on passages
+
+        `<<storeactions tempStrip>>`
+        - **tempStrip**: `string` - location where clothes are being temporarily stored
+      parameters:
+        - text
+      tags: ["text", "links", "dom"]
+    storecleanup:
+      name: storecleanup
+    storeItem:
+      name: storeItem
+    storeload:
+      name: storeload
+    storeloaditem:
+      name: storeloaditem
+    storeon:
+      name: storeon
+    storeonface:
+      name: storeonface
+      tags: ["unused"]
+    storeonfeet:
+      name: storeonfeet
+      tags: ["unused"]
+    storeonhands:
+      name: storeonhands
+      tags: ["unused"]
+    storeonhead:
+      name: storeonhead
+      tags: ["unused"]
+    storeonlegs:
+      name: storeonlegs
+      tags: ["unused"]
+    storeonlower:
+      name: storeonlower
+      tags: ["unused"]
+    storeonneck:
+      name: storeonneck
+      tags: ["unused"]
+    storeonoverhead:
+      name: storeonoverhead
+      tags: ["unused"]
+    storeonoverlower:
+      name: storeonoverlower
+      tags: ["unused"]
+    storeonoverupper:
+      name: storeonoverupper
+      tags: ["unused"]
+    storeonunderlower:
+      name: storeonunderlower
+      tags: ["unused"]
+    storeonunderupper:
+      name: storeonunderupper
+      tags: ["unused"]
+    storeonupper:
+      name: storeonupper
+      tags: ["unused"]
+    storereturn:
+      name: storereturn
+    storesave:
+      name: storesave
+    stormdrain:
+      name: stormdrain
+    straighttrauma:
+      description: |-
+        Adds trauma to pc without any modifiers whatsoever
+
+        Trauma effects on pc are not updated after change.
+        Consider refactoring to call `<<trauma>>` instead of `<<traumaclamp>>`
+
+        `<<straighttrauma change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+      tags: ["unused", "refactor"]
+    strangeman1init:
+      name: strangeman1init
+      tags: ["unused"]
+    strangeman2init:
+      name: strangeman2init
+    strangewoman1init:
+      name: strangewoman1init
+    stray_happiness:
+      name: stray_happiness
+    stray_happiness_text:
+      name: stray_happiness_text
+    street_alley_detour:
+      name: street_alley_detour
+    street_niki:
+      name: street_niki
+    street_rescue:
+      name: street_rescue
+    street1:
+      name: street1
+    street10:
+      name: street10
+    street2:
+      name: street2
+    street3:
+      name: street3
+    street4:
+      name: street4
+    street5:
+      name: street5
+    street6:
+      name: street6
+    street7:
+      name: street7
+    street8:
+      name: street8
+    street9:
+      name: street9
+    streetabstinence:
+      name: streetabstinence
+    streetavery:
+      name: streetavery
+    streetbestialityfame:
+      name: streetbestialityfame
+    streetbodywriting:
+      name: streetbodywriting
+    streetbottomgrope:
+      name: streetbottomgrope
+    streetbound:
+      name: streetbound
+    streetbox:
+      name: streetbox
+    streetbullies:
+      name: streetbullies
+    streetcollared:
+      name: streetcollared
+    streetcriminalbodywriting:
+      name: streetcriminalbodywriting
+    streetdog:
+      name: streetdog
+    streetedenangry:
+      name: streetedenangry
+    streetedenrage:
+      name: streetedenrage
+    streetedenworried:
+      name: streetedenworried
+    streeteffects:
+      name: streeteffects
+    streetex1:
+      name: streetex1
+    streetex2:
+      name: streetex2
+    streetex3:
+      name: streetex3
+    streetex4:
+      name: streetex4
+    streetex5:
+      name: streetex5
+    streetexday1:
+      name: streetexday1
+    streetexday2:
+      name: streetexday2
+    streetexhibitionismfame:
+      name: streetexhibitionismfame
+    streetExhibitionismFameShamed:
+      name: streetExhibitionismFameShamed
+    streetexoffer:
+      name: streetexoffer
+    streetexoffer2:
+      name: streetexoffer2
+    streetexoffer3:
+      name: streetexoffer3
+    streetexoffer4:
+      name: streetexoffer4
+    streetexshow:
+      name: streetexshow
+    streetfamerape:
+      name: streetfamerape
+    streetfootbridge:
+      name: streetfootbridge
+    streetfriendly1:
+      name: streetfriendly1
+    streetheeltrip:
+      name: streetheeltrip
+    streetkidnap:
+      name: streetkidnap
+    streetlowertowel:
+      name: streetlowertowel
+    streetlurker:
+      name: streetlurker
+    streetmodelshow:
+      name: streetmodelshow
+    streetnight1:
+      name: streetnight1
+    streetnight2:
+      name: streetnight2
+    streetnpcflash:
+      name: streetnpcflash
+    streetoffer:
+      name: streetoffer
+      tags: ["unused"]
+    streetorphancookie:
+      name: streetorphancookie
+    streetpolice:
+      name: streetpolice
+    streetpregnancyfame:
+      name: streetpregnancyfame
+    streetprostitutionfame:
+      name: streetprostitutionfame
+    streetrapefame:
+      name: streetrapefame
+    streetrocks:
+      name: streetrocks
+    streetsexfame:
+      name: streetsexfame
+    streetstray:
+      name: streetstray
+    streettentacle:
+      name: streettentacle
+    streetuppertowel:
+      name: streetuppertowel
+    streetvan:
+      name: streetvan
+    streetwanted:
+      name: streetwanted
+    streetwhorebodywriting:
+      name: streetwhorebodywriting
+    stress:
+      description: |-
+        Adds stress to pc with appropriate modifiers
+
+        `$stress` is pc's stress amount where 0 is healthy (0-10,000)
+
+        `<<stress change multiplierOverride?>>`
+        - **change**: `number` - +/- change to apply
+        - **multiplierOverride** _optional_: `number` - multiplier to use in place of calculated one
+          - Defaults to some modification of `1` or `0.8` if negative
+      parameters:
+        - "number |+ number"
+    stresscaption:
+      name: stresscaption
+    strip:
+      name: strip
+    stripobject:
+      description: |-
+        Prints description of and ruins upper, lower, and under_lower clothes
+
+        `$stripobject` is the text name of object used to snag clothes off player
+
+        `$stripintegrity` is the damage to apply to clothes before determining if it would be stripped
+
+        Does not take into account over clothes. Consider refactoring
+      tags: ["text", "refactor"]
+    strippedtext:
+      description: |-
+        Template tree for control, trauma, stress
+
+        Empty widget, consider refactoring
+      tags: ["unused", "legacy", "refactor"]
+    strokerSelfPenisEntrance:
+      name: strokerSelfPenisEntrance
+    strokes:
+      name: strokes
+    struggle:
+      name: struggle
+    struggle_actions:
+      name: struggle_actions
+    struggle_add:
+      name: struggle_add
+    struggle_appendage:
+      name: struggle_appendage
+    struggle_attach:
+      name: struggle_attach
+    struggle_bide_the:
+      name: struggle_bide_the
+    struggle_bodypart:
+      name: struggle_bodypart
+    struggle_clothes:
+      name: struggle_clothes
+    struggle_creatures:
+      name: struggle_creatures
+    struggle_difficulty:
+      name: struggle_difficulty
+      tags: ["unused"]
+    struggle_difficulty_set:
+      name: struggle_difficulty_set
+    struggle_effects:
+      name: struggle_effects
+    struggle_end:
+      name: struggle_end
+    struggle_enemy:
+      name: struggle_enemy
+    struggle_flat_chest:
+      name: struggle_flat_chest
+    struggle_fluid:
+      name: struggle_fluid
+    struggle_init:
+      name: struggle_init
+    struggle_name:
+      name: struggle_name
+    struggle_part_init:
+      name: struggle_part_init
+    struggle_region:
+      name: struggle_region
+    struggle_skin:
+      name: struggle_skin
+    struggle_state:
+      name: struggle_state
+    struggleClearActions:
+      name: struggleClearActions
+    stuck_in_wall_oral:
+      name: stuck_in_wall_oral
+    sub:
+      description: |-
+        Adds submissiveness quality to pc's state and applies effects
+
+        `$submissive` is a measure of pc's defiant/ submissive spectrum where 0 is defiant and 1,000 is neutral (0-2,000)
+
+        See `<<def>>`
+
+        `<<sub change>>`
+        - **change**: `number` - + change to apply
+      parameters:
+        - "number"
+    sub_check:
+      description: |-
+        Applies effects from pc changing submissiveness
+    submission:
+      name: submission
+    submissivetext:
+      description: |-
+        Prints `| Submissive`
+      tags: ["text"]
+    subsectionSettingsTabButton:
+      name: subsectionSettingsTabButton
+    suffocatepass:
+      name: suffocatepass
+    suspicion:
+      description: |-
+        Adds suspicion to pc's state
+
+        `$suspicion` is asylum's level of suspicion towards the pc where 0 is not-suspicious (0-100)
+
+        `<<suspicion change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    svg:
+      container: true
+      name: svg
+    swallowed:
+      name: swallowed
+    swallowedstat:
+      name: swallowedstat
+    swarm:
+      name: swarm
+    swarm_img:
+      name: swarm_img
+    swarmactions:
+      name: swarmactions
+    swarmeffects:
+      name: swarmeffects
+    swarminit:
+      name: swarminit
+    swarmName:
+      name: swarmName
+    swim_check:
+      name: swim_check
+    swimmingdifficulty:
+      name: swimmingdifficulty
+    swimmingdifficultytext0:
+      description: |-
+        Prints `| These waters look safe` if stats are visible
+      tags: ["text"]
+    swimminglessoneffects:
+      name: swimminglessoneffects
+      tags: ["unused"]
+    swimmingskilluse:
+      name: swimmingskilluse
+    swimmingtext:
+      description: |-
+        Prints color-coded adjective of active swimming skill usage
+      tags: ["text"]
+    sydneyBeachGender:
+      name: sydneyBeachGender
+    sydneyBodywriting:
+      name: sydneyBodywriting
+    sydneyBodywritingLocation:
+      name: sydneyBodywritingLocation
+    sydneyChastityMessage:
+      name: sydneyChastityMessage
+    sydneyExpose:
+      name: sydneyExpose
+    sydneyFinish:
+      name: sydneyFinish
+    sydneyGenitals:
+      name: sydneyGenitals
+    sydneyGlasses:
+      name: sydneyGlasses
+    sydneyGreeting:
+      name: sydneyGreeting
+    sydneyLewd:
+      name: sydneyLewd
+    sydneyLibrary:
+      name: sydneyLibrary
+    sydneyMass:
+      name: sydneyMass
+    sydneymother:
+      name: sydneymother
+    sydneyMother:
+      name: sydneyMother
+      tags: ["unused"]
+    sydneymum:
+      name: sydneymum
+    sydneyMum:
+      name: sydneyMum
+    sydneyOptions:
+      name: sydneyOptions
+    sydneyOptionsLeave:
+      name: sydneyOptionsLeave
+    sydneyOptionsTalk:
+      name: sydneyOptionsTalk
+    sydneyOtherParent:
+      name: sydneyOtherParent
+    sydneyOtherParentGender:
+      name: sydneyOtherParentGender
+    sydneySchedule:
+      name: sydneySchedule
+    sydneySexFail:
+      name: sydneySexFail
+    sydneySirrisResemble:
+      name: sydneySirrisResemble
+    sydneySwimwear:
+      name: sydneySwimwear
+    sydneyTortureFail:
+      name: sydneyTortureFail
+    sydneyTortureOptions:
+      name: sydneyTortureOptions
+    sydneyWarning:
+      description: |-
+        Prints `| This action might/will purify/corrupt Sydney`
+
+        Relies on `_warnstate` for default case
+
+        `<<sydneyWarning type?>>`
+        - **type** _optional_: `string` - severity of corruption
+          - `"purify"` | `"corrupt"`: "might" corruption messages
+          - `default`: "will" corruption messages
+      parameters:
+        - '|+ "purify"|"corrupt"'
+      tags: ["temp", "text"]
+    tableText:
+      name: tableText
+    tailorinit:
+      name: tailorinit
+    takeHandholdingVirginity:
+      name: takeHandholdingVirginity
+    takeKissVirginity:
+      name: takeKissVirginity
+    takeKissVirginityNamed:
+      name: takeKissVirginityNamed
+    takeNPCVirginity:
+      name: takeNPCVirginity
+    takeTempleVirginity:
+      name: takeTempleVirginity
+    takeVirginity:
+      name: takeVirginity
+    tanned:
+      name: tanned
+    targetListBox:
+      name: targetListBox
+    targetrepeatcontroller:
+      name: targetrepeatcontroller
+    tattoo:
+      name: tattoo
+    tattoo_parlour:
+      name: tattoo_parlour
+    tattooed_inmate:
+      name: tattooed_inmate
+    tattooFilter:
+      name: tattooFilter
+    tattooList:
+      name: tattooList
+    taylorSibling:
+      name: taylorSibling
+    taylorSon:
+      name: taylorSon
+    tearful:
+      description: |-
+        Prints player opinion of their state based on trauma, stress, arousal, and pain
+
+        Description is without subject and capitalised
+
+        Example:
+        ```
+        <<tearful>> you are made an example of.
+        ```
+      tags: ["text"]
+    tearup:
+      name: tearup
+    telltalepenissize:
+      name: telltalepenissize
+    temperature:
+      name: temperature
+    temple_bailey_options:
+      name: temple_bailey_options
+    temple_effects:
+      name: temple_effects
+    temple_spear_mission_end:
+      name: temple_spear_mission_end
+    temple_title:
+      name: temple_title
+    temple_Title:
+      name: temple_Title
+    tending:
+      name: tending
+    tending_bird_eggs:
+      name: tending_bird_eggs
+    tending_day:
+      name: tending_day
+    tending_give:
+      name: tending_give
+    tending_harvest:
+      name: tending_harvest
+    tending_pick:
+      description: |-
+        Gives the pc a random number of plants, modified by traits
+
+        `<<tending_pick type min? max?>>`
+        - **type**: `string` - type of plant to pick
+          - %plantTypesDesc%
+        - **min** _optional_: `number` - min number of plants to pick
+          - Defaults to `1`
+        - **max** _optional_: `object` - max number of plants to pick
+          - Defaults to `5`
+      parameters:
+        - "%plantTypes%"
+        - "%plantTypes% &+ number &+ number"
+    tending_season_notice:
+      name: tending_season_notice
+    tending_text:
+      description: |-
+        Prints color-coded description of how good the player is at housekeeping
+      tags: ["text"]
+    tendingdifficulty:
+      name: tendingdifficulty
+    tendingPlantSeedsOptions:
+      name: tendingPlantSeedsOptions
+    tendingtext:
+      description: |-
+        Prints color-coded adjective of active tending skill usage
+      tags: ["text"]
+    tendingTillOptions:
+      name: tendingTillOptions
+    tendingWaterAllDryBeds:
+      name: tendingWaterAllDryBeds
+    tendingWaterPlot:
+      name: tendingWaterPlot
+    tentacle_forest_end_scene:
+      name: tentacle_forest_end_scene
+    tentacle_forest_events:
+      name: tentacle_forest_events
+    tentacle_forest_orgasm_scene:
+      name: tentacle_forest_orgasm_scene
+    tentacle_forest_pass:
+      name: tentacle_forest_pass
+    tentacle_forest_safe_orgasm:
+      name: tentacle_forest_safe_orgasm
+    tentacle_forest_stress_scene:
+      name: tentacle_forest_stress_scene
+    tentacle_forest_time:
+      name: tentacle_forest_time
+    tentacle_skin:
+      name: tentacle_skin
+    tentacleact:
+      name: tentacleact
+      tags: ["unused"]
+    tentacleadv:
+      description: |-
+        Main controller for advanced tentacles combat system
+
+        `<<tentacleadv tentacleObject>>`
+        - **tentacleObject**: `object` - Tentacle from `$tentacles`
+      parameters:
+        - var|bareword
+      tags: ["text"]
+    tentacleadvdefault:
+      description: |-
+        Prints effects of a provided idle tentacle ejaculating onto player
+
+        `<<tentacleadvdefault tentacleObject>>`
+        - **tentacleObject**: `object` - Tentacle from `$tentacles`
       parameters:
-        - 'number'
+        - var|bareword
+      tags: ["text"]
+    tentacleadvdisable:
+      description: |-
+        Disables provided tentacle
+
+        `<<tentacleadvdisable tentacleObject>>`
+        - **tentacleObject**: `object` - Tentacle from `$tentacles`
+      parameters:
+        - var|bareword
+    tentacledefault:
+      name: tentacledefault
+    tentacleDefaults:
+      name: tentacleDefaults
+    tentacledirection:
+      name: tentacledirection
+    tentacledisable:
+      name: tentacledisable
+    tentacleimg:
+      name: tentacleimg
+    tentacleimgmiss:
+      name: tentacleimgmiss
+    tentacles:
+      name: tentacles
+    tentaclestart:
+      name: tentaclestart
+    tentacleTrait:
+      description: |-
+        Prints `| Witch` or `| Prey` depending on pc's `$submissive`
       tags: ["unused", "text"]
-    deviant1:
+    tentaclewolf:
+      name: tentaclewolf
+    tentacleworldend:
+      name: tentacleworldend
+    tentacleworldintro:
+      name: tentacleworldintro
+    tenyclusPlay:
+      name: tenyclusPlay
+    testicle:
       description: |-
-        Prints `Deviancy 1` with appropriate color for level
+        Prints synonym for testicle
+
+        `<<testicle situation?>>`
+        - **situation** _optional_: `string` - category to filter possible outputs by
+          - `"clinical"`
+      parameters:
+        - '|+ "clinical"'
+      tags: ["unused", "text"]
+    testicles:
+      description: |-
+        Prints synonym for testicles
+
+        `<<testicle situation?>>`
+        - **situation** _optional_: `string` - category to filter possible outputs by
+          - `"clinical"`
+      parameters:
+        - '|+ "clinical"'
       tags: ["text"]
-    deviant2:
+    testMultiple:
+      name: testMultiple
+      tags: ["unused"]
+    testSingles:
+      name: testSingles
+    text_pillory_release_fail_strip:
+      name: text_pillory_release_fail_strip
+    textmap:
+      name: textmap
+    that:
       description: |-
-        Prints `Deviancy 2` with appropriate color for level
+        Prints plural/singular prose of that (those/that) for provided clothing slot
+
+        `<<that slot>>`
+        - **slot**: `string` - category of worn clothing to check
+          - %clothesTypesDesc%
+      parameters:
+        - "%clothesTypes%"
       tags: ["text"]
-    deviant3:
+    the_pillory_person:
+      description: |-
+        Prints `The <<person>>` or the name of person in the pillory
+
+        Lowercase `<<The_pillory_person>>`.
+        Related to `<<a_pillory_person>>`/ '<<A_pillory_person>>'
+      tags: ["text"]
+    The_pillory_person:
+      description: |-
+        Prints `The <<person>>` or the name of person in the pillory
+
+        Capitalised `<<the_pillory_person>>`.
+        Related to `<<a_pillory_person>>`/ '<<A_pillory_person>>'
+      tags: ["text"]
+    their:
+      description: |-
+        Prints `their/<<him>>` of an NPC based on combat size, either provided or previously selected
+
+        Modifies selected NPC if combat is single man
+
+        `<<their npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of active npcs
+          - `0-5`: Defaults to 0
+      parameters:
+        - "|+ number"
+      tags: ["text"]
+    theowner:
+      description: |-
+        Prints `the owner` or active NPC pronoun based on number of enemies
+      tags: ["text"]
+    thighactionDifficulty:
+      name: thighactionDifficulty
+    thighActionInit:
+      name: thighActionInit
+    thighactions:
+      name: thighactions
+    thighdifficulty:
+      description: |-
+        Prints color-coded adjective of thigh action difficulty in current combat
+      tags: ["text"]
+    thighejacstat:
+      name: thighejacstat
+    thighskill:
+      description: |-
+        Adds thigh skill to pc's state
+
+        `$thighskill` is a measure of pc's proficiency using their thighs where 0 is awkward (0-1,000)
+
+        `<<thighskill change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    thighskilluse:
+      name: thighskilluse
+    thighstat:
+      name: thighstat
+    thightext:
+      description: |-
+        Prints color-coded adjective of active thigh skill usage
+      tags: ["text"]
+    thirst:
+      name: thirst
+      tags: ["unused"]
+    threaten:
+      description: |-
+        Prints a random spoken threat of active NPC towards player
+      tags: ["text"]
+    timeAfterXHours:
+      description: |-
+        Prints formatted time after X hours would pass
+
+        `<<timeAfterXHours hours>>`
+        - **hours**: `number` - number of hours to simulate passing
+      parameters:
+        - "number"
+      tags: ["text"]
+    tinyPenisDryOrgasmChance:
+      name: tinyPenisDryOrgasmChance
+    tip_neg:
+      name: tip_neg
+    tip_up:
+      name: tip_up
+    tipreceive:
+      name: tipreceive
+    tips:
+      name: tips
+    tipset:
+      name: tipset
+    tiredness:
+      description: |-
+        Adds tiredness to pc's state
+
+        `$tiredness` is pc's amount of tiredness where 0 is not-tired (0-2,000)
+
+        tiredness is unclamped and source is unused. Consider refactoring
+
+        `<<tiredness change source?>>`
+        - **change**: `number` - +/- change to apply
+        - **source** _optional_: `string` - source of tiredness change
+          - `"pass"`: tiredness gained from passage of time, not affected by modifiers
+      parameters:
+        - 'number |+ "pass"'
+      tags: ["refactor"]
+    tirednesscaption:
+      name: tirednesscaption
+    titleBlackjackHelp:
+      name: titleBlackjackHelp
+    titleCharacteristics:
+      name: titleCharacteristics
+    titleCheats:
+      name: titleCheats
+    titleDebugRenderer:
+      name: titleDebugRenderer
+    titleEventInfo:
+      name: titleEventInfo
+    titleFeats:
+      name: titleFeats
+    titleJournal:
+      name: titleJournal
+    titlejournalNotes:
+      name: titlejournalNotes
+    titleOptions:
+      name: titleOptions
+    titleOutfitEditor:
+      name: titleOutfitEditor
+    titleSaves:
+      name: titleSaves
+    titleSocial:
+      name: titleSocial
+    titleStats:
+      name: titleStats
+    titleTraits:
+      name: titleTraits
+    toggleAltLink:
+      description: |-
+        Creates link that toggles unique clothing between alternate states
+
+        `<<toggleAltLink slot location>>`
+        - **slot**: `string` - clothing slot being toggled
+          - %clothesTypesDesc%
+        - **location** _optional_: `string` - location where clothing is being toggled
+          - `"wardrobe"`
+      parameters:
+        - '%clothesTypes% |+ "wardrobe"|"shop"'
+      tags: ["dom", "text"]
+    toggleAltPosition:
+      description: |-
+        Toggles unique clothing between alternate states
+
+        `<<toggleAltPosition slot>>`
+        - **slot**: `string` - clothing slot being toggled
+          - %clothesTypesDesc%
+      parameters:
+        - "%clothesTypes%"
+    toggleAltSleeve:
+      description: |-
+        Toggles unique clothing between alternate sleeve states
+
+        `<<toggleAltSleeve inDefaultState? inAltState?>>`
+        - **inDefaultState** _optional_: `string` - text to be printed if sleeves are using their default image
+          - Defaults to "Roll up sleeves"
+        - **inAltState** _optional_: `string` - text to be printed if sleeves are using their alt image
+          - Defaults to "Unroll sleeves"
+      parameters:
+        - "|+ string |+ string"
+      tags: ["dom"]
+    toggledebug:
+      name: toggledebug
+      tags: ["unused"]
+    toggleFaceLayer:
+      description: |-
+        Creates link that toggles hair position on face
+
+        First arg is never used. Consider refactoring
+
+        `<<toggleFaceLayer location>>`
+        - **location** _optional_: `string` - location where clothing is being toggled
+          - `"wardrobe"`
+      parameters:
+        - '|+ "wardrobe"|"shop"'
+      tags: ["dom", "text", "refactor"]
+    toggleHood:
+      description: |-
+        Toggles pc's hood state between up and down
+
+        `<<toggleHood location>>`
+        - **location** _optional_: `string` - location where hood is being toggled
+          - Only respects "shop"
+      parameters:
+        - '|+ "shop"'
+    toggleHoodLink:
+      description: |-
+        Creates link that toggles pc's hood state between up and down
+
+        `<<toggleHoodLink location>>`
+        - **location** _optional_: `string` - location where hood is being toggled
+          - Only respects "shop"
+      parameters:
+        - '|+ "shop"'
+      tags: ["dom", "text"]
+    toggleLeash:
+      name: toggleLeash
+    toggleLowerTuck:
+      description: |-
+        Outputs a link that toggles lower tucked state
+
+        `<<toggleLowerTuck untuckText? tuckText?>>`
+        - **untuckText** _optional_: `string` - text to be printed if already tucked
+          - Defaults to "Untuck"
+        - **tuckText** _optional_: `string` - text to be printed if already untucked
+          - Defaults to "Tuck in"
+      parameters:
+        - "|+ string |+ string"
+      tags: ["dom"]
+    toggleMannequinGender:
+      name: toggleMannequinGender
+    toggleTab:
+      name: toggleTab
+    toggleUpperTuck:
+      description: |-
+        Outputs a link that toggles upper tucked state
+
+        `<<toggleUpperTuck untuckText? tuckText?>>`
+        - **untuckText** _optional_: `string` - text to be printed if already tucked
+          - Defaults to "Untuck"
+        - **tuckText** _optional_: `string` - text to be printed if already untucked
+          - Defaults to "Tuck in"
+      parameters:
+        - "|+ string |+ string"
+      tags: ["dom"]
+    top:
+      description: |-
+        Prints name of outermost top clothing layer
+
+        Does not take into account over_top. Consider refactoring
+      tags: ["refactor", "text"]
+    topaside:
+      description: |-
+        Prints name of innermost top clothing layer that can be seen or `top` if everything is exposed
+
+        See `<<breastsaside>>`
+
+        Does not take into account over_top. Consider refactoring
+      tags: ["refactor", "text"]
+    TopShop:
+      name: TopShop
+    towelup:
+      name: towelup
+    towelupm:
+      name: towelupm
+    tower_creature_text:
+      description: |-
+        Prints monster/ beast noun of the first NPC slot
+
+        To be used for the tower creature
+      tags: ["text"]
+    toy:
+      name: toy
+    toyName:
+      name: toyName
+    toySelection:
+      name: toySelection
+    traitLists:
+      name: traitLists
+    traitListsSearch:
+      name: traitListsSearch
+    traits:
+      name: traits
+    transform:
+      name: transform
+    transformationAlteration:
+      name: transformationAlteration
+    transformationStateUpdate:
+      name: transformationStateUpdate
+    TrashComparePlayerBreastsReact:
+      name: TrashComparePlayerBreastsReact
+    TrashComparePlayerChastity:
+      name: TrashComparePlayerChastity
+    TrashComparePlayerPenisReact:
+      name: TrashComparePlayerPenisReact
+    trashSelect:
+      name: trashSelect
+    trauma:
+      description: |-
+        Adds trauma to pc based on control and trait modifiers
+
+        `$trauma` is pc's trauma amount where 0 is healthy (0-5,000)
+
+        See `<<combattrauma>>` and `<<straighttrauma>>` for other use cases
+
+        `unusedArg` is not implemented. Consider refactoring to remove or implement
+
+        `<<trauma change? unusedArg?>>`
+        - **change** _optional_: `number` - +/- change to apply
+          - if not provided, just updates pc's trauma effects
+        - **unusedArg** _optional_: `bool` - doesn't do anything (truthy)
+      parameters:
+        - "number"
+      tags: ["refactor"]
+    traumacaption:
+      name: traumacaption
+    traumaclamp:
+      name: traumaclamp
+    tryOnInit:
+      name: tryOnInit
+    tryOnReset:
+      name: tryOnReset
+    tryOnStats:
+      name: tryOnStats
+    tryOnWear:
+      name: tryOnWear
+    tummyejacstat:
+      name: tummyejacstat
+    turnend:
+      name: turnend
+    twinescript:
+      container: true
+      name: twinescript
+    unbecomePinch:
+      description: |-
+        Overwrites some story variables with their respective values in `$frozenValues`, without modifying the latter
+
+        Use to visually restore a pc morphed with `<<becomePinch>>` to their original state (not all values are restored)
+    unbind:
+      name: unbind
+    unbindtemp:
+      name: unbindtemp
+    underbottoms:
+      description: |-
+        Prints under_lower clothing layer, taking into account if it is part of an outfit
+      tags: ["text"]
+    UnderBottomShop:
+      name: UnderBottomShop
+    undergroundCellOptions:
+      name: undergroundCellOptions
+    undergroundEscapeForestRobin:
+      name: undergroundEscapeForestRobin
+    undergroundEscapeForestStart:
+      name: undergroundEscapeForestStart
+    undergroundPlantFakeChoice:
+      name: undergroundPlantFakeChoice
+    undergroundReturnToCell:
+      name: undergroundReturnToCell
+    undergroundRobinInterlude:
+      name: undergroundRobinInterlude
+    undergroundRobinKiss:
+      name: undergroundRobinKiss
+    undergroundRobinTopic:
+      name: undergroundRobinTopic
+    undergroundRobinTopicRefresh:
+      name: undergroundRobinTopicRefresh
+    underlowerhas:
+      description: |-
+        Prints plural/singular prose of has (have/has) for worn `"under_lower"` slot
+    underlowerimg:
+      name: underlowerimg
+    underlowerintegrity:
+      name: underlowerintegrity
+      tags: ["unused"]
+    underlowerit:
+      description: |-
+        Prints an objective case pronoun (them/it) for worn `"under_lower"` slot
+      tags: ["text"]
+    underloweritis:
+      description: |-
+        Prints a pronoun/ present indicative pair (they are/it is) describing worn `"under_lower"` slot
+      tags: ["unused", "text"]
+    underloweron:
+      name: underloweron
+      tags: ["unused"]
+    underlowerplural:
+      description: |-
+        Prints a present indicative (are/is) for the worn `"under_lower"` slot
+      tags: ["text"]
+    underlowerruined:
+      description: |-
+        Destroys pc's under_lower slot clothing, whether worn or carried
+
+        `<<underlowerruined noRebuy? exposedType?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+        - **exposedType** _optional_: `string` - reason for exposing under lower
+          - `"commando"` | `"given"` | `"stolen"` | `"sold"`
+      parameters:
+        - '|+ bool|null|undefined |+ "commando"|"given"|"stolen"|"sold"'
+    underlowersend:
+      name: underlowersend
+    underlowersteal:
+      name: underlowersteal
+    underlowerstrip:
+      name: underlowerstrip
+    underlowerthat:
+      description: |-
+        Prints plural/singular prose of that (those/that) for worn `"under_lower"` slot
+      tags: ["unused", "text"]
+    underlowerundress:
+      name: underlowerundress
+    underlowerwear:
+      name: underlowerwear
+    underlowerwet:
+      description: |-
+        Adds wetness to pc's under lower clothing state
+
+        `$underlowerwet` is a measure of how wet pc's under lower clothing is where 0 is dry (0-200)
+
+        `$underlowerwetstate` is a measure of effects due to wetness of pc's under lower clothing where 0 is dry (0-3)
+
+        Over clothes don't take into account wetness. Consider refactoring to expand
+
+        `<<underlowerwet change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+      tags: ["refactor"]
+    underoutfit:
+      name: underoutfit
+    UnderOutfitShop:
+      name: UnderOutfitShop
+    underruined:
+      description: |-
+        Destroys pc's under_upper and under_lower slot clothing, whether worn or carried
+    underslither:
+      name: underslither
+    undertop:
+      name: undertop
+    UnderTopShop:
+      name: UnderTopShop
+    underupperhas:
+      description: |-
+        Prints plural/singular prose of has (have/has) for worn `"under_upper"` slot
+      tags: ["text"]
+    underupperimg:
+      name: underupperimg
+    underupperintegrity:
+      name: underupperintegrity
+      tags: ["unused", "text"]
+    underupperit:
+      description: |-
+        Prints an objective case pronoun (them/it) for worn `"under_upper"` slot
+      tags: ["text"]
+    underupperitis:
+      description: |-
+        Prints a pronoun/ present indicative pair (they are/it is) describing worn `"under_upper"` slot
+      tags: ["unused", "text"]
+    underupperon:
+      name: underupperon
+      tags: ["unused"]
+    underupperplural:
+      description: |-
+        Prints a present indicative (are/is) for the worn `"under_upper"` slot
+      tags: ["text"]
+    underupperruined:
+      description: |-
+        Destroys pc's under_upper slot clothing, whether worn or carried
+
+        `<<underupperruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    underuppersend:
+      name: underuppersend
+    underuppersteal:
+      name: underuppersteal
+    underupperstrip:
+      name: underupperstrip
+    underupperthat:
+      description: |-
+        Prints plural/singular prose of that (those/that) for worn `"under_upper"` slot
+      tags: ["unused", "text"]
+    underupperundress:
+      name: underupperundress
+    underupperwear:
+      name: underupperwear
+    underupperwet:
+      description: |-
+        Adds wetness to pc's under upper clothing state
+
+        `$underupperwet` is a measure of how wet pc's under upper clothing is where 0 is dry (0-200)
+
+        `$underupperwetstate` is a measure of effects due to wetness of pc's under upper clothing where 0 is dry (0-3)
+
+        Over clothes don't take into account wetness. Consider refactoring to expand
+
+        `<<underupperwet change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+      tags: ["refactor"]
+    underwater:
+      name: underwater
+    underwearTypeText:
+      description: |-
+        Prints "underwear" or more specific type as appropriate
+      tags: ["text"]
+    underworld_nickname:
+      description: |-
+        Prints pc's nickname used in the underworld
+
+        See `<<overworld_nickname>>`
+
+        `<<underworld_nickname textTransform>>`
+        - **textTransform**: `string` - transformation to apply to text before printing
+          - `"cap"`: Capitalise
+      parameters:
+        - '|+ "cap"'
+      tags: ["text"]
+    undies:
+      name: undies
+    undiestrauma:
+      name: undiestrauma
+    undress:
+      name: undress
+    undressclothes:
+      name: undressclothes
+    undressKeepFace:
+      name: undressKeepFace
+    undressmid:
+      name: undressmid
+    undressNPC:
+      name: undressNPC
+    undressOverClothes:
+      name: undressOverClothes
+    undressSleep:
+      name: undressSleep
+    unlockAdultShop:
+      name: unlockAdultShop
+    update_npc_pillory_appearance:
+      name: update_npc_pillory_appearance
+    update_school_skills:
+      name: update_school_skills
+    updateallure:
+      name: updateallure
+    updateAskColour:
+      name: updateAskColour
+    updatebuysendhome:
+      name: updatebuysendhome
+      tags: ["unused"]
+    updateChildActivity:
+      name: updateChildActivity
+    updateClothes:
+      name: updateClothes
+    updateclotheslist:
+      name: updateclotheslist
+    updateclothingshop:
+      name: updateclothingshop
+    updateFeatName:
+      name: updateFeatName
+    updateFeats:
+      name: updateFeats
+    updateFeatsPointsMenu:
+      name: updateFeatsPointsMenu
+    updateHallucinations:
+      description: |-
+        Updates pc's hallucination state based on trauma, awareness, drugs, weather, and clothing
+    updatehistorycontrols:
+      name: updatehistorycontrols
+    updatemannequin:
+      name: updatemannequin
+    updateMuseumAntiques:
+      name: updateMuseumAntiques
+    updateNewNamedNpcs:
+      description: |-
+        Adds non-present new NPCs to saves with version 1 or 2 $npcNamedVersion
+    updateNPC:
+      description: |-
+        Updates named persistent npc with data from given slot
+
+        Currently only updates virginity
+
+        `<<updateNPC npcObject>>`
+        - **npcObject**: `object` - full npc object to pull update data from
+      parameters:
+        - "var|bareword"
+    updateNPCsFirst:
+      description: |-
+        Updates all persistent npcs first-order properties to specific value
+
+        See `<<updateNPCsSecond>>` for second-order properties
+
+        Could be made to accept a function as value to increase useability in data migration. Consider refactoring
+
+        `<<updateNPCsFirst key value>>`
+        - **key**: `string` - first-order key to modify
+        - **value**: `any` - value to set
+      parameters:
+        - "string &+ var|bareword"
+      tags: ["unused", "refactor"]
+    updateNPCsSecond:
+      description: |-
+        Updates all persistent npcs second-order properties to specific value
+
+        See `<<updateNPCsFirst>>` for first-order properties
+
+        Could be made to accept a function as value to increase useability in data migration. Consider refactoring
+
+        `<<updateNPCsFirst firstKey secondKey value>>`
+        - **firstKey**: `string` - first-order key to modify
+        - **secondKey**: `string` - second-order key to modify
+        - **value**: `any` - value to set
+      parameters:
+        - "string &+ var|bareword"
+      tags: ["unused", "refactor"]
+    updateOwned:
+      name: updateOwned
+    updatePersistentNPCs:
+      description: |-
+        Updates persistent npc characteristics based on player setting changes
+
+        selectiveUpdate accepts `skincolour` but does nothing with it. Consider refactoring
+
+        `<<updatePersistentNPCs selectiveUpdate?>>`
+        - **selectiveUpdate** _optional_: `string` - category to selectively update instead of all
+          - `"genders"` | `"breasts"` | `"penis"` | `"skincolour"`
+      parameters:
+        - '|+ "genders"|"breasts"|"penis"|"skincolour"'
+      tags: ["refactor"]
+    updateRecordedSperm:
+      name: updateRecordedSperm
+    updatesidebardescription:
+      name: updatesidebardescription
+    updatesidebarimg:
+      name: updatesidebarimg
+    updatesidebarmoney:
+      name: updatesidebarmoney
+    updateStoredSlot:
+      name: updateStoredSlot
+    updatetryonstats:
+      name: updatetryonstats
+    updatewardrobe:
+      description: |-
+        Applies wardrobe updates based on `$wear_` actions
+
+        `$wear_X` are variables where X is a clothing slot that is set to `"none"` or the name of a clothing item
+
+        `<<updatewardrobe additionalUpdates? overrideSlot?>>`
+        - **additionalUpdates** _optional_: `string` - sections to update along with wardrobe
+          - Only accepts "outfits"
+        - **overrideSlot** _optional_: `string` - clothing slot wear action key to treat as selected
+          - Not required for new wardrobe display
+          - `wear_` + (%clothesTypesDesc%)
+      parameters:
+        - '|+ false|null|undefined|"outfits" |+ text'
+    updatewarmthdescription:
+      name: updatewarmthdescription
+    updatewarmthscale:
+      name: updatewarmthscale
+    updateWornClothingLocation:
+      name: updateWornClothingLocation
+    upperhas:
       description: |-
-        Prints `Deviancy 3` with appropriate color for level
+        Prints plural/singular prose of has (have/has) for worn `"upper"` slot
       tags: ["text"]
-    deviant4:
+    upperimg:
+      name: upperimg
+    upperintegrity:
+      name: upperintegrity
+      tags: ["unused"]
+    upperit:
       description: |-
-        Prints `Deviancy 4` with appropriate color for level
+        Prints an objective case pronoun (them/it) for worn `"upper"` slot
       tags: ["text"]
-    deviant5:
+    upperitis:
       description: |-
-        Prints `Deviancy 5` with appropriate color for level
+        Prints a pronoun/ present indicative pair (they are/it is) describing worn `"upper"` slot
+      tags: ["unused", "text"]
+    upperon:
+      name: upperon
+    upperplural:
+      description: |-
+        Prints a present indicative (are/is) for the worn `"upper"` slot
       tags: ["text"]
-    deviant6:
+    upperruined:
       description: |-
-        Prints `Deviancy 6` with appropriate color for level
-      tags: ["unused", "text"]
-    difficulty:
-      name: difficulty
-    dildoSelfAnusEntrance:
-      name: dildoSelfAnusEntrance
-    dildoSelfPussyEntrance:
-      name: dildoSelfPussyEntrance
-    disable:
-      name: disable
-    disablearms:
-      name: disablearms
-    disableleftarm:
-      name: disableleftarm
-    disablerightarm:
-      name: disablerightarm
-    dismissAvery:
-      name: dismissAvery
-    dismissKylar:
-      name: dismissKylar
-    dismissWhitney:
-      name: dismissWhitney
-    display_plot:
-      name: display_plot
-    display_quality:
-      name: display_quality
-    displayFeat:
-      name: displayFeat
-    displayFeatFake:
-      name: displayFeatFake
-    displayLinks:
-      name: displayLinks
-     displayMonthday:
-         name: displayMonthday
-         tags: ["unused"]
-    displaySettings:
-      name: displaySettings
-    displaySubsection:
-      name: displaySubsection
-    distinction_stat:
-      name: distinction_stat
-    dock_security:
-      name: dock_security
-    dock_security_text:
-      name: dock_security_text
-    dockclotheson:
-      name: dockclotheson
-    dockeffects:
-      name: dockeffects
-    dockoptions:
-      name: dockoptions
-    dockpubdestination:
-      name: dockpubdestination
-    dockpuboptions:
-      name: dockpuboptions
-    dockpubquiz:
-      name: dockpubquiz
-    dockstatus:
-      name: dockstatus
-    dockstatustext:
-      name: dockstatustext
-    dockunbindoffer:
-      name: dockunbindoffer
-    dockwork:
-      name: dockwork
-    doggyimg:
-      name: doggyimg
-    domus:
-      name: domus
-    domuseventend:
-      name: domuseventend
-    domusexposed:
-      name: domusexposed
-    domusquick:
-      name: domusquick
-    dontHideForNow:
-      name: dontHideForNow
-    dontHideRevert:
-      name: dontHideRevert
-    doubleslider:
-      name: doubleslider
+        Destroys pc's upper slot clothing, whether worn or carried
+
+        `<<upperruined noRebuy?>>`
+        - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
+          - Defaults to `false`
+      parameters:
+        - "|+ bool"
+    uppersend:
+      name: uppersend
+    upperslither:
+      name: upperslither
+    uppersteal:
+      name: uppersteal
       tags: ["unused"]
-    doVersionCheck:
-      name: doVersionCheck
-    draindescription:
-      name: draindescription
-    drainexit:
-      name: drainexit
-    drainexiteventend:
-      name: drainexiteventend
-    drainexitlinks:
-      name: drainexitlinks
-    drainexitquick:
-      name: drainexitquick
-    drainladderdownlink:
-      name: drainladderdownlink
-    drainlinks:
-      name: drainlinks
-    drench:
-      name: drench
-    drenchfromgroup:
-      name: drenchfromgroup
-    dress:
+    upperstrip:
+      name: upperstrip
+    upperthat:
       description: |-
-        Prints descriptor of active NPC's upper clothing
+        Prints plural/singular prose of that (those/that) for worn `"upper"` slot
+      tags: ["unused", "text"]
+    upperundress:
+      name: upperundress
+    upperwear:
+      name: upperwear
+    upperwet:
+      description: |-
+        Adds wetness to pc's upper clothing state
 
-                See `<<skirt>>` for lower clothing or `<<bra>>` for inner_upper clothing
-
-                See `<<npcClothesText>>` for full name of clothes
-            tags: ["text"]
-        droptowel:
-            name: droptowel
-        druggedcaption:
-            name: druggedcaption
-        drugs:
-            description: |-
-                Adds drugs to pc's system
-
-                `$drugged` is a measure of non-hallucinogenic drugs in pc's system where 0 is none (0-1,000)
-
-                `<<drugs change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        drunkcaption:
-            name: drunkcaption
-        dry:
-            name: dry
-        dry_full:
-            name: dry_full
-        dry_towel:
-            name: dry_towel
-        dungeonescape:
-            name: dungeonescape
-        dyeSwatch:
-            name: dyeSwatch
-        dynamic:
-            description: |-
-                Prints and registers a widget which will be re-rendered dynamically
-
-                [High-Level Dynamic API Overview](%workspaceDir%/game/base-system/tools/dynamicRendering.js#L2)
-
-                `<<dynamic widgetName htmlId? ...widgetArgs?>>`
-                - **widgetName**: `string` - name of widget
-                - **htmlId** _optional_: `string` - optional DOM id for css selectors
-                - ...**widgetArgs** _optional_: `any` - space separated args to pass to widget as if called directly
-            parameters:
-                - "text |+ text |+ ...(var|bareword)"
-        dynamicblock:
-            container: true
-            description: |-
-                Prints and registers a block which will be re-rendered dynamically
-
-                [High-Level Dynamic API Overview](%workspaceDir%/game/base-system/tools/dynamicRendering.js#L2)
-
-                `<<dynamicblock ...properties>>`
-                - ...**properties**: `string` - additional properties to attach to block
-                  - `"delay": only evaluate after `Dynamic.render()` has been called
-                  - `"id=X"`: id of the div element where X is the DOM id (auto-generated by default)
-                  - `"class=X"`: class of the div element where X is the DOM classlist
-            parameters:
-                - "|+ ...text"
-        earnAllFeats:
-            name: earnAllFeats
-        earnFeat:
-            name: earnFeat
-        earSlimeCafeLinks:
-            description: |-
-                Prints eating at cafe links as modified by earslime's command over pc
-
-                `<<earSlimeCafeLinks linkName?>>`
-                - **linkName** _optional_: `string` - example kind to output
-                  - `"Obey"`: An option to obey or defy is given to pc
-                  - `"Next"`: pc must comply with order. Default state
-            parameters:
-                - '|+ "Next"|"Obey"'
-            tags: ["links", "text"]
-        earSlimeDaily:
-            description: |-
-                Applies and updates effects of pc's earslime
-
-                `<<earSlimeDaily passageEffects?>>`
-                - **passageEffects** _optional_: `bool` - apply effects of ear slime passage as well (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        earSlimeFocusChoice:
-            name: earSlimeFocusChoice
-        earSlimePoundLinks:
-            name: earSlimePoundLinks
-        earSlimePregnancy:
-            name: earSlimePregnancy
-        earSlimeSeenActions:
-            name: earSlimeSeenActions
-        earSlimeShoppingExhibitionism:
-            name: earSlimeShoppingExhibitionism
-        edenCagedCoopSave:
-            name: edenCagedCoopSave
-        edenCagedSave:
-            name: edenCagedSave
-        edenlust:
-            name: edenlust
-        edenpreystart:
-            name: edenpreystart
-        effects:
-            name: effects
-        effects_prison:
-            name: effects_prison
-        effectsabomination:
-            name: effectsabomination
-        effectsanuspenisdoublefuck:
-            name: effectsanuspenisdoublefuck
-        effectsanuspenisfuck:
-            name: effectsanuspenisfuck
-        effectsanustopenis:
-            name: effectsanustopenis
-        effectsanustopenisdouble:
-            name: effectsanustopenisdouble
-        effectsarousalsoak:
-            name: effectsarousalsoak
-        effectsCoverAnus:
-            name: effectsCoverAnus
-        effectsCoverPenis:
-            name: effectsCoverPenis
-        effectsCoverVagina:
-            name: effectsCoverVagina
-        effectsdildowhack:
-            name: effectsdildowhack
-        effectsdissociation:
-            name: effectsdissociation
-        effectsDropSexToy:
-            name: effectsDropSexToy
-        effectshandpull:
-            name: effectshandpull
-        effectshandsclothes:
-            name: effectshandsclothes
-        effectshandsfreeface:
-            name: effectshandsfreeface
-        effectshypnosiswhack:
-            name: effectshypnosiswhack
-        effectsinsertions:
-            name: effectsinsertions
-        effectsmakeup:
-            name: effectsmakeup
-        effectsman:
-            name: effectsman
-        effectsorgasm:
-            name: effectsorgasm
-        effectspain:
-            name: effectspain
-        effectspenisanusfuck:
-            name: effectspenisanusfuck
-        effectspenistoanus:
-            name: effectspenistoanus
-        effectspenistopenis:
-            name: effectspenistopenis
-        effectspenistopenisfuck:
-            name: effectspenistopenisfuck
-        effectspenistovagina:
-            name: effectspenistovagina
-        effectspenisvaginafuck:
-            name: effectspenisvaginafuck
-        effectspenwhack:
-            name: effectspenwhack
-        effectsPickupSexToy:
-            name: effectsPickupSexToy
-        effectspossessed:
-            name: effectspossessed
-        effectsremovebuttplug:
-            name: effectsremovebuttplug
-        effectsshacklewhack:
-            name: effectsshacklewhack
-        effectsspray:
-            name: effectsspray
-        effectssteal:
-            name: effectssteal
-        effectstentacleadv:
-            name: effectstentacleadv
-        effectstentacles:
-            name: effectstentacles
-        effectsvaginapenisdoublefuck:
-            name: effectsvaginapenisdoublefuck
-        effectsvaginapenisfuck:
-            name: effectsvaginapenisfuck
-        effectsvaginatopenis:
-            name: effectsvaginatopenis
-        effectsvaginatopenisdouble:
-            name: effectsvaginatopenisdouble
-        effectsvaginatovagina:
-            name: effectsvaginatovagina
-        effectsvaginatovaginafuck:
-            name: effectsvaginatovaginafuck
-        effectswater:
-            name: effectswater
-        effectsWraith:
-            name: effectsWraith
-        ejacstat:
-            name: ejacstat
-        ejacTrait:
-            description: |-
-                Prints `| Cumoisseur` or `| Cum Dump` depending on pc's `$submissive`
-            tags: ["text"]
-        ejaculate:
-            name: ejaculate
-        ejaculation:
-            description: |-
-                Prints end of combat ejaculation description for all combat NPCs
-
-                All NPCs, including named, should go through here to get pre and post ejac descriptions
-
-                Alex, Avery, and Whitney descriptions are contained here until they have dedicated widgets
-
-                `<<ejaculation ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation to perform
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-alex:
-            description: |-
-                Prints end of combat ejaculation description for Alex
-
-                `<<ejaculation-alex ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-eden:
-            description: |-
-                Prints end of combat ejaculation description for Eden
-
-                `<<ejaculation-eden ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-gloryhole:
-            description: |-
-                Prints end of combat ejaculation description for player at a gloryhole
-
-                Gloryhole encounter assumes NPC cannot reach or see PC and vice versa
-
-                Assumes NPCs believe PC may have following combat
-
-                Assumes all other forms of finishing in place and encounters can be either consensual or non-con
-
-                Non-con encounters assume PC is restrained to hole with no arms available, though genital encounters were left in place in case of future use
-
-                Currently non-con gloryhole is oral-only and so focus is on these cases; the rear-body non-con is captured by $position="wall".
-                As game changes this can be reviewed
-
-                Consensual gloryhole has all combat options available currently
-
-                `<<ejaculation-gloryhole ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-kylar:
-            description: |-
-                Prints end of combat ejaculation description for Kylar
-
-                `<<ejaculation-kylar ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-leighton:
-            description: |-
-                Prints end of combat ejaculation description for Leighton
-
-                `<<ejaculation-leighton ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-pillory:
-            description: |-
-                Prints end of combat ejaculation description for player in a pillory
-
-                `<<ejaculation-pillory ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-plant:
-            description: |-
-                Prints end of combat ejaculation description for plant people
-
-                `<<ejaculation-plant ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-robin:
-            description: |-
-                Prints end of combat ejaculation description for Robin
-
-                `<<ejaculation-robin ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-sydney:
-            description: |-
-                Prints end of combat ejaculation description for Sydney
-
-                `<<ejaculation-sydney ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-urinate:
-            description: |-
-                Prints description of angry post-combat golden shower humiliation
-            tags: ["text"]
-        ejaculation-wall:
-            description: |-
-                Prints end of combat ejaculation description for NPCs that are only able to access front or back of player (player stuck in wall)
-
-                Wall encounter assumes NPC at back of PC cannot reach around to front, and vice versa, and that PC cannot see what's happening behind them
-
-                Assumes NPCs believe PC may have following combat due to being stuck in wall unaided
-
-                Gloryhole removed as of v2.6 and front facing combat only left in place in case of future work
-
-                `<<ejaculation-wall ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejaculation-wraith:
-            description: |-
-                Prints end of combat ejaculation description for Ivory Wraith
-
-                `<<ejaculation-wraith ejacType?>>`
-                - **ejacType** _optional_: `string` - type of ejaculation
-                  - `"short"`: Quick ejac that prevents angry post-sex actions
-            parameters:
-                - '|+ "short"'
-            tags: ["text"]
-        ejacW:
-            name: ejacW
-        elk:
-            name: elk
-        elkeventend:
-            name: elkeventend
-        elkexposed:
-            name: elkexposed
-            tags: ["unused"]
-        elkquick:
-            name: elkquick
-        embarrassment:
-            description: |-
-                Prints sentence describing pc's arousal level as if it was embarrassment
-            tags: ["text"]
-        emptyClassroomCaughtOrgasm:
-            name: emptyClassroomCaughtOrgasm
-        emptyClassroomMasturbationDescription:
-            name: emptyClassroomMasturbationDescription
-        emptyClassroomMasturbationIntro:
-            name: emptyClassroomMasturbationIntro
-        enable_rescue:
-            name: enable_rescue
-        enableSchoolRescue:
-            name: enableSchoolRescue
-        encountersteal:
-            name: encountersteal
-        end_moor_captive:
-            name: end_moor_captive
-        end_npc_pillory:
-            name: end_npc_pillory
-        endcombat:
-            description: |-
-                Ends combat by applying pc effects, displaying necessary descriptions of them, and resetting combat variables back to defaults
-
-                `<<endcombat eventType?>>`
-                - **eventType** _optional_: `string` - type of event to end when calling `<<endevent>>`
-                  - `"phaseless"`: phase variables will not be reset
-            parameters:
-                - '|+ "phaseless"'
-            tags: ["text"]
-        endconfession:
-            name: endconfession
-        endconfessionself:
-            name: endconfessionself
-        endevent:
-            description: |-
-                Ends ongoing event by resetting all event variables to default
-
-                Superceded by `<<endcombat>>`
-
-                `<<endevent type?>>`
-                - **type** _optional_: `string` - type of event to end
-                  - `"phaseless"`: phase variables will not be reset
-            parameters:
-                - '|+ "phaseless"'
-        endmasturbation:
-            name: endmasturbation
-        endnpc:
-            name: endnpc
-        endNpcPregnancy:
-            name: endNpcPregnancy
-        endPlayerPregnancy:
-            name: endPlayerPregnancy
-        endRainWraith:
-            name: endRainWraith
-        endstall:
-            name: endstall
-        endWraith:
-            name: endWraith
-        enemyarousal:
-            name: enemyarousal
-        english_skill_up_text:
-            name: english_skill_up_text
-        englishdifficulty:
-            name: englishdifficulty
-        englishNudeReactions:
-            description: |-
-                Prints classmate reactions for pc's nude state
-
-                Should check if npcs are already generated before generating. Consider refactoring
-            tags: ["text", "refactor"]
-        englishplayfinish:
-            name: englishplayfinish
-        englishplaystart:
-            name: englishplaystart
-        englishskill:
-            name: englishskill
-        englishstart:
-            name: englishstart
-        enterChangingRoomLink:
-            name: enterChangingRoomLink
-            tags: ["unused"]
-        enumeratedGroup:
-            description: |-
-                Prints summarised gender makeup of currently active npcs with numbers (ie, `2 men and 3 women`)
-
-                See `<<group>>` for no numbers, `<<EnumeratedGroup>> for capitalised, or `<<fullGroup>>` for a list
-            tags: ["text"]
-        EnumeratedGroup:
-            description: |-
-                Prints capitalised and summarised gender makeup of currently active npcs with numbers (ie, `2 Men and 3 Women`)
-
-                See `<<group>>` for no numbers, `<<enumeratedGroup>> for uncapitalised, or `<<fullGroup>>` for a list
-            tags: ["unused", "text"]
-        equipClothesItemFromDefault:
-            description: |-
-                Applies clothing item to pc's slot based on setup object
-
-                Does NOT respect cursed items
-
-                `<<equipClothesItemFromDefault slot itemIndex colour? accessoryColour?>>`
-                - **slot**: `string` - slot to put clothing on
-                  - %clothesTypesDesc%
-                - **itemIndex**: `number` - index of clothing item from setup to copy from
-                - **colour** _optional_: `string` - primary colour
-                  - `"custom"`: pulls values from `$customColors` object
-                  - `text`: valid colour in any format
-                - **accessoryColour** _optional_: `object` - secondary colour
-                  - `"custom"`: pulls values from `$customColors` object
-                  - `text`: valid colour in any format
-            parameters:
-                - '%clothesTypes% &+ number |+ "custom"|text |+ "custom"|text'
-        equipNPCCondom:
-            name: equipNPCCondom
-        equipPlayerCondom:
-            name: equipPlayerCondom
-        error:
-            name: error
-        errorp:
-            name: errorp
-        estate_betting_start:
-            name: estate_betting_start
-        estate_cards_bet:
-            name: estate_cards_bet
-        estate_cards_finish:
-            name: estate_cards_finish
-        estate_chaos:
-            name: estate_chaos
-        estate_chaos_bar:
-            name: estate_chaos_bar
-        estate_end:
-            name: estate_end
-        estate_init:
-            name: estate_init
-        estate_security:
-            name: estate_security
-        estate_stone_links:
-            name: estate_stone_links
-        event_trigger:
-            name: event_trigger
-        eventAmbient:
-            name: eventAmbient
-        eventbog:
-            name: eventbog
-        eventbogsafe:
-            name: eventbogsafe
-        eventforest:
-            name: eventforest
-        eventforestdeep:
-            name: eventforestdeep
-        eventforestitem:
-            name: eventforestitem
-        eventforestoutskirts:
-            name: eventforestoutskirts
-        eventforestsafe:
-            name: eventforestsafe
-        eventlake:
-            name: eventlake
-        eventlakeice:
-            name: eventlakeice
-        eventlakesafe:
-            name: eventlakesafe
-        eventlakewater:
-            name: eventlakewater
-        eventParkStreakEnd:
-            name: eventParkStreakEnd
-        events_farm_exhibitionism:
-            name: events_farm_exhibitionism
-        events_prison:
-            name: events_prison
-        events_prison_attention:
-            name: events_prison_attention
-        events_prison_triggered:
-            name: events_prison_triggered
-        events_skul_dock:
-            name: events_skul_dock
-        events_stalk:
-            name: events_stalk
-        events_stalk_nnpc:
-            name: events_stalk_nnpc
-        eventsbartending:
-            name: eventsbartending
-        eventsbartendinglisten:
-            name: eventsbartendinglisten
-        eventsbeach:
-            name: eventsbeach
-        eventsbondage:
-            name: eventsbondage
-        eventsbondageeast:
-            name: eventsbondageeast
-        eventsbondagenorth:
-            name: eventsbondagenorth
-        eventsbondagesouth:
-            name: eventsbondagesouth
-        eventsbondagewest:
-            name: eventsbondagewest
-        eventscave:
-            name: eventscave
-        eventscavesafe:
-            name: eventscavesafe
-        eventscavetreasure:
-            name: eventscavetreasure
-        eventschalets:
-            name: eventschalets
-        eventschef:
-            name: eventschef
-        eventschoolhallwaysexposed:
-            name: eventschoolhallwaysexposed
-        eventscourtyard:
-            name: eventscourtyard
-        eventsdance:
-            name: eventsdance
-        eventsdeepsea:
-            name: eventsdeepsea
-        eventsdrain:
-            name: eventsdrain
-        eventsenglish:
-            name: eventsenglish
-        eventsenglishsafe:
-            name: eventsenglishsafe
-        eventsfarm:
-            name: eventsfarm
-        eventshistory:
-            name: eventshistory
-        eventshistorysafe:
-            name: eventshistorysafe
-        eventsmaths:
-            name: eventsmaths
-        eventsmathssafe:
-            name: eventsmathssafe
-        eventsmoorhigh:
-            name: eventsmoorhigh
-        eventsmoorlow:
-            name: eventsmoorlow
-        eventsmoormid:
-            name: eventsmoormid
-        eventsSchoolChangingRoomsBoys:
-            name: eventsSchoolChangingRoomsBoys
-        eventsschoolhallways:
-            name: eventsschoolhallways
-        eventsschoolstump:
-            name: eventsschoolstump
-        eventsschooltoilets:
-            name: eventsschooltoilets
-        eventsscience:
-            name: eventsscience
-        eventssciencesafe:
-            name: eventssciencesafe
-        eventssea:
-            name: eventssea
-        eventsseabeach:
-            name: eventsseabeach
-        eventssewers:
-            name: eventssewers
-        eventsstall:
-            name: eventsstall
-        eventsstreet:
-            name: eventsstreet
-        eventsstreetday:
-            name: eventsstreetday
-        eventsstreetnight:
-            name: eventsstreetnight
-        eventsswimming:
-            name: eventsswimming
-        eventsswimmingsafe:
-            name: eventsswimmingsafe
-        eventstemple:
-            name: eventstemple
-        eventstoilets:
-            name: eventstoilets
-        eventstoiletssafe:
-            name: eventstoiletssafe
-            tags: ["unused"]
-        eventstrash:
-            name: eventstrash
-        eventsWhitneyStreet:
-            name: eventsWhitneyStreet
-        eventwolfcave:
-            name: eventwolfcave
-        ex_effects:
-            name: ex_effects
-            tags: ["unused"]
-        ex_end:
-            name: ex_end
-            tags: ["unused"]
-        ex_init:
-            name: ex_init
-            tags: ["unused"]
-        exam:
-            name: exam
-        exam_cheat:
-            name: exam_cheat
-        exam_difficulty:
-            name: exam_difficulty
-        exam_result:
-            name: exam_result
-        execremovebottom:
-            name: execremovebottom
-        execremovedress:
-            name: execremovedress
-        execremoveshoes:
-            name: execremoveshoes
-        execremovetop:
-            name: execremovetop
-        execremoveunderbottom:
-            name: execremoveunderbottom
-        execremoveundertop:
-            name: execremoveundertop
-        execstriporder:
-            name: execstriporder
-        execstripperform:
-            name: execstripperform
-        exhibitionclassroom:
-            name: exhibitionclassroom
-        exhibitionism:
-            name: exhibitionism
-        exhibitionism1:
-            name: exhibitionism1
-        exhibitionism2:
-            name: exhibitionism2
-        exhibitionism3:
-            name: exhibitionism3
-        exhibitionism4:
-            name: exhibitionism4
-        exhibitionism5:
-            name: exhibitionism5
-        exhibitionism6:
-            name: exhibitionism6
-            tags: ["unused"]
-        exhibitionismbuilding:
-            name: exhibitionismbuilding
-        exhibitionismgarden:
-            name: exhibitionismgarden
-        exhibitionismN:
-            name: exhibitionismN
-        exhibitionismoutputlinecapitalise:
-            name: exhibitionismoutputlinecapitalise
-        exhibitionismoutputlinecomma:
-            name: exhibitionismoutputlinecomma
-        exhibitionismoutputlinestop:
-            name: exhibitionismoutputlinestop
-        exhibitionismroof:
-            name: exhibitionismroof
-        exhibitionismsetdata:
-            name: exhibitionismsetdata
-        exhibitionist:
-            description: |-
-                Prints `Exhibitionism X` with appropriate color for level
-
-                `<<exhibitionist level>>`
-                - **level**: `number` - required level for this action
-                  - `1-6`: level and color
-                  - `0`: just text
-            parameters:
-                - "number"
-            tags: ["text"]
-        exhibitionist1:
-            description: |-
-                Prints `Exhibitionism 1` with appropriate color for level
-            tags: ["text"]
-        exhibitionist2:
-            description: |-
-                Prints `Exhibitionism 2` with appropriate color for level
-            tags: ["text"]
-        exhibitionist3:
-            description: |-
-                Prints `Exhibitionism 3` with appropriate color for level
-            tags: ["text"]
-        exhibitionist4:
-            description: |-
-                Prints `Exhibitionism 4` with appropriate color for level
-            tags: ["text"]
-        exhibitionist5:
-            description: |-
-                Prints `Exhibitionism 5` with appropriate color for level
-            tags: ["text"]
-        exhibitionist6:
-            description: |-
-                Prints `!Exhibitionism 6!` with appropriate color for level
-            tags: ["unused", "text"]
-        exhibitorgasm:
-            name: exhibitorgasm
-        exit:
-            description: |-
-                Stops processing of remaining Passage or Widget
-
-                This doesn't propagate through the stack.
-                Calling this from inside a Widget will exit the Widget and return to next location from where it was called from
-
-                See `<<exitAll>>`
-        exitAll:
-            description: |-
-                Stops processing of all remaining Widgets and Passages
-
-                This propagates through the stack.
-                All Widgets that would have been called after this Widget will be ignored
-
-                The equivalent of calling `<<exit>>` on every Widget and Passage currently being processed
-        exitclothingshop:
-            name: exitclothingshop
-        exitWraith:
-            name: exitWraith
-        exportsettings:
-            name: exportsettings
-        exposedcheck:
-            name: exposedcheck
-        exposedlower:
-            description: |-
-                Prints outermost unexposed lower layer
-            tags: ["text"]
-        exposedupper:
-            description: |-
-                Prints outermost unexposed upper layer
-            tags: ["text"]
-        exposure:
-            description: |-
-                Updates player exposure values based on location and state of dress
-        extraStatistics:
-            name: extraStatistics
-        extraStatisticsPregnancyType:
-            name: extraStatisticsPregnancyType
-        extraStatisticsWarning:
-            name: extraStatisticsWarning
-        EZbig:
-            name: EZbig
-        EZdisgusting:
-            name: EZdisgusting
-        EZpenis:
-            name: EZpenis
-        EZsmall:
-            name: EZsmall
-        fa-icon:
-            description: |-
-                Prints a fa-icon
-
-                `<<fa-icon iconName>>`
-                - **iconName**: `string` - fa-icon css classname
-            parameters:
-                - text
-            tags: ["img", "unused"]
-        faceejacstat:
-            name: faceejacstat
-        faceimg:
-            name: faceimg
-        faceintegrity:
-            name: faceintegrity
-        faceon:
-            name: faceon
-            tags: ["unused"]
-        faceruined:
-            description: |-
-                Destroys pc's face slot clothing, whether worn or carried
-
-                `<<faceruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        facesend:
-            name: facesend
-        FaceShop:
-            name: FaceShop
-        facesitFlavorText:
-            name: facesitFlavorText
-        facesteal:
-            name: facesteal
-            tags: ["unused"]
-        facestrip:
-            name: facestrip
-        faceundress:
-            name: faceundress
-        facewear:
-            name: facewear
-        fallenangel:
-            description: |-
-                Prints `| Fallen Angel`
-            tags: ["text"]
-        fallenButNotOut:
-            name: fallenButNotOut
-        fallenDescend:
-            name: fallenDescend
-        fallenTransform:
-            name: fallenTransform
-        fame:
-            description: |-
-                Changes fame values without any checks or safeguards
-
-                `<<fame changeValue ...type >>`
-                - **changeValue**: `number` - value to change fame by
-                - ...**type**: `string` - type(s) of fame to change
-                  - %fameTypesDesc%
-            parameters:
-                - "number &+ %fameTypes% |+ ...%fameTypes%"
-            tags: ["unused"]
-        famebestiality:
-            description: |-
-                Changes pc's fame for bestiality
-
-                `<<famebestiality value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        famebusiness:
-            description: |-
-                Changes pc's fame for business
-
-                `<<famebusiness value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        fameclamp:
-            name: fameclamp
-        famedance:
-            description: |-
-                Increments pc's fame for dancing based on audience size
-        fameexhibitionism:
-            description: |-
-                Changes pc's fame for exhibitionism
-
-                `<<fameexhibitionism value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        famegood:
-            description: |-
-                Changes pc's fame for being good
-
-                `<<famegood value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        fameimpreg:
-            description: |-
-                Changes pc's fame for impregnating others (fathering children)
-
-                `<<fameimpreg value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        famemodel:
-            description: |-
-                Changes pc's fame for modelling
-
-                `<<famemodel value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"` | `"art"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid"|"art" |+ bool'
-        famepimp:
-            description: |-
-                Changes pc's fame for being pimped out
-
-                Currently unused
-
-                `<<famepimp value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        famepregnancy:
-            description: |-
-                Changes pc's fame for being pregnant (mothering children)
-
-                `<<famepregnancy value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        fameProse:
-            description: |-
-                Prints full description of provided fame key
-
-                `<<fameProse type>>`
-                - **type**: `string` - type of fame
-                  - `%fameTypesDesc%`
-            parameters:
-                - "%fameTypes%"
-            tags: ["text"]
-        fameprostitution:
-            description: |-
-                Changes pc's fame for prostitution
-
-                `<<fameprostitution value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        famerape:
-            description: |-
-                Changes pc's fame for being raped
-
-                `<<famerape value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        famesalute:
-            name: famesalute
-        fameschoolex:
-            description: |-
-                Changes pc's fame for exhibitionism amongst students
-
-                Consider using `<<fameexhibitionsim>>` instead as this behavior is not implemented and lightly deprecated
-
-                `<<fameschoolex value>>`
-                - **changeValue**: `number` - value to change fame by
-            parameters:
-                - "number"
-            tags: ["refactor"]
-        famescrap:
-            description: |-
-                Changes pc's fame for fighting
-
-                `<<famescrap value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        famesex:
-            description: |-
-                Changes pc's having sex fame
-
-                `<<famesex value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        famesocial:
-            description: |-
-                Changes pc's fame for social status
-
-                `<<famesocial value type? forceChange?>>`
-                - **changeValue**: `number` - value to change fame by
-                - **type** _optional_: `string` - type of event giving fame
-                  - `"none"` | `"pic"` | `"vid"`
-                - **forceChange** _optional_: `bool` - skip checks that would normally prevent this type of fame gain
-            parameters:
-                - 'number |+ "none"|"pic"|"vid" |+ bool'
-        farm_actions:
-            name: farm_actions
-        farm_aggro:
-            name: farm_aggro
-        farm_alex:
-            name: farm_alex
-        farm_assault_actions:
-            name: farm_assault_actions
-        farm_assault_alex:
-            name: farm_assault_alex
-        farm_assault_attack_options:
-            name: farm_assault_attack_options
-        farm_assault_end:
-            name: farm_assault_end
-        farm_assault_flight:
-            name: farm_assault_flight
-        farm_assault_info:
-            name: farm_assault_info
-        farm_assault_init:
-            name: farm_assault_init
-        farm_assault_intro:
-            name: farm_assault_intro
-        farm_assault_intruders:
-            name: farm_assault_intruders
-        farm_assault_location:
-            name: farm_assault_location
-        farm_assault_no:
-            name: farm_assault_no
-        farm_assault_options:
-            name: farm_assault_options
-        farm_assault_progress:
-            name: farm_assault_progress
-        farm_assault_thugs:
-            name: farm_assault_thugs
-        farm_assault_unbind:
-            name: farm_assault_unbind
-        farm_attack_auto:
-            name: farm_attack_auto
-        farm_brush:
-            name: farm_brush
-        farm_build_day:
-            name: farm_build_day
-        farm_cattle:
-            name: farm_cattle
-        farm_cottage_options:
-            name: farm_cottage_options
-        farm_cottage_tv_options:
-            name: farm_cottage_tv_options
-        farm_count:
-            name: farm_count
-        farm_damage_report:
-            name: farm_damage_report
-        farm_dogs:
-            name: farm_dogs
-        farm_fence:
-            name: farm_fence
-        farm_fence_damage:
-            name: farm_fence_damage
-        farm_fight_alex:
-            name: farm_fight_alex
-        farm_fight_door:
-            name: farm_fight_door
-        farm_fight_end:
-            name: farm_fight_end
-            tags: ["unused"]
-        farm_fight_init:
-            name: farm_fight_init
-        farm_fight_options:
-            name: farm_fight_options
-        farm_forest_event:
-            name: farm_forest_event
-        farm_gen:
-            name: farm_gen
-        farm_gen_all:
-            name: farm_gen_all
-        farm_guard_paid:
-            name: farm_guard_paid
-        farm_guard_pay:
-            name: farm_guard_pay
-        farm_guard_wage:
-            name: farm_guard_wage
-        farm_he:
-            description: |-
-                Prints singular pronoun (he/she) for beast on farm, modified by hallucinations
-
-                `<<farm_he type>>`
-                - **type**: `string` - type of `$farmwork` being performed
-                  - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
-            parameters:
-                - '"dog"|"pig"|"horse"|"cattle"'
-            tags: ["text"]
-        farm_He:
-            description: |-
-                Prints capitalised singular pronoun (He/She) for beast on farm, modified by hallucinations
-
-                `<<farm_He type>>`
-                - **type**: `string` - type of `$farmwork` being performed
-                  - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
-            parameters:
-                - '"dog"|"pig"|"horse"|"cattle"'
-            tags: ["text"]
-        farm_him:
-            description: |-
-                Prints objective singular pronoun (him/her) for beast on farm, modified by hallucinations
-
-                `<<farm_him type>>`
-                - **type**: `string` - type of `$farmwork` being performed
-                  - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
-            parameters:
-                - '"dog"|"pig"|"horse"|"cattle"'
-            tags: ["text"]
-        farm_his:
-            description: |-
-                Prints possessive pronoun (his/her) for beast on farm, modified by hallucinations
-
-                `<<farm_his type>>`
-                - **type**: `string` - type of `$farmwork` being performed
-                  - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
-            parameters:
-                - '"dog"|"pig"|"horse"|"cattle"'
-            tags: ["text"]
-        farm_His:
-            description: |-
-                Prints capitalised possessive pronoun (His/Her) for beast on farm, modified by hallucinations
-
-                `<<farm_His type>>`
-                - **type**: `string` - type of `$farmwork` being performed
-                  - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
-            parameters:
-                - '"dog"|"pig"|"horse"|"cattle"'
-            tags: ["text"]
-        farm_horses:
-            name: farm_horses
-        farm_init:
-            name: farm_init
-        farm_knotted:
-            name: farm_knotted
-        farm_milk_actions:
-            name: farm_milk_actions
-        farm_milk_check:
-            name: farm_milk_check
-        farm_pigs:
-            name: farm_pigs
-        farm_relax_chat:
-            name: farm_relax_chat
-        farm_relax_end:
-            name: farm_relax_end
-        farm_ride_events:
-            name: farm_ride_events
-        farm_sleep_options:
-            name: farm_sleep_options
-        farm_status:
-            name: farm_status
-        farm_stock:
-            name: farm_stock
-        farm_stock_init:
-            name: farm_stock_init
-        farm_tell_alex:
-            name: farm_tell_alex
-        farm_tending_alex_events:
-            name: farm_tending_alex_events
-        farm_tending_events:
-            name: farm_tending_events
-        farm_text:
-            description: |-
-                Prints singular type of beast on farm, modified by hallucinations
-
-                `<<farm_text type>>`
-                - **type**: `string` - type of `$farmwork` being performed
-                  - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
-            parameters:
-                - '"dog"|"pig"|"horse"|"cattle"'
-            tags: ["text"]
-        farm_text_many:
-            description: |-
-                Prints plural type of beasts on farm, modified by hallucinations
-
-                `<<farm_text type>>`
-                - **type**: `string` - type of `$farmwork` being performed
-                  - `"dog"` | `"pig"` | `"horse"` | `"cattle"`
-            parameters:
-                - '"dog"|"pig"|"horse"|"cattle"'
-            tags: ["text"]
-        farm_trust:
-            name: farm_trust
-        farm_update:
-            name: farm_update
-        farm_upgrades_current:
-            name: farm_upgrades_current
-        farm_upgrades_status:
-            name: farm_upgrades_status
-        farm_var_set:
-            description: |-
-                Resets farm vars if appropriate
-        farm_work:
-            name: farm_work
-        farm_work_time:
-            name: farm_work_time
-        farm_work_update:
-            name: farm_work_update
-        farm_yield:
-            description: |-
-                Adds tier to daily farm_yield gain
-
-                `$farm_yield` is the daily buildup of extra farm productivity where 0 is none (0+)
-
-                `$farm_yield_alex` is the total built-up extra farm productivity Alex will award pc as money where 0 is none (0+)
-
-                `<<farm_yield change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        farmCatchChance:
-            name: farmCatchChance
-        farmStage4:
-            name: farmStage4
-        farmStage5:
-            name: farmStage5
-        farmStage6:
-            name: farmStage6
-        farmVisitor:
-            name: farmVisitor
-        father:
-            name: father
-        Father:
-            name: Father
-        featExplanation:
-            name: featExplanation
-        featName:
-            name: featName
-        feats:
-            name: feats
-        featSettings:
-            name: featSettings
-        featsList:
-            name: featsList
-        featsMenu:
-            name: featsMenu
-        featsMerge:
-            name: featsMerge
-        featsMergePre:
-            name: featsMergePre
-        featsPointsMenu:
-            name: featsPointsMenu
-        featsPointsMenuButtons:
-            name: featsPointsMenuButtons
-        featsPointsMenuReset:
-            name: featsPointsMenuReset
-        featsTattooOptions:
-            name: featsTattooOptions
-        feet_confront:
-            name: feet_confront
-        feet_hide:
-            name: feet_hide
-        feet_hobble:
-            name: feet_hobble
-        feet_run:
-            name: feet_run
-        feet_stand:
-            name: feet_stand
-        feet_strut:
-            name: feet_strut
-        feet_walk:
-            name: feet_walk
-        feetactionDifficulty:
-            name: feetactionDifficulty
-        feetactionDifficultyMachine:
-            name: feetactionDifficultyMachine
-            tags: ["unused"]
-        feetactionDifficultySelf:
-            name: feetactionDifficultySelf
-            tags: ["unused"]
-        feetactionDifficultyStruggle:
-            name: feetactionDifficultyStruggle
-            tags: ["unused"]
-        feetactionDifficultySwarm:
-            name: feetactionDifficultySwarm
-            tags: ["unused"]
-        feetactionDifficultyTentacle:
-            name: feetactionDifficultyTentacle
-        feetActionInit:
-            name: feetActionInit
-        feetActionInitMachine:
-            name: feetActionInitMachine
-        feetActionInitSelf:
-            name: feetActionInitSelf
-        feetActionInitStruggle:
-            name: feetActionInitStruggle
-        feetActionInitSwarm:
-            name: feetActionInitSwarm
-        feetActionInitTentacle:
-            name: feetActionInitTentacle
-        feetActions:
-            name: feetActions
-        feetactionSetupTentacle:
-            name: feetactionSetupTentacle
-        feetActionsMachine:
-            name: feetActionsMachine
-        feetActionsSelf:
-            name: feetActionsSelf
-        feetActionsStruggle:
-            name: feetActionsStruggle
-        feetActionsSwarm:
-            name: feetActionsSwarm
-        feetActionsTentacle:
-            name: feetActionsTentacle
-        feetdifficulty:
-            description: |-
-                Prints color-coded adjective of feet action difficulty in current combat
-            tags: ["text"]
-        feetejacstat:
-            name: feetejacstat
-        feetgrabnew:
-            name: feetgrabnew
-        feetGrabRub:
-            name: feetGrabRub
-        feetit:
-            description: |-
-                Prints an objective case pronoun (them/it) for worn `"feet"` slot
-            tags: ["text"]
-        feetKick:
-            name: feetKick
-        feeton:
-            name: feeton
-            tags: ["unused"]
-        feetOthervagina:
-            name: feetOthervagina
-        feetruined:
-            description: |-
-                Destroys pc's feet slot clothing, whether worn or carried
-
-                `<<feetruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        feetRunClothed:
-            name: feetRunClothed
-            tags: ["unused"]
-        feetsend:
-            name: feetsend
-            tags: ["unused"]
-        feetshoes:
-            name: feetshoes
-        FeetShop:
-            name: FeetShop
-        feetskill:
-            description: |-
-                Adds feet skill to pc's state
-
-                `$feetskill` is a measure of pc's proficiency using their feet where 0 is awkward (0-1,000)
-
-                `<<feetskill change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        feetskilluse:
-            name: feetskilluse
-        feetsocks:
-            name: feetsocks
-        feetstat:
-            name: feetstat
-        feetsteal:
-            name: feetsteal
-        feetstrip:
-            name: feetstrip
-        feettentacledisable:
-            name: feettentacledisable
-        feettext:
-            description: |-
-                Prints color-coded adjective of active feet skill usage
-            tags: ["text"]
-        feetthat:
-            description: |-
-                Prints plural/singular prose of that (those/that) for worn `"feet"` slot
-            tags: ["unused", "text"]
-        feetundress:
-            name: feetundress
-        feetwear:
-            name: feetwear
-        fertilisefromgroup:
-            name: fertilisefromgroup
-            tags: ["unused"]
-        fertiliseParasites:
-            name: fertiliseParasites
-        fertilityCycles:
-            name: fertilityCycles
-        fetishPregnancyImg:
-            name: fetishPregnancyImg
-        fetishSettings:
-            name: fetishSettings
-        fields_init:
-            name: fields_init
-        filterreveal:
-            name: filterreveal
-        flashbackbeach:
-            name: flashbackbeach
-        flashbackhome:
-            name: flashbackhome
-        flashbackschool:
-            name: flashbackschool
-        flashbacktown:
-            name: flashbacktown
-        flashbackunderground:
-            name: flashbackunderground
-        flashcrotchunderskirt:
-            name: flashcrotchunderskirt
-        flats_alarm_end:
-            name: flats_alarm_end
-        flats_alarm_links:
-            name: flats_alarm_links
-        flats_alarm_time:
-            name: flats_alarm_time
-        flats_auction_end:
-            name: flats_auction_end
-        flats_canal:
-            name: flats_canal
-        flats_canal_defeat:
-            name: flats_canal_defeat
-        flats_canal_run:
-            name: flats_canal_run
-        flats_vents_end:
-            name: flats_vents_end
-            tags: ["unused"]
-        flats_vents_init:
-            name: flats_vents_init
-            tags: ["unused"]
-        flats_vents_links:
-            name: flats_vents_links
-            tags: ["unused"]
-        flaunting:
-            description: |-
-                Prints player opinion of their state based on trauma, stress, and arousal
-
-                Description is without subject and capitalised
-
-                Example:
-                ```
-                <<flaunting>> you make an example of yourself.
-                ```
-            tags: ["text"]
-        flight_effects:
-            name: flight_effects
-        flight_text:
-            description: |-
-                Prints `| Wings` or `| Strong wings` depending on pc's wing strength
-            tags: ["text"]
-        flight_time_check:
-            name: flight_time_check
-        foldout:
-            container: true
-            name: foldout
-        forestBullyLeaves:
-            name: forestBullyLeaves
-        forestCabinReturnLinks:
-            name: forestCabinReturnLinks
-        forestdeeper:
-            name: forestdeeper
-        foresthunt:
-            name: foresthunt
-        forestlessdeep:
-            name: forestlessdeep
-        forestmove:
-            name: forestmove
-        forestRescueFail:
-            name: forestRescueFail
-        forestRescueSetup:
-            name: forestRescueSetup
-        forestsearch:
-            name: forestsearch
-        forestShop-intro:
-            name: forestShop-intro
-        forestShop-leave:
-            name: forestShop-leave
-        forestShop-main:
-            name: forestShop-main
-        forestShop-text:
-            name: forestShop-text
-        forestspider:
-            name: forestspider
-            tags: ["unused"]
-        formatList:
-            name: formatList
-            tags: ["unused"]
-        formatmoney:
-            description: |-
-                Converts amount in pennies to formatted string of currency
-
-                Sets `_printmoney` as output
-
-                `<<formatmoney amountInPennies>>`
-                - **amountInPennies**: `number` - amount in pennies, positive or negative
-            parameters:
-                - "number"
-            tags: ["temp"]
-        fox:
-            description: |-
-                Prints `| Foxboy` or `| Vixen` depending on pc's appearance
-            tags: ["text"]
-        fox_gen:
-            name: fox_gen
-        fox_text:
-            name: fox_text
-        foxnickname:
-            name: foxnickname
-        foxTransform:
-            name: foxTransform
-        friend:
-            description: |-
-                Prints Robin's maximum friendship status with the pc (girlfriend/best friend/friend)
-
-                `<<friend modifier?>>`
-                - **modifier** _optional_: `string` - allowed alternative
-                  - `"bff"`: Robin can call pc their best friend
-            parameters:
-                - '|+ "bff"'
-            tags: ["text"]
-        fringecheck:
-            name: fringecheck
-            tags: ["unused"]
-        fringedescription:
-            name: fringedescription
-            tags: ["unused"]
-        fullGroup:
-            description: |-
-                Prints gender makeup of currently active npcs as a list (ie, `Robin, man, and woman`)
-
-                See `<<enumeratedGroup>>` for numbers as well or `<<group>>` for a summary
-
-                `<<fullGroup formatting?>>`
-                - **formatting** _optional_: `string` - formatting to apply
-                  - `"cap"`: capitalise output
-            parameters:
-                - '|+ "cap"'
-            tags: ["text"]
-        furnitureCatalogue:
-            name: furnitureCatalogue
-        furnitureDowngrade:
-            name: furnitureDowngrade
-        furnitureLinks:
-            name: furnitureLinks
-        furnitureList:
-            name: furnitureList
-        furnitureUpdate:
-            name: furnitureUpdate
-        furnitureWarning:
-            description: |-
-                Prints `| This will replace your X`
-
-                `<<furnitureWarning type>>`
-                - **type**: `string` - type of furniture being replaced
-                  - `"decoration"` | `"windowsill"` | `"wallpaper"` | `"poster"`
-            parameters:
-                - '"decoration"|"windowsill"|"wallpaper"|"poster"'
-            tags: ["unused", "text"]
-        gacceptance:
-            description: |-
-                Prints `| + Acceptance`
-            tags: ["text"]
-        gadeviancy:
-            description: |-
-                Prints `| + Alex's Deviancy`
-            tags: ["unused", "text"]
-        gagged_speech:
-            name: gagged_speech
-        gaggro:
-            description: |-
-                Prints `| + Remy's Encroachment`
-            tags: ["text"]
-        galcohol:
-            description: |-
-                Prints `| + Alcohol`
-            tags: ["text"]
-        gallerySettings:
-            name: gallerySettings
-        gameMode:
-            name: gameMode
-        gameSettings:
-            name: gameSettings
-        gameStartOnly:
-            name: gameStartOnly
-        ganalskill:
-            description: |-
-                Prints `| Anal skill`
-            tags: ["text"]
-        ganginit:
-            name: ganginit
-        gapproval:
-            name: gapproval
-            tags: ["text"]
-        garage:
-            description: |-
-                Prints `| + Rage`
-            tags: ["text"]
-        garousal:
-            description: |-
-                Prints `| + Arousal`
-            tags: ["text"]
-        gaspair:
-            name: gaspair
-        gathletics:
-            description: |-
-                Prints `| + Athletics`
-            tags: ["text"]
-        gattention:
-            description: |-
-                Prints `| + Attention` if more prison attention can be gained today
-
-                `<<gattention type>>`
-                - **type**: `string` - type of attention to check if should be visible
-                  - `"prison"`
-            parameters:
-                - '|+ "prison"'
-            tags: ["text"]
-        gawareness:
-            description: |-
-                Prints `| + Awareness` or `| - Innocence`
-            tags: ["text"]
-        gbaton:
-            description: |-
-                Prints `| + Baton proficiency`
-            tags: ["text"]
-        gbeauty:
-            description: |-
-                Prints `| + Beauty`
-            tags: ["unused", "text"]
-        gbirdstockholm:
-            name: gbirdstockholm
-            tags: ["text"]
-        gbodywriting:
-            description: |-
-                Prints `| + Bodywriting`
-            tags: ["text"]
-        gbottomskill:
-            description: |-
-                Prints `| + Ass skill`
-            tags: ["text"]
-        gcamp_concealment:
-            name: gcamp_concealment
-            tags: ["unused", "text"]
-        gchaos:
-            description: |-
-                Prints `| + Chaos`
-            tags: ["text"]
-        gchestskill:
-            description: |-
-                Prints `| + Chest skill`
-            tags: ["text"]
-        gcombatcontrol:
-            description: |-
-                Prints `| + Control`
-            tags: ["text"]
-        gcomprehension:
-            description: |-
-                Prints `| + Comprehension`
-            tags: ["text"]
-        gcondoms:
-            description: |-
-                Gives player and Prints `| + X Condoms`
-
-                `<<gcondoms numberGained?>>`
-                - **numberGained** _optional_: `number` - number of condoms to give player
-                  - Defaults to 1
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        gcontrol:
-            description: |-
-                Prints `| + Control`
-            tags: ["text"]
-        gcool:
-            description: |-
-                Prints `| + Status`
-            tags: ["text"]
-        gcorruption:
-            description: |-
-                Prints `| + Corruption`
-            tags: ["text"]
-        gcrime:
-            description: |-
-                Prints `| + Crime X` where X is type of crime
-
-                `<<gcrime type>>`
-                - **type**: `string` - type in setup.crimeNames
-                  - %crimeTypesDesc%
-            parameters:
-                - "|+ %crimeTypes%"
-            tags: ["text"]
-        gdanceskill:
-            description: |-
-                Prints `| + Dance skill`
-            tags: ["text"]
-        gdaring:
-            description: |-
-                Prints `| + Daring`
-            tags: ["text"]
-        gdef:
-            description: |-
-                Prints `| + Defiance`
-            tags: ["unused", "text"]
-        gdelinquency:
-            description: |-
-                Prints `| + Delinquency`
-            tags: ["text"]
-        gdom:
-            description: |-
-                Prints `| + Dominance` or `| + NPCName's Dominance` if provided
-
-                `<<gdom NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-                  - `"Robin"`: Displays "Confidence" instead
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        gdrugged:
-            description: |-
-                Prints `| + Drugged`
-            tags: ["text"]
-        gencolourpicker:
-            name: gencolourpicker
-        gencolourselector:
-            name: gencolourselector
-        gencoloursquares:
-            name: gencoloursquares
-        gendear:
-            description: |-
-                Prints `| + Endearment`
-            tags: ["text"]
-        gender:
-            name: gender
-        gender_posture:
-            name: gender_posture
-        gendercheck:
-            description: |-
-                Prints error if pc's gender appearance is not `m` or `f`
-            tags: ["text"]
-        genderswap:
-            name: genderswap
-        genderswapPlayer:
-            name: genderswapPlayer
-            tags: ["unused"]
-        generalOn:
-            name: generalOn
-        generalRuined:
-            description: |-
-                Destroy and delete clothing in specified slot
-
-                Relies on `_noRebuy` already being set to determine whether to call `<<generalRuinedRebuy>>`
-
-                `<<generalRuined slot ruinAll?>>`
-                - **slot**: `string` - clothing slot to target
-                  - %clothesTypesDesc%
-                - **ruinAll** _optional_: `bool` - ruin all other parts when provided an outfit (truthy)
-                  - defaults to `false`
-            parameters:
-                - "%clothesTypes% |+ bool|text|number"
-            tags: ["temp"]
-        generalRuinedRebuy:
-            description: |-
-                Rebuys provided clothing item
-
-                This should be called in the middle of `<<generalRuined>>` before the item has been completely destroyed as it relies on the item still existing
-
-                Part of the larger [Example API hyperlink]
-
-                `<<generalRuinedRebuy slot structure>>`
-                - **slot**: `string` - clothing slot to target
-                  - %clothesTypesDesc%
-                - **structure**: `object` - state structure where clothing item is currently located
-                  - `$worn` | `$carried`
-            parameters:
-                - "%clothesTypes% &+ var|bareword"
-        generalSend:
-            name: generalSend
-        generalSteal:
-            name: generalSteal
-        generalStoreon:
-            name: generalStoreon
-        generalStrip:
-            name: generalStrip
-        generalUndress:
-            name: generalUndress
-        generalWear:
-            description: |-
-                Applies clothing item to pc's slot
-
-                Does nothing if blocked by cursed items
-
-                `<<generalWear slot itemIndex colour? accessoryColour?>>`
-                - **slot**: `string` - slot to put clothing on
-                  - %clothesTypesDesc%
-                - **itemIndex**: `number` - index of clothing item from setup to copy from
-                - **colour** _optional_: `string` - primary colour
-                  - `"custom"`: pulls values from `$customColors` object
-                  - `text`: valid colour in any format
-                - **accessoryColour** _optional_: `object` - secondary colour
-                  - `"custom"`: pulls values from `$customColors` object
-                  - `text`: valid colour in any format
-            parameters:
-                - '%clothesTypes% &+ number |+ "custom"|text |+ "custom"|text'
-        generalWearFromWardrobe:
-            name: generalWearFromWardrobe
-        generate_anxious_guard:
-            name: generate_anxious_guard
-        generate_beast_traits:
-            name: generate_beast_traits
-        generate_methodical_guard:
-            name: generate_methodical_guard
-        generate_npc_skills:
-            name: generate_npc_skills
-        generate_npc_traits:
-            name: generate_npc_traits
-        generate_relaxed_guard:
-            name: generate_relaxed_guard
-        generate_scarred_inmate:
-            name: generate_scarred_inmate
-        generate_struggle_creature:
-            name: generate_struggle_creature
-        generate_tattooed_inmate:
-            name: generate_tattooed_inmate
-        generate_veteran_guard:
-            name: generate_veteran_guard
-        generate1:
-            name: generate1
-        generate2:
-            name: generate2
-        generate3:
-            name: generate3
-        generate4:
-            name: generate4
-        generate5:
-            name: generate5
-        generate6:
-            name: generate6
-        generateActionsAbomination:
-            name: generateActionsAbomination
-        generateActionsMachine:
-            name: generateActionsMachine
-        generateActionsMan:
-            name: generateActionsMan
-        generateActionsOmni:
-            name: generateActionsOmni
-        generateActionsStruggle:
-            name: generateActionsStruggle
-        generateActionsSwarm:
-            name: generateActionsSwarm
-        generateActionsTentacle:
-            name: generateActionsTentacle
-        generateActionsVore:
-            name: generateActionsVore
-        generateActionsVorentacles:
-            name: generateActionsVorentacles
-        generateAdultShopCustomer:
-            name: generateAdultShopCustomer
-        generatebear1:
-            name: generatebear1
-            tags: ["unused"]
-        generatebear2:
-            name: generatebear2
-            tags: ["unused"]
-        generatebear3:
-            name: generatebear3
-            tags: ["unused"]
-        generatebear4:
-            name: generatebear4
-            tags: ["unused"]
-        generatebear5:
-            name: generatebear5
-            tags: ["unused"]
-        generatebear6:
-            name: generatebear6
-            tags: ["unused"]
-        generateBEAST:
-            name: generateBEAST
-        generateboar1:
-            name: generateboar1
-            tags: ["unused"]
-        generateboar2:
-            name: generateboar2
-            tags: ["unused"]
-        generateboar3:
-            name: generateboar3
-            tags: ["unused"]
-        generateboar4:
-            name: generateboar4
-            tags: ["unused"]
-        generateboar5:
-            name: generateboar5
-            tags: ["unused"]
-        generateboar6:
-            name: generateboar6
-            tags: ["unused"]
-        generatec1:
-            name: generatec1
-        generatec2:
-            name: generatec2
-        generatec3:
-            name: generatec3
-        generatec4:
-            name: generatec4
-            tags: ["unused"]
-        generatec5:
-            name: generatec5
-            tags: ["unused"]
-        generatec6:
-            name: generatec6
-            tags: ["unused"]
-        generatecat1:
-            name: generatecat1
-            tags: ["unused"]
-        generatecat2:
-            name: generatecat2
-            tags: ["unused"]
-        generatecat3:
-            name: generatecat3
-            tags: ["unused"]
-        generatecat4:
-            name: generatecat4
-            tags: ["unused"]
-        generatecat5:
-            name: generatecat5
-            tags: ["unused"]
-        generatecat6:
-            name: generatecat6
-            tags: ["unused"]
-        generatecf1:
-            name: generatecf1
-            tags: ["unused"]
-        generatecf2:
-            name: generatecf2
-            tags: ["unused"]
-        generatecf3:
-            name: generatecf3
-            tags: ["unused"]
-        generatecf4:
-            name: generatecf4
-            tags: ["unused"]
-        generatecf5:
-            name: generatecf5
-            tags: ["unused"]
-        generatecf6:
-            name: generatecf6
-            tags: ["unused"]
-        generatecm1:
-            name: generatecm1
-            tags: ["unused"]
-        generatecm2:
-            name: generatecm2
-            tags: ["unused"]
-        generatecm3:
-            name: generatecm3
-            tags: ["unused"]
-        generatecm4:
-            name: generatecm4
-            tags: ["unused"]
-        generatecm5:
-            name: generatecm5
-            tags: ["unused"]
-        generatecm6:
-            name: generatecm6
-            tags: ["unused"]
-        generateCombatAction:
-            name: generateCombatAction
-        generateCombatActionList:
-            name: generateCombatActionList
-        generateCombatActionOthers:
-            name: generateCombatActionOthers
-        generateCombatActionOthersList:
-            name: generateCombatActionOthersList
-        generateCombatActionOthersRadio:
-            name: generateCombatActionOthersRadio
-        generateCombatActionRadio:
-            name: generateCombatActionRadio
-        generateCombatActionTentacle:
-            name: generateCombatActionTentacle
-        generateCombatActionTentacleList:
-            name: generateCombatActionTentacleList
-        generateCombatActionTentacleRadio:
-            name: generateCombatActionTentacleRadio
-        generateConfessor:
-            name: generateConfessor
-        generatecreature1:
-            name: generatecreature1
-            tags: ["unused"]
-        generatecreature2:
-            name: generatecreature2
-            tags: ["unused"]
-        generatecreature3:
-            name: generatecreature3
-            tags: ["unused"]
-        generatecreature4:
-            name: generatecreature4
-            tags: ["unused"]
-        generatecreature5:
-            name: generatecreature5
-            tags: ["unused"]
-        generatecreature6:
-            name: generatecreature6
-            tags: ["unused"]
-        generateCultist:
-            name: generateCultist
-        generateDemon:
-            name: generateDemon
-        generateDoctor:
-            name: generateDoctor
-        generatedog1:
-            name: generatedog1
-            tags: ["unused"]
-        generatedog2:
-            name: generatedog2
-            tags: ["unused"]
-        generatedog3:
-            name: generatedog3
-            tags: ["unused"]
-        generatedog4:
-            name: generatedog4
-            tags: ["unused"]
-        generatedog5:
-            name: generatedog5
-            tags: ["unused"]
-        generatedog6:
-            name: generatedog6
-            tags: ["unused"]
-        generatedolphin1:
-            name: generatedolphin1
-            tags: ["unused"]
-        generatedolphin2:
-            name: generatedolphin2
-            tags: ["unused"]
-        generatedolphin3:
-            name: generatedolphin3
-            tags: ["unused"]
-        generatedolphin4:
-            name: generatedolphin4
-            tags: ["unused"]
-        generatedolphin5:
-            name: generatedolphin5
-            tags: ["unused"]
-        generatedolphin6:
-            name: generatedolphin6
-            tags: ["unused"]
-        generatef1:
-            name: generatef1
-        generatef2:
-            name: generatef2
-        generatef3:
-            name: generatef3
-        generatef4:
-            name: generatef4
-        generatef5:
-            name: generatef5
-        generatef6:
-            name: generatef6
-        generatefox1:
-            name: generatefox1
-            tags: ["unused"]
-        generatefox2:
-            name: generatefox2
-            tags: ["unused"]
-        generatefox3:
-            name: generatefox3
-            tags: ["unused"]
-        generatefox4:
-            name: generatefox4
-            tags: ["unused"]
-        generatefox5:
-            name: generatefox5
-            tags: ["unused"]
-        generatefox6:
-            name: generatefox6
-            tags: ["unused"]
-        generateFurnitureShopStock:
-            name: generateFurnitureShopStock
-        generatel:
-            name: generatel
-        generatelizard1:
-            name: generatelizard1
-            tags: ["unused"]
-        generatelizard2:
-            name: generatelizard2
-            tags: ["unused"]
-        generatelizard3:
-            name: generatelizard3
-            tags: ["unused"]
-        generatelizard4:
-            name: generatelizard4
-            tags: ["unused"]
-        generatelizard5:
-            name: generatelizard5
-            tags: ["unused"]
-        generatelizard6:
-            name: generatelizard6
-            tags: ["unused"]
-        generatem1:
-            name: generatem1
-        generatem2:
-            name: generatem2
-        generatem3:
-            name: generatem3
-        generatem4:
-            name: generatem4
-        generatem5:
-            name: generatem5
-        generatem6:
-            name: generatem6
-        generateManager:
-            name: generateManager
-        generateMickey:
-            name: generateMickey
-        generateNewStrapon:
-            name: generateNewStrapon
-        generateNPC:
-            name: generateNPC
-        generateNPCClothes:
-            name: generateNPCClothes
-        generateNPCNameHairAndEyeColors:
-            description: |-
-                Applies canonical hair and eye colour to all unset named NPCs
-
-                If not present, generates random values
-        generateNPCvirginity:
-            name: generateNPCvirginity
-        generatep2:
-            name: generatep2
-        generatep3:
-            name: generatep3
-        generatep4:
-            name: generatep4
-            tags: ["unused"]
-        generatep5:
-            name: generatep5
-            tags: ["unused"]
-        generatep6:
-            name: generatep6
-            tags: ["unused"]
-        generatepenisremark:
-            name: generatepenisremark
-        generatepig1:
-            name: generatepig1
-            tags: ["unused"]
-        generatepig2:
-            name: generatepig2
-            tags: ["unused"]
-        generatepig3:
-            name: generatepig3
-            tags: ["unused"]
-        generatepig4:
-            name: generatepig4
-            tags: ["unused"]
-        generatepig5:
-            name: generatepig5
-            tags: ["unused"]
-        generatepig6:
-            name: generatepig6
-            tags: ["unused"]
-        generatePlant:
-            name: generatePlant
-            tags: ["unused"]
-        generatePlant1:
-            name: generatePlant1
-        generatePlant2:
-            name: generatePlant2
-            tags: ["unused"]
-        generatePlant3:
-            name: generatePlant3
-            tags: ["unused"]
-        generatePlant4:
-            name: generatePlant4
-            tags: ["unused"]
-        generatePlant5:
-            name: generatePlant5
-            tags: ["unused"]
-        generatePlant6:
-            name: generatePlant6
-            tags: ["unused"]
-        generatePolice:
-            name: generatePolice
-        generatePronouns:
-            description: |-
-                Fills NPC object's `pronouns` property based on `pronoun` property
-
-                `<<generatePronouns npcObject>>`
-                - **npcObject**: `object` - NPC to fill
-                - `pronoun` property can be:
-                  - `"m"` : he/him...
-                  - `"f"` : she/her...
-                  - `"i"` : it/it...
-                  - `"n"` : one/them...
-                  - `"t"` : they/them...
-            parameters:
-                - "var"
-        generateRole:
-            name: generateRole
-        generates1:
-            name: generates1
-        generates2:
-            name: generates2
-        generates3:
-            name: generates3
-        generates4:
-            name: generates4
-        generates5:
-            name: generates5
-        generates6:
-            name: generates6
-        generateSailor:
-            name: generateSailor
-        generateSecurity:
-            name: generateSecurity
-        generatesf1:
-            name: generatesf1
-        generatesf2:
-            name: generatesf2
-        generatesf3:
-            name: generatesf3
-        generatesf4:
-            name: generatesf4
-        generatesf5:
-            name: generatesf5
-        generatesf6:
-            name: generatesf6
-        generateshoppage:
-            name: generateshoppage
-        generateSleepLinks:
-            name: generateSleepLinks
-        generatesm1:
-            name: generatesm1
-        generatesm2:
-            name: generatesm2
-        generatesm3:
-            name: generatesm3
-        generatesm4:
-            name: generatesm4
-        generatesm5:
-            name: generatesm5
-        generatesm6:
-            name: generatesm6
-        generatespider1:
-            name: generatespider1
-            tags: ["unused"]
-        generatespider2:
-            name: generatespider2
-            tags: ["unused"]
-        generatespider3:
-            name: generatespider3
-            tags: ["unused"]
-        generatespider4:
-            name: generatespider4
-            tags: ["unused"]
-        generatespider5:
-            name: generatespider5
-            tags: ["unused"]
-        generatespider6:
-            name: generatespider6
-            tags: ["unused"]
-        generateSweaterWearer:
-            name: generateSweaterWearer
-        generateTemple:
-            name: generateTemple
-        generateTipsList:
-            name: generateTipsList
-        generatev1:
-            name: generatev1
-        generatev2:
-            name: generatev2
-        generatev3:
-            name: generatev3
-        generatev4:
-            name: generatev4
-        generatev5:
-            name: generatev5
-            tags: ["unused"]
-        generatev6:
-            name: generatev6
-            tags: ["unused"]
-        generatewolf1:
-            name: generatewolf1
-            tags: ["unused"]
-        generatewolf2:
-            name: generatewolf2
-            tags: ["unused"]
-        generatewolf3:
-            name: generatewolf3
-            tags: ["unused"]
-        generatewolf4:
-            name: generatewolf4
-            tags: ["unused"]
-        generatewolf5:
-            name: generatewolf5
-            tags: ["unused"]
-        generatewolf6:
-            name: generatewolf6
-            tags: ["unused"]
-        generateWraith:
-            name: generateWraith
-        generatey1:
-            name: generatey1
-        generatey2:
-            name: generatey2
-        generatey3:
-            name: generatey3
-        generatey4:
-            name: generatey4
-        generatey5:
-            name: generatey5
-        generatey6:
-            name: generatey6
-        generateyf1:
-            name: generateyf1
-        generateyf2:
-            name: generateyf2
-        generateyf3:
-            name: generateyf3
-        generateyf4:
-            name: generateyf4
-        generateyf5:
-            name: generateyf5
-        generateyf6:
-            name: generateyf6
-        generateym1:
-            name: generateym1
-        generateym2:
-            name: generateym2
-        generateym3:
-            name: generateym3
-        generateym4:
-            name: generateym4
-        generateym5:
-            name: generateym5
-        generateym6:
-            name: generateym6
-        generateyp2:
-            name: generateyp2
-        generateyp3:
-            name: generateyp3
-        generateyp4:
-            name: generateyp4
-            tags: ["unused"]
-        generateyp5:
-            name: generateyp5
-            tags: ["unused"]
-        generateyp6:
-            name: generateyp6
-            tags: ["unused"]
-        generateyTemple:
-            name: generateyTemple
-        generateyv1:
-            name: generateyv1
-        generateyv2:
-            name: generateyv2
-        generateyv3:
-            name: generateyv3
-        generateyv4:
-            name: generateyv4
-        generateyv5:
-            name: generateyv5
-        generateyv6:
-            name: generateyv6
-        genericCondomEjaculation:
-            name: genericCondomEjaculation
-        genericGenders:
-            name: genericGenders
-        genglish:
-            description: |-
-                Prints `| + English`
-            tags: ["text"]
-        genital_sensitivity:
-            description: |-
-                Changes sensitivity of genitals by provided amount
-
-                `<<genital_sensitivity amount>>`
-                - **amount**: `number` - change to sensitivity
-            parameters:
-                - "number"
-        genitalarousal:
-            deprecatedSuggestions:
-                - <<arousal X "genitals">>
-            description: |-
-                Adds genitals-focused arousal to pc with appropriate modifiers
-
-                `<<genitalarousal change>>`
-                - **change**: `number` - +/- change to apply
-            tags: ["unused"]
-        genitals:
-            name: genitals
-        genitals_are:
-            name: genitals_are
-        genitalsandbreasts:
-            name: genitalsandbreasts
-        genitalsensitivity:
-            name: genitalsensitivity
-        GenitalShop:
-            name: GenitalShop
-            tags: ["unused"]
-        genitalsimg:
-            name: genitalsimg
-        genitalsintegrity:
-            name: genitalsintegrity
-            tags: ["unused"]
-        genitalsplural:
-            description: |-
-                Prints a present indicative (are/is) for the worn `"genitals"` slot
-            tags: ["unused"]
-        genitalsruined:
-            description: |-
-                Destroys pc's genitals slot clothing, whether worn or carried
-
-                `<<genitalsruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        genitalssend:
-            name: genitalssend
-            tags: ["unused"]
-        genitalstate:
-            name: genitalstate
-        genitalsthat:
-            description: |-
-                Prints plural/singular prose of that (those/that) for worn `"genitals"` slot
-            tags: ["unused", "text"]
-        genitalsundress:
-            name: genitalsundress
-            tags: ["unused"]
-        genitalswear:
-            name: genitalswear
-        genitalsword:
-            description: |-
-                Prints an indefinite article (a/an) if needed for worn genitals
-            tags: ["unused", "text"]
-        gentleman:
-            description: |-
-                Prints `man` or `lady` depending on pc's appearance
-
-                See `<<lady>>`
-            tags: ["text"]
-        get_pillory_npc:
-            name: get_pillory_npc
-        getadultshopstate:
-            name: getadultshopstate
-        getCChildBirthDate:
-            name: getCChildBirthDate
-            tags: ["unused"]
-        getCChildConceptionDate:
-            name: getCChildConceptionDate
-            tags: ["unused"]
-        getCChildId:
-            name: getCChildId
-            tags: ["unused"]
-        getChildrenIds:
-            name: getChildrenIds
-        getCNPCEventTimer:
-            name: getCNPCEventTimer
-            tags: ["unused"]
-        getCNPCPregnancyAvoidance:
-            name: getCNPCPregnancyAvoidance
-            tags: ["unused"]
-        getCNPCPregnancyTimer:
-            name: getCNPCPregnancyTimer
-            tags: ["unused"]
-        getCombatDefaultsType:
-            name: getCombatDefaultsType
-        getCombatDefaultsTypeClear:
-            name: getCombatDefaultsTypeClear
-        getDoubleTargetList:
-            name: getDoubleTargetList
-        getfluidsfromgroup:
-            name: getfluidsfromgroup
-        getNNPCClothes:
-            name: getNNPCClothes
-        getPussyTargetList:
-            name: getPussyTargetList
-            tags: ["unused"]
-        getSameBirthChildrenIds:
-            name: getSameBirthChildrenIds
-        getTarget:
-            name: getTarget
-        getTargetList:
-            name: getTargetList
-        getTentacleColour:
-            name: getTentacleColour
-        getUsedChildrenNames:
-            name: getUsedChildrenNames
-            tags: ["unused"]
-        gfabric:
-            description: |-
-                Prints `| + Fabric`
-            tags: ["text"]
-        gfarm:
-            description: |-
-                Prints `| + Farm yield`
-            tags: ["text"]
-        gfeetskill:
-            description: |-
-                Prints `| + Feet skill`
-            tags: ["text"]
-        gferocity:
-            description: |-
-                Adds 1 to wolfpack's ferocity and prints `| + Ferocity`
-
-                `$wolfpackferocity` is a measure of how fearce the wolfpack is where 0 is not at all (0-20)
-
-                See `<<lferocity>>`
-            tags: ["text"]
-        ggadeviancy:
-            description: |-
-                Prints `| + + Alex's Deviancy`
-            tags: ["unused", "text"]
-        ggaggro:
-            description: |-
-                Prints `| + + Remy's Encroachment`
-            tags: ["text"]
-        ggalcohol:
-            description: |-
-                Prints `| + + Alcohol`
-            tags: ["text"]
-        ggapproval:
-            name: ggapproval
-            tags: ["text"]
-        ggarage:
-            description: |-
-                Prints `| + + Rage`
-            tags: ["text"]
-        ggarousal:
-            description: |-
-                Prints `| + + Arousal`
-            tags: ["text"]
-        ggathletics:
-            description: |-
-                Prints `| + + Athletics`
-            tags: ["text"]
-        ggattention:
-            description: |-
-                Prints `| + + Attention` if more prison attention can be gained today
-
-                `<<ggattention type>>`
-                - **type**: `string` - type of attention to check if should be visible
-                  - `"prison"`
-            parameters:
-                - '|+ "prison"'
-            tags: ["text"]
-        ggawareness:
-            description: |-
-                Prints `| + + Awareness` or `| - - Innocence`
-            tags: ["text"]
-        ggbaton:
-            description: |-
-                Prints `| + + Baton proficiency`
-            tags: ["unused", "text"]
-        ggbeauty:
-            description: |-
-                Prints `| + + Beauty`
-            tags: ["unused", "text"]
-        ggbodywriting:
-            description: |-
-                Prints `| + + Bodywriting`
-            tags: ["unused", "text"]
-        ggchaos:
-            description: |-
-                Prints `| + + Chaos`
-            tags: ["text"]
-        ggcombatcontrol:
-            description: |-
-                Prints `| + + Control`
-            tags: ["unused", "text"]
-        ggcomprehension:
-            name: ggcomprehension
-            tags: ["text"]
-        ggcontrol:
-            description: |-
-                Prints `| + + Control`
-            tags: ["text"]
-        ggcool:
-            description: |-
-                Prints `| + + Status`
-            tags: ["text"]
-        ggcorruption:
-            description: |-
-                Prints `| + + Corruption`
-            tags: ["text"]
-        ggcrime:
-            description: |-
-                Prints `| + + Crime X` where X is type of crime
-
-                `<<ggcrime type>>`
-                - **type**: `string` - type in setup.crimeNames
-                  - %crimeTypesDesc%
-            parameters:
-                - "|+ %crimeTypes%"
-            tags: ["text"]
-        ggdanceskill:
-            description: |-
-                Prints `| + + Dance skill`
-            tags: ["unused", "text"]
-        ggdaring:
-            description: |-
-                Prints `| + + Daring`
-            tags: ["text"]
-        ggdef:
-            description: |-
-                Prints `| + + Defiance`
-            tags: ["unused", "text"]
-        ggdelinquency:
-            description: |-
-                Prints `| + + Delinquency`
-            tags: ["text"]
-        ggdom:
-            description: |-
-                Prints `| + + Dominance` or `| + + NPCName's Dominance` if provided
-
-                `<<ggdom NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-                  - `"Robin"`: Displays "Confidence" instead
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        ggdrugged:
-            description: |-
-                Prints `| + + Drugged`
-            tags: ["unused", "text"]
-        ggendear:
-            description: |-
-                Prints `| + + Endearment`
-            tags: ["text"]
-        ggenglish:
-            description: |-
-                Prints `| + + English`
-            tags: ["text"]
-        ggfarm:
-            description: |-
-                Prints `| + + Farm yield`
-            tags: ["text"]
-        gggadeviancy:
-            description: |-
-                Prints `| + + + Alex's Deviancy`
-            tags: ["unused", "text"]
-        gggaggro:
-            description: |-
-                Prints `| + + + Remy's Encroachment`
-            tags: ["unused", "text"]
-        gggalcohol:
-            description: |-
-                Prints `| + + + Alcohol`
-            tags: ["unused", "text"]
-        gggapproval:
-            name: gggapproval
-            tags: ["text"]
-        gggarage:
-            description: |-
-                Prints `| + + + Rage`
-            tags: ["text"]
-        gggarousal:
-            description: |-
-                Prints `| + + Arousal`
-            tags: ["text"]
-        gggathletics:
-            description: |-
-                Prints `| + + + Athletics`
-            tags: ["unused", "text"]
-        gggattention:
-            description: |-
-                Prints `| + + + Attention` if more prison attention can be gained today
-
-                `<<gggattention type>>`
-                - **type**: `string` - type of attention to check if should be visible
-                  - `"prison"`
-            parameters:
-                - '|+ "prison"'
-            tags: ["text"]
-        gggawareness:
-            description: |-
-                Prints `| + + + Awareness` or `| - - - Innocence`
-            tags: ["text"]
-        gggbaton:
-            description: |-
-                Prints `| + + + Baton proficiency`
-            tags: ["unused", "text"]
-        gggbeauty:
-            description: |-
-                Prints `| + + + Beauty`
-            tags: ["unused", "text"]
-        gggbodywriting:
-            description: |-
-                Prints `| + + + Bodywriting`
-            tags: ["text"]
-        gggchaos:
-            description: |-
-                Prints `| + + + Chaos`
-            tags: ["text"]
-        gggcombatcontrol:
-            description: |-
-                Prints `| + + + Control`
-            tags: ["unused", "text"]
-        gggcomprehension:
-            name: gggcomprehension
-            tags: ["text"]
-        gggcontrol:
-            description: |-
-                Prints `| + + + Control`
-            tags: ["text"]
-        gggcool:
-            description: |-
-                Prints `| + + + Status`
-            tags: ["text"]
-        gggcorruption:
-            description: |-
-                Prints `| + + + Corruption`
-            tags: ["unused", "text"]
-        gggcrime:
-            description: |-
-                Prints `| + + + Crime X X` where X is type of crime
-
-                `<<gggcrime type>>`
-                - **type**: `string` - type in setup.crimeNames
-                  - %crimeTypesDesc%
-            parameters:
-                - "|+ %crimeTypes%"
-            tags: ["text"]
-        gggdanceskill:
-            description: |-
-                Prints `| + + + Dance skill`
-            tags: ["unused", "text"]
-        gggdaring:
-            description: |-
-                Prints `| + + + Daring`
-            tags: ["unused", "text"]
-        gggdef:
-            description: |-
-                Prints `| + + + Defiance`
-            tags: ["unused", "text"]
-        gggdelinquency:
-            description: |-
-                Prints `| + + + Delinquency`
-            tags: ["text"]
-        gggdom:
-            description: |-
-                Prints `| + + + Dominance` or `| + + + NPCName's Dominance` if provided
-
-                `<<gggdom NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-                  - `"Robin"`: Displays "Confidence" instead
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        gggdrugged:
-            description: |-
-                Prints `| + + + Drugged`
-            tags: ["text"]
-        gggendear:
-            description: |-
-                Prints `| + + + Endearment`
-            tags: ["text"]
-        gggenglish:
-            description: |-
-                Prints `| + + + English`
-            tags: ["text"]
-        gggfarm:
-            description: |-
-                Prints `| + + + Farm yield`
-            tags: ["text"]
-        ggggrace:
-            description: |-
-                Prints `| + + + Grace` if proper tier is met
-
-                `<<ggggrace tier?>>`
-                - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
-                  - `"monk"` | `"priest"` | `"bishop"`
-            parameters:
-                - '|+ "monk"|"priest"|"bishop"'
-            tags: ["text"]
-        ggghallucinogens:
-            description: |-
-                Prints `| + + + Hallucinogens`
-            tags: ["text"]
-        ggghistory:
-            description: |-
-                Prints `| + + + History`
-            tags: ["unused", "text"]
-        ggghope:
-            description: |-
-                Prints `| + + + Hope`
-            tags: ["text"]
-        ggghousekeeping:
-            description: |-
-                Prints `| + + + housekeeping` if below limit
-
-                `<<ggghousekeeping limit?>>`
-                - **limit** _optional_: `number` - maximum housekeeping this task can raise to
-            parameters:
-                - "|+ number"
-            tags: ["unused", "text"]
-        ggghunger:
-            description: |-
-                Prints `| + + + Hunger`
-            tags: ["unused", "text"]
-        gggimpatience:
-            description: |-
-                Prints `| + + + Impatience`
-            tags: ["text"]
-        ggginterest:
-            description: |-
-                Prints `| + + + Interest`
-            tags: ["text"]
-        gggksuspicion:
-            description: |-
-                Prints `| + + + Jealousy`
-            tags: ["text"]
-        ggglewdity:
-            description: |-
-                Prints `| + + + Lewdity`
-            tags: ["unused", "text"]
-        ggglove:
-            description: |-
-                Prints `| + + + Love` or `| + + + NPCName's Love` if provided
-
-                `<<ggglove NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their love
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        ggglust:
-            description: |-
-                Prints `| + + + Lust` or `| + + + NPCName's Lust` if provided
-
-                `<<ggglust NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        gggmaths:
-            description: |-
-                Prints `| + + + Maths`
-            tags: ["text"]
-        gggobey:
-            description: |-
-                Prints `| + + + Obedience`
-            tags: ["text"]
-        gggpain:
-            description: |-
-                Prints `| + + + Pain`
-            tags: ["text"]
-        gggphysique:
-            description: |-
-                Prints `| + + + Physique`
-            tags: ["unused", "text"]
-        gggpound_status:
-            name: gggpound_status
-            tags: ["unused", "text"]
-        gggpurity:
-            description: |-
-                Prints `| + + + Purity`
-            tags: ["text"]
-        gggrace:
-            description: |-
-                Prints `| + + Grace` if proper tier is met
-
-                `<<gggrace tier?>>`
-                - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
-                  - `"monk"` | `"priest"` | `"bishop"`
-            parameters:
-                - '|+ "monk"|"priest"|"bishop"'
-            tags: ["text"]
-        gggreadiness:
-            name: gggreadiness
-            tags: ["text"]
-        gggreb:
-            description: |-
-                Prints `| + + + Rebelliousness`
-            tags: ["text"]
-        gggrespect:
-            description: |-
-                Prints `| + + + Respect` if proper tier is met
-
-                `<<gggrace tier?>>`
-                - **tier**: `string` - tier below which respect is changed
-                  - `"scum"` | `"mate"`
-            tags: ["text"]
-        gggrtrauma:
-            description: |-
-                Prints `| + + + Robin's Trauma`, unless at max value
-
-                `<<gggrtrauma force?>>`
-                - **force** _optional_: `bool` - prints even if trauma is 20
-            parameters:
-                - "|+ bool"
-            tags: ["unused", "text"]
-        gggsaltiness:
-            description: |-
-                Prints `| + + + Saltiness`
-            tags: ["unused", "text"]
-        gggsarousal:
-            name: gggsarousal
-            tags: ["unused"]
-        gggscience:
-            description: |-
-                Prints `| + + + Science`
-            tags: ["text"]
-        gggsecurity:
-            description: |-
-                Prints `| + + + Security`
-            tags: ["unused", "text"]
-        gggseduction:
-            description: |-
-                Prints `| + + + Seduction`
-            tags: ["unused", "text"]
-        gggshame:
-            description: |-
-                Prints `| + + + Shame`
-            tags: ["unused", "text"]
-        gggskulduggery:
-            description: |-
-                Prints `| + + + Skulduggery`
-            tags: ["unused", "text"]
-        gggslust:
-            description: |-
-                Prints `| + + + Sydney's Lust`
-            tags: ["unused", "text"]
-        gggspain:
-            name: gggspain
-            tags: ["unused"]
-        gggspurity:
-            description: |-
-                Prints `| + + + Sydney's Purity` or `| - - - Sydney's Purity`
-            tags: ["unused", "text"]
-        gggstockholm:
-            description: |-
-                Prints `| + + + Stockholm Syndrome`
-            tags: ["text"]
-        gggstress:
-            description: |-
-                Prints `| + + + Stress`
-            tags: ["text"]
-        gggsuspicion:
-            description: |-
-                Prints `| + + + Suspicion`
-            tags: ["text"]
-        gggswimming:
-            description: |-
-                Prints `| + + + Swimming`
-            tags: ["unused", "text"]
-        gggtanned:
-            description: |-
-                Prints `| + + + Tan`
-            tags: ["text"]
-        gggtending:
-            description: |-
-                Prints `| + + + Tending`
-            tags: ["unused", "text"]
-        gggtiredness:
-            description: |-
-                Prints `| + + + Fatigue`
-            tags: ["text"]
-        gggtrauma:
-            description: |-
-                Prints `| + + + Trauma`
-            tags: ["text"]
-        gggtrust:
-            description: |-
-                Prints `| + + + Trust`
-            tags: ["text"]
-        gggwhip:
-            description: |-
-                Prints `| + + + Whip proficiency`
-            tags: ["unused", "text"]
-        gggwillpower:
-            description: |-
-                Prints `| + + + Willpower`
-            tags: ["text"]
-        gghallucinogens:
-            description: |-
-                Prints `| + + Hallucinogens`
-            tags: ["text"]
-        gghistory:
-            description: |-
-                Prints `| + + History`
-            tags: ["text"]
-        gghope:
-            description: |-
-                Prints `| + + Hope`
-            tags: ["text"]
-        gghousekeeping:
-            description: |-
-                Prints `| + + + housekeeping` if below limit
-
-                `<<gghousekeeping limit?>>`
-                - **limit** _optional_: `number` - maximum housekeeping this task can raise to
-            parameters:
-                - "|+ number"
-            tags: ["unused", "text"]
-        gghunger:
-            description: |-
-                Prints `| + + Hunger`
-            tags: ["unused", "text"]
-        ggimpatience:
-            description: |-
-                Prints `| + + Impatience`
-            tags: ["text"]
-        gginterest:
-            description: |-
-                Prints `| + + Interest`
-            tags: ["text"]
-        ggksuspicion:
-            description: |-
-                Prints `| + + Jealousy`
-            tags: ["text"]
-        gglewdity:
-            description: |-
-                Prints `| + + Lewdity`
-            tags: ["unused", "text"]
-        gglove:
-            description: |-
-                Prints `| + + Love` or `| + + NPCName's Love` if provided
-
-                `<<gglove NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their love
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        gglust:
-            description: |-
-                Prints `| + + Lust` or `| + + NPCName's Lust` if provided
-
-                `<<gglust NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        ggmaths:
-            description: |-
-                Prints `| + + Maths`
-            tags: ["text"]
-        ggobey:
-            description: |-
-                Prints `| + + Obedience`
-            tags: ["text"]
-        ggpain:
-            description: |-
-                Prints `| + + Pain`
-            tags: ["text"]
-        ggphysique:
-            description: |-
-                Prints `| + + Physique`
-            tags: ["text"]
-        ggpound_status:
-            name: ggpound_status
-        ggpurity:
-            description: |-
-                Prints `| + + Purity`
-            tags: ["text"]
-        ggrace:
-            description: |-
-                Prints `| + Grace` if proper tier is met
-
-                `<<ggrace tier?>>`
-                - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
-                  - `"monk"` | `"priest"` | `"bishop"`
-            parameters:
-                - '|+ "monk"|"priest"|"bishop"'
-            tags: ["text"]
-        ggreadiness:
-            name: ggreadiness
-        ggreb:
-            description: |-
-                Prints `| + + Rebelliousness`
-            tags: ["text"]
-        ggrespect:
-            description: |-
-                Prints `| + + Respect` if proper tier is met
-
-                `<<gggrace tier?>>`
-                - **tier**: `string` - tier below which respect is changed
-                  - `"scum"` | `"mate"`
-            tags: ["text"]
-        ggrtrauma:
-            description: |-
-                Prints `| + + Robin's Trauma`, unless at max value
-
-                `<<ggrtrauma force?>>`
-                - **force** _optional_: `bool` - prints even if trauma is 20
-            parameters:
-                - "|+ bool"
-            tags: ["unused", "text"]
-        ggsaltiness:
-            description: |-
-                Prints `| + + Saltiness`
-            tags: ["unused", "text"]
-        ggsarousal:
-            name: ggsarousal
-            tags: ["unused"]
-        ggscience:
-            description: |-
-                Prints `| + + Science`
-            tags: ["text"]
-        ggsecurity:
-            description: |-
-                Prints `| + + Security`
-            tags: ["text"]
-        ggseduction:
-            description: |-
-                Prints `| + + Seduction`
-            tags: ["unused", "text"]
-        ggshame:
-            description: |-
-                Prints `| + + Shame`
-            tags: ["unused", "text"]
-        ggskulduggery:
-            description: |-
-                Prints `| + + Skulduggery`
-            tags: ["unused", "text"]
-        ggslust:
-            description: |-
-                Prints `| + + Sydney's Lust`
-            tags: ["text"]
-        ggspain:
-            name: ggspain
-        ggspurity:
-            description: |-
-                Prints `| + + Sydney's Purity` or `| - - Sydney's Purity`
-            tags: ["text"]
-        ggstockholm:
-            description: |-
-                Prints `| + + Stockholm Syndrome`
-            tags: ["text"]
-        ggstress:
-            description: |-
-                Prints `| + + Stress`
-            tags: ["text"]
-        ggsuspicion:
-            description: |-
-                Prints `| + + Suspicion`
-            tags: ["text"]
-        ggswimming:
-            description: |-
-                Prints `| + + Swimming`
-            tags: ["unused", "text"]
-        ggtanned:
-            description: |-
-                Prints `| + + Tan`
-            tags: ["text"]
-        ggtending:
-            description: |-
-                Prints `| + + Tending`
-            tags: ["text"]
-        ggtiredness:
-            description: |-
-                Prints `| + + Fatigue`
-            tags: ["text"]
-        ggtrauma:
-            description: |-
-                Prints `| + + Trauma`
-            tags: ["text"]
-        ggtrust:
-            description: |-
-                Prints `| + + Trust`
-            tags: ["unused", "text"]
-        ggwalnut:
-            name: ggwalnut
-        ggwhip:
-            description: |-
-                Prints `| + + Whip proficiency`
-            tags: ["unused", "text"]
-        ggwillpower:
-            description: |-
-                Prints `| + + Willpower`
-            tags: ["text"]
-        ghallucinogens:
-            description: |-
-                Prints `| + Hallucinogens`
-            tags: ["text"]
-        ghandskill:
-            description: |-
-                Prints `| + Hand skill`
-        gharass:
-            description: |-
-                Prints `| Increases chance of harassment`
-            tags: ["text"]
-        gharmony:
-            description: |-
-                Adds 1 to wolfpack's harmony and prints `| + Harmony`
-
-                `$wolfpackharmony` is a measure of how harmonious the wolfpack is where 0 is not at all (0-20)
-
-                See `<<lharmony>>`
-            tags: ["text"]
-        ghistory:
-            description: |-
-                Prints `| + History`
-            tags: ["text"]
-        ghope:
-            description: |-
-                Prints `| + Hope`
-            tags: ["text"]
-        ghousekeeping:
-            description: |-
-                Prints `| + housekeeping` or `You're too skilled for this to improve your housekeeping.` if below limit
-
-                `<<ghousekeeping limit?>>`
-                - **limit** _optional_: `number` - maximum housekeeping this task can raise to
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        ghunger:
-            description: |-
-                Prints `| + Hunger`
-            tags: ["unused", "text"]
-        giftSexToys:
-            name: giftSexToys
-        gimpatience:
-            description: |-
-                Prints `| + Impatience`
-            tags: ["text"]
-        ginsecurity:
-            description: |-
-                Prints `| + Insecurity` if acceptance hasn't been reached for specified part
-
-                `<<ginsecurity part>>`
-                - **paramNumber1**: `string` - part to gain insecurity in
-                  - %insecurityTypesDesc%
-            parameters:
-                - "%insecurityTypes%"
-            tags: ["text"]
-        ginterest:
-            description: |-
-                Prints `| + Interest`
-            tags: ["text"]
-        girl:
-            name: girl
-        girlfriend:
-            name: girlfriend
-        girls:
-            name: girls
-        gisland_tide:
-            name: gisland_tide
-        giveNNPCnewstrapon:
-            name: giveNNPCnewstrapon
-        giveNPCCondom:
-            name: giveNPCCondom
-        giveNPCsextoy:
-            name: giveNPCsextoy
-        givestartclothing:
-            name: givestartclothing
-        gknowledge:
-            description: |-
-                Prints `| + Knowledge`
-            tags: ["text"]
-        gksuspicion:
-            description: |-
-                Prints `| + Jealousy`
-            tags: ["text"]
-        glans:
-            description: |-
-                Prints noun describing part of pc's penis depending on if in use
-            tags: ["text"]
-        glewdity:
-            description: |-
-                Prints `| + Lewdity`
-            tags: ["text"]
-        glove:
-            description: |-
-                Prints `| + Love` or `| + NPCName's Love` if provided
-
-                `<<glove NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their love
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        glust:
-            description: |-
-                Prints `| + Lust` or `| + NPCName's Lust` if provided
-
-                `<<glust NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        gmaths:
-            description: |-
-                Prints `| + Maths`
-            tags: ["text"]
-        gmystery:
-            description: |-
-                Prints `| + ????`
-            tags: ["text"]
-        gnet:
-            description: |-
-                Prints `| + Net proficiency`
-            tags: ["text"]
-        gobey:
-            description: |-
-                Prints `| + Obedience`
-            tags: ["text"]
-        gobsession:
-            name: gobsession
-        goo:
-            name: goo
-        goocount:
-            name: goocount
-        goralskill:
-            description: |-
-                Prints `| + Oral skill`
-            tags: ["text"]
-        goxygen:
-            description: |-
-                Prints `| + Air`
-            tags: ["unused", "text"]
-        gpain:
-            description: |-
-                Prints `| + Pain`
-            tags: ["text"]
-        gpenileskill:
-            description: |-
-                Prints `| + Penile skill`
-            tags: ["unused", "text"]
-        gpenisacceptance:
-            description: |-
-                Adds acceptance to pc's state for appropriate penis size
-
-                `<<gpenisacceptance change>>`
-                - **change**: `number` - + change to apply
-            parameters:
-                - "number"
-        gphysique:
-            description: |-
-                Prints `| + Physique`
-            tags: ["text"]
-        gpound_status:
-            name: gpound_status
-        gpurity:
-            description: |-
-                Prints `| + Purity`
-            tags: ["text"]
-        gpursuit:
-            name: gpursuit
-        grace:
-            description: |-
-                Adds grace to pc's state
-
-                `$grace` is a measure of the church's endorsement of pc where -100 is against, and 0 is neutral (-100-100)
-
-                `<<grace change tier?>>`
-                - **change**: `number` - +/- change to apply
-                - **tier** _optional_: `string` - rank source, pc ranks equal or above this will not change grace
-                  - `"monk"` | `"priest"` | `"bishop"`
-                  - Defaults to any rank
-            parameters:
-                - 'number |+ "monk"|"priest"|"bishop"'
-        greadiness:
-            name: greadiness
-        greb:
-            description: |-
-                Prints `| + Rebelliousness`
-            tags: ["text"]
-        grespect:
-            description: |-
-                Prints `| + Respect` if proper tier is met
-
-                `<<gggrace tier?>>`
-                - **tier**: `string` - tier below which respect is changed
-                  - `"scum"` | `"mate"`
-            tags: ["text"]
-        groin:
-            description: |-
-                Prints genitals description through physically accessible clothing layers
-            tags: ["text"]
-        group:
-            description: |-
-                Prints summarised gender makeup of currently active npcs (ie, `men and women`)
-
-                See `<<enumeratedGroup>>` for numbers as well or `<<fullGroup>>` for a list
-            tags: ["text"]
-        grtrauma:
-            description: |-
-                Prints `| + Robin's Trauma`, unless at max value
-
-                `<<grtrauma force?>>`
-                - **force** _optional_: `bool` - prints even if trauma is 20
-            parameters:
-                - "|+ bool"
-            tags: ["unused", "text"]
-        gsaltiness:
-            description: |-
-                Prints `| + Saltiness`
-            tags: ["unused", "text"]
-        gsarousal:
-            name: gsarousal
-        gschool:
-            description: |-
-                Prints `| + School`
-            tags: ["text"]
-        gscience:
-            description: |-
-                Prints `| + Science`
-            tags: ["text"]
-        gsecurity:
-            description: |-
-                Prints `| + Security`
-            tags: ["text"]
-        gseduction:
-            description: |-
-                Prints `| + Seduction`
-            tags: ["unused", "text"]
-        gshame:
-            description: |-
-                Prints `| + Shame`
-            tags: ["unused", "text"]
-        gskulduggery:
-            description: |-
-                Prints `| + Skulduggery`
-            tags: ["text"]
-        gslust:
-            description: |-
-                Prints `| + Sydney's Lust`
-            tags: ["text"]
-        gspain:
-            name: gspain
-        gspray:
-            description: |-
-                Prints `| + 1 pepper spray`
-            tags: ["text"]
-        gspraymax:
-            description: |-
-                Prints `| + 1 pepper spray capacity`
-            tags: ["text"]
-        gspurity:
-            description: |-
-                Prints `| + Sydney's Purity` or `| - Sydney's Purity`
-            tags: ["text"]
-        gstockholm:
-            description: |-
-                Prints `| + Stockholm Syndrome`
-            tags: ["text"]
-        gstray_happiness:
-            name: gstray_happiness
-        gstress:
-            description: |-
-                Prints `| + Stress`
-            tags: ["text"]
-        gsuspicion:
-            description: |-
-                Prints `| + Suspicion`
-            tags: ["text"]
-        gswimming:
-            description: |-
-                Prints `| + Swimming`
-            tags: ["text"]
-        gsydneytoy:
-            description: |-
-                This widget examples all over the place
-
-                `<<gsydneytoy toyName>>`
-                - **toyName**: `string` - complete toy name
-                  - `"dildo"` | `"length of anal beads"` | `"riding crop"` | `"flog"`
-            parameters:
-                - '"dildo"|"length of anal beads"|"riding crop"|"flog"'
-        gtanned:
-            description: |-
-                Prints `| + Tan`
-            tags: ["text"]
-        gtending:
-            description: |-
-                Prints `| + Tending`
-            tags: ["text"]
-        gthighskill:
-            description: |-
-                Prints `| + Thigh skill`
-            tags: ["text"]
-        gtiredness:
-            description: |-
-                Prints `| + Fatigue`
-            tags: ["text"]
-        gtorch:
-            name: gtorch
-        gtrauma:
-            description: |-
-                Prints `| + Trauma`
-            tags: ["text"]
-        gtreasure:
-            description: |-
-                Prints `| Increases chance of finding treasure`
-            tags: ["text"]
-        gtrust:
-            description: |-
-                Prints `| + Trust`
-            tags: ["text"]
-        guard_skill_text:
-            name: guard_skill_text
-        guard_terms:
-            name: guard_terms
-        gvaginalskill:
-            description: |-
-                Prints `| + Vaginal skill`
-            tags: ["unused", "text"]
-        gwalnut:
-            name: gwalnut
-        gwhip:
-            description: |-
-                Prints `| + Whip proficiency`
-            tags: ["text"]
-        gwillpower:
-            description: |-
-                Prints `| + Willpower`
-            tags: ["text"]
-        gwood:
-            name: gwood
-        gwylanForestRescue:
-            name: gwylanForestRescue
-        gwylanitem:
-            name: gwylanitem
-            tags: ["unused"]
-        gwylanRescueApology:
-            name: gwylanRescueApology
-        gwylanRescueApologyShop:
-            name: gwylanRescueApologyShop
-        gwylanRescueApologySpeech:
-            name: gwylanRescueApologySpeech
-        gwylanRescueFail:
-            name: gwylanRescueFail
-        hair_data:
-            name: hair_data
-        haircheck:
-            name: haircheck
-            tags: ["unused"]
-        haircolourtext:
-            description: |-
-                Prints colour of `$haircolour` or `two-toned`
-        hairDescription:
-            name: hairDescription
-        hairDressersOptions:
-            name: hairDressersOptions
-        hairDressersOptionsSydney:
-            name: hairDressersOptionsSydney
-        hairdressersPricelist:
-            name: hairdressersPricelist
-        hairdressersReset:
-            name: hairdressersReset
-        hairdressersResetAlt:
-            name: hairdressersResetAlt
-        hairdressersSession:
-            name: hairdressersSession
-        hairejacstat:
-            name: hairejacstat
-        hairfringecolourtext:
-            description: |-
-                Prints colour of `$hairfringecolour` or `two-toned`
-        hairgelApply:
-            name: hairgelApply
-        hairgelDesc:
-            name: hairgelDesc
-        hairgelLinks:
-            name: hairgelLinks
-        hairmapcolourtext:
-            description: |-
-                Prints colour corresponding to `setup.colours.hair_map`
-
-                Fallback behaviour changes if `_colour` is not set
-
-                `<<hairmapcolourtext colour>>`
-                - **colour**: `string` - colour to print
-                  - `valid key` : name of colour in hair_map
-                  - `text` : parameter is now fallback if `_colour` is not set
-            parameters:
-                - "text"
-            tags: ["temp"]
-        halloweenkylar:
-            name: halloweenkylar
-        halloweenwhitney:
-            name: halloweenwhitney
-        hallucinogen:
-            description: |-
-                Adds hallucinogenic drugs to pc's system
-
-                `$hallucinogen` is a measure of hallucinogenic drugs in pc's system where 0 is none (0-1,000)
-
-                `<<hallucinogen change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        hallucinogencaption:
-            name: hallucinogencaption
-        hand_gag:
-            name: hand_gag
-        hand_section:
-            name: hand_section
-        hand_section_two:
-            name: hand_section_two
-        handdifficulty:
-            description: |-
-                Prints color-coded adjective of hand action difficulty in current combat
-            tags: ["text"]
-        handejacstat:
-            name: handejacstat
-        handheldon:
-            name: handheldon
-        handheldruined:
-            name: handheldruined
-        HandheldShop:
-            name: HandheldShop
-        handheldstrip:
-            name: handheldstrip
-        handheldundress:
-            name: handheldundress
-        handheldwear:
-            name: handheldwear
-        handholdingvirginitywarning:
-            description: |-
-                Prints `This action will take your handholding virginity.` if handholding virginity can still be lost
-
-                Takes combat state into account to display starting pipe `| `
-            tags: ["text"]
-        handsActionsStruggleColumnRadio:
-            name: handsActionsStruggleColumnRadio
-        handsActionsStruggleRadio:
-            name: handsActionsStruggleRadio
-        handsActionsStruggleRadiobkp:
-            name: handsActionsStruggleRadiobkp
-            tags: ["unused"]
-        handsimg:
-            name: handsimg
-        handsit:
-            description: |-
-                Prints an objective case pronoun (them/it) for worn `"hand"` slot
-        handskill:
-            description: |-
-                Adds hand skill to pc's state
-
-                `$handskill` is a measure of pc's proficiency using their hands where 0 is awkward (0-1,000)
-
-                `<<handskill change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        handskilluse:
-            name: handskilluse
-        handson:
-            name: handson
-            tags: ["unused"]
-        handsruined:
-            description: |-
-                Destroys pc's hands slot clothing, whether worn or carried
-
-                `<<handsruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        handssend:
-            name: handssend
-            tags: ["unused"]
-        HandsShop:
-            name: HandsShop
-        handssteal:
-            name: handssteal
-            tags: ["unused"]
-        handsstrip:
-            name: handsstrip
-        handsstrugglefreebodypart:
-            name: handsstrugglefreebodypart
-        handstat:
-            name: handstat
-        handsthat:
-            description: |-
-                Prints plural/singular prose of that (those/that) for worn `"hands"` slot
-            tags: ["unused"]
-        handsundress:
-            name: handsundress
-        handswear:
-            name: handswear
-        handtext:
-            description: |-
-                Prints colour-coded adjective of active hand skill usage
-            tags: ["text"]
-        harper_intro:
-            name: harper_intro
-        harpy:
-            description: |-
-                Prints `| Harpy` or `| Bird` based on pc's hallucination state and bestiality toggle
-            tags: ["text"]
-        harpyTransform:
-            name: harpyTransform
-        harvest:
-            name: harvest
-        harvesteventend:
-            name: harvesteventend
-        harvestexposed:
-            name: harvestexposed
-            tags: ["unused"]
-        harvestquick:
-            name: harvestquick
-        has:
-            description: |-
-                Prints plural/singular prose of has (have/has) for provided clothing slot
-
-                `<<has slot>>`
-                - **slot**: `string` - category of worn clothing to check
-                  - %clothesTypesDesc%
-            parameters:
-                - "%clothesTypes%"
-        hawkText:
-            name: hawkText
-        he:
-            description: |-
-                Prints singular pronoun of current npc (he/she/they)
-
-                See `<<He>>` for start of sentence introduction or `<<He_Short>>` for exact equivalent, just capitalised
-
-                Does not `<<personselect>>` to provided npc or behave like `<<He>>` for unnamed npcs. Consider refactoring to not personselect but allow unnamed
-
-                `<<he namedNPC?>>`
-                - **namedNPC** _optional_: `string` - name of npc to override pronoun for
-                  - %namedNPCDesc%
-            parameters:
-                - "|+ %namedNPC%"
-            tags: ["text", "refactor"]
-        He:
-            description: |-
-                Prints capitalised singular pronoun of current npc (He/She/They), with full npc introduction if it is appropriate
-
-                See `<<he>>` for un-capitalised version or `<<He_Short>>` for no risk of full npc introduction
-
-                Does not `<<personselect>>` to provided unnamed npc. Consider refactoring to not personselect but allow unnamed
-
-                `<<He npcOverride?>>`
-                - **npcOverride** _optional_: `string|number` - npc to override pronoun for
-                  - %namedNPCDesc%: Sets pronoun and outputs
-                  - `number`: Switches selected npc to zero-based index and outputs
-            parameters:
-                - "|+ %namedNPC%|number"
-            tags: ["text", "refactor"]
-        He_Short:
-            description: |-
-                Prints capitalised singular pronoun of current npc (He/She/They)
-
-                See `<<he>>` for un-capitalised version or `<<He>>` for full npc introduction
-
-                Does not use arguments like `<<He>>` or `<<he>>`. Consider refactoring to match
-            parameters:
-                - ""
-            tags: ["text"]
-        head_down:
-            name: head_down
-        head_turn:
-            name: head_turn
-        head_up:
-            name: head_up
-        headbind:
-            name: headbind
-        headon:
-            name: headon
-            tags: ["unused"]
-        headruined:
-            description: |-
-                Destroys pc's head slot clothing, whether worn or carried
-
-                `<<headruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        headsend:
-            name: headsend
-            tags: ["unused"]
-        HeadShop:
-            name: HeadShop
-        headsteal:
-            name: headsteal
-            tags: ["unused"]
-        headstrip:
-            name: headstrip
-        headundress:
-            name: headundress
-        headwear:
-            name: headwear
-        heat:
-            description: |-
-                Prints `| Heat`
-            tags: ["text"]
-        heatRutDisplay:
-            name: heatRutDisplay
-        heelsUpdate:
-            name: heelsUpdate
-        heldSexToy:
-            name: heldSexToy
-        hers:
-            name: hers
-        Hers:
-            name: Hers
-            tags: ["unused"]
-        hes:
-            name: hes
-        Hes:
-            name: Hes
-        hideDisplay:
-            name: hideDisplay
-        hidelayer:
-            description: |-
-                Hide layer
-
-                [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
-
-                `<<hidelayer layerName>>`
-                - **layerName**: `string` - layer name corresponding to #CanvasModel.layer
-            parameters:
-                - text
-            tags: ["unused"]
-        hideTransformations:
-            description: |-
-                Use to temporarily hide all transformation parts
-
-                Stores the hidden transformation data into `$saveTransformations`
-
-                Use `<<showTransformations>>` to restore the parts this widget hid
-            tags: ["unused"]
-        high:
-            name: high
-        higheventend:
-            name: higheventend
-        highexposed:
-            name: highexposed
-            tags: ["unused"]
-        highLowCalculate:
-            name: highLowCalculate
-            tags: ["unused"]
-        highLowControls:
-            name: highLowControls
-            tags: ["unused"]
-        highLowEnd:
-            name: highLowEnd
-            tags: ["unused"]
-        highLowStart:
-            name: highLowStart
-            tags: ["unused"]
-        highquick:
-            name: highquick
-        him:
-            name: him
-        Him:
-            name: Him
-        himself:
-            description: |-
-                Prints singular reflexive pronoun for active npc
-
-                See `<<nnpc_himself>>` for alternative use or `<<bhimself>>` for beasts
-
-                Does not `<<personselect>>` to provided npc or behave like `<<He>>` for unnamed npcs. Consider refactoring to not personselect but allow unnamed
-
-                `<<himself namedNPC?>>`
-                - **namedNPC** _optional_: `string` - name of npc to override pronoun for
-                  - %namedNPCDesc%
-            parameters:
-                - "|+ %namedNPC%"
-            tags: ["text", "refactor"]
-        hirsuteHideCheck:
-            name: hirsuteHideCheck
-        his:
-            description: |-
-                Prints singular possessive pronoun of current npc (his/her/their)
-
-                See `<<His>>` for capitalised prose
-
-                Does not `<<personselect>>` to provided npc or behave like `<<He>>` for unnamed npcs. Consider refactoring to not personselect but allow unnamed
-
-                `<<His namedNPC?>>`
-                - **namedNPC** _optional_: `string` - name of npc to override pronoun for
-                  - %namedNPCDesc%
-            parameters:
-                - "|+ %namedNPC%"
-            tags: ["text", "refactor"]
-        His:
-            description: |-
-                Prints capitalised singular possessive pronoun of current npc (His/Her/Their)
-
-                See `<<his>>` for un-capitalised prose
-
-                Does not `<<personselect>>` to provided npc or behave like `<<He>>` for unnamed npcs. Consider refactoring to not personselect but allow unnamed
-
-                `<<His namedNPC?>>`
-                - **namedNPC** _optional_: `string` - name of npc to override pronoun for
-                  - %namedNPCDesc%
-            parameters:
-                - "|+ %namedNPC%"
-            tags: ["text", "refactor"]
-        his1:
-            description: |-
-                Prints singular possessive pronoun after switching active npc to first npc (`NPCList[0]`)
-
-                One-indexed for legacy support. Eligible for deprecation.
-            tags: ["unused", "text"]
-        his2:
-            description: |-
-                Prints singular possessive pronoun after switching active npc to second npc (`NPCList[1]`)
-
-                One-indexed for legacy support. Eligible for deprecation.
-            tags: ["unused", "text"]
-        his3:
-            description: |-
-                Prints singular possessive pronoun after switching active npc to third npc (`NPCList[2]`)
-
-                One-indexed for legacy support. Eligible for deprecation.
-            tags: ["unused", "text"]
-        his4:
-            description: |-
-                Prints singular possessive pronoun after switching active npc to fourth npc (`NPCList[3]`)
-
-                One-indexed for legacy support. Eligible for deprecation.
-            tags: ["unused", "text"]
-        his5:
-            description: |-
-                Prints singular possessive pronoun after switching active npc to fifth npc (`NPCList[4]`)
-
-                One-indexed for legacy support. Eligible for deprecation.
-            tags: ["unused", "text"]
-        his6:
-            description: |-
-                Prints singular possessive pronoun after switching active npc to sixth npc (`NPCList[5]`)
-
-                One-indexed for legacy support. Eligible for deprecation.
-            tags: ["unused", "text"]
-        hisselect:
-            description: |-
-                Prints singular possessive pronoun after switching active npc (his/her/their)
-
-                `<<hisselect npcIndex>>`
-                - **npcIndex**: `number` - zero-based index of active npcs
-            parameters:
-                - "number"
-            tags: ["text"]
-        history_skill_up_text:
-            name: history_skill_up_text
-        historyrequired:
-            name: historyrequired
-            tags: ["unused"]
-        historyskill:
-            name: historyskill
-        hitchhike:
-            name: hitchhike
-        hitchhike_journey:
-            name: hitchhike_journey
-        hitchhike_journey_nude:
-            name: hitchhike_journey_nude
-        hitstat:
-            name: hitstat
-        home_effects:
-            name: home_effects
-        home_outside:
-            name: home_outside
-        homeBabyIntro:
-            name: homeBabyIntro
-        homeevent:
-            name: homeevent
-        homeeventalex:
-            name: homeeventalex
-        homeeventchef:
-            name: homeeventchef
-        homeeventhopehi:
-            name: homeeventhopehi
-        homeeventhopelo:
-            name: homeeventhopelo
-        homeeventkylar:
-            name: homeeventkylar
-        homeeventnorm:
-            name: homeeventnorm
-        homeeventpond:
-            name: homeeventpond
-        homeeventrebhi:
-            name: homeeventrebhi
-        homeeventreblo:
-            name: homeeventreblo
-        homeeventriver:
-            name: homeeventriver
-        homeeventwhitney:
-            name: homeeventwhitney
-        homeStudyOptions:
-            name: homeStudyOptions
-        hookah_init:
-            name: hookah_init
-        hookah_juice:
-            name: hookah_juice
-        hookah_master:
-            name: hookah_master
-        hope:
-            description: |-
-                Adds hope to orphanage
-
-                `$orphan_hope` is measure of hope levels in orphanage where negative is no hope and 0 is neutral (-50-50)
-
-                `<<hope change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        horsegenitalsdesc:
-            description: |-
-                Prints adjective describing active horse's genital state
-
-                `<<horsegenitalsdesc size?>>`
-                - **size** _optional_: `bool` - print size adjective instead of state (truthy)
-            parameters:
-                - "|+ bool|var|bareword"
-        hospitalparasite:
-            name: hospitalparasite
-        housekeeping:
-            name: housekeeping
-        housekeeping_text:
-            description: |-
-                Prints colour-coded description of how good the player is at housekeeping
-            tags: ["unused", "text"]
-        housekeepingdifficulty:
-            name: housekeepingdifficulty
-        housekeepingtext:
-            description: |-
-                Prints colour-coded adjective of active housekeeping skill usage
-            tags: ["unused", "text"]
-        humanChildActivity:
-            name: humanChildActivity
-        humanChildActivityNoToy:
-            name: humanChildActivityNoToy
-        humanSettings:
-            name: humanSettings
-        humanSplitBy:
-            name: humanSplitBy
-        humanSplitByFull:
-            name: humanSplitByFull
-        hunger:
-            name: hunger
-        hunger_description:
-            name: hunger_description
-        hygiene:
-            name: hygiene
-            tags: ["unused"]
-        hypnotised:
-            name: hypnotised
-        icon:
-            description: |-
-                Prints icon image from icon folder
-
-                `<<icon imagePath ...additionalClass?>>`
-                - **imagePath**: `string` - path to image file including extension relative to icon folder
-                - ...**whitespaceOption** _optional_: `string` - trim whitespace character at end of output
-                  - `"nowhitespace"`: no trailing whitespace for formatting
-                  - `"infront"`: layer icon in front of next icon
-            parameters:
-                - text |+ ...("nowhitespace"|"infront")
-            tags: ["img"]
-        imgOpacity:
-            name: imgOpacity
-        importConfirmDetails:
-            name: importConfirmDetails
-        importDetailsDisplay:
-            description: |-
-                Validate and imports preset object into state
-
-                `<<importDetailsDisplay presetObject>>`
-                - **presetObject**: `object` - object to be imported
-            parameters:
-                - bareword|var
-        impregnateParasite:
-            name: impregnateParasite
-        imprison_leighton:
-            name: imprison_leighton
-        imprison_npc:
-            name: imprison_npc
-            tags: ["unused"]
-        imprison_whitney:
-            name: imprison_whitney
-        incggpenisinsecurity:
-            description: |-
-                Adds double amount of default penis insecurity to the player and prints stat change
-            tags: ["text"]
-        incgpenisinsecurity:
-            description: |-
-                Adds penis insecurity to the player and prints stat change
-
-                `<<incgpenisinsecurity change?>>`
-                - **change** _optional_: `number` - + change to apply
-                  - Defaults to `10`
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        incompletePregnancy:
-            name: incompletePregnancy
-        incrementautosave:
-            name: incrementautosave
-            tags: ["unused"]
-        industrial:
-            name: industrial
-        industrialdrain:
-            name: industrialdrain
-        industrialdraineventend:
-            name: industrialdraineventend
-        industrialdrainlinks:
-            name: industrialdrainlinks
-        industrialdrainquick:
-            name: industrialdrainquick
-        industrialeventend:
-            name: industrialeventend
-        industrialex1:
-            name: industrialex1
-        industrialex2:
-            name: industrialex2
-        industrialex3:
-            name: industrialex3
-        industrialexposed:
-            name: industrialexposed
-            tags: ["unused"]
-        industrialquick:
-            name: industrialquick
-        infirmary_excused:
-            name: infirmary_excused
-        init_bodywriting_objects:
-            name: init_bodywriting_objects
-        init_hairfringe:
-            name: init_hairfringe
-        init_hairsides:
-            name: init_hairsides
-        init_locations:
-            name: init_locations
-        init_names:
-            name: init_names
-        init_npc_clothes:
-            name: init_npc_clothes
-        init_plant_objects:
-            name: init_plant_objects
-        init_tips:
-            name: init_tips
-        initAllNNPCVirginities:
-            description: |-
-                Sets all named NPC to canonical starting virginities
-        initEstatePersistent:
-            name: initEstatePersistent
-        initNNPCClothes:
-            name: initNNPCClothes
-        initNNPCstrapon:
-            name: initNNPCstrapon
-        initNNPCVirginity:
-            description: |-
-                Sets named NPC to canonical starting virginity
-
-                `<<initNNPCVirginity namedNPCIndex>>`
-                - **namedNPCIndex**: `number` - zero-based index of named NPC to be init'd
-            parameters:
-                - number
-        initnpc:
-            name: initnpc
-        initnpcgender:
-            name: initnpcgender
-        initnpcgendersingle:
-            name: initnpcgendersingle
-        initnpcskin:
-            name: initnpcskin
-        initnpcskinsingle:
-            name: initnpcskinsingle
-        initsettings:
-            name: initsettings
-        inittemple:
-            name: inittemple
-        initWraith:
-            name: initWraith
-        innocencecaption:
-            name: innocencecaption
-        insecurity:
-            description: |-
-                Adds insecurity to pc's state concerning specific part and applies effects
-
-                `$insecurity_X` are measures of insecure pc is towards specific traumas where 0 is not insecure (0-1,000)
-
-                `<<insecurity part change>>`
-                - **part**: `string` - part to gain insecurity in
-                  - %insecurityTypesDesc%
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "%insecurityTypes% &+ number"
-        inspectionexpect:
-            name: inspectionexpect
-        integrity:
-            name: integrity
-        integritycheck:
-            name: integritycheck
-        integrityWord:
-            description: |-
-                Use `integrityWord()` instead
-            name: integrityWord
-            tags: ["unused"]
-        internalejac:
-            name: internalejac
-        internet_photo:
-            description: |-
-                Adds a photo type to the list of ones circulating the internet
-
-                `<<internet_photo key>>`
-                - **key**: `string` - key to add to list
-                  - `"whitney_roof_cute"` | `"whitney_roof_erotic"` | `"whitney_roof_erotic_pantiless"` | `"whitney_roof_erotic_panties"`
-            parameters:
-                - '"whitney_roof_cute"|"whitney_roof_erotic"|"whitney_roof_erotic_pantiless"|"whitney_roof_erotic_panties"'
-        internet_video:
-            description: |-
-                Adds a video type to the list of ones circulating the internet
-
-                `<<internet_video key>>`
-                - **key**: `string` - key to add to list
-                  - `"whitney_roof_cute"` | `"whitney_roof_erotic"` | `"whitney_roof_erotic_pantiless"` | `"whitney_roof_erotic_panties"`
-            parameters:
-                - '"whitney_roof_cute"|"whitney_roof_erotic"|"whitney_roof_erotic_pantiless"|"whitney_roof_erotic_panties"'
-        island_end:
-            name: island_end
-        island_explore_end:
-            name: island_explore_end
-        island_init:
-            name: island_init
-        island_pass:
-            name: island_pass
-        island_rope_bow:
-            name: island_rope_bow
-        island_rope_end:
-            name: island_rope_end
-        island_rope_options:
-            name: island_rope_options
-        island_rope_shout:
-            name: island_rope_shout
-        island_tattoo:
-            name: island_tattoo
-        island_tattoo_check:
-            name: island_tattoo_check
-        island_tide:
-            name: island_tide
-        island_tide_options:
-            name: island_tide_options
-        island_tide_text:
-            name: island_tide_text
-        island_var_list:
-            name: island_var_list
-            tags: ["unused"]
-        islandBuildOption:
-            name: islandBuildOption
-        islander_language:
-            name: islander_language
-        it:
-            description: |-
-                Prints an objective case pronoun (them/it) for provided clothing slot
-
-                `<<it slot>>`
-                - **slot**: `string` - category of worn clothing to check
-                  - %clothesTypesDesc%
-            parameters:
-                - "%clothesTypes%"
-        itis:
-            description: |-
-                Prints a pronoun/ present indicative pair (they are/it is) describing provided clothing slot
-
-                Pronoun is subjective case for usability
-
-                `<<itis slot>>`
-                - **slot**: `string` - category of worn clothing to check
-                  - %clothesTypesDesc%
-            parameters:
-                - "%clothesTypes%"
-        journal:
-            name: journal
-        journalNotes:
-            name: journalNotes
-        journalNotesTextarea:
-            name: journalNotesTextarea
-        journalNotesTextareaSave:
-            name: journalNotesTextareaSave
-        kennel_intro:
-            name: kennel_intro
-        kennel_play_options:
-            name: kennel_play_options
-        kennel_treat_options:
-            name: kennel_treat_options
-        kennel_treats:
-            name: kennel_treats
-        kissvirginitywarning:
-            description: |-
-                Prints `This action will take your first kiss.` if your first kiss can still be lost
-
-                Takes combat state into account to display starting pipe `| `
-            tags: ["text"]
-        kissWraith:
-            name: kissWraith
-        knot_stat:
-            name: knot_stat
-        kylar_abduction_end:
-            name: kylar_abduction_end
-        kylar_abduction_init:
-            name: kylar_abduction_init
-        kylar_abduction_rage:
-            name: kylar_abduction_rage
-        kylar_abduction_return:
-            name: kylar_abduction_return
-        kylar_parents_trust:
-            name: kylar_parents_trust
-        kylar_pet_name:
-            name: kylar_pet_name
-        kylar_stockholm_start:
-            name: kylar_stockholm_start
-        kylarangry:
-            name: kylarangry
-        kylarFinish:
-            name: kylarFinish
-        kylargag:
-            name: kylargag
-        kylarhallways:
-            name: kylarhallways
-        kylarLibrary:
-            description: |-
-                Prints partial passage of Kylar in the library
-            tags: ["text", "links"]
-        kylarLibraryStalkChat1:
-            description: |-
-                Prints paragraph chatting with Kylar in the library
-            tags: ["text"]
-        kylaroptions:
-            name: kylaroptions
-        kylaroptionsleave:
-            name: kylaroptionsleave
-        kylaroptionstext:
-            name: kylaroptionstext
-        kylarRandomUnderwear:
-            name: kylarRandomUnderwear
-        kylarStockholmDefaultRape:
-            name: kylarStockholmDefaultRape
-        kylarwatched:
-            name: kylarwatched
-        lactation_pressure:
-            description: |-
-                Adds pressure to pc's lactation pressure
-
-                `$lactation_pressure` is counter for when pc starts lactating from daily effects (0-100, no change above 30)
-
-                `<<lactation_pressure change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        ladeviancy:
-            description: |-
-                Prints `| - Alex's Deviancy`
-            tags: ["unused", "text"]
-        lady:
-            description: |-
-                Prints `man` or `lady` depending on pc's appearance
-
-                See `<<gentleman>>`
-            tags: ["text"]
-        laggro:
-            description: |-
-                Prints `| - Remy's Encroachment`
-            tags: ["text"]
-        lake:
-            name: lake
-        lakeclothes:
-            name: lakeclothes
-        lakeeffects:
-            name: lakeeffects
-        lakeeventend:
-            name: lakeeventend
-        lakejourney:
-            name: lakejourney
-        lakequick:
-            name: lakequick
-        lakereturnjourney:
-            name: lakereturnjourney
-        landryoptions:
-            name: landryoptions
-        lapproval:
-            name: lapproval
-        larage:
-            description: |-
-                Prints `| - Rage`
-            tags: ["text"]
-        large_text:
-            description: |-
-                Prints appropriate `| Large body` descriptor that allowed this text option
-            tags: ["text"]
-        larousal:
-            description: |-
-                Prints `| - Arousal`
-            tags: ["text"]
-        lass:
-            name: lass
-        lattention:
-            description: |-
-                Prints `| - Attention`
-            tags: ["unused", "text"]
-        laughs:
-            description: |-
-                Prints random appropriate laugh verb for active NPC
-            tags: ["text"]
-        lawareness:
-            description: |-
-                Prints `| - Awareness` or `| + Innocence`
-            tags: ["text"]
-        lcamp_concealment:
-            name: lcamp_concealment
-        lchaos:
-            description: |-
-                Prints `| - Chaos`
-            tags: ["unused", "text"]
-        lcombatcontrol:
-            description: |-
-                Prints `| - Control`
-            tags: ["unused", "text"]
-        lcontrol:
-            description: |-
-                Prints `| - Control`
-            tags: ["text"]
-        lcool:
-            description: |-
-                Prints `| - Status`
-            tags: ["text"]
-        lcorruption:
-            description: |-
-                Prints `| - Corruption`
-        ldaring:
-            description: |-
-                Prints `| - Daring`
-            tags: ["text"]
-        ldef:
-            description: |-
-                Prints `| - Defiance`
-            tags: ["unused", "text"]
-        ldelinquency:
-            description: |-
-                Prints `| - Delinquency`
-            tags: ["text"]
-        ldom:
-            description: |-
-                Prints `| - Dominance` or `| - NPCName's Dominance` if provided
-
-                `<<ldom NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-                  - `"Robin"`: Displays "Confidence" instead
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        leash:
-            name: leash
-        left_pursuit_grab:
-            name: left_pursuit_grab
-        leftactionBoundBanish:
-            name: leftactionBoundBanish
-        leftactionDifficulty:
-            name: leftactionDifficulty
-        leftactionDifficultyMachine:
-            name: leftactionDifficultyMachine
-            tags: ["unused"]
-        leftactionDifficultySelf:
-            name: leftactionDifficultySelf
-        leftactionDifficultyStruggle:
-            name: leftactionDifficultyStruggle
-            tags: ["unused"]
-        leftactionDifficultySwarm:
-            name: leftactionDifficultySwarm
-            tags: ["unused"]
-        leftactionDifficultyTentacle:
-            name: leftactionDifficultyTentacle
-        leftactionDifficultyVore:
-            name: leftactionDifficultyVore
-            tags: ["unused"]
-        leftActionInit:
-            name: leftActionInit
-        leftActionInitMachine:
-            name: leftActionInitMachine
-        leftActionInitSelf:
-            name: leftActionInitSelf
-        leftActionInitStruggle:
-            name: leftActionInitStruggle
-        leftActionInitSwarm:
-            name: leftActionInitSwarm
-        leftActionInitTentacle:
-            name: leftActionInitTentacle
-        leftActionInitVore:
-            name: leftActionInitVore
-        leftActions:
-            name: leftActions
-        leftactionSetupTentacle:
-            name: leftactionSetupTentacle
-        leftActionsMachine:
-            name: leftActionsMachine
-        leftActionsSelf:
-            name: leftActionsSelf
-        leftActionsStruggle:
-            name: leftActionsStruggle
-        leftActionsSwarm:
-            name: leftActionsSwarm
-        leftActionsTentacle:
-            name: leftActionsTentacle
-        leftActionsVore:
-            name: leftActionsVore
-        leftarmtentacledisable:
-            name: leftarmtentacledisable
-        leftcamerapose:
-            name: leftcamerapose
-        leftchoke:
-            name: leftchoke
-        leftclothesnew:
-            name: leftclothesnew
-        leftCondom:
-            name: leftCondom
-        leftcoverface:
-            name: leftcoverface
-        leftdefault:
-            name: leftdefault
-        leftdildowhack:
-            name: leftdildowhack
-        leftFixAndCoverActions:
-            name: leftFixAndCoverActions
-        leftgrabnew:
-            name: leftgrabnew
-        lefthandinit:
-            name: lefthandinit
-            tags: ["unused"]
-        lefthandpull:
-            name: lefthandpull
-        lefthypnosiswhack:
-            name: lefthypnosiswhack
-        leftNPCCondom:
-            name: leftNPCCondom
-        leftpenwhacknew:
-            name: leftpenwhacknew
-        leftplaynew:
-            name: leftplaynew
-        leftshacklewhack:
-            name: leftshacklewhack
-        leftspraynew:
-            name: leftspraynew
-        leftstealnew:
-            name: leftstealnew
-        leftUndressOther:
-            name: leftUndressOther
-        leg_position:
-            name: leg_position
-        leg_unbind:
-            name: leg_unbind
-        legbind:
-            name: legbind
-        legLock:
-            name: legLock
-        legLocked:
-            name: legLocked
-        legsit:
-            description: |-
-                Prints an objective case pronoun (them/it) for worn `"legs"` slot
-        legson:
-            name: legson
-            tags: ["unused"]
-        legsruined:
-            description: |-
-                Destroys pc's legs slot clothing, whether worn or carried
-
-                `<<legsruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        legssend:
-            name: legssend
-            tags: ["unused"]
-        LegsShop:
-            name: LegsShop
-        legssteal:
-            name: legssteal
-            tags: ["unused"]
-        legsstrip:
-            name: legsstrip
-        legsthat:
-            description: |-
-                Prints plural/singular prose of that (those/that) for worn `"legs"` slot
-        legsundress:
-            name: legsundress
-        legswear:
-            name: legswear
-        lemonade_stand_options:
-            name: lemonade_stand_options
-        lendear:
-            description: |-
-                Prints `| - Endearment`
-            tags: ["text"]
-        lenglish:
-            description: |-
-                Prints `| - English`
-            tags: ["text"]
-        lessonEnd:
-            description: |-
-                Prints end of lesson text for specified classes
-
-                `class` seems overly specific. Consider refactoring
-
-                `<<lessonEnd class pcAction?>>`
-                - **class**: `string` - class to end and update state on
-                  - `"englishClassroom"` | `"historyClassroom"` | `"mathsClassroom"` | `"scienceClassroom"`
-                - **pcAction** _optional_: `string` - action pc should react from
-                  - `"sleep"`: pc is woken up by end of class
-            parameters:
-                - '"englishClassroom"|"historyClassroom"|"mathsClassroom"|"scienceClassroom" |+ "sleep"'
-            tags: ["text", "refactor"]
-        lessonEvents:
-            description: |-
-                Pulls from appropriate event pool for class based on danger
-
-                `<<lessonEvents class dangerModifier?>>`
-                - **class**: `string` - class to pull events from
-                  - `"english"` | `"history"` | `"maths"` | `"science"`
-                - **dangerModifier** _optional_: `number` - modifier to apply to danger calculations
-                  - Defaults to `1`
-            parameters:
-                - '"english"|"history"|"maths"|"science" |+ number'
-        lewdcatcall:
-            description: |-
-                Prints random lewd catcall
-        lewditycaption:
-            name: lewditycaption
-        lewdness:
-            description: |-
-                Prints exposed player clothing or just `lewdness`
-            tags: ["text"]
-        lfarm:
-            description: |-
-                Prints `| - Farm yield`
-        lferocity:
-            description: |-
-                Adds 1 to wolfpack's ferocity and prints `| - Ferocity`
-
-                See `<<gferocity>>`
-            tags: ["text"]
-        lgrace:
-            description: |-
-                Prints `| - Grace` if proper tier is met
-
-                `<<lgrace tier?>>`
-                - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
-                  - `"monk"` | `"priest"` | `"bishop"`
-            parameters:
-                - '|+ "monk"|"priest"|"bishop"'
-            tags: ["text"]
-        lharass:
-            description: |-
-                Prints `| Decreases chance of harassment`
-            tags: ["text"]
-        lharmony:
-            description: |-
-                Subtracts 1 from wolfpack's harmony and prints `| - Harmony`
-
-                See `<<gharmony>>`
-            tags: ["text"]
-        lhistory:
-            description: |-
-                Prints `| - History`
-            tags: ["text"]
-        lhope:
-            description: |-
-                Prints `| - Hope`
-            tags: ["text"]
-        lhunger:
-            description: |-
-                Prints `| - Hunger`
-            tags: ["text"]
-        limpatience:
-            description: |-
-                Prints `| - Impatience`
-            tags: ["unused", "text"]
-        linkradiogroup:
-            name: linkradiogroup
-        linterest:
-            description: |-
-                Prints `| - Interest`
-            tags: ["text"]
-        lisland_tide:
-            name: lisland_tide
-        listCrimeCheats:
-            name: listCrimeCheats
-        listdancingclothes:
-            name: listdancingclothes
-        listoutfits:
-            name: listoutfits
-        listoutfitsPassage:
-            name: listoutfitsPassage
-        listsleepoutfits:
-            name: listsleepoutfits
-        listswimoutfits:
-            name: listswimoutfits
-        livestock_bodywriting:
-            name: livestock_bodywriting
-        livestock_cows:
-            name: livestock_cows
-        livestock_end:
-            name: livestock_end
-            tags: ["unused"]
-        livestock_horse:
-            name: livestock_horse
-        livestock_horses:
-            name: livestock_horses
-        livestock_init:
-            name: livestock_init
-        livestock_lock_cleanup:
-            description: |-
-                Unsets farm lock variables
-        livestock_lock_desc:
-            description: |-
-                Prints description of farm lock strength
-
-                `$farmLockStr` is a measure of how damaged the farm lock is where 100 is undamaged (0-100)
-            tags: ["text"]
-        livestock_obey:
-            description: |-
-                Adds obedience in being cattle to pc's state
-
-                `$livestock_obey` is a measure of how compliant the pc is being Remy's cattle where 0 is uncompliant (0-100)
-
-                `<<livestock_obey change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        livestock_obey_description:
-            name: livestock_obey_description
-        livestock_overhear:
-            name: livestock_overhear
-        livestock_patrol:
-            description: |-
-                Prints description of farm guard location and how effective your attempt to break the lock is
-
-                Decreases `$farmLockStr` based on physique
-
-                `$farmPatrol` is a measure of how far the farmhand is where 0 is near (0-100)
-            tags: ["text", "stat"]
-        livestock_sleep:
-            name: livestock_sleep
-        livestock_escape:
-            name: livestock_escape
-        livestockFieldGrassEvents:
-            name: livestockFieldGrassEvents
-        lksuspicion:
-            description: |-
-                Prints `| - Jealousy`
-            tags: ["text"]
-        lladeviancy:
-            description: |-
-                Prints `| - - Alex's Deviancy`
-            tags: ["unused", "text"]
-        llaggro:
-            description: |-
-                Prints `| - - Remy's Encroachment`
-            tags: ["text"]
-        llapproval:
-            name: llapproval
-            tags: ["unused"]
-        llarage:
-            description: |-
-                Prints `| - - Rage`
-            tags: ["unused", "text"]
-        llarousal:
-            description: |-
-                Prints `| - - Arousal`
-            tags: ["text"]
-        llattention:
-            description: |-
-                Prints `| - - Attention`
-            tags: ["unused", "text"]
-        llawareness:
-            description: |-
-                Prints `| - - Awareness` or `| + + Innocence`
-            tags: ["text"]
-        llchaos:
-            description: |-
-                Prints `| - - Chaos`
-            tags: ["unused", "text"]
-        llcombatcontrol:
-            description: |-
-                Prints `| - - Control`
-            tags: ["unused", "text"]
-        llcontrol:
-            description: |-
-                Prints `| - - Control`
-            tags: ["text"]
-        llcool:
-            description: |-
-                Prints `| - - Status`
-            tags: ["text"]
-        llcorruption:
-            description: |-
-                Prints `| - - Corruption`
-        lldaring:
-            description: |-
-                Prints `| - - Daring`
-            tags: ["unused", "text"]
-        lldef:
-            description: |-
-                Prints `| - - Defiance`
-            tags: ["unused", "text"]
-        lldelinquency:
-            description: |-
-                Prints `| - - Delinquency`
-            tags: ["text"]
-        lldom:
-            description: |-
-                Prints `| - - Dominance` or `| - - NPCName's Dominance` if provided
-
-                `<<lldom NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-                  - `"Robin"`: Displays "Confidence" instead
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        llendear:
-            description: |-
-                Prints `| - - Endearment`
-            tags: ["text"]
-        llewdity:
-            description: |-
-                Prints `| - Lewdity`
-            tags: ["unused", "text"]
-        llfarm:
-            description: |-
-                Prints `| - - Farm yield`
-        llgrace:
-            description: |-
-                Prints `| - - Grace` if proper tier is met
-
-                `<<llgrace tier?>>`
-                - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
-                  - `"monk"` | `"priest"` | `"bishop"`
-            parameters:
-                - '|+ "monk"|"priest"|"bishop"'
-            tags: ["text"]
-        llhope:
-            description: |-
-                Prints `| - - Hope`
-            tags: ["text"]
-        llhunger:
-            description: |-
-                Prints `| - - Hunger`
-            tags: ["text"]
-        llimpatience:
-            description: |-
-                Prints `| - - Impatience`
-            tags: ["unused", "text"]
-        llinterest:
-            description: |-
-                Prints `| - - Interest`
-            tags: ["text"]
-        llksuspicion:
-            description: |-
-                Prints `| - - Jealousy`
-            tags: ["text"]
-        llladeviancy:
-            description: |-
-                Prints `| - - - Alex's Deviancy`
-            tags: ["unused", "text"]
-        lllaggro:
-            description: |-
-                Prints `| - - - Remy's Encroachment`
-            tags: ["text"]
-        lllapproval:
-            name: lllapproval
-            tags: ["unused"]
-        lllarage:
-            description: |-
-                Prints `| - - - Rage`
-            tags: ["text"]
-        lllarousal:
-            description: |-
-                Prints `| - - - Arousal`
-            tags: ["text"]
-        lllattention:
-            description: |-
-                Prints `| - - - Attention`
-            tags: ["unused", "text"]
-        lllawareness:
-            description: |-
-                Prints `| - - - Awareness` or `| + + + Innocence`
-            tags: ["text"]
-        lllchaos:
-            description: |-
-                Prints `| - - - Chaos`
-            tags: ["unused", "text"]
-        lllcombatcontrol:
-            description: |-
-                Prints `| - - - Control`
-            tags: ["unused", "text"]
-        lllcontrol:
-            description: |-
-                Prints `| - - - Control`
-            tags: ["text"]
-        lllcool:
-            description: |-
-                Prints `| - - - Status`
-            tags: ["text"]
-        lllcorruption:
-            description: |-
-                Prints `| - - - Corruption`
-        llldaring:
-            description: |-
-                Prints `| - - - Daring`
-            tags: ["unused", "text"]
-        llldef:
-            description: |-
-                Prints `| - - - Defiance`
-            tags: ["unused", "text"]
-        llldelinquency:
-            description: |-
-                Prints `| - - - Delinquency`
-            tags: ["text"]
-        llldom:
-            description: |-
-                Prints `| - - - Dominance` or `| - - - NPCName's Dominance` if provided
-
-                `<<llldom NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-                  - `"Robin"`: Displays "Confidence" instead
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        lllendear:
-            description: |-
-                Prints `| - - - Endearment`
-            tags: ["unused", "text"]
-        lllewdity:
-            description: |-
-                Prints `| - - Lewdity`
-            tags: ["unused", "text"]
-        lllfarm:
-            description: |-
-                Prints `| - - - Farm yield`
-            tags: ["unused"]
-        lllgrace:
-            description: |-
-                Prints `| - - - Grace` if proper tier is met
-
-                `<<lllgrace tier?>>`
-                - **tier**: `string` - rank source, pc ranks equal or above this will not change grace
-                  - `"monk"` | `"priest"` | `"bishop"`
-            parameters:
-                - '|+ "monk"|"priest"|"bishop"'
-            tags: ["text"]
-        lllhope:
-            description: |-
-                Prints `| - - - Hope`
-            tags: ["text"]
-        lllhunger:
-            description: |-
-                Prints `| - - - Hunger`
-            tags: ["text"]
-        lllimpatience:
-            description: |-
-                Prints `| - - - Impatience`
-            tags: ["unused", "text"]
-        lllinterest:
-            description: |-
-                Prints `| - - - Interest`
-            tags: ["unused", "text"]
-        lllksuspicion:
-            description: |-
-                Prints `| - - - Jealousy`
-            tags: ["text"]
-        llllewdity:
-            description: |-
-                Prints `| - - - Lewdity`
-            tags: ["unused", "text"]
-        llllove:
-            description: |-
-                Prints `| - - - Love` or `| - - - NPCName's Love` if provided
-
-                `<<llllove NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their love
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        llllust:
-            description: |-
-                Prints `| - - - Lust` or `| - - - NPCName's Lust` if provided
-
-                `<<llllust NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        lllobey:
-            description: |-
-                Prints `| - - - Obedience`
-            tags: ["text"]
-        lllove:
-            description: |-
-                Prints `| - - Love` or `| - - NPCName's Love` if provided
-
-                `<<lllove NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their love
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        lllpain:
-            description: |-
-                Prints `| - - - Pain`
-            tags: ["text"]
-        lllphysique:
-            description: |-
-                Prints `| - - - Physique`
-            tags: ["unused", "text"]
-        lllpound_status:
-            name: lllpound_status
-        lllpurity:
-            description: |-
-                Prints `| - - - Purity`
-            tags: ["text"]
-        lllreb:
-            description: |-
-                Prints `| - - - Rebelliousness`
-            tags: ["unused", "text"]
-        lllrespect:
-            description: |-
-                Prints `| - - - Respect`
-            tags: ["unused", "text"]
-        lllrtrauma:
-            description: |-
-                Prints `| - - - Robin's Trauma`, unless at min value
-
-                `<<lllrtrauma force?>>`
-                - **force** _optional_: `bool` - prints even if trauma is 0
-            parameters:
-                - "|+ bool"
-            tags: ["unused", "text"]
-        lllsaltiness:
-            description: |-
-                Prints `| - - - Saltiness`
-            tags: ["unused", "text"]
-        lllsarousal:
-            name: lllsarousal
-            tags: ["unused"]
-        lllsecurity:
-            description: |-
-                Prints `| - - - Security`
-            tags: ["unused", "text"]
-        lllshame:
-            description: |-
-                Prints `| - - - Shame`
-            tags: ["unused", "text"]
-        lllslust:
-            description: |-
-                Prints `| - - - Sydney's Lust`
-            tags: ["text"]
-        lllspain:
-            name: lllspain
-        lllspurity:
-            description: |-
-                Prints `| - - - Sydney's Purity` or `| + + + Sydney's Purity`
-            tags: ["unused", "text"]
-        lllstockholm:
-            description: |-
-                Prints `| - - - Stockholm Syndrome`
-            tags: ["text"]
-        lllstress:
-            description: |-
-                Prints `| - - - Stress`
-            tags: ["text"]
-        lllsuspicion:
-            description: |-
-                Prints `| - - - Suspicion`
-            tags: ["text"]
-        llltiredness:
-            description: |-
-                Prints `| - - - Fatigue`
-            tags: ["unused", "text"]
-        llltrauma:
-            description: |-
-                Prints `| - - - Trauma`
-            tags: ["text"]
-        llltrust:
-            description: |-
-                Prints `| - - - Trust`
-            tags: ["text"]
-        lllust:
-            description: |-
-                Prints `| - - Lust` or `| - - NPCName's Lust` if provided
-
-                `<<lllust NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        llobey:
-            description: |-
-                Prints `| - - Obedience`
-            tags: ["text"]
-        llove:
-            description: |-
-                Prints `| - Love` or `| - NPCName's Love` if provided
-
-                `<<llove NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their love
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        llpain:
-            description: |-
-                Prints `| - - Pain`
-            tags: ["text"]
-        llphysique:
-            description: |-
-                Prints `| - - Physique`
-            tags: ["unused", "text"]
-        llpound_status:
-            name: llpound_status
-        llpurity:
-            description: |-
-                Prints `| - - Purity`
-            tags: ["text"]
-        llreb:
-            description: |-
-                Prints `| - - Rebelliousness`
-            tags: ["unused", "text"]
-        llrespect:
-            description: |-
-                Prints `| - - Respect`
-            tags: ["text"]
-        llrtrauma:
-            description: |-
-                Prints `| - - Robin's Trauma`, unless at min value
-
-                `<<llrtrauma force?>>`
-                - **force** _optional_: `bool` - prints even if trauma is 0
-            parameters:
-                - "|+ bool"
-            tags: ["unused", "text"]
-        llsaltiness:
-            description: |-
-                Prints `| - - Saltiness`
-            tags: ["unused", "text"]
-        llsarousal:
-            name: llsarousal
-        llsecurity:
-            description: |-
-                Prints `| - - Security`
-            tags: ["unused", "text"]
-        llshame:
-            description: |-
-                Prints `| - - Shame`
-            tags: ["unused", "text"]
-        llslust:
-            description: |-
-                Prints `| - - Sydney's Lust`
-            tags: ["unused", "text"]
-        llspain:
-            name: llspain
-            tags: ["unused"]
-        llspurity:
-            description: |-
-                Prints `| - - Sydney's Purity` or `| + + Sydney's Purity`
-            tags: ["text"]
-        llstockholm:
-            description: |-
-                Prints `| - - Stockholm Syndrome`
-            tags: ["unused", "text"]
-        llstress:
-            description: |-
-                Prints `| - - Stress`
-            tags: ["text"]
-        llsuspicion:
-            description: |-
-                Prints `| - - Suspicion`
-            tags: ["text"]
-        lltiredness:
-            description: |-
-                Prints `| - - Fatigue`
-            tags: ["unused", "text"]
-        lltrauma:
-            description: |-
-                Prints `| - - Trauma`
-            tags: ["text"]
-        lltrust:
-            description: |-
-                Prints `| - - Trust`
-            tags: ["text"]
-        llust:
-            description: |-
-                Prints `| - Lust` or `| - NPCName's Lust` if provided
-
-                `<<llust NPCName?>>`
-                - **NPCName** _optional_: `string` - name to display as their lust
-            parameters:
-                - "|+ text"
-            tags: ["text"]
-        lmaths:
-            description: |-
-                Prints `| - Maths`
-            tags: ["text"]
-        loadAllFeats:
-            name: loadAllFeats
-        loadBoxIronmanCheater:
-            name: loadBoxIronmanCheater
-        loadBoxIronmanSafetyCancel:
-            name: loadBoxIronmanSafetyCancel
-        loadConfirm:
-            name: loadConfirm
-        loadconfirmcompat:
-            name: loadconfirmcompat
-            tags: ["unused"]
-        loadFiltersMenu:
-            name: loadFiltersMenu
-        loadingAllFeats:
-            name: loadingAllFeats
-        loadIronmanCheater:
-            name: loadIronmanCheater
-        loadIronmanSafetyCancel:
-            name: loadIronmanSafetyCancel
-        loadNPC:
-            description: |-
-                Loads persistent npc from named slot
-
-                See `<<saveNPC>>`, `<<updateNPC>>`, & `<<clearNPC>>`
-
-                `<<loadNPC slot name>>`
-                - **slot**: `number` - slot number to put npc data at (zero-based)
-                - **name**: `string` - key to load npc's data from
-                  - spaces should be avoided if possible
-            parameters:
-                - "number &+ string|text"
-        loadShopOptions:
-            name: loadShopOptions
-        loadTempHairStyle:
-            name: loadTempHairStyle
-        loadWarning:
-            name: loadWarning
-        loadwarningcompat:
-            name: loadwarningcompat
-        lobey:
-            description: |-
-                Prints `| - Obedience`
-            tags: ["text"]
-        lobsession:
-            name: lobsession
-        location:
-            name: location
-        location_text:
-            description: |-
-                Prints `$location` as noun
-
-                Out of date and underutilised. Consider refactoring
-            tags: ["text", "refactor"]
-        locker_suspicion:
-            description: |-
-                Adds suspicion of being the panty thief to pc's state
-
-                `$locker_suspicion` is a measure of how suspicious pc is in the eyes of the school where 0 is not (0-100)
-
-                `<<locker_suspicion change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        lockerclothes:
-            description: |-
-                Manages storage of handheld items in `lockers` location
-
-                See `<<lockers2>>` for second slot
-        lockerclothes2:
-            description: |-
-                Manages storage of handheld items in `lockers2` location
-
-                See `<<lockers>>` for first slot
-        lockerevent:
-            name: lockerevent
-        lockereventnext:
-            name: lockereventnext
-        lockereventpassages:
-            name: lockereventpassages
-        log:
-            name: log
-            tags: ["unused"]
-        loiter:
-            name: loiter
-        loveInterest:
-            name: loveInterest
-        loveInterestFunction:
-            name: loveInterestFunction
-        lowerhas:
-            description: |-
-                Prints plural/singular prose of has (have/has) for worn `"lower"` slot
-        lowerimg:
-            name: lowerimg
-        lowerintegrity:
-            name: lowerintegrity
-            tags: ["unused"]
-        lowerit:
-            description: |-
-                Prints an objective case pronoun (them/it) for worn `"lower"` slot
-        loweritis:
-            description: |-
-                Prints a pronoun/ present indicative pair (they are/it is) describing worn `"lower"` slot
-        loweron:
-            name: loweron
-        lowerplural:
-            description: |-
-                Prints a present indicative (are/is) for the worn `"lower"` slot
-        lowerruined:
-            description: |-
-                Destroys pc's lower slot clothing, whether worn or carried
-
-                `<<lowerruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        lowersend:
-            name: lowersend
-        lowerslither:
-            name: lowerslither
-            tags: ["unused"]
-        lowersteal:
-            name: lowersteal
-        lowerstrip:
-            name: lowerstrip
-        lowerthat:
-            description: |-
-                Prints plural/singular prose of that (those/that) for worn `"lower"` slot
-            tags: ["unused"]
-        lowerundress:
-            name: lowerundress
-        lowerwear:
-            name: lowerwear
-        lowerwet:
-            description: |-
-                Adds wetness to pc's lower clothing state
-
-                `$lowerwet` is a measure of how wet pc's lower clothing is where 0 is dry (0-200)
-
-                `$lowerwetstate` is a measure of effects due to wetness of pc's lower clothing where 0 is dry (0-3)
-
-                Over clothes don't take into account wetness. Consider refactoring to expand
-
-                `<<lowerwet change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-            tags: ["refactor"]
-        loxygen:
-            description: |-
-                Prints `| + Air`
-            tags: ["text"]
-        lpain:
-            description: |-
-                Prints `| - Pain`
-            tags: ["text"]
-        lphysique:
-            description: |-
-                Prints `| - Physique`
-            tags: ["unused", "text"]
-        lpound_status:
-            name: lpound_status
-        lpurity:
-            description: |-
-                Prints `| - Purity`
-            tags: ["text"]
-        lpursuit:
-            name: lpursuit
-        lreb:
-            description: |-
-                Prints `| - Rebelliousness`
-            tags: ["text"]
-        lrespect:
-            description: |-
-                Prints `| - Respect`
-            tags: ["text"]
-        lrtrauma:
-            description: |-
-                Prints `| - Robin's Trauma`, unless at min value
-
-                `<<lrtrauma force?>>`
-                - **force** _optional_: `bool` - prints even if trauma is 0
-            parameters:
-                - "|+ bool"
-            tags: ["unused", "text"]
-        lsaltiness:
-            description: |-
-                Prints `| - Saltiness`
-            tags: ["unused", "text"]
-        lsarousal:
-            name: lsarousal
-        lscience:
-            description: |-
-                Prints `| - Science`
-            tags: ["text"]
-        lsecurity:
-            description: |-
-                Prints `| - Security`
-            tags: ["text"]
-        lshame:
-            description: |-
-                Prints `| - Shame`
-            tags: ["unused", "text"]
-        lslust:
-            description: |-
-                Prints `| - Sydney's Lust`
-            tags: ["text"]
-        lspain:
-            name: lspain
-        lspurity:
-            description: |-
-                Prints `| - Sydney's Purity` or `| + Sydney's Purity`
-            tags: ["text"]
-        lstockholm:
-            description: |-
-                Prints `| - Stockholm Syndrome`
-            tags: ["unused", "text"]
-        lstress:
-            description: |-
-                Prints `| - Stress`
-            tags: ["text"]
-        lsuspicion:
-            description: |-
-                Prints `| - Suspicion`
-            tags: ["text"]
-        ltiredness:
-            description: |-
-                Prints `| - Fatigue`
-            tags: ["text"]
-        ltorch:
-            name: ltorch
-        ltrauma:
-            description: |-
-                Prints `| - Trauma`
-            tags: ["text"]
-        ltreasure:
-            description: |-
-                Prints `| Increases chance of finding treasure`
-            tags: ["unused", "text"]
-        ltrust:
-            description: |-
-                Prints `| - Trust`
-            tags: ["text"]
-        lubePrice:
-            name: lubePrice
-        luxuryTooltip:
-            name: luxuryTooltip
-        lwalnut:
-            name: lwalnut
-        lwood:
-            name: lwood
-            tags: ["unused"]
-        machine_actions:
-            name: machine_actions
-        machine_anal_disable:
-            name: machine_anal_disable
-        machine_arm_chains_disable:
-            name: machine_arm_chains_disable
-        machine_combat:
-            name: machine_combat
-        machine_damage:
-            name: machine_damage
-        machine_effects:
-            name: machine_effects
-        machine_end:
-            name: machine_end
-        machine_init:
-            name: machine_init
-        machine_leg_chains_disable:
-            name: machine_leg_chains_disable
-        machine_speed:
-            name: machine_speed
-        machine_state:
-            name: machine_state
-        machine_vaginal_disable:
-            name: machine_vaginal_disable
-        machine_violent_arms:
-            name: machine_violent_arms
-        machine_violent_legs:
-            name: machine_violent_legs
-        makeAbomination:
-            name: makeAbomination
-        makeAwareOfDetails:
-            name: makeAwareOfDetails
-        makeupPresets:
-            name: makeupPresets
-        makeupPresetsItem:
-            name: makeupPresetsItem
-        male:
-            name: male
-        maleChanceSplitControls:
-            name: maleChanceSplitControls
-        man:
-            name: man
-        man-combat:
-            name: man-combat
-        man-pursuit:
-            name: man-pursuit
-        man-stalk:
-            name: man-stalk
-        managePill:
-            name: managePill
-            tags: ["unused"]
-        managerLove:
-            name: managerLove
-        mancombat_choke:
-            name: mancombat_choke
-        mancombat_strangle:
-            name: mancombat_strangle
-        manend:
-            description: |-
-                Clears speech variables related to man combat
-
-                Superceded by `<<endcombat>>`
-        maninit:
-            name: maninit
-        mannequin:
-            name: mannequin
-        mannequinHairdresser:
-            name: mannequinHairdresser
-        manspeech:
-            name: manspeech
-        map:
-            name: map
-        mapLocations:
-            name: mapLocations
-        masochism:
-            description: |-
-                Adds masochism to pc's state
-
-                `$masochism` is a measure of pc's progression towards being masochistic where 0 is no progress (0-1,000)
-
-                `<<masochism change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        mason_actions:
-            name: mason_actions
-        mason_greet:
-            name: mason_greet
-        mason_greet_lust:
-            name: mason_greet_lust
-        masopain:
-            description: |-
-                Adds pain and corresponding arousal to pc's state regardless of whether they're masochistic
-
-                Balance is different than regular `<<pain>>` and cannot actually increase masochism. Consider refactoring
-
-                `<<masopain change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-            tags: ["refactor"]
-        master:
-            description: |-
-                Prints `master` or `mistress` depending on npc pronouns
-            tags: ["text"]
-        Master:
-            description: |-
-                Prints `Master` or `Mistress` depending on npc pronouns
-            tags: ["text"]
-        masturbationactions:
-            name: masturbationactions
-        masturbationAudienceIncrement:
-            description: |-
-                Generates new masturbation audience member if less than max
-
-                `<<masturbationAudienceIncrement type?>>`
-                - **type** _optional_: `string` - type of audience member to generate
-                  - `"student"`: audience member is a student
-            parameters:
-                - '|+ "student"'
-        masturbationbowl:
-            name: masturbationbowl
-        masturbationbowlimage:
-            name: masturbationbowlimage
-        masturbationControls:
-            name: masturbationControls
-        masturbationeffects:
-            name: masturbationeffects
-        masturbationSlimeControl:
-            name: masturbationSlimeControl
-        masturbationstart:
-            name: masturbationstart
-        masturbationStopControls:
-            name: masturbationStopControls
-        maths_skill_up_text:
-            name: maths_skill_up_text
-        mathsLessonEnd:
-            name: mathsLessonEnd
-        mathsLessonEvent:
-            name: mathsLessonEvent
-        mathsphone:
-            name: mathsphone
-        mathsprojectfinish:
-            name: mathsprojectfinish
-        mathsprojectstart:
-            name: mathsprojectstart
-        mathsskill:
-            name: mathsskill
-        mathsWhitneyAttendChance:
-            name: mathsWhitneyAttendChance
-        mathsWhitneyGropeOrgasm:
-            name: mathsWhitneyGropeOrgasm
-        maxDefaultActionSetsclamp:
-            name: maxDefaultActionSetsclamp
-            tags: ["unused"]
-        meditateoptions:
-            name: meditateoptions
-        meek:
-            name: meek
-        meetingattention:
-            name: meetingattention
-        meetingmolestactions:
-            name: meetingmolestactions
-        meetingpetactions:
-            name: meetingpetactions
-        menstruationCycle:
-            name: menstruationCycle
-        menstruationCycleState:
-            name: menstruationCycleState
-        mer:
-            name: mer
-        mereventend:
-            name: mereventend
-        merexposed:
-            name: merexposed
-            tags: ["unused"]
-        mergeNPCData:
-            name: mergeNPCData
-            tags: ["unused"]
-        merquick:
-            name: merquick
-        methodical_guard:
-            name: methodical_guard
-        middleruined:
-            description: |-
-                Destroys pc's upper and lower slot clothing, whether worn or carried
-        milk_amount:
-            description: |-
-                Adds milk to pc's milk supply
-
-                `$milk_amount` is the current pc milk amount remaining
-
-                `change` is technically optional. Consider refactoring
-
-                `<<milk_amount change?>>`
-                - **change**: `number` - +/- change to apply
-                  - if not provided, just updates milk effects
-            parameters:
-                - "number"
-        milking_img:
-            name: milking_img
-            tags: ["unused"]
-        milkTrait:
-            description: |-
-                Prints `| Milk Enthusiast` or `| Milk Addict` depending on pc's `$submissive`
-            tags: ["unused", "text"]
-        milkvolume:
-            description: |-
-                Adds milk to pc's milk capacity with appropriate checks
-
-                `$milkvolume` is the current maximum pc milk capacity (0-3,000)
-
-                `<<milkvolume change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        mines_crystals:
-            name: mines_crystals
-        mines_end:
-            name: mines_end
-        mines_init:
-            name: mines_init
-        mines_suspicion:
-            name: mines_suspicion
-        mines_suspicion_text:
-            name: mines_suspicion_text
-        mirror:
-            name: mirror
-        mirrorAppearance:
-            name: mirrorAppearance
-        mirrorAppearancePregnancy:
-            name: mirrorAppearancePregnancy
-        mirrorDebug:
-            name: mirrorDebug
-        mirrorDisplay:
-            name: mirrorDisplay
-        mirrorHair:
-            name: mirrorHair
-        mirrorhairControls:
-            name: mirrorhairControls
-        mirrorhairdisplay:
-            name: mirrorhairdisplay
-        mirrorhairdisplayClick:
-            name: mirrorhairdisplayClick
-        mirrorhairdisplayElements:
-            name: mirrorhairdisplayElements
-        mirrorhairdisplayFilter:
-            name: mirrorhairdisplayFilter
-        mirrorhairdisplayLinks:
-            name: mirrorhairdisplayLinks
-        mirrorhairdisplaySave:
-            name: mirrorhairdisplaySave
-        mirrorhairOptions:
-            name: mirrorhairOptions
-        mirrorHairSave:
-            name: mirrorHairSave
-        mirrorHairSaveOptions:
-            name: mirrorHairSaveOptions
-        mirrorHairTraitList:
-            name: mirrorHairTraitList
-        mirrorhairTraits:
-            name: mirrorhairTraits
-        mirrorMakeup:
-            name: mirrorMakeup
-        mirrorMakeupPart:
-            name: mirrorMakeupPart
-        mirrorMenu:
-            name: mirrorMenu
-        mirrormodel:
-            name: mirrormodel
-        mirrorSkin:
-            name: mirrorSkin
-        mirrorTransformation:
-            name: mirrorTransformation
-        mirrorwet:
-            name: mirrorwet
-        missionaryimg:
-            name: missionaryimg
-        mobileStats:
-            name: mobileStats
-        mobileStatsColor:
-            name: mobileStatsColor
-        mobileStatsColorAllure:
-            name: mobileStatsColorAllure
-        mobileStatsColorSet:
-            name: mobileStatsColorSet
-        mobileStatsColorSetIverted:
-            name: mobileStatsColorSetIverted
-        mobileStatsTime:
-            name: mobileStatsTime
-        modelfilter:
-            description: |-
-                Set model filter object
-
-                Will do a copy, so you can safely edit filter options
-
-                [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
-
-                `<<modelfilter filterName filter>>`
-                - **filterName**: `string` - filter name corresponding to #CanvasModel.options.filters
-                - **filter**: `object` - Filter object to set at filterName
-            parameters:
-                - text &+ bareword|var
-        modelfilterset:
-            description: |-
-                Set model filter object property
-
-                [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
-
-                `<<modelfilterset filterName propertyName property>>`
-                - **filterName**: `string` - filter name corresponding to #CanvasModel.options.filters
-                - **propertyName**: `string` - property name of filter to set
-                - **property**: `string|number` - property value
-            parameters:
-                - text &+ text &+ text|number
-        modelprepare-player-body:
-            name: modelprepare-player-body
-        modelprepare-player-clothes:
-            name: modelprepare-player-clothes
-        molestbusinit:
-            name: molestbusinit
-        molested:
-            name: molested
-        moleststat:
-            name: moleststat
-        molestTrait:
-            description: |-
-                Prints `| Graceful` or `| Plaything` depending on pc's `$submissive`
-            tags: ["unused", "text"]
-        moneyGain:
-            description: |-
-                Prints and adds money to pc's state
-
-                See `<<moneyGainDisplay>>` to print before actually gaining
-
-                See `<<printmoney>>` and `<<formatmoney>>` to just print raw amounts
-
-                Sets `_money_gain` to result of calculation
-
-                `<<moneyGain amount notExactly? stolen?>>`
-                - **amount**: `number` - £ to give to pc (decimals supported)
-                - **notExactly** _optional_: `bool` - apply random +/- 20% to amount
-                  - Defaults to `false`
-                - **stolen** _optional_: `bool` - stolen money scales with skulduggery and impacts crime
-                  - Defaults to `false`
-            parameters:
-                - "number |+ bool |+ bool"
-            tags: ["text", "temp"]
-        moneyGainDisplay:
-            description: |-
-                Prints a theoretically added amount of money but does not actually change pc's state
-
-                See `<<moneyGain>>` to actually gain
-
-                See `<<printmoney>>` and `<<formatmoney>>` to just print raw amounts
-
-                Sets `_money_gain` to result of calculation
-
-                Widget documentation and codebase regularly uses manual adjustments instead of `<<moneyGain>>`. Consider refactoring
-
-                Example:
-                ```
-                This example shows you <<moneyGainDisplay 100 true true>> that you could steal.
-
-                <<link [[Take it|Example Passage]]>><<moneyGain _money_gain false true>><</link>><<crime "petty">>
-                <br>
-                <<link [[Leave|Example Passage]]>><</link>>
-                ```
-
-                `<<moneyGainDisplay amount notExactly? stolen?>>`
-                - **amount**: `number` - £ to give to pc (decimals supported)
-                - **notExactly** _optional_: `bool` - apply random +/- 20% to amount
-                  - Defaults to `false`
-                - **stolen** _optional_: `bool` - stolen money scales with skulduggery and impacts crime
-                  - Defaults to `false`
-            parameters:
-                - "number |+ bool |+ bool"
-            tags: ["text", "temp", "refactor"]
-        monk:
-            description: |-
-                Prints `monk` or `nun` depending on active NPC pronoun
-
-                `<<monk modifier?>>`
-                - **modifier** _optional_: `string` - additional information to include
-                  - `"desc"`: include full NPC description before noun
-            parameters:
-                - '|+ "desc"'
-            tags: ["text"]
-        monkapo:
-            description: |-
-                Prints `monk's` or `nun's` depending on active NPC pronoun
-            tags: ["text"]
-        monks:
-            description: |-
-                Prints `monks` or `nuns` depending on active NPC pronoun
-            tags: ["text"]
-        monks_and_nuns:
-            description: |-
-                Prints `monks and nuns` unless player has mono-gendered the world
-
-                See `<<Monks_and_Nuns>>` and `<<brothers_and_sisters>>`
-            tags: ["text"]
-        Monks_and_Nuns:
-            description: |-
-                Prints `Monks and nuns` unless player has mono-gendered the world
-
-                See `<<monks_and_nuns>>` and `<<brothers_and_sisters>>`
-            tags: ["text"]
-        monster_passage:
-            description: |-
-                Sets `_monster_passage` to random gender chance
-
-                Doesn't do anything. Consider refactoring
-            tags: ["unused", "temp", "refactor"]
-        monsterSettings:
-            name: monsterSettings
-        monstrance_accost:
-            name: monstrance_accost
-        moor_binding_text:
-            name: moor_binding_text
-        moor_captive_actions:
-            name: moor_captive_actions
-        moor_captive_init:
-            name: moor_captive_init
-        moor_fox:
-            name: moor_fox
-        moor_hunt:
-            name: moor_hunt
-        moor_hunt_start:
-            name: moor_hunt_start
-        morgancaught:
-            name: morgancaught
-        morganhunt:
-            name: morganhunt
-        morganoptions:
-            name: morganoptions
-        morgantext:
-            name: morgantext
-        mouth:
-            name: mouth
-        mouth_sensitivity:
-            description: |-
-                Changes sensitivity of mouth by provided amount
-
-                `<<mouth_sensitivity amount>>`
-                - **amount**: `number` - change to sensitivity
-            parameters:
-                - "number"
-        mouthactionDifficulty:
-            name: mouthactionDifficulty
-        mouthactionDifficultyStruggle:
-            name: mouthactionDifficultyStruggle
-            tags: ["unused"]
-        mouthactionDifficultyTentacle:
-            name: mouthactionDifficultyTentacle
-        mouthActionInit:
-            name: mouthActionInit
-        mouthActionInitStruggle:
-            name: mouthActionInitStruggle
-        mouthActionInitTentacle:
-            name: mouthActionInitTentacle
-        mouthActions:
-            name: mouthActions
-        mouthActionsTentacle:
-            name: mouthActionsTentacle
-        mouthsensitivity:
-            name: mouthsensitivity
-        movealongdrainwater:
-            name: movealongdrainwater
-        moveChildren:
-            name: moveChildren
-            tags: ["unused"]
-        moveCreature:
-            name: moveCreature
-        mummy:
-            name: mummy
-        Mummy:
-            name: Mummy
-        museumAntiqueStatus:
-            name: museumAntiqueStatus
-        museumAntiqueText:
-            name: museumAntiqueText
-        museumdonate:
-            name: museumdonate
-        museumtalk:
-            name: museumtalk
-        namedNpcComments:
-            name: namedNpcComments
-        namedNpcPregnancy:
-            name: namedNpcPregnancy
-        neckejacstat:
-            name: neckejacstat
-        neckimg:
-            name: neckimg
-        neckon:
-            name: neckon
-            tags: ["unused"]
-        neckruined:
-            description: |-
-                Destroys pc's neck slot clothing, whether worn or carried
-
-                `<<neckruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        necksend:
-            name: necksend
-            tags: ["unused"]
-        NeckShop:
-            name: NeckShop
-        necksteal:
-            name: necksteal
-            tags: ["unused"]
-        neckstrip:
-            name: neckstrip
-        neckundress:
-            name: neckundress
-        neckwear:
-            name: neckwear
-        nectarfed:
-            name: nectarfed
-        nervously:
-            description: |-
-                Prints adverb of pc's willingness to engage in exhibitionism
-            tags: ["text"]
-        neutral:
-            name: neutral
-        neutralbreast:
-            name: neutralbreast
-        neutralgenitals:
-            name: neutralgenitals
-        new_npc_pillory:
-            name: new_npc_pillory
-        newNamedNpc:
-            description: |-
-                Generates new NPC object to add to old saves
-
-                Expects npc template object of the form
-                ```js
-                {
-                  nam: "Example", // Name of the New NPC
-                  title: "tester", // How the game should refer to them
-                  insecurity: "looks", // What the NPC is insecure about. skill, looks,
-                  adult: 1, // (optional) If the PC is an adult
-                  teen: 1, // (optional) If the PC is a teen
-                  <any>: <any>, // Additional properties to attach to NPC
-                }
-                ```
-            parameters:
-                - var|bareword &+ ...bareword
-        nexttext:
-            description: |-
-                Doesn't do anything, sort of
-
-                Next links have stopped receiving this widget for a while now. Consider refactoring
-            tags: ["legacy", "refactor"]
-        nightingale:
-            name: nightingale
-        nightingaleeventend:
-            name: nightingaleeventend
-        nightingaleexposed:
-            name: nightingaleexposed
-            tags: ["unused"]
-        nightingalequick:
-            name: nightingalequick
-        nightmareCheck:
-            name: nightmareCheck
-        nightmareEnd:
-            name: nightmareEnd
-        nightmareStart:
-            name: nightmareStart
-        nightmareWakeDifficulty:
-            name: nightmareWakeDifficulty
-        nipple:
-            name: nipple
-        nippleFlavorText:
-            name: nippleFlavorText
-        nipples:
-            name: nipples
-        nnpc_brother:
-            description: |-
-                Prints `brother` or `sister` for named NPC
-
-                `<<nnpc_Sister namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_Brother:
-            description: |-
-                Prints `Brother` or `Sister` for named NPC
-
-                `<<nnpc_Brother namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_gender:
-            description: |-
-                Prints `man` or `woman` for named NPC
-
-                See `<<nnpc_gender>>` for young version
-
-                `<<nnpc_gender namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_gendery:
-            description: |-
-                Prints `boy` or `girl` for named NPC
-
-                See `<<nnpc_gender>>` for old version
-
-                `<<nnpc_gendery namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_genitals:
-            description: |-
-                Prints `penis` or `vagina` based on named NPC's pronoun
-
-                Doesn't take into account herm or crossdressing NNPC. Consider refactoring
-
-                `<<nnpc_genitals namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text", "refactor"]
-        nnpc_girlfriend:
-            description: |-
-                Prints `boyfriend` or `girlfriend` for named NPC
-
-                `<<nnpc_girlfriend namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_he:
-            description: |-
-                Prints singular pronoun (he/she) for named NPC
-
-                `<<nnpc_he namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_He:
-            description: |-
-                Prints capitalised singular pronoun (He/She) for named NPC
-
-                `<<nnpc_He namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_hers:
-            description: |-
-                Prints possessive plural pronoun (his/hers) for named NPC
-
-                `<<nnpc_hers namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_hes:
-            description: |-
-                Prints contracted singular pronoun (he's/she's) for named NPC
-
-                `<<nnpc_hes namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_Hes:
-            description: |-
-                Prints capitalised contracted singular pronoun (He's/She's) for named NPC
-
-                `<<nnpc_Hes namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_him:
-            description: |-
-                Prints objective pronoun (him/her) for named NPC
-
-                `<<nnpc_her namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_Him:
-            description: |-
-                Prints capitalised objective pronoun (he/she) for named NPC
-
-                `<<nnpc_Him namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["unused", "text"]
-        nnpc_himself:
-            description: |-
-                Prints reflexive pronoun (himself/herself) for named NPC
-
-                `<<nnpc_himself namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_his:
-            description: |-
-                Prints possessive pronoun (his/her) for named NPC
-
-                `<<nnpc_his namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_His:
-            description: |-
-                Prints capitalised possessive pronoun (His/Her) for named NPC
-
-                `<<nnpc_His namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_lass:
-            description: |-
-                Prints `lad` or `lass` for named NPC
-
-                `<<nnpc_lass namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_title:
-            description: |-
-                Prints title of named NPC
-
-                `<<nnpc_title namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_Title:
-            description: |-
-                Prints capitalised title of named NPC
-
-                `<<nnpc_Title namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        nnpc_wife:
-            description: |-
-                Prints `husband` or `wife` for named NPC
-
-                `<<nnpc_wife namedNPCName>>`
-                - **namedNPCName**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-            tags: ["text"]
-        noClothingCheck:
-            name: noClothingCheck
-        noharass:
-            description: |-
-                Prints `| No chance of harassment`
-            tags: ["text"]
-        note:
-            description: |-
-                Prints `| Note` style note
-
-                `<<note text class>>`
-                - **text**: `string` - note to display
-                - **class**: `string` - HTML class property to attach to note
-            parameters:
-                - "string |+ string"
-            tags: ["text"]
-        nounderwearcheck:
-            description: |-
-                Checks if the PC is pantiless, but otherwise decent
-
-                Results in low level exhibitionism increases
-        npc:
-            name: npc
-        npc_attempt_sex:
-            name: npc_attempt_sex
-        npc_pillory:
-            name: npc_pillory
-        npc_pillory_abuse:
-            name: npc_pillory_abuse
-        npc_pillory_appearance:
-            name: npc_pillory_appearance
-        npc_pillory_detail:
-            name: npc_pillory_detail
-        npc_pillory_release_schedule:
-            name: npc_pillory_release_schedule
-        npc_submissive:
-            name: npc_submissive
-        npcAnus:
-            description: |-
-                Prints descriptor of active NPC's anus
-
-                `<<npcAnus npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to current `$index`
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        npcAttractionSettings:
-            name: npcAttractionSettings
-        npcattribute:
-            name: npcattribute
-        npcChest:
-            description: |-
-                Prints descriptor of active NPC's chest
-
-                `<<npcChest npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to current `$index`
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        npcClothesName:
-            name: npcClothesName
-        npcClothesText:
-            description: |-
-                Prints name of npc's clothes
-
-                `<<npcClothesText npcObject clothesSlot>>`
-                - **npcObject**: `object` - NPC object to check
-                - **clothesSlot**: `string` - slot on npc object to check
-                  - `"upper"` | `"lower"` | `"both"`
-            parameters:
-                - 'bareword|var &+ "upper"|"lower"|"both"'
-            tags: ["text"]
-        npcClothesType:
-            name: npcClothesType
-        npcCondomEquipImmediate:
-            name: npcCondomEquipImmediate
-        npcdamage:
-            name: npcdamage
-        npcexhibit:
-            name: npcexhibit
-        npcexpose:
-            name: npcexpose
-        npcexposetext:
-            description: |-
-                Prints description of active NPC undressing and revealing their genitals
-
-                Currently describes genitals of first active NPC always. Consider refactoring
-            tags: ["refactor"]
-        npcfence:
-            name: npcfence
-        npcgangstrip:
-            name: npcgangstrip
-        npcGenitalReaction:
-            description: |-
-                Prints a random player reaction to the sight of a very large or very small NPC penis
-
-                `<<npcGenitalReaction npcObject>>`
-                - **npcObject**: `object` - npc object to be checked
-            parameters:
-                - "var|bareword"
-        npcGenitals:
-            description: |-
-                Prints descriptor(s) of active NPC's full genitals
-
-                `<<npcAnus npcIndex? descType?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to current `$index`
-                - **descType** _optional_: `string` - type of description to provide
-                  - `"simple"`: Uses `<<npcPenisSimple>>` instead of full description
-            parameters:
-                - '|+ number |+ "simple"'
-            tags: ["text"]
-        npcgloryhole:
-            name: npcgloryhole
-        npcgrapplestripall:
-            name: npcgrapplestripall
-        npcHairColour:
-            description: |-
-                Prints hair colour of a named NPC
-
-                `<<npcHairColour namedNPCIndex>>`
-                - **namedNPCIndex**: `string` - named NPC name
-                  - %namedNPCDesc%
-            parameters:
-                - "%namedNPC%"
-        npchand:
-            name: npchand
-        npcHurt:
-            name: npcHurt
-            parameters:
-                - '|+ "Robin"'
-            tags: ["text", "refactor"]
-        npcidlegenitals:
-            name: npcidlegenitals
-        npcincr:
-            name: npcincr
-        npckiss:
-            name: npckiss
-        npcList:
-            name: npcList
-        npcNamed:
-            name: npcNamed
-        npcNamedUpdate:
-            description: |-
-                Updates $npcNamedVersion and underlying data from previous versions if necessary
-
-                Current version is 2
-        npcoral:
-            name: npcoral
-        npcPenis:
-            description: |-
-                Prints descriptor of active NPC's penis with full description
-
-                Does not handle strapons
-
-                See `<<npcPenisSimple>>` for no description
-
-                `<<npcPenis npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to current `$index`
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        npcPenisColored:
-            description: |-
-                Prints colored-descriptor of active NPC's penis with full description
-
-                See `<<npcPenisColored>>` for no description
-
-                `<<npcPenis npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to current `$index`
-            parameters:
-                - "|+ number"
-            tags: ["unused", "text"]
-        npcPenisSimple:
-            description: |-
-                Prints descriptor of active NPC's penis
-
-                See `<<npcPenis>>` for full description
-
-                `<<npcPenis npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to current `$index`
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        npcPregnancyUpdater:
-            name: npcPregnancyUpdater
-        npcrelationship:
-            name: npcrelationship
-        npcRevealText:
-            description: |-
-                Prints description of npc's genitals being revealed
-
-                Does not include ending punctuation
-
-                Example:
-                ```
-                The <<person>> <<npcUndressText _npc "lower" "self">>, <<npcRevealText _npc "lower">>.
-                ```
-
-                `<<npcUndressText npcObject clothesSlot mod?>>`
-                - **npcObject**: `object` - NPC object to check
-                - **clothesSlot**: `string` - slot on npc object to undress
-                  - `"upper"` | `"lower"` | `"both"`
-                - **mod**: `string` - how NPC should be referred to
-                  - `"name"`: NPC's Name or description if name is unknown
-                  - `"desc"`: NPC's description
-                  - `default`: `<<his>>`
-            parameters:
-                - 'bareword|var &+ "upper"|"lower"|"both" |+ "name"|"desc"'
-            tags: ["text"]
-        npcset:
-            name: npcset
-        npcSettings:
-            name: npcSettings
-        npcSettingsMenu:
-            name: npcSettingsMenu
-        NPCSettingsReset:
-            name: NPCSettingsReset
-        npcspank:
-            name: npcspank
-        npcspankgag:
-            name: npcspankgag
-        npcstrapon:
-            name: npcstrapon
-        npcstrip:
-            name: npcstrip
-        npcstripall:
-            name: npcstripall
-        npcUndressText:
-            description: |-
-                Prints description of npc undressing
-
-                Does not actually change any state of their clothing
-
-                Example:
-                ```
-                You try to <<npcUndressText _npc _clothesTarget>>, but this is just an example
-                ```
-
-                `<<npcUndressText npcObject clothesSlot selfUndress?>>`
-                - **npcObject**: `object` - NPC object to check
-                - **clothesSlot**: `string` - slot on npc object to undress
-                  - `"upper"` | `"lower"` | `"both"`
-                - **selfUndress**: `bool` - NPC is undressing themselves (truthy)
-                  - Defaults to `false`
-            parameters:
-                - 'bareword|var &+ "upper"|"lower"|"both" |+ bool|"self"'
-            tags: ["text"]
-        npcVagina:
-            description: |-
-                Prints descriptor of active NPC's vagina
-
-                `<<npcVagina npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to current `$index`
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        NPCVirginityTakenByOther:
-            name: NPCVirginityTakenByOther
-        NPCvirginitywarning:
-            description: |-
-                Prints warning for named npc if virginity is available to lose
-
-                `<<NPCvirginitywarning namedNPCName virginityType>>`
-                - **namedNPCName**: `string` - name of named NPC
-                  - %namedNPCDesc%
-                - **virginityType**: `string` - type of virginity to check and warn
-                  - %virginityTypesDesc%
-            parameters:
-                - "%namedNPC% &+ %virginityTypes%"
-        nude_text:
-            description: |-
-                Prints general exposure state as adjective
-
-                Example:
-                ```
-                Everyone sees you are just a <<nude_text>> example.
-                ```
-
-                Out of date and underutilised. Consider refactoring
-            tags: ["text", "refactor"]
-        nudity:
-            description: |-
-                Prints description of pc's nudity
-
-                Example:
-                ```
-                You feel them ogle your <<nudity>>.
-                ```
-
-                Does not take into account over_top or over_bottom. Consider refactoring
-            tags: ["refactor", "text"]
-        number:
-            description: |-
-                Prints a number as spelled-out cardinal form (first, second, etc)
-
-                Numbers outside of 100 are not spelled-out for style reasons
-
-                `<<number numberAsInt output>>`
-                - **numberAsInt**: `number` - number to convert
-                - **output** _optional_: `string` - how to output text
-                  - `default`: Prints output
-                  - `"silent"`: Stores output in `_text_output`
-            parameters:
-                - 'number |+ "silent"'
-            tags: ["text", "temp"]
-        Number:
-            description: |-
-                Prints a number as capitalised spelled-out cardinal form (First, Second, etc)
-
-                Numbers outside of 100 are not spelled-out for style reasons
-
-                `<<Number numberAsInt>>`
-                - **numberAsInt**: `number` - number to convert
-            parameters:
-                - "number"
-            tags: ["text"]
-        numberify:
-            name: numberify
-        numberpool:
-            name: numberpool
-            tags: ["unused"]
-        numberslider:
-            name: numberslider
-        nurseinit:
-            name: nurseinit
-        office_manager:
-            name: office_manager
-        officeafterhours:
-            name: officeafterhours
-        officebusinesshours:
-            name: officebusinesshours
-        officecheckcomplaints:
-            name: officecheckcomplaints
-        officecomplaintsextreme:
-            name: officecomplaintsextreme
-        officecomplaintshigh:
-            name: officecomplaintshigh
-        officecomplaintslow:
-            name: officecomplaintslow
-        officecomplaintsmedium:
-            name: officecomplaintsmedium
-        officeliftdescend:
-            name: officeliftdescend
-        officepassout:
-            name: officepassout
-        officestreakactions:
-            name: officestreakactions
-        officestreakhide:
-            name: officestreakhide
-        officeupdatecomplaints:
-            name: officeupdatecomplaints
-        ohe:
-            description: |-
-                Prints singular pronoun for current npc regardless of being a beast (`<<bhe>>`) or man (`<<he>>`)
-
-                Eligible for deprecation. Consider refactoring this functionality into `<<he>>`
-            tags: ["text", "refactor"]
-        oldWardrobeList:
-            description: |-
-                Printss provided slots of wardrobe
-
-                `<<oldWardrobeList slot showType?>>`
-                - **slot**: `string` - clothing slot to enumerate from current wardrobe
-                  - %clothesTypesDesc%
-                - **showType** _optional_: `string` - outfits or non-outfits
-                  - Defaults to showing both
-                  - `"outfits"` | `"non-outfits"`
-            parameters:
-                - '%clothesTypes% |+ "outfits"|"non-outfits"'
-            tags: ["dom", "legacy"]
-        oldWardrobeListDisplay:
-            deprecatedSuggestions:
-                - wardrobeContents
-            description: |-
-                Enumerates and prints wardrobe contents
-            tags: ["dom", "legacy"]
-        oldWardrobeMinorOptions:
-            description:
-                - Enumerates and prints alternative wear options for current clothing
-            tags: ["dom", "legacy"]
-        openinghours:
-            description: |-
-                Prints `A sign reads "Opening hours: 8:00 - 21:00"` in user set time format
-            tags: ["text"]
-        optionsadvanced:
-            name: optionsadvanced
-        optionsExportImport:
-            name: optionsExportImport
-        optionsgeneral:
-            name: optionsgeneral
-        optionsperformance:
-            name: optionsperformance
-        optionstheme:
-            name: optionstheme
-        optionsThemeDefault:
-            name: optionsThemeDefault
-        oral:
-            name: oral
-        oraldifficulty:
-            description: |-
-                Prints color-coded adjective of oral action difficulty in current combat
-            tags: ["text"]
-        oralejacstat:
-            name: oralejacstat
-        oralnew:
-            name: oralnew
-        oralpassage:
-            name: oralpassage
-        oralskill:
-            description: |-
-                Adds oral skill to pc's state
-
-                `$oralskill` is a measure of pc's proficiency giving oral where 0 is awkward (0-1,000)
-
-                `<<oralskill change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        oralskilluse:
-            name: oralskilluse
-        oralstat:
-            name: oralstat
-        oralswallownew:
-            name: oralswallownew
-        oraltext:
-            description: |-
-                Prints color-coded adjective of active oral skill usage
-            tags: ["text"]
-        oralvirginitywarning:
-            description: |-
-                Prints `This action will take your oral virginity.` if oral virginity can still be lost
-
-                Takes combat state into account to display starting pipe `| `
-            tags: ["text"]
-        orgasm:
-            name: orgasm
-        orgasmbeach:
-            name: orgasmbeach
-        orgasmbog:
-            name: orgasmbog
-        orgasmcount:
-            name: orgasmcount
-        orgasmforest:
-            name: orgasmforest
-        orgasmHourlyRecovery:
-            name: orgasmHourlyRecovery
-        orgasmLocation:
-            name: orgasmLocation
-        orgasmstage:
-            name: orgasmstage
-        orgasmstat:
-            name: orgasmstat
-        orgasmstreet:
-            name: orgasmstreet
-        orgasmTrait:
-            description: |-
-                Prints `| Hedonist` or `| Orgasm Addict` depending on pc's `$submissive`
-            tags: ["unused", "text"]
-        orphanageWard:
-            name: orphanageWard
-        orphanageWardOptions:
-            name: orphanageWardOptions
-        otherOutfitChecks:
-            name: otherOutfitChecks
-        othersFeelings:
-            name: othersFeelings
-        outergoo:
-            name: outergoo
-        outfit:
-            description: |-
-                Prints name of middle clothing layer as outfit or if it was an outfit
-
-                Also sets `$stripset` to determine if both layers should be removed together
-            tags: ["text"]
-        outfitChecks:
-            description: |-
-                Sets temporary variables (as bools) according to state of pc's dress
-
-                - `_underOutfit`:  under clothes are complete outfit
-                T.middleOutfit = middle clothes are complete outfit
-                T.overOutfit = over clothes are complete outfit
-
-                T.underNaked = under clothes are completely naked
-                T.middleNaked = middle clothes are completely naked
-                T.overNaked = over clothes are completely naked
-                T.topless = top clothes are essentially naked
-                T.bottomless = bottom clothes are completely naked
-                T.fullyNaked = all clothes are completely naked
-            tags: ["temp"]
-        outfitChecksExposed:
-            name: outfitChecksExposed
-        outfitEditor:
-            name: outfitEditor
-        outfitEditorDefaultFilter:
-            name: outfitEditorDefaultFilter
-        outfitEditorFilter:
-            name: outfitEditorFilter
-        outfitEditorItem:
-            name: outfitEditorItem
-        outfitEditorItemClothes:
-            name: outfitEditorItemClothes
-        outfitEditorItemColour:
-            name: outfitEditorItemColour
-        outfitEditorList:
-            name: outfitEditorList
-        outfitEditorPageControls:
-            name: outfitEditorPageControls
-        outfitEditorPageSetup:
-            name: outfitEditorPageSetup
-        outfitEditorUpdateFilter:
-            name: outfitEditorUpdateFilter
-        outfiton:
-            name: outfiton
-            tags: ["unused"]
-        OutfitShop:
-            name: OutfitShop
-        overheadon:
-            name: overheadon
-            tags: ["unused"]
-        overheadruined:
-            description: |-
-                Destroys pc's over_head slot clothing, whether worn or carried
-
-                `<<overheadruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        overheadsend:
-            name: overheadsend
-            tags: ["unused"]
-        overheadsteal:
-            name: overheadsteal
-            tags: ["unused"]
-        overheadstrip:
-            name: overheadstrip
-            tags: ["unused"]
-        overheadundress:
-            name: overheadundress
-        overheadwear:
-            name: overheadwear
-            tags: ["unused"]
-        overlayReplace:
-            name: overlayReplace
-        overlower:
-            name: overlower
-            tags: ["unused"]
-        overlowerhas:
-            description: |-
-                Prints plural/singular prose of has (have/has) for worn `"over_lower"` slot
-            tags: ["unused"]
-        overlowerimg:
-            name: overlowerimg
-        overlowerintegrity:
-            name: overlowerintegrity
-            tags: ["unused"]
-        overlowerit:
-            description: |-
-                Prints an objective case pronoun (them/it) for worn `"over_lower"` slot
-        overloweritis:
-            description: |-
-                Prints a pronoun/ present indicative pair (they are/it is) describing worn `"over_lower"` slot
-        overloweron:
-            name: overloweron
-            tags: ["unused"]
-        overlowerplural:
-            description: |-
-                Prints a present indicative (are/is) for the worn `"over_lower"` slot
-        overlowerruined:
-            description: |-
-                Destroys pc's over_lower slot clothing, whether worn or carried
-
-                `<<overlower noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        overlowersend:
-            name: overlowersend
-            tags: ["unused"]
-        overlowersteal:
-            name: overlowersteal
-            tags: ["unused"]
-        overlowerstrip:
-            name: overlowerstrip
-        overlowerthat:
-            description: |-
-                Prints plural/singular prose of that (those/that) for worn `"over_lower"` slot
-        overlowerundress:
-            name: overlowerundress
-        overlowerwear:
-            name: overlowerwear
-        OverOutfitShop:
-            name: OverOutfitShop
-        overpulldown:
-            description: |-
-                Prints verb of player pulling lower clothing into an exposed state
-
-                Does not actually set clothing into exposed or pulled state. Consider refactoring
-            tags: ["unused", "text", "refactor"]
-        overpullsdown:
-            description: |-
-                Prints plural verb of player pulling lower clothing into an exposed state
-
-                Does not actually set clothing into exposed or pulled state. Consider refactoring
-            tags: ["unused", "text", "refactor"]
-        overpullsup:
-            description: |-
-                Prints verb of player pulling upper clothing into an exposed state
-
-                Does not actually set clothing into exposed or pulled state. Consider refactoring
-            tags: ["unused", "text", "refactor"]
-        overpullup:
-            description: |-
-                Prints verb of player pulling upper clothing into an exposed state
-
-                Does not actually set clothing into exposed or pulled state. Consider refactoring
-            tags: ["unused", "text", "refactor"]
-        overruined:
-            description: |-
-                Destroys pc's over_upper and over_lower slot clothing, whether worn or carried
-
-                `<<overruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        OverTopShop: #undeclared
-            name: OverTopShop
-        overupperhas:
-            description: |-
-                Prints plural/singular prose of has (have/has) for worn `"over_upper"` slot
-            tags: ["unused"]
-        overupperimg:
-            name: overupperimg
-        overupperintegrity:
-            name: overupperintegrity
-            tags: ["unused"]
-        overupperit:
-            description: |-
-                Prints an objective case pronoun (them/it) for worn `"over_upper"` slot
-        overupperitis:
-            description: |-
-                Prints a pronoun/ present indicative pair (they are/it is) describing worn `"over_upper"` slot
-            tags: ["unused"]
-        overupperon:
-            name: overupperon
-            tags: ["unused"]
-        overupperplural:
-            description: |-
-                Prints a present indicative (are/is) for the worn `"over_upper"` slot
-        overupperruined:
-            description: |-
-                Destroys pc's over_upper slot clothing, whether worn or carried
-
-                `<<overupperruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        overuppersend:
-            name: overuppersend
-            tags: ["unused"]
-        overuppersteal:
-            name: overuppersteal
-            tags: ["unused"]
-        overupperstrip:
-            name: overupperstrip
-        overupperthat:
-            description: |-
-                Prints plural/singular prose of that (those/that) for worn `"over_upper"` slot
-        overupperundress:
-            name: overupperundress
-        overupperwear:
-            name: overupperwear
-        overworld_nickname:
-            description: |-
-                Prints pc's nickname used in the overworld
-
-                See `<<underworld_nickname>>`
-
-                `<<overworld_nickname textTransform>>`
-                - **textTransform**: `string` - transformation to apply to text before printing
-                  - `"cap"`: Capitalise
-            parameters:
-                - '|+ "cap"'
-            tags: ["text"]
-        overwriteoutfit:
-            name: overwriteoutfit
-        oxford:
-            name: oxford
-        oxfordeventend:
-            name: oxfordeventend
-        oxfordexposed:
-            name: oxfordexposed
-            tags: ["unused"]
-        oxfordquick:
-            name: oxfordquick
-        oxygen:
-            name: oxygen
-        oxygencaption:
-            name: oxygencaption
-        oxygenrefresh:
-            name: oxygenrefresh
-        pain:
-            description: |-
-                Adds pain to pc's state
-
-                `$pain` is pc's pain amount where 0 is not-in-pain (0-200)
-
-                `<<pain change modifier?>>`
-                - **change**: `number` - +/- change to apply
-                - **modifier** _optional_: `number` - multiplier mod to apply to change
-                  - Defaults to `4`
-            parameters:
-                - "number |+ number"
-        paincaption:
-            name: paincaption
-        painclamp:
-            name: painclamp
-        panties:
-            description: |-
-                Prints descriptor of active NPC's inner_lower clothing
-
-                See `<<bra>>` for inner_upper clothing or `<<skirt>>` for lower clothing
-
-                See `<<npcClothesText>>` for full name of clothes
-            tags: ["text"]
-        pantsable:
-            description: |-
-                Checks if pc's lower clothing can be pulled down/ flipped up
-
-                `_pantsable` will be set to 0 or 1 if lower can be pulled down
-                `_upskirt` will be set to 0 or 1 if lower can be flipped up
-            tags: ["temp"]
-        pantsdowncomments:
-            name: pantsdowncomments
-        pantsdownevents:
-            name: pantsdownevents
-        pantsdowngender:
-            name: pantsdowngender
-        pantsdownlewd:
-            name: pantsdownlewd
-        pantsdownscene:
-            name: pantsdownscene
-        pantsdowntime:
-            name: pantsdowntime
-        parasite:
-            name: parasite
-        parasiteinit:
-            name: parasiteinit
-        park:
-            name: park
-        parkeventend:
-            name: parkeventend
-        parkex1:
-            name: parkex1
-        parkex2:
-            name: parkex2
-        parkex3:
-            name: parkex3
-        parkexposed:
-            name: parkexposed
-            tags: ["unused"]
-        parkquick:
-            name: parkquick
-        parkrun:
-            name: parkrun
-        pass:
-            description: |-
-                Advances time by an amount
-
-                `<<pass timeToPass units?>>`
-                - **timeToPass**: `number` - number of units
-                - **units** _optional_: `string` - units of number
-                  - `"sec"` | `"seconds"` | `"min"` | `"mins"` | `"minute"` | `"minutes"` | `"hour"` | `"hours"` | `"day"` | `"days"` | `"week"` | `"weeks"`
-                  - Defaults to `"min"`
-            parameters:
-                - 'number |+ "sec"|"seconds"|"min"|"mins"|"minute"|"minutes"|"hour"|"hours"|"day"|"days"|"week"|"weeks"'
-        passagestrip:
-            description: |-
-                Strips player and prints a paragraph of description of the sequence
-
-                `<<passagestrip limit?>>`
-                - **limit** _optional_: `string` - maximum layer to strip down to
-                  - `"undies"`
-            parameters:
-                - '|+ "undies"'
-        passiveStudy:
-            name: passiveStudy
-        passout:
-            description: |-
-                Applies stat changes from passing out and ruffles hair
-        passout_flats:
-            description: |-
-                Passes out and prints links for players in at the Flats
-            tags: ["links"]
-        passout_mines:
-            description: |-
-                Passes out and prints links for players in the Mines
-            tags: ["links"]
-        passout_moor:
-            description: |-
-                Passes out and prints links for players in the Moor
-            tags: ["links"]
-        passout_prison:
-            description: |-
-                Passes out and prints links for players in Prison
-            tags: ["links"]
-        passout_rut:
-            description: |-
-                Passes out and prints links for players in the Prison Rut
-            tags: ["links"]
-        passoutadultshop:
-            description: |-
-                Passes out and prints links for players in the Adult Shop
-            tags: ["links"]
-        passoutalley:
-            description: |-
-                Passes out and prints links for players in the Alley
-            tags: ["links"]
-        passoutarcade:
-            description: |-
-                Passes out and prints links for players in the Arcade
-            tags: ["links"]
-        passoutasylum:
-            description: |-
-                Passes out and prints links for players in the Asylum
-            tags: ["links"]
-        passoutbeach:
-            description: |-
-                Passes out and prints links for players at the Beach
-            tags: ["links"]
-        passoutbog:
-            description: |-
-                Passes out and prints links for players in the Bog
-            tags: ["links"]
-        passoutbus:
-            description: |-
-                Passes out and prints links for players on the Bus
-            tags: ["links"]
-        passoutcatacombs:
-            description: |-
-                Passes out and prints links for players in the Catacombs
-            tags: ["links"]
-        passoutcave:
-            description: |-
-                Passes out and prints links for players in the Seaside Cave
-            tags: ["links"]
-        passoutcompound:
-            description: |-
-                Passes out and prints links for players at the Compound
-            tags: ["links"]
-        passoutdrain:
-            description: |-
-                Passes out and prints links for players in the Storm Drain
-            tags: ["links"]
-        passoutfarmroad:
-            description: |-
-                Passes out and prints links for players along the Farm Road
-            tags: ["links"]
-        passoutforest:
-            description: |-
-                Passes out and prints links for players in the Forest
-            tags: ["links"]
-        passouthome:
-            description: |-
-                Passes out and prints links for players at the Orphanage
-            tags: ["links"]
-        passouthospital:
-            description: |-
-                Passes out and prints links for players in the Hospital
-            tags: ["links"]
-        passoutlake:
-            description: |-
-                Passes out and prints links for players at the Lake
-            tags: ["links"]
-        passoutpark:
-            description: |-
-                Passes out and prints links for players in the Park
-            tags: ["links"]
-        passoutpirates:
-            description: |-
-                Passes out and prints links for players on the Pirate Ship
-            tags: ["links"]
-        passoutremy:
-            description: |-
-                Passes out and prints links for players in Remy's hands
-            tags: ["links"]
-        passoutsea:
-            description: |-
-                Passes out and prints links for players at Sea
-            tags: ["links"]
-        passoutshop:
-            description: |-
-                Passes out and prints links for players in the Shopping Centre
-            tags: ["links"]
-        passoutstreet:
-            description: |-
-                Passes out and prints links for players on the Street
-            tags: ["links"]
-        passouttemple:
-            description: |-
-                Passes out and prints links for players in the Temple (Sydney does not rescue)
-            tags: ["links"]
-        passouttempleSydney:
-            description: |-
-                Passes out and prints links for players in the Temple (Sydney rescues)
-            tags: ["links"]
-        passouttentacleworld:
-            description: |-
-                Passes out and prints links for players in the Tentacle World
-            tags: ["links"]
-        passouttrash:
-            description: |-
-                Passes out and prints links for players in the Landfill
-            tags: ["links"]
-        passPercent:
-            description: |-
-                Prints `| X% pass chance`
-
-                `<<passPercent percentAsInt>>`
-                - **percentAsInt**: `number` - percent to output
-                  `0-100`
-            parameters:
-                - "number"
-            tags: ["text"]
-        passTimeUntil:
-            description: |-
-                Advances time until hours:minutes exactly
-
-                `<<passTimeUntil hour minute?>>`
-                - **hour**: `number` - hour to advance to
-                - **minute** _optional_: `number` - minute in hour to advance to
-                  - Defaults to `0`
-            parameters:
-                - "number |+ number"
-        pbhairinit:
-            name: pbhairinit
-        pcFarmBirth:
-            name: pcFarmBirth
-        pcpetname:
-            description: |-
-                Print's named NPC's pet name for pc's
-
-                See `<<pcPetname>>` for capitalised version
-
-                Uses too many versions of NPC's names as inputs. Consider refactoring to use just one
-
-                `<<pcpetname npcName npcEmotionMod?>>`
-                - **npcName**: `string` - example kind to output
-                  - `"Avery"` | `"Wraith"`
-                - **npcEmotionMod** _optional_: `string` - npc's emotional intention when using this pet name
-                  - `"angry"` | `"nice`
-            parameters:
-                - '"Avery"|"Wraith"'
-                - '"Wraith" |+ "angry"|"nice"'
-            tags: ["text"]
-        pcPetname:
-            description: |-
-                Print's capitalised prose of named NPC's pet name for pc's
-
-                See `<<pcpetname>>` for non-capitalised version
-
-                Does not take into account second parameter of base widget. Consider refactoring
-
-                `<<pcPetname npcName>>`
-                - **npcName**: `string` - example kind to output
-                  - `"Avery"` | `"Wraith"`
-            parameters:
-                - '"Avery"|"Wraith"'
-            tags: ["text", "refactor"]
-        pcPregnancyRevealToAlex:
-            name: pcPregnancyRevealToAlex
-        penetrationPainCalculate:
-            name: penetrationPainCalculate
-        peniledifficulty:
-            description: |-
-                Prints color-coded adjective of penile action difficulty in current combat
-            tags: ["text"]
-        penileejacstat:
-            name: penileejacstat
-        penileskill:
-            description: |-
-                Adds penile skill to pc's state
-
-                `$penileskill` is a measure of pc's proficiency using their penis where 0 is awkward (0-1,000)
-
-                `<<penileskill change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        penileskilluse:
-            name: penileskilluse
-        penilestat:
-            name: penilestat
-        peniletext:
-            description: |-
-                Prints color-coded adjective of active penile skill usage
-            tags: ["text"]
-        penilevirginitywarning:
-            description: |-
-                Prints `This action will deflower you` if penile virginity can still be lost and not protected by strap-on
-
-                Takes combat state into account to display starting pipe `| `
-            tags: ["text"]
-        penis:
-            name: penis
-        penis_lube_amount:
-            description: |-
-                Prints the amount of lube around player penis
-
-                Relies on `_penis_lube_amount` being set already
-
-                See `<<penis_lube_text>>`
-            tags: ["text", "temp"]
-        penis_lube_text:
-            description: |-
-                Prints qualified description of lube around the penis prior to penetration
-
-                Example:
-                ```
-                <<penis_lube_text>> the example can be performed without a problem.
-                ```
-            tags: ["text"]
-        penisactionDifficulty:
-            name: penisactionDifficulty
-        penisactionDifficultyTentacle:
-            name: penisactionDifficultyTentacle
-        penisActionInit:
-            name: penisActionInit
-        penisActionInitStruggle:
-            name: penisActionInitStruggle
-        penisActionInitTentacle:
-            name: penisActionInitTentacle
-        penisActions:
-            name: penisActions
-        penisActionsTentacle:
-            name: penisActionsTentacle
-        penises:
-            name: penises
-        penisinit:
-            name: penisinit
-        penisinspection:
-            name: penisinspection
-        penisinspection2:
-            name: penisinspection2
-        penisinspectionstudents:
-            name: penisinspectionstudents
-        penisraped:
-            name: penisraped
-        penisremark:
-            name: penisremark
-            tags: ["unused"]
-        Penisremark:
-            name: Penisremark
-            tags: ["unused"]
-        penisremarkcomma:
-            name: penisremarkcomma
-            tags: ["unused"]
-        Penisremarkcomma:
-            name: Penisremarkcomma
-            tags: ["unused"]
-        penisremarkcommaquote:
-            name: penisremarkcommaquote
-            tags: ["unused"]
-        Penisremarkcommaquote:
-            name: Penisremarkcommaquote
-            tags: ["unused"]
-        penisremarkquote:
-            name: penisremarkquote
-            tags: ["unused"]
-        Penisremarkquote:
-            name: Penisremarkquote
-        penisremarkstop:
-            name: penisremarkstop
-            tags: ["unused"]
-        Penisremarkstop:
-            name: Penisremarkstop
-            tags: ["unused"]
-        penisremarkstopquote:
-            name: penisremarkstopquote
-            tags: ["unused"]
-        Penisremarkstopquote:
-            name: Penisremarkstopquote
-        penisSimple:
-            description: |-
-                Prints `strap-on` or `penis` based on pc's active penis
-        penissize:
-            name: penissize
-        people:
-            description: |-
-                Prints `men and women` unless player has mono-gendered the world
-
-                See `<<peopley>>`
-            tags: ["text"]
-        peopley:
-            description: |-
-                Prints `boys and girls` unless player has mono-gendered the world
-
-                See `<<people>>`
-            tags: ["text"]
-        peppersprays:
-            name: peppersprays
-        perNPCSettingsMenu:
-            name: perNPCSettingsMenu
-        person:
-            name: person
-        person_dance:
-            name: person_dance
-        person1:
-            name: person1
-        person2:
-            name: person2
-        person3:
-            name: person3
-        person4:
-            name: person4
-        person5:
-            name: person5
-        person6:
-            name: person6
-        personname:
-            name: personname
-        personpenis:
-            name: personpenis
-        persons:
-            name: persons
-        personselect:
-            name: personselect
-        personsimple:
-            name: personsimple
-        persony:
-            description: |-
-                Prints `boy` or `girl` randomly based on world gender distribution
-
-                Extremely different behavior to `<<person>>`. Consider refactoring
-            tags: ["text", "refactor"]
-        PetShopBoughtItem:
-            name: PetShopBoughtItem
-        pharmnurseinit:
-            name: pharmnurseinit
-            tags: ["unused"]
-        pheat:
-            name: pheat
-        pher:
-            description: |-
-                Prints singular possessive pronoun of pc (her/his)
-
-                See `<<pHer>>` for capitalised prose, or `<<phers>>` as predicate adjective
-            tags: ["text"]
-        pHer:
-            description: |-
-                Prints capitalised singular possessive pronoun of pc (Her/His)
-
-                See `<<pher>>` for uncapitalised prose
-            tags: ["text"]
-        phers:
-            description: |-
-                Prints singular possessive pronoun as predicate adjective of pc (his/hers)
-
-                See `<<pher>>` for general possessive pronoun
-            tags: ["text"]
-        pherself:
-            description: |-
-                Prints singular objective pronoun as reflexive form of pc (herself/himself)
-
-                See `<<pHerself>>` for capitalised prose
-            tags: ["text"]
-        pHerself:
-            description: |-
-                Prints capitalised singular objective pronoun as reflexive form of pc (Herself/Himself)
-
-                See `<<pherself>>` for uncapitalised prose
-            tags: ["unused", "text"]
-        phim:
-            description: |-
-                Prints singular objective pronoun as reflexive form of pc (her/him)
-
-                See `<<pHim>>` for capitalised prose
-            tags: ["text"]
-        pHim:
-            description: |-
-                Prints capitalised singular objective pronoun as reflexive form of pc (Her/Him)
-
-                See `<<phim>>` for uncapitalised prose
-            tags: ["text"]
-        photo_end:
-            name: photo_end
-        photo_evidence_upload:
-            name: photo_evidence_upload
-        physicalAdjustments:
-            name: physicalAdjustments
-        physicalAdjustmentsInit:
-            name: physicalAdjustmentsInit
-        physique:
-            name: physique
-        physique_loss:
-            name: physique_loss
-        physiquedifficulty:
-            name: physiquedifficulty
-        pickupSexToy:
-            name: pickupSexToy
-        pillory_type:
-            name: pillory_type
-        pillorypeniscomment:
-            name: pillorypeniscomment
-        pinchEnd:
-            description: |-
-                Restores the values frozen by `<<pinchStart>>`, keeping the player's progress of reading the book
-
-                If the player does not currently have the book, either stolen or rented, also removes Pinch from persistent NPCs
-        pinchhe:
-            name: pinchhe
-        pinchHe:
-            name: pinchHe
-        pinchhim:
-            name: pinchhim
-        pinchhis:
-            name: pinchhis
-        pinchHis:
-            name: pinchHis
-        pinchStart:
-            description: |-
-                Freezes the story variables, then modifies weather and time
-        pirate_attack_end:
-            description: |-
-                Unsets pirate attack variables to end the event
-        pirate_attack_init:
-            description: |-
-                Sets pirate attack variables to initial values to start the event
-        pirate_attention:
-            description: |-
-                Adds attention away from the pirates to pc's state
-
-                `$pirate_attention` is a measure of how distracting the player is during pirate events where 0 is not distracting (0+)
-
-                `<<pirate_attention change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        pirate_clothes_up:
-            description: |-
-                Dresses pc in pirate clothes appropriate to their status
-        pirate_mate_work:
-            description: |-
-                Prints passage of pc being assigned a task for being in a location
-
-                `<<pirate_mate_work location>>`
-                - **location**: `string` - current location of pc
-                  - `"deck"` | `"cabin"` | `"bilge"`
-            parameters:
-                - '"deck"|"cabin"|"bilge"'
-            tags: ["text"]
-        pirate_mate_work_end_links:
-            description: |-
-                Prints end links after pirate mate work has been completed
-
-                Relies on `$phase` being set from `<<pirate_mate_work>>` to determine location to send pc back to
-            tags: ["links"]
-        pirate_rescue:
-            description: |-
-                Enables rescue from combat if pirate rank is high enough
-        pirate_status:
-            description: |-
-                Changes `$pirate_status` as long as appropriate tier is met
-
-                `$pirate_status` is a `0-100` measurement of the pc's status amongst the pirates
-
-                If a tier is provided, it must match that tier exactly
-
-                `<<pirate_status change qualifyingTier?>>`
-                - **change**: `number` - status to gain
-                - **qualifyingTier**: `string` - tier to meet to gain status
-                  - Defaults to `1`
-            parameters:
-                - 'number |+ "scum"|"mate"'
-        pirate_watch:
-            description: |-
-                Changes `$pirate_watch` by value
-
-                `$pirate_watch` is a `0-100` measurement of how much attention the player has gained from pirates noticing them
-
-                `<<pirate_watch change>>`
-                - **change**: `number` - amount to change by
-            parameters:
-                - "number"
-        plant_details:
-            description: |-
-                Prints season and location appropriate details for a plant person's hair
-
-                `<<plant_details locationOverride?>>`
-                - **locationOverride** _optional_: `string` - location to match details to
-                  - `default`: pc's current `$location`
-                  - `"moor"` | `"forest"` | `"bog"`
-            parameters:
-                - '|+ "moor"|"forest"|"bog"'
-            tags: ["text"]
-        Plant_details:
-            description: |-
-                Prints capitalised season and location appropriate details for a plant person's hair
-
-                `<<Plant_details locationOverride?>>`
-                - **locationOverride** _optional_: `string` - location to match details to
-                  - `default`: pc's current `$location`
-                  - `"moor"` | `"forest"` | `"bog"`
-            parameters:
-                - '|+ "moor"|"forest"|"bog"'
-            tags: ["text"]
-        plantlower:
-            name: plantlower
-        plantspeech:
-            name: plantspeech
-        plantup:
-            name: plantup
-        plantupper:
-            name: plantupper
-        player-base-body:
-            name: player-base-body
-        playerEndWaterBreaking:
-            name: playerEndWaterBreaking
-            tags: ["unused"]
-        playerPrebirth:
-            name: playerPrebirth
-        playerPregnancy:
-            name: playerPregnancy
-        playerPregnancyAttempt:
-            name: playerPregnancyAttempt
-        playerPregnancyHawkAttempt:
-            name: playerPregnancyHawkAttempt
-        playLinePool:
-            name: playLinePool
-        playReadiness:
-            name: playReadiness
-        playWithBreasts:
-            name: playWithBreasts
-        plot_effects:
-            name: plot_effects
-        plots_init:
-            name: plots_init
-        plural:
-            description: |-
-                Prints a present indicative (are/is) for provided clothing slot
-
-                `<<plural slot>>`
-                - **slot**: `string` - category of worn clothing to check
-                  - %clothesTypesDesc%
-            parameters:
-                - "%clothesTypes%"
-        pmother:
-            description: |-
-                Prints respectful title for pc as a parent (mother/father)
-
-                See `<<pMother>>` for capitalised prose
-            tags: ["unused", "text"]
-        pMother:
-            description: |-
-                Prints capitalised respectful title for pc as a parent (Mother/Father)
-
-                See `<<pmother>>` for uncapitalised prose
-            tags: ["unused", "text"]
-        police_computer_action:
-            name: police_computer_action
-        popcornEat:
-            name: popcornEat
-        popcornSpill:
-            name: popcornSpill
-            tags: ["text"]
-        portalPantiesClear:
-            name: portalPantiesClear
-        portalPantiesDisplay:
-            name: portalPantiesDisplay
-            tags: ["unused"]
-        portalPantiesDisplayItem:
-            name: portalPantiesDisplayItem
-        portalPantiesDisplayMessage:
-            name: portalPantiesDisplayMessage
-        portalPantiesDisplayVirginity:
-            name: portalPantiesDisplayVirginity
-        portalPantiesFillHole:
-            name: portalPantiesFillHole
-        portalPantiesFuck:
-            name: portalPantiesFuck
-        portalPantiesPass:
-            name: portalPantiesPass
-            tags: ["unused"]
-        portalPantiesPlayerCum:
-            name: portalPantiesPlayerCum
-            tags: ["unused"]
-        portalPantiesPortalCum:
-            name: portalPantiesPortalCum
-        portalPantiesSetup:
-            name: portalPantiesSetup
-            tags: ["unused"]
-        postMirror:
-            name: postMirror
-        pound_compete_text:
-            name: pound_compete_text
-        pound_init:
-            name: pound_init
-        pound_muzzle:
-            name: pound_muzzle
-        pound_punishment_links:
-            name: pound_punishment_links
-        pound_stats:
-            name: pound_stats
-        pound_status:
-            name: pound_status
-        pound_text:
-            name: pound_text
-        pound_walk_end:
-            name: pound_walk_end
-        ppackbrother:
-            name: ppackbrother
-        pPackbrother:
-            name: pPackbrother
-        ppackbrothers:
-            name: ppackbrothers
-        pPackbrothers:
-            name: pPackbrothers
-        prayerend:
-            name: prayerend
-        prayerRoomEnd:
-            description: |-
-                Restores the values frozen by at the start of the prayer room scene
-
-                Keeps Sydney at the first slot of `$NPCList`
-
-                Keeps the world corruption and some other values that can be modified during the scene
-        prayoptions:
-            name: prayoptions
-        PregEventsResult:
-            name: PregEventsResult
-        pregnancyBabyText:
-            name: pregnancyBabyText
-        pregnancyBirthBlackWolf:
-            name: pregnancyBirthBlackWolf
-        pregnancyBirthWolfCave:
-            name: pregnancyBirthWolfCave
-        pregnancyDailyEvent:
-            name: pregnancyDailyEvent
-        pregnancyFeats:
-            name: pregnancyFeats
-        pregnancyGendersText:
-            name: pregnancyGendersText
-        pregnancyMorningAfterPill:
-            name: pregnancyMorningAfterPill
-        pregnancySettings:
-            name: pregnancySettings
-        pregnancyTest:
-            name: pregnancyTest
-        pregnancyType:
-            name: pregnancyType
-        pregnancyVar:
-            name: pregnancyVar
-        pregnancyWatersBrokenPassout:
-            name: pregnancyWatersBrokenPassout
-        preMirror:
-            name: preMirror
-        prenancyObjectRepair:
-            name: prenancyObjectRepair
-        presetConfirm:
-            description: |-
-                Validates and applies Preset object into state variables
-
-                Relies on `_validatorObject` already being set
-
-                `<<presetConfirm presetObject useAltLabel?>>`
-                - **presetObject**: `object` - object to be imported
-                - **useAltLabel** _optional_: `bool` - truthy indicating to use sub-labels
-            parameters:
-                - var|bareword
-                - '"pronoun"|"gender"|"penissize"|"breastsize"|"bottomsize"|"gender_body"|"ballsExist"|"freckles" |+ bool|text|number'
-            tags: ["temp"]
-        presetConfirmDetails:
-            name: presetConfirmDetails
-        presets:
-            description: |-
-                Applies a preset to game and refreshes settings display to provided page
-
-                `<<presets presetName page? randomizeResult?>>`
-                - **presetName**: `string` - name of preset to apply
-                - **page** _optional_: `string` - page to display after preset is applied
-                  - Defaults to "characterSettings". See <<displaySettings>> for additional values
-                - **randomizeResult** _optional_: `string` - JSON object containing preset results. Generally the return of randomizeSettings()
-            parameters:
-                - string |+ string
-                - '"randomize" &+ string &+ bareword|var'
-        priceSettings:
-            name: priceSettings
-        priest:
-            description: |-
-                Prints `priest` or `priestess` depending on active NPC pronoun
-            tags: ["text"]
-        priestapo:
-            description: |-
-                Prints `priest's` or `priestess'` depending on active NPC pronoun
-            tags: ["text"]
-        priestAttack:
-            name: priestAttack
-        priests:
-            description: |-
-                Prints `priests` or `priestesses` depending on active NPC pronoun
-            tags: ["text"]
-        printbuysendhome:
-            name: printbuysendhome
-        printChastity:
-            description: |-
-                Prints `$worn.genitals.name`
-
-                Used in a single spot that can be escaped. Consider refactoring
-            tags: ["text", "refactor"]
-        printCombatMenu:
-            name: printCombatMenu
-        printcursed:
-            name: printcursed
-        printmoney:
-            description: |-
-                Prints amount in pennies as formatted currency
-
-                `<<printmoney amountInPennies classlist?>>`
-                - **amountInPennies**: `number` - amount in pennies, positive or negative
-                - **classlist** _optional_: `number` - DOM classlist to be used to color text
-                  - Defaults to `"gold"`
-            parameters:
-                - "number |+ text"
-            tags: ["text"]
-        printpreggy:
-            name: printpreggy
-        printShopColourOptions:
-            name: printShopColourOptions
-        printTipsList:
-            name: printTipsList
-        prison_attention:
-            name: prison_attention
-        prison_birds:
-            name: prison_birds
-        prison_birds_text:
-            name: prison_birds_text
-        prison_bondage_removal:
-            name: prison_bondage_removal
-        prison_day:
-            name: prison_day
-        prison_detach_leash:
-            name: prison_detach_leash
-        prison_end:
-            name: prison_end
-        prison_feat_check:
-            name: prison_feat_check
-        prison_guard_greet:
-            name: prison_guard_greet
-        prison_guard_watch:
-            name: prison_guard_watch
-        prison_guards:
-            name: prison_guards
-        prison_hope:
-            name: prison_hope
-        prison_init:
-            name: prison_init
-        prison_inmates:
-            name: prison_inmates
-        prison_laundry_options:
-            name: prison_laundry_options
-        prison_list:
-            name: prison_list
-        prison_list_dark:
-            name: prison_list_dark
-        prison_list_result:
-            name: prison_list_result
-        prison_list_speech:
-            name: prison_list_speech
-        prison_map:
-            name: prison_map
-        prison_medical_options:
-            name: prison_medical_options
-        prison_punishment_end:
-            name: prison_punishment_end
-        prison_punishment_init:
-            name: prison_punishment_init
-        prison_reb:
-            name: prison_reb
-        prison_rep:
-            name: prison_rep
-        prison_repunishment_options:
-            name: prison_repunishment_options
-        prison_revolt_options:
-            name: prison_revolt_options
-        prison_sleep_options:
-            name: prison_sleep_options
-        prison_spire_options:
-            name: prison_spire_options
-        prison_teeth:
-            name: prison_teeth
-        prison_teeth_text:
-            name: prison_teeth_text
-        prison_unbind:
-            name: prison_unbind
-        prison_work:
-            name: prison_work
-        prisoncrimeUp:
-            name: prisoncrimeUp
-        produceDisplay:
-            name: produceDisplay
-        produceDisplayConfirm:
-            name: produceDisplayConfirm
-        produceDisplayItem:
-            name: produceDisplayItem
-        prof:
-            description: |-
-                Adds proficiency to pc's stats for given category
-
-                `$prof[X]` are amount of player skill in given category where 0 is unskilled (0-1,000)
-
-                `<<prof category change>>`
-                - **category**: `string` - category of proficiency to add
-                  - `"spray"` | `"net"` | `"whip"` | `"baton"`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - '"spray"|"net"|"whip"|"baton" &+ number'
-        projectoptions:
-            name: projectoptions
-        promiscuity1:
-            name: promiscuity1
-        promiscuity2:
-            name: promiscuity2
-        promiscuity3:
-            name: promiscuity3
-        promiscuity4:
-            name: promiscuity4
-        promiscuity5:
-            name: promiscuity5
-        promiscuity6:
-            name: promiscuity6
-            tags: ["unused"]
-        promiscuityN:
-            name: promiscuityN
-        promiscuous:
-            description: |-
-                Prints `Promiscuous X` with appropriate color for level
-
-                `<<promiscuous level>>`
-                - **level**: `number` - required level for this action
-                  - `1-6`: level and color
-                  - `0`: just text
-            parameters:
-                - "number"
-            tags: ["unused", "text"]
-        promiscuous1:
-            description: |-
-                Prints `Promiscuous 1` with appropriate color for level
-            tags: ["text"]
-        promiscuous2:
-            description: |-
-                Prints `Promiscuous 2` with appropriate color for level
-            tags: ["text"]
-        promiscuous3:
-            description: |-
-                Prints `Promiscuous 3` with appropriate color for level
-            tags: ["text"]
-        promiscuous4:
-            description: |-
-                Prints `Promiscuous 4` with appropriate color for level
-            tags: ["text"]
-        promiscuous5:
-            description: |-
-                Prints `Promiscuous 5` with appropriate color for level
-            tags: ["text"]
-        promiscuous6:
-            description: |-
-                Prints `!Promiscuous 6!` with appropriate color for level
-            tags: ["unused", "text"]
-        prop:
-            name: prop
-        prostate:
-            description: |-
-                Prints `womb` or `prostate` depending on if player has vagina
-            tags: ["text"]
-        pshe:
-            description: |-
-                Prints singular pronoun of pc (he/she)
-
-                See `<<pShe>>` for capitalised prose
-            tags: ["text"]
-        pShe:
-            description: |-
-                Prints capitalised singular pronoun of pc (He/She)
-
-                See `<<pshe>>` for uncapitalised prose
-            tags: ["text"]
-        pshes:
-            description: |-
-                Prints singular pronoun as is/has contraction of pc (he's/she's)
-
-                See `<<pShes>>` for capitalised prose
-            tags: ["text"]
-        pShes:
-            description: |-
-                Prints capitalised singular pronoun as is/has contraction of pc (He's/She's)
-
-                See `<<pshes>>` for uncapitalised prose
-            tags: ["text"]
-        psir:
-            description: |-
-                Prints respectful address for pc (sir/ma'am)
-
-                See `<<pSir>>` for capitalised prose
-            tags: ["text"]
-        pSir:
-            description: |-
-                Prints capitalised respectful address for pc (Sir/Ma'am)
-
-                See `<<pSir>>` for capitalised prose
-            tags: ["unused", "text"]
-        pub_cave_arrival:
-            name: pub_cave_arrival
-        pub_cave_intro:
-            name: pub_cave_intro
-        pubfameChange:
-            name: pubfameChange
-        pubfameComplete:
-            name: pubfameComplete
-        pubfameDifficulty:
-            name: pubfameDifficulty
-        pubfameOptions:
-            name: pubfameOptions
-        pubfameRemyPassword:
-            name: pubfameRemyPassword
-        pubfameReset:
-            name: pubfameReset
-        pulldown:
-            description: |-
-                Prints verb of player pulling lower clothing into an exposed state
-
-                Does not actually set clothing into exposed or pulled state. Consider refactoring
-            tags: ["text", "refactor"]
-        pulldownall:
-            description: |-
-                Prints description of player pulling all lower clothing into an exposed state
-
-                Does not actually set clothing into exposed or pulled state. Consider refactoring
-            tags: ["text", "refactor"]
-        pullsdown:
-            description: |-
-                Prints plural verb of player pulling lower clothing into an exposed state
-
-                Does not actually set clothing into exposed or pulled state. Consider refactoring
-            tags: ["unused", "text", "refactor"]
-        pullsup:
-            description: |-
-                Prints plural verb of player pulling upper clothing into an exposed state
-
-                Does not actually set clothing into exposed or pulled state. Consider refactoring
-            tags: ["text", "refactor"]
-        pullup:
-            description: |-
-                Prints verb of player pulling upper clothing into an exposed state
-
-                Does not actually set clothing into exposed or pulled state. Consider refactoring
-            tags: ["text", "refactor"]
-        pullupall:
-            description: |-
-                Prints description of player pulling all upper clothing into an exposed state
-
-                Does not actually set clothing into exposed or pulled state. Consider refactoring
-            tags: ["text", "refactor"]
-        purity:
-            description: |-
-                Adds purity to pc's state, with appropriate modifiers
-
-                `$purity` is measure of pc's physical distance from sex where 0 is demonic (0-1,000)
-
-                Dark clothing penalises awareness reductions. Consider refactoring
-
-                `<<awareness change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        push_nnpc_genderknown:
-            name: push_nnpc_genderknown
-        pushClothingCaption:
-            name: pushClothingCaption
-        pussies:
-            name: pussies
-        pussy:
-            name: pussy
-        pussyinspection:
-            name: pussyinspection
-        pussyinspectionherm:
-            name: pussyinspectionherm
-        quicksand_actions:
-            name: quicksand_actions
-        quicksand_end:
-            name: quicksand_end
-        quicksand_pull:
-            name: quicksand_pull
-        quickStart:
-            name: quickStart
-        quickStartOptions:
-            name: quickStartOptions
-        radio_addnews:
-            name: radio_addnews
-            tags: ["unused"]
-        radio_hardreset:
-            name: radio_hardreset
-            tags: ["unused"]
-        radio_listen:
-            name: radio_listen
-        radio_midnight:
-            name: radio_midnight
-            tags: ["unused"]
-        radio_placehere:
-            name: radio_placehere
-            tags: ["unused"]
-        radiogroup:
-            name: radiogroup
-            tags: ["unused"]
-        radiooutfits:
-            name: radiooutfits
-        radiovar:
-            container: true
-            name: radiovar
-        ragup:
-            name: ragup
-        raidLockers:
-            name: raidLockers
-        rainstreak:
-            name: rainstreak
-            tags: ["unused"]
-        rainWraith:
-            name: rainWraith
-        rainyDayHarass:
-            name: rainyDayHarass
-        random_goo:
-            name: random_goo
-        random_goo_head:
-            name: random_goo_head
-        random_semen:
-            name: random_semen
-        random_semen_head:
-            name: random_semen_head
-        randomPlay:
-            name: randomPlay
-        randomteacher:
-            description: |-
-                Prints name of a teacher the player knows
-        randomWear:
-            name: randomWear
-        raped:
-            name: raped
-        rapestat:
-            name: rapestat
-        rapeTrait:
-            description: |-
-                Prints `| Survivor` or `| Fucktoy` depending on pc's `$submissive`
-            tags: ["unused", "text"]
-        reb:
-            description: |-
-                Adds rebelliousness to orphanage
-
-                `$orphan_reb` is measure of rebelliousness levels in orphanage where negative is no rebelliousness and 0 is neutral (-50-50)
-
-                `<<reb change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        recordAnusSperm:
-            name: recordAnusSperm
-        recordSperm:
-            name: recordSperm
-        recordVaginalSperm:
-            name: recordVaginalSperm
-        relation-box:
-            name: relation-box
-        relation-box-simple:
-            name: relation-box-simple
-        relation-box-stat:
-            name: relation-box-stat
-        relation-box-wolves:
-            name: relation-box-wolves
-        relation-text:
-            name: relation-text
-            tags: ["unused"]
-        relationshipclamp:
-            name: relationshipclamp
-        relationshiptext:
-            name: relationshiptext
-        relaxed_guard:
-            name: relaxed_guard
-        remove_punishments:
-            name: remove_punishments
-        remove_shackle:
-            name: remove_shackle
-        removeBabyIntro:
-            name: removeBabyIntro
-        removeButtplug:
-            name: removeButtplug
-        removeCChildBirthDate:
-            name: removeCChildBirthDate
-            tags: ["unused"]
-        removeCChildConceptionDate:
-            name: removeCChildConceptionDate
-            tags: ["unused"]
-        removeCNPCEventTimer:
-            name: removeCNPCEventTimer
-            tags: ["unused"]
-        removeCNPCPregnancyTimer:
-            name: removeCNPCPregnancyTimer
-            tags: ["unused"]
-        removeCreature:
-            name: removeCreature
-        removeNNPCOutfit:
-            name: removeNNPCOutfit
-        removeNPCCondom:
-            name: removeNPCCondom
-        removeparasite:
-            name: removeparasite
-        removePlayerCondom:
-            name: removePlayerCondom
-        removeTryingOn:
-            name: removeTryingOn
-        rendermodel:
-            description: |-
-                Render and print model as a static image
-
-                [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
-
-                `<<rendermodel className? cssAnim?>>`
-                - **className**: `string` - class or space-separated classes of canvas element to be inserted when placed in the DOM
-                - **cssAnim** _optional_: `bool` - render multiple frames for css animation
-                  - Defaults to false
-            parameters:
-                - "|+ text |+ bool|bareword|var"
-            tags: ["dom"]
-        rentday:
-            name: rentday
-        rentdue:
-            name: rentdue
-        rentduerobin:
-            name: rentduerobin
-        rentEdenTrade:
-            name: rentEdenTrade
-        rentmod:
-            name: rentmod
-        rentnopay:
-            name: rentnopay
-        rentpay:
-            name: rentpay
-        rentRobinPunishment:
-            name: rentRobinPunishment
-        replaceAction:
-            name: replaceAction
-            tags: ["unused"]
-        replaceActionLink:
-            name: replaceActionLink
-        replaceAskColour:
-            name: replaceAskColour
-            tags: ["unused"]
-        reqSkill:
-            name: reqSkill
-            tags: ["unused"]
-        reroute:
-            name: reroute
-            skipArgs: true
-            tags: ["unused"]
-        rescueWraith:
-            name: rescueWraith
-        resetEarSlime:
-            name: resetEarSlime
-        resetLastOptions:
-            name: resetLastOptions
-        resetPregButtons:
-            name: resetPregButtons
-        resetSaveMenu:
-            name: resetSaveMenu
-        residential:
-            name: residential
-        residentialdrain:
-            name: residentialdrain
-        residentialdraineventend:
-            name: residentialdraineventend
-        residentialdrainlinks:
-            name: residentialdrainlinks
-        residentialdrainquick:
-            name: residentialdrainquick
-        residentialeventend:
-            name: residentialeventend
-        residentialex1:
-            name: residentialex1
-        residentialex2:
-            name: residentialex2
-        residentialex3:
-            name: residentialex3
-        residentialexposed:
-            name: residentialexposed
-            tags: ["unused"]
-        residentialquick:
-            name: residentialquick
-        restartMenstruationCycle:
-            name: restartMenstruationCycle
-        returnCarried:
-            name: returnCarried
-        reveal:
-            name: reveal
-        right_pursuit_grab:
-            name: right_pursuit_grab
-        rightactionBoundBanish:
-            name: rightactionBoundBanish
-        rightactionDifficulty:
-            name: rightactionDifficulty
-        rightactionDifficultyMachine:
-            name: rightactionDifficultyMachine
-            tags: ["unused"]
-        rightactionDifficultySelf:
-            name: rightactionDifficultySelf
-        rightactionDifficultyStruggle:
-            name: rightactionDifficultyStruggle
-            tags: ["unused"]
-        rightactionDifficultySwarm:
-            name: rightactionDifficultySwarm
-            tags: ["unused"]
-        rightactionDifficultyTentacle:
-            name: rightactionDifficultyTentacle
-        rightactionDifficultyVore:
-            name: rightactionDifficultyVore
-            tags: ["unused"]
-        rightActionInit:
-            name: rightActionInit
-        rightActionInitMachine:
-            name: rightActionInitMachine
-        rightActionInitSelf:
-            name: rightActionInitSelf
-        rightActionInitStruggle:
-            name: rightActionInitStruggle
-        rightActionInitSwarm:
-            name: rightActionInitSwarm
-        rightActionInitTentacle:
-            name: rightActionInitTentacle
-        rightActionInitVore:
-            name: rightActionInitVore
-        rightActions:
-            name: rightActions
-        rightactionSetupTentacle:
-            name: rightactionSetupTentacle
-        rightActionsMachine:
-            name: rightActionsMachine
-        rightActionsSelf:
-            name: rightActionsSelf
-        rightActionsStruggle:
-            name: rightActionsStruggle
-        rightActionsSwarm:
-            name: rightActionsSwarm
-        rightActionsTentacle:
-            name: rightActionsTentacle
-        rightActionsVore:
-            name: rightActionsVore
-        rightarmtentacledisable:
-            name: rightarmtentacledisable
-        rightcamerapose:
-            name: rightcamerapose
-        rightchoke:
-            name: rightchoke
-        rightclothesnew:
-            name: rightclothesnew
-        rightCondom:
-            name: rightCondom
-        rightcoverface:
-            name: rightcoverface
-        rightdefault:
-            name: rightdefault
-        rightdildowhack:
-            name: rightdildowhack
-        rightFixAndCoverActions:
-            name: rightFixAndCoverActions
-        rightgrabnew:
-            name: rightgrabnew
-        righthandpull:
-            name: righthandpull
-        righthypnosiswhack:
-            name: righthypnosiswhack
-        rightNPCCondom:
-            name: rightNPCCondom
-        rightpenwhacknew:
-            name: rightpenwhacknew
-        rightplaynew:
-            name: rightplaynew
-        rightshacklewhack:
-            name: rightshacklewhack
-        rightspraynew:
-            name: rightspraynew
-        rightstealnew:
-            name: rightstealnew
-        rightUndressOther:
-            name: rightUndressOther
-        rng:
-            description: |-
-                Generates a new rng value between min and max to be stored in `$rng`
-
-                `$rng` is the pseudo-random value last generated by this call or passage start
-
-                `$rngOverride` is a fixed value debug variable to use for all `<<rng>>` calls in a passage
-
-                1. `<<rng max?>>`
-                - **max** _optional_: `number` - maximum (inclusive) value
-                  - Defaults to `100`
-
-                2. `<<rng min max>>`
-                - **min**: `string` - minimum (inclusive) value
-                  - Defaults to `1`
-            parameters:
-                - "|+ number |+ number"
-        rngWraith:
-            name: rngWraith
-        rngWraithSocial:
-            name: rngWraithSocial
-        robinbrothelappear:
-            name: robinbrothelappear
-        robinbully:
-            name: robinbully
-        robinChocolateOfferHelp:
-            name: robinChocolateOfferHelp
-        robinForestCostumeBuy:
-            name: robinForestCostumeBuy
-        robinForestCostumeOptions:
-            name: robinForestCostumeOptions
-        robinForestCostumePose:
-            name: robinForestCostumePose
-        robinhug:
-            name: robinhug
-        robinInfirmaryCDOptions:
-            name: robinInfirmaryCDOptions
-        robinInfirmaryCDUndressLower:
-            name: robinInfirmaryCDUndressLower
-        robinInfirmaryVariableCleanup:
-            name: robinInfirmaryVariableCleanup
-        robinOpen:
-            name: robinOpen
-        robinoptions:
-            name: robinoptions
-        robinpay:
-            name: robinpay
-        robinPayout:
-            name: robinPayout
-        robinPilloryFailure:
-            name: robinPilloryFailure
-        robinPilloryHour:
-            name: robinPilloryHour
-        robinPunishment:
-            name: robinPunishment
-        robinRentUnsafeMessage:
-            name: robinRentUnsafeMessage
-        robinroom:
-            name: robinroom
-        robinroom_link:
-            name: robinroom_link
-        robinTraumaMultiplierDecay:
-            name: robinTraumaMultiplierDecay
-        roomoptions:
-            name: roomoptions
-        ruffleHair:
-            name: ruffleHair
-        ruffleHairFromSleep:
-            name: ruffleHairFromSleep
-        ruined:
-            description: |-
-                Destroys all of the pc's clothing slots, whether worn or carried
-
-                This includes head, face, neck, over_upper, upper, under_upper, hands, over_lower, lower, under_lower, legs, and feet slot clothing
-        run_text:
-            name: run_text
-        runeventpool:
-            name: runeventpool
-        rut:
-            description: |-
-                Prints `| Rut`
-            tags: ["text"]
-        rut_end:
-            name: rut_end
-        rutCycle:
-            name: rutCycle
-        sadism:
-            description: |-
-                Adds sadism to pc's state
-
-                `$sadism` is a measure of pc's progression towards being sadistic where 0 is no progress (0-1,000)
-
-                `<<sadism change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        safereplace:
-            container: true
-            name: safereplace
-        save_anxious_guard:
-            name: save_anxious_guard
-        save_methodical_guard:
-            name: save_methodical_guard
-        save_relaxed_guard:
-            name: save_relaxed_guard
-        save_scarred_inmate:
-            name: save_scarred_inmate
-        save_tattooed_inmate:
-            name: save_tattooed_inmate
-            tags: ["unused"]
-        save_veteran_guard:
-            name: save_veteran_guard
-        saveConfirm:
-            name: saveConfirm
-        saveList:
-            name: saveList
-        saveNameSection:
-            name: saveNameSection
-        saveNPC:
-            description: |-
-                Saves persistent npc to named slot
-
-                See `<<loadNPC>>`, `<<updateNPC>>`, & `<<clearNPC>>`
-
-                `<<saveNPC slot name>>`
-                - **slot**: `number` - slot number to pull npc data from (zero-based)
-                - **name**: `string` - key to save npc's data to
-                  - spaces should be avoided if possible
-            parameters:
-                - "number &+ string|text"
-        saves:
-            name: saves
-        saveTempHairStyle:
-            name: saveTempHairStyle
-        saveWarning:
-            name: saveWarning
-        sayexhibproud:
-            name: sayexhibproud
-        scarred_inmate:
-            name: scarred_inmate
-        schismEnd:
-            description: |-
-                Restores the values frozen by `<<schismStart>>` and passes time until 6:00am
-        schismStart:
-            description: |-
-                Freezes the story variables, then morphs the pc into Clánha
-        school_infirmary_options:
-            name: school_infirmary_options
-        school_mark:
-            name: school_mark
-        school_skill_change:
-            name: school_skill_change
-        school_skill_down:
-            name: school_skill_down
-        school_skill_up:
-            name: school_skill_up
-        school_skill_up_text:
-            name: school_skill_up_text
-        schoolbully:
-            name: schoolbully
-        schoolbullyoutside:
-            name: schoolbullyoutside
-        schoolcatcall:
-            description: |-
-                Prints random catcall appropriate for pc's peers to say
-        schoolChangingRoomLinks:
-            name: schoolChangingRoomLinks
-        schoolclothesreset:
-            name: schoolclothesreset
-        schoolday:
-            description: |-
-                Prints school schedule for today/ tomorrow if player is not trapped
-            tags: ["text"]
-        schooleffects:
-            name: schooleffects
-        schoolfameboard:
-            name: schoolfameboard
-        schoolperiod:
-            name: schoolperiod
-        schoolperiodtext:
-            name: schoolperiodtext
-        schoolpoolclothes:
-            name: schoolpoolclothes
-        schoolpoolclothesreset:
-            name: schoolpoolclothesreset
-        schoolpoolexposed:
-            name: schoolpoolexposed
-        schoolpoolmasoncheck:
-            description: |-
-                Check for bindings and prints quick unbinding description if Mason has to remove them immediately
-
-                Mason makes a mental note to bring chastity key from now on
-            tags: ["text"]
-        schoolPoolSwap:
-            name: schoolPoolSwap
-        schoolpoolundress:
-            name: schoolpoolundress
-        schoolrep:
-            description: |-
-                Changes school reputation and alerts named NPCs
-
-                Reputation is clamped between 0 and 5
-
-                See `<<schoolrep_naked>>` for autocalculated version
-
-                `<<schoolrep type change>>`
-                - **type**: `string` - type of reputation to change
-                  - `"crossdress"` | `"herm"`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - '"crossdress"|"herm" &+ number'
-        schoolrep_naked:
-            description: |-
-                Changes school reputation by 1 in response to player being naked
-        schoolShop-main:
-            name: schoolShop-main
-        schoolskill:
-            name: schoolskill
-        schoolskillgeneral:
-            name: schoolskillgeneral
-        schoolspareclothes:
-            name: schoolspareclothes
-        schoolterm:
-            name: schoolterm
-        schoolVendingMachine:
-            name: schoolVendingMachine
-        science_skill_up_text:
-            name: science_skill_up_text
-        scienceprojectchance:
-            name: scienceprojectchance
-        scienceprojectfinish:
-            name: scienceprojectfinish
-        scienceprojectstart:
-            name: scienceprojectstart
-        scienceskill:
-            name: scienceskill
-        sea_chest:
-            name: sea_chest
-        sea_eye:
-            name: sea_eye
-        sea_pair_orgasm:
-            name: sea_pair_orgasm
-        sea_struggle:
-            name: sea_struggle
-        sea1:
-            name: sea1
-        sea2:
-            name: sea2
-        sea3:
-            name: sea3
-        sea4:
-            name: sea4
-        sea5:
-            name: sea5
-        sea6:
-            name: sea6
-        sea7:
-            name: sea7
-        seabeach:
-            name: seabeach
-        seabeach1:
-            name: seabeach1
-        seabeach2:
-            name: seabeach2
-        seabeacheventend:
-            name: seabeacheventend
-        seabeachquick:
-            name: seabeachquick
-        seacliffs:
-            name: seacliffs
-        seacliffseventend:
-            name: seacliffseventend
-        seacliffsquick:
-            name: seacliffsquick
-        seadocks:
-            name: seadocks
-        seadockseventend:
-            name: seadockseventend
-        seadocksquick:
-            name: seadocksquick
-        seaflotsam:
-            name: seaflotsam
-        seamove:
-            name: seamove
-        seamoveeventend:
-            name: seamoveeventend
-        seamovequick:
-            name: seamovequick
-        searape:
-            name: searape
-        searchWardrobeForItem:
-            name: searchWardrobeForItem
-        searocks:
-            name: searocks
-        searockseventend:
-            name: searockseventend
-        searocksquick:
-            name: searocksquick
-        seasonal_beverage:
-            description: |-
-                Prints beverage appropriate to the current season
-            tags: ["text"]
-        seatangle:
-            name: seatangle
-        seatedflashcrotchunderskirt:
-            name: seatedflashcrotchunderskirt
-        Seatedflashcrotchunderskirt:
-            name: Seatedflashcrotchunderskirt
-        seatedflashcrotchunderskirtcomma:
-            name: seatedflashcrotchunderskirtcomma
-            tags: ["unused"]
-        Seatedflashcrotchunderskirtcomma:
-            name: Seatedflashcrotchunderskirtcomma
-            tags: ["unused"]
-        seatedflashcrotchunderskirtline:
-            name: seatedflashcrotchunderskirtline
-        seatedflashcrotchunderskirtstop:
-            name: seatedflashcrotchunderskirtstop
-            tags: ["unused"]
-        Seatedflashcrotchunderskirtstop:
-            name: seatedflashcrotchunderskirtstop
-            tags: ["unused"]
-        seatentacles:
-            name: seatentacles
-        seavore:
-            name: seavore
-        seductioncheck:
-            name: seductioncheck
-        seductiondifficulty:
-            description: |-
-                Prints difficulty of seduction in current combat or estimate of difficulty out
-
-                `_text_output` is set to difficulty description for use with `noPrint`
-
-                `noPrint` styles differ depending on combat/ non-combat. Consider refactoring
-
-                `<<seductiondifficulty noPrint?>>`
-                - **noPrint** _optional_: `bool` - Suppress output and only write to temp (truthy)
-            parameters:
-                - "|+ bool"
-            tags: ["text", "temp", "refactor"]
-        seductionskill:
-            description: |-
-                Adds seduction skill to pc's state
-
-                `$seductionskill` is a measure of pc's proficiency seducing others where 0 is awkward (0-1,000)
-
-                `<<seductionskill change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        seductionskilluptext:
-            name: seductionskilluptext
-        seductionskilluse:
-            name: seductionskilluse
-        seductionskillusecombat:
-            name: seductionskillusecombat
-        seductiontext:
-            description: |-
-                Prints color-coded adjective of active seduction skill usage
-            tags: ["unused", "text"]
-        select_random_clothes:
-            name: select_random_clothes
-        selectmodel:
-            description: |-
-                Select model and prepare for rendering
-
-                Do not render instance multiple times on same passage
-
-                [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
-
-                `<<selectmodel modelName slot>>`
-                - **modelName**: `string` - CanvasModel name in Renderer.CanvasModels
-                - **slot**: `string` - id to speed up rendering between passages
-            parameters:
-                - text |+ text
-        selectNpcWithPartInPosition:
-            name: selectNpcWithPartInPosition
-        selectNpcWithPartInPositionAnus:
-            name: selectNpcWithPartInPositionAnus
-        selfsuckchecks:
-            name: selfsuckchecks
-        sellbuns:
-            name: sellbuns
-        semen:
-            name: semen
-            tags: ["unused"]
-        semen_amount:
-            description: |-
-                Adds semen to pc's semen supply
-
-                `$semen_amount` is the current pc semen amount remaining
-
-                `<<semen_amount change>>`
-                - **change**: `number` - +/- change to apply
-        semenOrgasm:
-            name: semenOrgasm
-        semenswallowedstat:
-            name: semenswallowedstat
-        semenvolume:
-            description: |-
-                Adds semen to pc's semen capacity with appropriate checks
-
-                `$semenvolume` is the current maximum pc semen capacity (0-3,000)
-
-                `<<semenvolume change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        sendItemsTo:
-            name: sendItemsTo
-        sendItemsToDropdown:
-            name: sendItemsToDropdown
-        sendToWardrobeFromDefault:
-            name: sendToWardrobeFromDefault
-        setBabyIntro:
-            name: setBabyIntro
-        setChildFirstWord:
-            name: setChildFirstWord
-            tags: ["unused"]
-        setfemininitymultiplierfromgender:
-            name: setfemininitymultiplierfromgender
-            tags: ["unused"]
-        setFont:
-            name: setFont
-        setKnowsAboutPregnancy:
-            name: setKnowsAboutPregnancy
-        setKnowsAboutPregnancyCurrentLoaded:
-            name: setKnowsAboutPregnancyCurrentLoaded
-        setKnowsAboutPregnancyInLocation:
-            name: setKnowsAboutPregnancyInLocation
-            tags: ["unused"]
-        setLocalPronouns:
-            name: setLocalPronouns
-            tags: ["unused"]
-        setnewtarget:
-            name: setnewtarget
-        setNPCStrapon:
-            name: setNPCStrapon
-        setShopCustomColors:
-            name: setShopCustomColors
-        setSkinColorBase:
-            name: setSkinColorBase
-        setSlimeSleepEvents:
-            name: setSlimeSleepEvents
-        setTalkedAboutPregnancy:
-            name: setTalkedAboutPregnancy
-        settextcolorfromfemininity:
-            name: settextcolorfromfemininity
-        settextcolorfromgender:
-            name: settextcolorfromgender
-        settings:
-            name: settings
-        settingsExit:
-            name: settingsExit
-        settingsExitConfirm:
-            name: settingsExitConfirm
-        settingsExitConfirmHistory:
-            name: settingsExitConfirmHistory
-            tags: ["unused"]
-        settingsExitFunction:
-            name: settingsExitFunction
-        settingsOptions:
-            name: settingsOptions
-        settingsStart:
-            name: settingsStart
-        settingsTabButton:
-            name: settingsTabButton
-        setup_pillory:
-            name: setup_pillory
-        setupDefaults:
-            name: setupDefaults
-        setupFeats:
-            name: setupFeats
-        setupMidOrgasm:
-            name: setupMidOrgasm
-        setupOptions:
-            name: setupOptions
-        setupTabs:
-            name: setupTabs
-        setupTransformationPiecesObject:
-            name: setupTransformationPiecesObject
-        sewerscountdown:
-            name: sewerscountdown
-        sewersend:
-            name: sewersend
-        sewerspassout:
-            name: sewerspassout
-        sewerssleep:
-            name: sewerssleep
-        sewerssleephour:
-            name: sewerssleephour
-        sewersstart:
-            name: sewersstart
-        sex:
-            name: sex
-        sexcheck:
-            name: sexcheck
-        sexControl:
-            name: sexControl
-        sexDefaults:
-            name: sexDefaults
-        sexToysFeatUI:
-            name: sexToysFeatUI
-        sexToysFeatUIColour:
-            name: sexToysFeatUIColour
-        sextoystat:
-            name: sextoystat
-        shackle_feet:
-            name: shackle_feet
-        shadyFan:
-            name: shadyFan
-        shame:
-            description: |-
-                Adds shame to pc's current exhibitionist stint
-
-                `$shame` is a measure of how embarrassed pc is to be exposed where 0 is unrepentant (0-100)
-
-                Shame as a concept is unused. Consider refactoring when clothes are easier to micromanage
-
-                `<<shame change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-            tags: ["unused", "refactor"]
-        sharp_eyes:
-            description: |-
-                Prints `| Sharp eyes`
-            tags: ["text"]
-        shavestrip:
-            name: shavestrip
-        shopBuyItemStatus:
-            name: shopBuyItemStatus
-        shopbuyv2:
-            description: |-
-                1. `<<shopbuyv2 slot action subAction?>>`
-
-                2. `<<shopbuyv2 slot "buy" "send" choiceIndex amount?>>`
-                - **slot**: `string` - clothing slot type to affect
-                  - `"all"` | %clothesTypesDesc%
-                - **action**: `string` - action to apply to for specified slot
-                  - `"reset"` | `"buy"` | `"steal"` | `"try"` | `"return"`
-                - **subAction** _optional_: `string` - action to do after acquiring the clothes
-                  - `"wear"` | `"send"` | `null`
-                - **choiceIndex** _optional_: `number` - index of clothes setup object
-                - **amount** _optional_: `number` - amount to buy. Defaults to 1
-            parameters:
-                - '"all"|%clothesTypes% |+ "reset"|"buy"|"steal"|"try"|"return" |+
-                  "wear"|"send"|null |+ number'
-                - '"all"|%clothesTypes% &+ "buy" &+ "send" &+ number &+ number'
-        shopCategoryReplace:
-            name: shopCategoryReplace
-        shopCategoryTabs:
-            name: shopCategoryTabs
-        shopclothingcustomcolourwheel:
-            description: |-
-                Wrapper for `window.shopClothCustomColorWheel()`
-
-                Prints customcolourwheel form for clothing shop
-
-                `<<shopclothingcustomcolourwheel type>>`
-                - **type**: `string` - custom clothing slots to pull from/ save to
-                  - `"primary"` | `"secondary"`
-            parameters:
-                - '"primary"|"secondary"'
-            tags: ["form"]
-        shopClothingFilterReset:
-            name: shopClothingFilterReset
-        shopClothingFilterSettingsDefault:
-            name: shopClothingFilterSettingsDefault
-        shopClothingFilterToggle:
-            name: shopClothingFilterToggle
-        shopCommandoCheck:
-            description: |-
-                Checks if pc has left a shop without wearing underwear
-        shopDetailsv2:
-            name: shopDetailsv2
-        shopFullImage:
-            name: shopFullImage
-        shopFullImagePart:
-            name: shopFullImagePart
-        shopFullImageSlot:
-            name: shopFullImageSlot
-        shopFullImageToggle:
-            name: shopFullImageToggle
-        shopHoodCheck:
-            name: shopHoodCheck
-        shoptraits:
-            description: |-
-                Prints all clothing traits as DOM
-            tags: ["dom"]
-        showlayer:
-            description: |-
-                Show layer and optionally add filters
-
-                [High-Level Model API Overview](%workspaceDir%/game/base-clothing/canvasmodel.twee#L2)
+        `$upperwet` is a measure of how wet pc's upper clothing is where 0 is dry (0-200)
 
-        `<<showlayer layerName ...filters?>>`
-        - **layerName**: `string` - layer name corresponding to CanvasModel.layer
-        - **filters** _optional_: `object` - Filter objects passed to layer
-          - Later filters have priority
+        `$upperwetstate` is a measure of effects due to wetness of pc's upper clothing where 0 is dry (0-3)
+
+        Over clothes don't take into account wetness. Consider refactoring to expand
+
+        `<<upperwet change>>`
+        - **change**: `number` - +/- change to apply
       parameters:
-        - text |+ ...(bareword|var)
-    showTransformations:
+        - "number"
+      tags: ["refactor"]
+    urinestat:
+      name: urinestat
+    useLube:
+      name: useLube
+    vagina_lube_amount:
       description: |-
-        Restores the transformations hidden by `<<hideTransformations>>`
-      tags: ["unused"]
-    ShowUnderEquip:
-      name: ShowUnderEquip
-    shredderactions:
-      name: shredderactions
-    sir:
+        Prints the amount of lube around player vagina
+
+        Relies on `_vagina_lube_amount` being set already
+
+        See `<<vagina_lube_text>>`
+      tags: ["text", "temp"]
+    vagina_lube_text:
       description: |-
-        Prints `sir` or `miss` depending on pc's appearance
+        Prints qualified description of lube around the vagina prior to penetration
+
+        Example:
+        ```
+        <<vagina_lube_text>> the example can be performed without trouble.
+        ```
       tags: ["text"]
-    Sir:
+    vaginaactionDifficulty:
+      name: vaginaactionDifficulty
+    vaginaactionDifficultyTentacle:
+      name: vaginaactionDifficultyTentacle
+    vaginaActionInit:
+      name: vaginaActionInit
+    vaginaActionInitStruggle:
+      name: vaginaActionInitStruggle
+    vaginaActionInitTentacle:
+      name: vaginaActionInitTentacle
+    vaginaActions:
+      name: vaginaActions
+    vaginaActionsTentacle:
+      name: vaginaActionsTentacle
+    vaginaFluidActive:
+      name: vaginaFluidActive
+    vaginaFluidOrgasm:
+      name: vaginaFluidOrgasm
+    vaginaFluidPassive:
+      name: vaginaFluidPassive
+    vaginainit:
+      name: vaginainit
+    vaginaldifficulty:
       description: |-
-        Prints capitalised `Sir` or `Miss` depending on pc's appearance
+        Prints color-coded adjective of vaginal action difficulty in current combat
       tags: ["text"]
-    sister:
-      name: sister
-    Sister:
-      name: Sister
-    sister_npc:
-      name: sister_npc
-    Sister_npc:
-      name: Sister_npc
-      tags: ["unused"]
-    sizeLimitsSettings:
-      name: sizeLimitsSettings
-    skill_difficulty:
-      name: skill_difficulty
-    skillDifficultyText:
-      name: skillDifficultyText
-    skinColorInit:
-      name: skinColorInit
-    skinColorInitOldSave:
-      name: skinColorInitOldSave
-    skinColourName:
-      name: skinColourName
-    skincolourtext:
+    vaginaldoublestat:
+      name: vaginaldoublestat
+    vaginalejacstat:
+      name: vaginalejacstat
+    vaginalentranceejacstat:
+      name: vaginalentranceejacstat
+    vaginalskill:
       description: |-
-        Prints `X skin colour.` modified by natural skin colour and tan levels
+        Adds vaginal skill to pc's state
+
+        `$vaginalskill` is a measure of pc's proficiency using their vagina where 0 is awkward (0-1,000)
+
+        `<<vaginalskill change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    vaginalskilluse:
+      name: vaginalskilluse
+    vaginalstat:
+      name: vaginalstat
+    vaginaltext:
+      description: |-
+        Prints color-coded adjective of active vaginal skill usage
       tags: ["text"]
-    skipToOrgasm:
-      name: skipToOrgasm
-    skirt:
+    vaginalvirginitywarning:
       description: |-
-        Prints descriptor of active NPC's lower clothing
+        Prints `This action will deflower you` if vaginal virginity can still be lost
+
+        Takes combat state into account to display starting pipe `| `
+      tags: ["text"]
+    vaginaraped:
+      name: vaginaraped
+    vaginaWetnessCalculate:
+      name: vaginaWetnessCalculate
+    variablesStart2:
+      name: variablesStart2
+    variablesStatic:
+      name: variablesStatic
+    variablesVersionUpdate:
+      name: variablesVersionUpdate
+    variablesVersionUpdate2:
+      name: variablesVersionUpdate2
+    versioninfo:
+      name: versioninfo
+    veteran_guard:
+      name: veteran_guard
+    victimgirl:
+      name: victimgirl
+    victimgirls:
+      name: victimgirls
+    violence:
+      name: violence
+    violence_noncombat:
+      name: violence_noncombat
+    virginitylosttext:
+      name: virginitylosttext
+    visionPrepMorph:
+      description: |-
+        Resets some stats and settings, in preparation to morph the pc into another character
 
-                See `<<dress>>` for upper clothing or `<<panties>>` for inner_lower clothing
-
-                See `<<npcClothesText>>` for full name of clothes
-            tags: ["text"]
-        skul_dock_contents:
-            name: skul_dock_contents
-        skul_dock_init:
-            name: skul_dock_init
-        skul_dock_location:
-            name: skul_dock_location
-        skul_dock_nav:
-            name: skul_dock_nav
-        skul_dock_state:
-            name: skul_dock_state
-        skulduggery:
-            description: |-
-                Adds skulduggery skill to pc's state
-
-                `$skulduggery` is a measure of pc's dexterity and guile where 0 is bad (0-1,000)
-
-                `<<skulduggery change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        skulduggerycheck:
-            description: |-
-                Performs an inline skulduggery check
-
-                `$skulduggerydifficulty` is a measure of the action difficulty where 0 is guaranteed (0-1,000)
-
-                `$skulduggerysuccess` is the result of the check where 0 is failed (0|1)
-
-                `<<skulduggerycheck outputModifier?>>`
-                - **outputModifier** _optional_: `string` - type of modifier to apply
-                  - `"silent"`: Does not print results
-            parameters:
-                - '|+ "silent"'
-            tags: ["text"]
-        skulduggerydifficulty:
-            description: Prints color-coded adjective of skulduggery difficulty
-
-                Relies on `$skulduggerydifficulty`, see `<<skulduggerycheck>>`
-            tags: ["text"]
-        skulduggeryrequired:
-            description:
-                Prints minimum skulduggery level required to successfully lockpick
+        **Should be used after `<<freezePlayerStats>>`**
 
-        `$lock` is the minimum skulduggery skill required to unlock where 0 is guaranteed (0-1,000)
+        - Resets all transformation progress, all virginities, as well as base stats like pain and arousal
+        - Removes any parasites, bodywriting, bodyliquid, chastity devices and worn sex toys
+        - Disables auto clothing rebuy
+    voice:
+      description: |-
+        Prints verb by player attempting to use their voice
+
+        Example:
+        ```
+        You <<voice "moan">>.
+        ```
+
+        `<<voice type>>`
+        - **type**: `string` - type of verb
+          - `"plead"` | `"moan"` | `"demand"`
+      parameters:
+        - '"plead"|"moan"|"demand"'
       tags: ["text"]
-    skulduggeryskilluse:
-      name: skulduggeryskilluse
-    skulduggeryuse:
-      name: skulduggeryuse
-    skulshopevents:
-      name: skulshopevents
-	skybox:
-      skybox: skulshopevents
-	  description:
-        Initializes skybox sidebar.
-    sleep:
+    vore:
+      name: vore
+    voreactions:
+      name: voreactions
+    voreeffects:
+      name: voreeffects
+    voreimg:
+      name: voreimg
+    voreTrait:
       description: |-
-        Process and apply sleep effects, with appropriate interruptions
+        Prints `| Daredevil` or `| Tasty` depending on pc's `$submissive`
+      tags: ["unused", "text"]
+    waist_goo:
+      name: waist_goo
+    wakingEffects:
+      name: wakingEffects
+    wallet:
+      description: |-
+        Prints where active NPC would keep their money
 
-                `<<sleep skipWakeEvents?>>`
-                - **skipWakeEvents** _optional_: `bool` - skip events that could wake pc from sleep, even if they would normally occur
-            parameters:
-                - "|+ bool"
-        sleep_clamp:
-            name: sleep_clamp
-        sleepeffects:
-            name: sleepeffects
-        sleephour:
-            name: sleephour
-        sleepJanet:
-            description: |-
-                Restores the values frozen by `<<callJanet>>`
-        slime_wake_home:
-            name: slime_wake_home
-        slimeEventEnd:
-            name: slimeEventEnd
-        slimeEventResult:
-            name: slimeEventResult
-        slimePunishmentForest:
-            name: slimePunishmentForest
-        slimeSleepEvents:
-            name: slimeSleepEvents
-        slimeWakeAlleyway:
-            name: slimeWakeAlleyway
-        slimeWakeBodyliquid:
-            description: |-
-                Covers pc in random amounts of specified liquid from slime sleepwalking pc around town
-
-                `<<slimeWakeBodyliquid liquid>>`
-                - **liquid**: `string` - liquid to apply to pc
-                  - %liquidTypesDesc%
-            parameters:
-                - "%liquidTypes%"
-        slimeWakeMasturbation:
-            description: |-
-                Activates forced slime masturbation outcome out of sleep
-            tags: ["links"]
-        slithering:
-            description: |-
-                Prints synonym for `slithering`
-            tags: ["text"]
-        slithers:
-            description: |-
-                Prints synonym for `slithers`
-            tags: ["text"]
-        slug_caught:
-            name: slug_caught
-        slug_cave_intro:
-            name: slug_cave_intro
-        slug_end:
-            name: slug_end
-        slug_init:
-            name: slug_init
-        slug_text:
-            name: slug_text
-        slut:
-            description: |-
-                Prints `pervert` or `slut` depending on pc's appearance
-            tags: ["text"]
-        small_text:
-            description: |-
-                Prints appropriate `| Small body` descriptor that allowed this text option
-            tags: ["text"]
-        smugglerdifficultyactions:
-            name: smugglerdifficultyactions
-        smugglerdifficultynpcs:
-            name: smugglerdifficultynpcs
-        smugglerdifficultytext:
-            name: smugglerdifficultytext
-        smugglerobject:
-            name: smugglerobject
-        social:
-            name: social
-        someone:
-            description: |-
-                Prints `<<him>>` of an NPC, either provided or previously selected
-
-                Modifies selected NPC
-
-                `<<someone npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to 0
-            parameters:
-                - "|+ number"
-        someones:
-            description: |-
-                Prints possessive pronoun of an NPC, either provided or previously selected
-
-                Modifies selected NPC if not `"two"`
-
-                `<<someones npcIndex?>>`
-                - **npcIndex** _optional_: `number|string` - zero-based index of active npcs
-                  - `"two"` : does not select NPC, just prints `"their"`
-                  - `0-5` : selects NPC and prints `<<his>>`
-            parameters:
-                - 'number|"two"'
-        spa_actions:
-            name: spa_actions
-        spa_breasts_strip:
-            name: spa_breasts_strip
-        spa_end:
-            name: spa_end
-        spa_event_select:
-            name: spa_event_select
-        spa_genitals_reaction:
-            name: spa_genitals_reaction
-        spa_genitals_strip:
-            name: spa_genitals_strip
-        spa_hand_failed:
-            name: spa_hand_failed
-        spa_init:
-            name: spa_init
-        spa_job_init:
-            name: spa_job_init
-        spa_rape_failed:
-            name: spa_rape_failed
-        spa_rob_options:
-            name: spa_rob_options
-        spa_tan_events:
-            name: spa_tan_events
-        spa_work:
-            name: spa_work
-        spankmaninit:
-            name: spankmaninit
-        spareclothesdomus:
-            name: spareclothesdomus
-        spareschoolswimshorts:
-            name: spareschoolswimshorts
-        spareschoolswimsuit:
-            name: spareschoolswimsuit
-        speak:
-            name: speak
-        specialClothesEffectsSetup:
-            name: specialClothesEffectsSetup
-        specialClothesHint:
-            description: |-
-                Sets the temporary array `_specialClothesHint` to static values
-                - Keys are lowercase special clothes names without spaces
-                - Values are the hints
-            tags: ["temp"]
-        specialClothesSetup:
-            name: specialClothesSetup
-        specialClothesUpdate:
-            name: specialClothesUpdate
-        speech-sydney:
-            name: speech-sydney
-        speechWraith:
-            description: |-
-                Prints up to two relevant wraith lines
-
-                `_line1` / `_line2` are two lines chosen
-
-                `"lines"` argument expects output to be silenced since it doesn't properly set `_speaks`.
-                Consider refactoring to either apply speaks or guarantee no output is generated
-
-                Sydney is a love interest but doesn't have argument override set. Consider refactoring
-
-                `<<speechWraith type?>>`
-                - **type** _optional_: `string` - type of extra modification to do on pool of lines to pull from
-                  - `"none"`: Relevant lines (default)
-                  - `"lines"`: Generic lines
-                  - `loveInterestName`: Overrides present npcs to add relevant lines to pool
-                  - %loveInterestDesc%
-            parameters:
-                - '|+ "none"|"lines"|%loveInterest%'
-            tags: ["text", "temp", "refactor"]
-        spouse:
-            name: spouse
-        spray:
-            description: |-
-                Adds amount of spray uses to pc's state
-
-                `$spray` is number of pepper spray uses available to player where 0 is none remaining
-
-                Consuming a charge does not grant proficiency skill when successfully conserving a charge or using infinite spray. Consider refactoring
-
-                `<<spray numberUses>>`
-                - **numberUses**: `number` - +/- charges to use
-                  - `+number`: Adds additional use to pc
-                  - `-number`: Consumes use of spray
-            parameters:
-                - "number"
-            tags: ["refactor"]
-        sprayspeech:
-            name: sprayspeech
-        stalk_athletics_difficulty:
-            name: stalk_athletics_difficulty
-        stalk_attack:
-            name: stalk_attack
-        stalk_catch:
-            name: stalk_catch
-        stalk_events_followup:
-            name: stalk_events_followup
-        stalk_flight:
-            name: stalk_flight
-        stalk_img:
-            name: stalk_img
-        stalk_init:
-            name: stalk_init
-        stalk_nnpc_name:
-            name: stalk_nnpc_name
-        stalk_nnpc_text_attack:
-            name: stalk_nnpc_text_attack
-        stalk_nnpc_text_confront:
-            name: stalk_nnpc_text_confront
-        stalk_nnpc_text_passed:
-            name: stalk_nnpc_text_passed
-        stalk_nnpc_text_threat:
-            name: stalk_nnpc_text_threat
-        stalk_pursuit:
-            name: stalk_pursuit
-        stalk_run:
-            name: stalk_run
-        stalk_run_events:
-            name: stalk_run_events
-        stalk_skulduggery_difficulty:
-            name: stalk_skulduggery_difficulty
-        stalk_walk_events:
-            name: stalk_walk_events
-        stall_actions:
-            name: stall_actions
-        stall_amount:
-            name: stall_amount
-        stall_chance:
-            name: stall_chance
-        stall_check_text:
-            name: stall_check_text
-        stall_init:
-            name: stall_init
-        stall_inventory:
-            name: stall_inventory
-        stall_sell:
-            name: stall_sell
-        stall_sell_actions:
-            name: stall_sell_actions
-        stall_sell_man:
-            name: stall_sell_man
-        stall_trust:
-            name: stall_trust
-        stallShop-text:
-            name: stallShop-text
-            tags: ["text"]
-        starfish:
-            name: starfish
-        starfisheventend:
-            name: starfisheventend
-        starfishexposed:
-            name: starfishexposed
-            tags: ["unused"]
-        starfishquick:
-            name: starfishquick
-        startbrothelshow:
-            name: startbrothelshow
-        startCaption:
-            name: startCaption
-        startDescriptions:
-            name: startDescriptions
-        startingPlayerImage:
-            name: startingPlayerImage
-        startingPlayerImageReset:
-            name: startingPlayerImageReset
-        startingPlayerImageUpdate:
-            name: startingPlayerImageUpdate
-        startOptions:
-            name: startOptions
-        startOptionsComplexityButton:
-            name: startOptionsComplexityButton
-        startWraith:
-            name: startWraith
-        statbar:
-            description: |-
-                Prints percentage-filled statbar representing values over 0
-
-                See `<<invertedstatbar>>` for unfilled version
-
-                `<<statbar min current max rightMeter? pin?>>`
-                - **min**: `number` - lower bound to clamp display to
-                - **current**: `number` - current amount to consider for percentage calculation
-                - **max**: `number` - max amount to consider for percentage calculation
-                - **rightMeter** _optional_: `bool` - display as small inline version
-                  - Defaults to `false`
-                - **pin**: `number` - ensure current does not go above this value
-                  - Defaults to max
-            parameters:
-                - "number &+ number &+ number |+ bool |+ number"
-            tags: ["dom"]
-        statbarinverted:
-            description: |-
-                Prints percentage-unfilled statbar representing values over 0
-
-                See `<<statbar>>` for filled version
+        Sets `_stealType` to type of clothing if swim suit
 
-        `<<invertedstatbar current max rightMeter?>>`
-        - **current**: `number` - current amount to consider for percentage calculation
-        - **max**: `number` - max amount to consider for percentage calculation
-        - **rightMeter** _optional_: `bool` - display as small inline version
-          - Defaults to `false`
+        npcIndex and active NPC can be out of sync. Consider refactoring
+
+        `<<wallet npcIndex?>>`
+        - **npcIndex** _optional_: `number` - zero-based index of npc to check clothes for
+          - `0-5`: Only affects swimsuit clothing check, not text output
+      parameters:
+        - "|+ number"
+      tags: ["text", "temp", "refactor"]
+    walnutStoreMessage:
+      name: walnutStoreMessage
+    wardrobe:
+      name: wardrobe
+    wardrobeClothingOptions:
+      name: wardrobeClothingOptions
+    wardrobeContents:
+      description: |-
+        Prints either `<<wardrobeList>>` or `<<wardrobeNewOutfit>>` depending on `$lastWardrobeSlot`
+
+        `<<wardrobeNewOutfit>>` is never called because $lastWardrobeSlot is never set to "NewOutfit". Consider refactoring
+      tags: ["refactor", "dom"]
+    wardrobeExits:
+      name: wardrobeExits
+    wardrobeGetRepairedClothes:
+      name: wardrobeGetRepairedClothes
+    wardrobeintegrity:
+      description: |-
+        Prints text integrity description of provided clothing item if below max
+
+        `<<wardrobeintegrity clothingObject slot>>`
+        - **clothingObject**: `object` - Clothes object to be checked for integrity
+        - **slot**: `string` - clothing setup slot to be checked if not on clothingObject
+          - %clothesTypesDesc%
+      parameters:
+        - bareword|var &+ %clothesTypes%
+      tags: ["text"]
+    wardrobeLinks:
+      name: wardrobeLinks
+      tags: ["unused"]
+    wardrobeList:
+      description: |-
+        Prints actual wardrobe contents. Wrapped by `<<wardrobeContents>>`
+
+        `<<wardrobeList slot>>`
+        - **slot**: `string` - clothing slot player has selected selected
+          - %clothesTypesDesc%
       parameters:
-        - 'number &+ number |+ bool'
+        - "%clothesTypes%"
       tags: ["dom"]
-    stateabomination:
-      name: stateabomination
-    stateman:
-      name: stateman
-    statetentacles:
-      name: statetentacles
-    statistics:
-      name: statistics
-    statisticsTimeCompare:
+    wardrobeListReorder:
       description: |-
-        Prints time since provided DateTime in statistics formatting
-        
-        `<<statisticsTimeCompare datetime>>`
-        - **datetime**: `DateTime|timestamp` - timestamp or DateTime object to be checked against
+        Reorders current wardrobe items by provided sorting
+
+        `<<wardrobeListReorder slot orderType descending?>>`
+        - **slot**: `string` - clothing slot to enumerate from current wardrobe
+          - %clothesTypesDesc%
+        - **orderType**: `string` - clothing property to sort by
+          - `"name"` | `"color"` | `"lewd"` | `"integrity"` | `"warmth"` | `"outfit"`
+        - **descending** _optional_: `bool` - sort by descending values
+          - Defaults to false
       parameters:
-        - 'number|var|bareword'
-    statsCaption:
-      name: statsCaption
-    statsWraith:
-      name: statsWraith
-    status:
+        - '%clothesTypes% &+ "name"|"color"|"lewd"|"integrity"|"warmth"|"outfit" |+ bool'
+      tags: ["dom"]
+    wardrobeNewOutfit:
+      name: wardrobeNewOutfit
+    wardrobeSanityCheck:
+      name: wardrobeSanityCheck
+    wardrobeSelection:
       description: |-
-        Adds coolness to pc's state, scaled as appropriate
+        Sets and overrides current wardrobe selection based on `$forceWardrobeLocation`
 
-                `$cool` is a measure of pc's coolness amongst their peers where 0 is not-cool (0-400)
-
-                `<<status change>>`
-                - **change**: `number` - +/- change to apply
-                  - `+number`: linear, multiplied by number of coolness clothes
-                  - `-number`: percentage subtracted from current coolness, values below `-100` are not allowed
-            parameters:
-                - "number"
-        steal:
-            name: steal
-        stealclothes:
-            name: stealclothes
-        steed_he:
-            name: steed_he
-        steed_He:
-            name: steed_He
-        steed_him:
-            name: steed_him
-        steed_his:
-            name: steed_his
-        steed_init:
-            name: steed_init
-        steed_text:
-            name: steed_text
-        sterlingFather:
-            name: sterlingFather
-        sterlingSir:
-            name: sterlingSir
-        sterlingTitle:
-            name: sterlingTitle
-        stockholmTrait:
-            description: |-
-                Prints `| Stockholm Syndrome: X`
-
-                `<<stockholmTrait type?>>`
-                - **type** _optional_: `string` - additional label to apply to output
-            parameters:
-                - "|+ string"
-            tags: ["text"]
-        storeactions:
-            description: |-
-                Strip, print description of actions, and store clothes
-
-                Used as mini-menu on passages
-
-                `<<storeactions tempStrip>>`
-                - **tempStrip**: `string` - location where clothes are being temporarily stored
-            parameters:
-                - text
-            tags: ["text", "links", "dom"]
-        storecleanup:
-            name: storecleanup
-        storeItem:
-            name: storeItem
-        storeload:
-            name: storeload
-        storeloaditem:
-            name: storeloaditem
-        storeon:
-            name: storeon
-        storeonface:
-            name: storeonface
-            tags: ["unused"]
-        storeonfeet:
-            name: storeonfeet
-            tags: ["unused"]
-        storeonhands:
-            name: storeonhands
-            tags: ["unused"]
-        storeonhead:
-            name: storeonhead
-            tags: ["unused"]
-        storeonlegs:
-            name: storeonlegs
-            tags: ["unused"]
-        storeonlower:
-            name: storeonlower
-            tags: ["unused"]
-        storeonneck:
-            name: storeonneck
-            tags: ["unused"]
-        storeonoverhead:
-            name: storeonoverhead
-            tags: ["unused"]
-        storeonoverlower:
-            name: storeonoverlower
-            tags: ["unused"]
-        storeonoverupper:
-            name: storeonoverupper
-            tags: ["unused"]
-        storeonunderlower:
-            name: storeonunderlower
-            tags: ["unused"]
-        storeonunderupper:
-            name: storeonunderupper
-            tags: ["unused"]
-        storeonupper:
-            name: storeonupper
-            tags: ["unused"]
-        storereturn:
-            name: storereturn
-        storesave:
-            name: storesave
-        stormdrain:
-            name: stormdrain
-        straighttrauma:
-            description: |-
-                Adds trauma to pc without any modifiers whatsoever
-
-                Trauma effects on pc are not updated after change.
-                Consider refactoring to call `<<trauma>>` instead of `<<traumaclamp>>`
-
-                `<<straighttrauma change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-            tags: ["unused", "refactor"]
-        strangeman1init:
-            name: strangeman1init
-            tags: ["unused"]
-        strangeman2init:
-            name: strangeman2init
-        strangewoman1init:
-            name: strangewoman1init
-        stray_happiness:
-            name: stray_happiness
-        stray_happiness_text:
-            name: stray_happiness_text
-        street_alley_detour:
-            name: street_alley_detour
-        street_niki:
-            name: street_niki
-        street_rescue:
-            name: street_rescue
-        street1:
-            name: street1
-        street10:
-            name: street10
-        street2:
-            name: street2
-        street3:
-            name: street3
-        street4:
-            name: street4
-        street5:
-            name: street5
-        street6:
-            name: street6
-        street7:
-            name: street7
-        street8:
-            name: street8
-        street9:
-            name: street9
-        streetabstinence:
-            name: streetabstinence
-        streetavery:
-            name: streetavery
-        streetbestialityfame:
-            name: streetbestialityfame
-        streetbodywriting:
-            name: streetbodywriting
-        streetbottomgrope:
-            name: streetbottomgrope
-        streetbound:
-            name: streetbound
-        streetbox:
-            name: streetbox
-        streetbullies:
-            name: streetbullies
-        streetcollared:
-            name: streetcollared
-        streetcriminalbodywriting:
-            name: streetcriminalbodywriting
-        streetdog:
-            name: streetdog
-        streetedenangry:
-            name: streetedenangry
-        streetedenrage:
-            name: streetedenrage
-        streetedenworried:
-            name: streetedenworried
-        streeteffects:
-            name: streeteffects
-        streetex1:
-            name: streetex1
-        streetex2:
-            name: streetex2
-        streetex3:
-            name: streetex3
-        streetex4:
-            name: streetex4
-        streetex5:
-            name: streetex5
-        streetexday1:
-            name: streetexday1
-        streetexday2:
-            name: streetexday2
-        streetexhibitionismfame:
-            name: streetexhibitionismfame
-        streetExhibitionismFameShamed:
-            name: streetExhibitionismFameShamed
-        streetexoffer:
-            name: streetexoffer
-        streetexoffer2:
-            name: streetexoffer2
-        streetexoffer3:
-            name: streetexoffer3
-        streetexoffer4:
-            name: streetexoffer4
-        streetexshow:
-            name: streetexshow
-        streetfamerape:
-            name: streetfamerape
-        streetfootbridge:
-            name: streetfootbridge
-        streetfriendly1:
-            name: streetfriendly1
-        streetheeltrip:
-            name: streetheeltrip
-        streetkidnap:
-            name: streetkidnap
-        streetlowertowel:
-            name: streetlowertowel
-        streetlurker:
-            name: streetlurker
-        streetmodelshow:
-            name: streetmodelshow
-        streetnight1:
-            name: streetnight1
-        streetnight2:
-            name: streetnight2
-        streetnpcflash:
-            name: streetnpcflash
-        streetoffer:
-            name: streetoffer
-            tags: ["unused"]
-        streetorphancookie:
-            name: streetorphancookie
-        streetpolice:
-            name: streetpolice
-        streetpregnancyfame:
-            name: streetpregnancyfame
-        streetprostitutionfame:
-            name: streetprostitutionfame
-        streetrapefame:
-            name: streetrapefame
-        streetrocks:
-            name: streetrocks
-        streetsexfame:
-            name: streetsexfame
-        streetstray:
-            name: streetstray
-        streettentacle:
-            name: streettentacle
-        streetuppertowel:
-            name: streetuppertowel
-        streetvan:
-            name: streetvan
-        streetwanted:
-            name: streetwanted
-        streetwhorebodywriting:
-            name: streetwhorebodywriting
-        stress:
-            description: |-
-                Adds stress to pc with appropriate modifiers
-
-                `$stress` is pc's stress amount where 0 is healthy (0-10,000)
-
-                `<<stress change multiplierOverride?>>`
-                - **change**: `number` - +/- change to apply
-                - **multiplierOverride** _optional_: `number` - multiplier to use in place of calculated one
-                  - Defaults to some modification of `1` or `0.8` if negative
-            parameters:
-                - "number |+ number"
-        stresscaption:
-            name: stresscaption
-        strip:
-            name: strip
-        stripobject:
-            description: |-
-                Prints description of and ruins upper, lower, and under_lower clothes
-
-                `$stripobject` is the text name of object used to snag clothes off player
-
-                `$stripintegrity` is the damage to apply to clothes before determining if it would be stripped
-
-                Does not take into account over clothes. Consider refactoring
-            tags: ["text", "refactor"]
-        strippedtext:
-            description: |-
-                Template tree for control, trauma, stress
-
-                Empty widget, consider refactoring
-            tags: ["unused", "legacy", "refactor"]
-        strokerSelfPenisEntrance:
-            name: strokerSelfPenisEntrance
-        strokes:
-            name: strokes
-        struggle:
-            name: struggle
-        struggle_actions:
-            name: struggle_actions
-        struggle_add:
-            name: struggle_add
-        struggle_appendage:
-            name: struggle_appendage
-        struggle_attach:
-            name: struggle_attach
-        struggle_bide_the:
-            name: struggle_bide_the
-        struggle_bodypart:
-            name: struggle_bodypart
-        struggle_clothes:
-            name: struggle_clothes
-        struggle_creatures:
-            name: struggle_creatures
-        struggle_difficulty:
-            name: struggle_difficulty
-            tags: ["unused"]
-        struggle_difficulty_set:
-            name: struggle_difficulty_set
-        struggle_effects:
-            name: struggle_effects
-        struggle_end:
-            name: struggle_end
-        struggle_enemy:
-            name: struggle_enemy
-        struggle_flat_chest:
-            name: struggle_flat_chest
-        struggle_fluid:
-            name: struggle_fluid
-        struggle_init:
-            name: struggle_init
-        struggle_name:
-            name: struggle_name
-        struggle_part_init:
-            name: struggle_part_init
-        struggle_region:
-            name: struggle_region
-        struggle_skin:
-            name: struggle_skin
-        struggle_state:
-            name: struggle_state
-        struggleClearActions:
-            name: struggleClearActions
-        stuck_in_wall_oral:
-            name: stuck_in_wall_oral
-        sub:
-            description: |-
-                Adds submissiveness quality to pc's state and applies effects
-
-                `$submissive` is a measure of pc's defiant/ submissive spectrum where 0 is defiant and 1,000 is neutral (0-2,000)
-
-                See `<<def>>`
-
-                `<<sub change>>`
-                - **change**: `number` - + change to apply
-            parameters:
-                - "number"
-        sub_check:
-            description: |-
-                Applies effects from pc changing submissiveness
-        submission:
-            name: submission
-        submissivetext:
-            description: |-
-                Prints `| Submissive`
-            tags: ["text"]
-        subsectionSettingsTabButton:
-            name: subsectionSettingsTabButton
-        suffocatepass:
-            name: suffocatepass
-        suspicion:
-            description: |-
-                Adds suspicion to pc's state
-
-                `$suspicion` is asylum's level of suspicion towards the pc where 0 is not-suspicious (0-100)
-
-                `<<suspicion change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        svg:
-            container: true
-            name: svg
-        swallowed:
-            name: swallowed
-        swallowedstat:
-            name: swallowedstat
-        swarm:
-            name: swarm
-        swarm_img:
-            name: swarm_img
-        swarmactions:
-            name: swarmactions
-        swarmeffects:
-            name: swarmeffects
-        swarminit:
-            name: swarminit
-        swarmName:
-            name: swarmName
-        swim_check:
-            name: swim_check
-        swimmingdifficulty:
-            name: swimmingdifficulty
-        swimmingdifficultytext0:
-            description: |-
-                Prints `| These waters look safe` if stats are visible
-            tags: ["text"]
-        swimminglessoneffects:
-            name: swimminglessoneffects
-            tags: ["unused"]
-        swimmingskilluse:
-            name: swimmingskilluse
-        swimmingtext:
-            description: |-
-                Prints color-coded adjective of active swimming skill usage
-            tags: ["text"]
-        sydneyBeachGender:
-            name: sydneyBeachGender
-        sydneyBodywriting:
-            name: sydneyBodywriting
-        sydneyBodywritingLocation:
-            name: sydneyBodywritingLocation
-        sydneyChastityMessage:
-            name: sydneyChastityMessage
-        sydneyExpose:
-            name: sydneyExpose
-        sydneyFinish:
-            name: sydneyFinish
-        sydneyGenitals:
-            name: sydneyGenitals
-        sydneyGlasses:
-            name: sydneyGlasses
-        sydneyGreeting:
-            name: sydneyGreeting
-        sydneyLewd:
-            name: sydneyLewd
-        sydneyLibrary:
-            name: sydneyLibrary
-        sydneyMass:
-            name: sydneyMass
-        sydneymother:
-            name: sydneymother
-        sydneyMother:
-            name: sydneyMother
-            tags: ["unused"]
-        sydneymum:
-            name: sydneymum
-        sydneyMum:
-            name: sydneyMum
-        sydneyOptions:
-            name: sydneyOptions
-        sydneyOptionsLeave:
-            name: sydneyOptionsLeave
-        sydneyOptionsTalk:
-            name: sydneyOptionsTalk
-        sydneyOtherParent:
-            name: sydneyOtherParent
-        sydneyOtherParentGender:
-            name: sydneyOtherParentGender
-        sydneySchedule:
-            name: sydneySchedule
-        sydneySexFail:
-            name: sydneySexFail
-        sydneySirrisResemble:
-            name: sydneySirrisResemble
-        sydneySwimwear:
-            name: sydneySwimwear
-        sydneyTortureFail:
-            name: sydneyTortureFail
-        sydneyTortureOptions:
-            name: sydneyTortureOptions
-        sydneyWarning:
-            description: |-
-                Prints `| This action might/will purify/corrupt Sydney`
-
-                Relies on `_warnstate` for default case
-
-                `<<sydneyWarning type?>>`
-                - **type** _optional_: `string` - severity of corruption
-                  - `"purify"` | `"corrupt"`: "might" corruption messages
-                  - `default`: "will" corruption messages
-            parameters:
-                - '|+ "purify"|"corrupt"'
-            tags: ["temp", "text"]
-        tableText:
-            name: tableText
-        tailorinit:
-            name: tailorinit
-        takeHandholdingVirginity:
-            name: takeHandholdingVirginity
-        takeKissVirginity:
-            name: takeKissVirginity
-        takeKissVirginityNamed:
-            name: takeKissVirginityNamed
-        takeNPCVirginity:
-            name: takeNPCVirginity
-        takeTempleVirginity:
-            name: takeTempleVirginity
-        takeVirginity:
-            name: takeVirginity
-        tanned:
-            name: tanned
-        targetListBox:
-            name: targetListBox
-        targetrepeatcontroller:
-            name: targetrepeatcontroller
-        tattoo:
-            name: tattoo
-        tattoo_parlour:
-            name: tattoo_parlour
-        tattooed_inmate:
-            name: tattooed_inmate
-        tattooFilter:
-            name: tattooFilter
-        tattooList:
-            name: tattooList
-        taylorSibling:
-            name: taylorSibling
-        taylorSon:
-            name: taylorSon
-        tearful:
-            description: |-
-                Prints player opinion of their state based on trauma, stress, arousal, and pain
-
-                Description is without subject and capitalised
-
-                Example:
-                ```
-                <<tearful>> you are made an example of.
-                ```
-            tags: ["text"]
-        tearup:
-            name: tearup
-        telltalepenissize:
-            name: telltalepenissize
-        temperature:
-            name: temperature
-        temple_bailey_options:
-            name: temple_bailey_options
-        temple_effects:
-            name: temple_effects
-        temple_spear_mission_end:
-            name: temple_spear_mission_end
-        temple_title:
-            name: temple_title
-        temple_Title:
-            name: temple_Title
-        tending:
-            name: tending
-        tending_bird_eggs:
-            name: tending_bird_eggs
-        tending_day:
-            name: tending_day
-        tending_give:
-            name: tending_give
-        tending_harvest:
-            name: tending_harvest
-        tending_pick:
-            description: |-
-                Gives the pc a random number of plants, modified by traits
-
-                `<<tending_pick type min? max?>>`
-                - **type**: `string` - type of plant to pick
-                  - %plantTypesDesc%
-                - **min** _optional_: `number` - min number of plants to pick
-                  - Defaults to `1`
-                - **max** _optional_: `object` - max number of plants to pick
-                  - Defaults to `5`
-            parameters:
-                - "%plantTypes%"
-                - "%plantTypes% &+ number &+ number"
-        tending_season_notice:
-            name: tending_season_notice
-        tending_text:
-            description: |-
-                Prints color-coded description of how good the player is at housekeeping
-            tags: ["text"]
-        tendingdifficulty:
-            name: tendingdifficulty
-        tendingPlantSeedsOptions:
-            name: tendingPlantSeedsOptions
-        tendingtext:
-            description: |-
-                Prints color-coded adjective of active tending skill usage
-            tags: ["text"]
-        tendingTillOptions:
-            name: tendingTillOptions
-        tendingWaterAllDryBeds:
-            name: tendingWaterAllDryBeds
-        tendingWaterPlot:
-            name: tendingWaterPlot
-        tentacle_forest_end_scene:
-            name: tentacle_forest_end_scene
-        tentacle_forest_events:
-            name: tentacle_forest_events
-        tentacle_forest_orgasm_scene:
-            name: tentacle_forest_orgasm_scene
-        tentacle_forest_pass:
-            name: tentacle_forest_pass
-        tentacle_forest_safe_orgasm:
-            name: tentacle_forest_safe_orgasm
-        tentacle_forest_stress_scene:
-            name: tentacle_forest_stress_scene
-        tentacle_forest_time:
-            name: tentacle_forest_time
-        tentacle_skin:
-            name: tentacle_skin
-        tentacleact:
-            name: tentacleact
-            tags: ["unused"]
-        tentacleadv:
-            description: |-
-                Main controller for advanced tentacles combat system
-
-                `<<tentacleadv tentacleObject>>`
-                - **tentacleObject**: `object` - Tentacle from `$tentacles`
-            parameters:
-                - var|bareword
-            tags: ["text"]
-        tentacleadvdefault:
-            description: |-
-                Prints effects of a provided idle tentacle ejaculating onto player
-
-                `<<tentacleadvdefault tentacleObject>>`
-                - **tentacleObject**: `object` - Tentacle from `$tentacles`
-            parameters:
-                - var|bareword
-            tags: ["text"]
-        tentacleadvdisable:
-            description: |-
-                Disables provided tentacle
-
-                `<<tentacleadvdisable tentacleObject>>`
-                - **tentacleObject**: `object` - Tentacle from `$tentacles`
-            parameters:
-                - var|bareword
-        tentacledefault:
-            name: tentacledefault
-        tentacleDefaults:
-            name: tentacleDefaults
-        tentacledirection:
-            name: tentacledirection
-        tentacledisable:
-            name: tentacledisable
-        tentacleimg:
-            name: tentacleimg
-        tentacleimgmiss:
-            name: tentacleimgmiss
-        tentacles:
-            name: tentacles
-        tentaclestart:
-            name: tentaclestart
-        tentacleTrait:
-            description: |-
-                Prints `| Witch` or `| Prey` depending on pc's `$submissive`
-            tags: ["unused", "text"]
-        tentaclewolf:
-            name: tentaclewolf
-        tentacleworldend:
-            name: tentacleworldend
-        tentacleworldintro:
-            name: tentacleworldintro
-        tenyclusPlay:
-            name: tenyclusPlay
-        testicle:
-            description: |-
-                Prints synonym for testicle
-
-                `<<testicle situation?>>`
-                - **situation** _optional_: `string` - category to filter possible outputs by
-                  - `"clinical"`
-            parameters:
-                - '|+ "clinical"'
-            tags: ["unused", "text"]
-        testicles:
-            description: |-
-                Prints synonym for testicles
-
-                `<<testicle situation?>>`
-                - **situation** _optional_: `string` - category to filter possible outputs by
-                  - `"clinical"`
-            parameters:
-                - '|+ "clinical"'
-            tags: ["text"]
-        testMultiple:
-            name: testMultiple
-            tags: ["unused"]
-        testSingles:
-            name: testSingles
-        text_pillory_release_fail_strip:
-            name: text_pillory_release_fail_strip
-        textmap:
-            name: textmap
-        that:
-            description: |-
-                Prints plural/singular prose of that (those/that) for provided clothing slot
-
-                `<<that slot>>`
-                - **slot**: `string` - category of worn clothing to check
-                  - %clothesTypesDesc%
-            parameters:
-                - "%clothesTypes%"
-            tags: ["text"]
-        the_pillory_person:
-            description: |-
-                Prints `The <<person>>` or the name of person in the pillory
-
-                Lowercase `<<The_pillory_person>>`.
-                Related to `<<a_pillory_person>>`/ '<<A_pillory_person>>'
-            tags: ["text"]
-        The_pillory_person:
-            description: |-
-                Prints `The <<person>>` or the name of person in the pillory
+        `$forceWardrobeLocation` is a string from possible `$location` values
 
-        Capitalised `<<the_pillory_person>>`.
-        Related to `<<a_pillory_person>>`/ '<<A_pillory_person>>'
-      tags: ["text"]
-    thermometer:
+        `<<wardrobeList allowTransfer?>>`
+        - **blockTransfer** _optional_: `bool` - block transfering from this wardrobe
+          - Defaults to false
+          - Currently implemented as pseudo-teleportator while debug is enabled
+      parameters:
+        - "|+ bool"
+      tags: ["refactor"]
+    wardrobeSend:
+      name: wardrobeSend
+    wardrobesUpdate:
+      name: wardrobesUpdate
+    wardrobewear:
+      name: wardrobewear
+    warmth:
+      name: warmth
+    warmth_description:
+      name: warmth_description
+    warmthscale:
+      name: warmthscale
+    warmthscale-internal:
+      name: warmthscale-internal
+    wash:
+      name: wash
+    wash_face:
+      name: wash_face
+    wash_mouth:
+      name: wash_mouth
+    washmakeup:
+      name: washmakeup
+    washRecordedSperm:
+      name: washRecordedSperm
+    water:
+      name: water
+    wateraction:
+      name: wateraction
+    waterwash:
+      name: waterwash
+    wearandtear:
+      name: wearandtear
+    wearlink_norefresh:
       description: |-
-        Displays the body temperature thermometer.
-    their:
+        Creates non-refreshing links that will update clothes according to `$wardrobeOption`
+
+        `$wardrobeOption` is `0` or a form option as a string
+
+        `<<wearlink_norefresh displayName clothingId actionVariable?>>`
+        - **displayName**: `string` - the text of the link. May contain markup
+        - **clothingId**: `number|string` - id of clothing to apply when clicked
+          - Index in slot array on selected wardrobe
+          - Key of non-outfit actions (`"towel"` | `"large_towel"` | `"strip"`)
+        - **actionVariable** _optional_: `string` - clothing slot wear action key to treat as selected
+          - Defaults to variable pointed to by temporary variable `_wear`
+          - `wear_` + (%clothesTypesDesc%)
+      parameters:
+        - text &+ number|"towel"|"large_towel"|"strip" |+ text
+      tags: ["temp", "dom"]
+    wearoutfit:
+      name: wearoutfit
+    wearProp:
       description: |-
-        Prints `their/<<him>>` of an NPC based on combat size, either provided or previously selected
+        Temporarily equips a handheld prop for visual effect in scenes
 
-                Modifies selected NPC if combat is single man
-
-                `<<their npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of active npcs
-                  - `0-5`: Defaults to 0
-            parameters:
-                - "|+ number"
-            tags: ["text"]
-        theowner:
-            description: |-
-                Prints `the owner` or active NPC pronoun based on number of enemies
-            tags: ["text"]
-        thighactionDifficulty:
-            name: thighactionDifficulty
-        thighActionInit:
-            name: thighActionInit
-        thighactions:
-            name: thighactions
-        thighdifficulty:
-            description: |-
-                Prints color-coded adjective of thigh action difficulty in current combat
-            tags: ["text"]
-        thighejacstat:
-            name: thighejacstat
-        thighskill:
-            description: |-
-                Adds thigh skill to pc's state
-
-                `$thighskill` is a measure of pc's proficiency using their thighs where 0 is awkward (0-1,000)
-
-                `<<thighskill change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        thighskilluse:
-            name: thighskilluse
-        thighstat:
-            name: thighstat
-        thightext:
-            description: |-
-                Prints color-coded adjective of active thigh skill usage
-            tags: ["text"]
-        thirst:
-            name: thirst
-            tags: ["unused"]
-        threaten:
-            description: |-
-                Prints a random spoken threat of active NPC towards player
-            tags: ["text"]
-        timeAfterXHours:
-            description: |-
-                Prints formatted time after X hours would pass
-
-                `<<timeAfterXHours hours>>`
-                - **hours**: `number` - number of hours to simulate passing
-            parameters:
-                - "number"
-            tags: ["text"]
-        tinyPenisDryOrgasmChance:
-            name: tinyPenisDryOrgasmChance
-        tip_neg:
-            name: tip_neg
-        tip_up:
-            name: tip_up
-        tipreceive:
-            name: tipreceive
-        tips:
-            name: tips
-        tipset:
-            name: tipset
-        tiredness:
-            description: |-
-                Adds tiredness to pc's state
-
-                `$tiredness` is pc's amount of tiredness where 0 is not-tired (0-2,000)
-
-                tiredness is unclamped and source is unused. Consider refactoring
-
-                `<<tiredness change source?>>`
-                - **change**: `number` - +/- change to apply
-                - **source** _optional_: `string` - source of tiredness change
-                  - `"pass"`: tiredness gained from passage of time, not affected by modifiers
-            parameters:
-                - 'number |+ "pass"'
-            tags: ["refactor"]
-        tirednesscaption:
-            name: tirednesscaption
-        titleBlackjackHelp:
-            name: titleBlackjackHelp
-        titleCharacteristics:
-            name: titleCharacteristics
-        titleCheats:
-            name: titleCheats
-        titleDebugRenderer:
-            name: titleDebugRenderer
-        titleEventInfo:
-            name: titleEventInfo
-        titleFeats:
-            name: titleFeats
-        titleJournal:
-            name: titleJournal
-        titlejournalNotes:
-            name: titlejournalNotes
-        titleOptions:
-            name: titleOptions
-        titleOutfitEditor:
-            name: titleOutfitEditor
-        titleSaves:
-            name: titleSaves
-        titleSocial:
-            name: titleSocial
-        titleStats:
-            name: titleStats
-        titleTraits:
-            name: titleTraits
-        toggleAltLink:
-            description: |-
-                Creates link that toggles unique clothing between alternate states
-
-                `<<toggleAltLink slot location>>`
-                - **slot**: `string` - clothing slot being toggled
-                  - %clothesTypesDesc%
-                - **location** _optional_: `string` - location where clothing is being toggled
-                  - `"wardrobe"`
-            parameters:
-                - '%clothesTypes% |+ "wardrobe"|"shop"'
-            tags: ["dom", "text"]
-        toggleAltPosition:
-            description: |-
-                Toggles unique clothing between alternate states
-
-                `<<toggleAltPosition slot>>`
-                - **slot**: `string` - clothing slot being toggled
-                  - %clothesTypesDesc%
-            parameters:
-                - "%clothesTypes%"
-        toggleAltSleeve:
-            description: |-
-                Toggles unique clothing between alternate sleeve states
-
-                `<<toggleAltSleeve inDefaultState? inAltState?>>`
-                - **inDefaultState** _optional_: `string` - text to be printed if sleeves are using their default image
-                  - Defaults to "Roll up sleeves"
-                - **inAltState** _optional_: `string` - text to be printed if sleeves are using their alt image
-                  - Defaults to "Unroll sleeves"
-            parameters:
-                - "|+ string |+ string"
-            tags: ["dom"]
-        toggledebug:
-            name: toggledebug
-            tags: ["unused"]
-        toggleFaceLayer:
-            description: |-
-                Creates link that toggles hair position on face
-
-                First arg is never used. Consider refactoring
-
-                `<<toggleFaceLayer location>>`
-                - **location** _optional_: `string` - location where clothing is being toggled
-                  - `"wardrobe"`
-            parameters:
-                - '|+ "wardrobe"|"shop"'
-            tags: ["dom", "text", "refactor"]
-        toggleHood:
-            description: |-
-                Toggles pc's hood state between up and down
-
-                `<<toggleHood location>>`
-                - **location** _optional_: `string` - location where hood is being toggled
-                  - Only respects "shop"
-            parameters:
-                - '|+ "shop"'
-        toggleHoodLink:
-            description: |-
-                Creates link that toggles pc's hood state between up and down
-
-                `<<toggleHoodLink location>>`
-                - **location** _optional_: `string` - location where hood is being toggled
-                  - Only respects "shop"
-            parameters:
-                - '|+ "shop"'
-            tags: ["dom", "text"]
-        toggleLeash:
-            name: toggleLeash
-        toggleLowerTuck:
-            description: |-
-                Outputs a link that toggles lower tucked state
-
-                `<<toggleLowerTuck untuckText? tuckText?>>`
-                - **untuckText** _optional_: `string` - text to be printed if already tucked
-                  - Defaults to "Untuck"
-                - **tuckText** _optional_: `string` - text to be printed if already untucked
-                  - Defaults to "Tuck in"
-            parameters:
-                - "|+ string |+ string"
-            tags: ["dom"]
-        toggleMannequinGender:
-            name: toggleMannequinGender
-        toggleTab:
-            name: toggleTab
-        toggleUpperTuck:
-            description: |-
-                Outputs a link that toggles upper tucked state
-
-                `<<toggleUpperTuck untuckText? tuckText?>>`
-                - **untuckText** _optional_: `string` - text to be printed if already tucked
-                  - Defaults to "Untuck"
-                - **tuckText** _optional_: `string` - text to be printed if already untucked
-                  - Defaults to "Tuck in"
-            parameters:
-                - "|+ string |+ string"
-            tags: ["dom"]
-        top:
-            description: |-
-                Prints name of outermost top clothing layer
-
-                Does not take into account over_top. Consider refactoring
-            tags: ["refactor", "text"]
-        topaside:
-            description: |-
-                Prints name of innermost top clothing layer that can be seen or `top` if everything is exposed
-
-                See `<<breastsaside>>`
-
-                Does not take into account over_top. Consider refactoring
-            tags: ["refactor", "text"]
-        TopShop:
-            name: TopShop
-        towelup:
-            name: towelup
-        towelupm:
-            name: towelupm
-        tower_creature_text:
-            description: |-
-                Prints monster/ beast noun of the first NPC slot
-
-                To be used for the tower creature
-            tags: ["text"]
-        toy:
-            name: toy
-        toyName:
-            name: toyName
-        toySelection:
-            name: toySelection
-        traitLists:
-            name: traitLists
-        traitListsSearch:
-            name: traitListsSearch
-        traits:
-            name: traits
-        transform:
-            name: transform
-        transformationAlteration:
-            name: transformationAlteration
-        transformationStateUpdate:
-            name: transformationStateUpdate
-        TrashComparePlayerBreastsReact:
-            name: TrashComparePlayerBreastsReact
-        TrashComparePlayerChastity:
-            name: TrashComparePlayerChastity
-        TrashComparePlayerPenisReact:
-            name: TrashComparePlayerPenisReact
-        trashSelect:
-            name: trashSelect
-        trauma:
-            description: |-
-                Adds trauma to pc based on control and trait modifiers
-
-                `$trauma` is pc's trauma amount where 0 is healthy (0-5,000)
-
-                See `<<combattrauma>>` and `<<straighttrauma>>` for other use cases
-
-                `unusedArg` is not implemented. Consider refactoring to remove or implement
-
-                `<<trauma change? unusedArg?>>`
-                - **change** _optional_: `number` - +/- change to apply
-                  - if not provided, just updates pc's trauma effects
-                - **unusedArg** _optional_: `bool` - doesn't do anything (truthy)
-            parameters:
-                - "number"
-            tags: ["refactor"]
-        traumacaption:
-            name: traumacaption
-        traumaclamp:
-            name: traumaclamp
-        tryOnInit:
-            name: tryOnInit
-        tryOnReset:
-            name: tryOnReset
-        tryOnStats:
-            name: tryOnStats
-        tryOnWear:
-            name: tryOnWear
-        tummyejacstat:
-            name: tummyejacstat
-        turnend:
-            name: turnend
-        twinescript:
-            container: true
-            name: twinescript
-        unbecomePinch:
-            description: |-
-                Overwrites some story variables with their respective values in `$frozenValues`, without modifying the latter
-
-                Use to visually restore a pc morphed with `<<becomePinch>>` to their original state (not all values are restored)
-        unbind:
-            name: unbind
-        unbindtemp:
-            name: unbindtemp
-        underbottoms:
-            description: |-
-                Prints under_lower clothing layer, taking into account if it is part of an outfit
-            tags: ["text"]
-        UnderBottomShop:
-            name: UnderBottomShop
-        undergroundCellOptions:
-            name: undergroundCellOptions
-        undergroundEscapeForestRobin:
-            name: undergroundEscapeForestRobin
-        undergroundEscapeForestStart:
-            name: undergroundEscapeForestStart
-        undergroundPlantFakeChoice:
-            name: undergroundPlantFakeChoice
-        undergroundReturnToCell:
-            name: undergroundReturnToCell
-        undergroundRobinInterlude:
-            name: undergroundRobinInterlude
-        undergroundRobinKiss:
-            name: undergroundRobinKiss
-        undergroundRobinTopic:
-            name: undergroundRobinTopic
-        undergroundRobinTopicRefresh:
-            name: undergroundRobinTopicRefresh
-        underlowerhas:
-            description: |-
-                Prints plural/singular prose of has (have/has) for worn `"under_lower"` slot
-        underlowerimg:
-            name: underlowerimg
-        underlowerintegrity:
-            name: underlowerintegrity
-            tags: ["unused"]
-        underlowerit:
-            description: |-
-                Prints an objective case pronoun (them/it) for worn `"under_lower"` slot
-            tags: ["text"]
-        underloweritis:
-            description: |-
-                Prints a pronoun/ present indicative pair (they are/it is) describing worn `"under_lower"` slot
-            tags: ["unused", "text"]
-        underloweron:
-            name: underloweron
-            tags: ["unused"]
-        underlowerplural:
-            description: |-
-                Prints a present indicative (are/is) for the worn `"under_lower"` slot
-            tags: ["text"]
-        underlowerruined:
-            description: |-
-                Destroys pc's under_lower slot clothing, whether worn or carried
-
-                `<<underlowerruined noRebuy? exposedType?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-                - **exposedType** _optional_: `string` - reason for exposing under lower
-                  - `"commando"` | `"given"` | `"stolen"` | `"sold"`
-            parameters:
-                - '|+ bool|null|undefined |+ "commando"|"given"|"stolen"|"sold"'
-        underlowersend:
-            name: underlowersend
-        underlowersteal:
-            name: underlowersteal
-        underlowerstrip:
-            name: underlowerstrip
-        underlowerthat:
-            description: |-
-                Prints plural/singular prose of that (those/that) for worn `"under_lower"` slot
-            tags: ["unused", "text"]
-        underlowerundress:
-            name: underlowerundress
-        underlowerwear:
-            name: underlowerwear
-        underlowerwet:
-            description: |-
-                Adds wetness to pc's under lower clothing state
-
-                `$underlowerwet` is a measure of how wet pc's under lower clothing is where 0 is dry (0-200)
-
-                `$underlowerwetstate` is a measure of effects due to wetness of pc's under lower clothing where 0 is dry (0-3)
-
-                Over clothes don't take into account wetness. Consider refactoring to expand
-
-                `<<underlowerwet change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-            tags: ["refactor"]
-        underoutfit:
-            name: underoutfit
-        UnderOutfitShop:
-            name: UnderOutfitShop
-        underruined:
-            description: |-
-                Destroys pc's under_upper and under_lower slot clothing, whether worn or carried
-        underslither:
-            name: underslither
-        undertop:
-            name: undertop
-        UnderTopShop:
-            name: UnderTopShop
-        underupperhas:
-            description: |-
-                Prints plural/singular prose of has (have/has) for worn `"under_upper"` slot
-            tags: ["text"]
-        underupperimg:
-            name: underupperimg
-        underupperintegrity:
-            name: underupperintegrity
-            tags: ["unused", "text"]
-        underupperit:
-            description: |-
-                Prints an objective case pronoun (them/it) for worn `"under_upper"` slot
-            tags: ["text"]
-        underupperitis:
-            description: |-
-                Prints a pronoun/ present indicative pair (they are/it is) describing worn `"under_upper"` slot
-            tags: ["unused", "text"]
-        underupperon:
-            name: underupperon
-            tags: ["unused"]
-        underupperplural:
-            description: |-
-                Prints a present indicative (are/is) for the worn `"under_upper"` slot
-            tags: ["text"]
-        underupperruined:
-            description: |-
-                Destroys pc's under_upper slot clothing, whether worn or carried
-
-                `<<underupperruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        underuppersend:
-            name: underuppersend
-        underuppersteal:
-            name: underuppersteal
-        underupperstrip:
-            name: underupperstrip
-        underupperthat:
-            description: |-
-                Prints plural/singular prose of that (those/that) for worn `"under_upper"` slot
-            tags: ["unused", "text"]
-        underupperundress:
-            name: underupperundress
-        underupperwear:
-            name: underupperwear
-        underupperwet:
-            description: |-
-                Adds wetness to pc's under upper clothing state
-
-                `$underupperwet` is a measure of how wet pc's under upper clothing is where 0 is dry (0-200)
-
-                `$underupperwetstate` is a measure of effects due to wetness of pc's under upper clothing where 0 is dry (0-3)
-
-                Over clothes don't take into account wetness. Consider refactoring to expand
-
-                `<<underupperwet change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-            tags: ["refactor"]
-        underwater:
-            name: underwater
-        underwearTypeText:
-            description: |-
-                Prints "underwear" or more specific type as appropriate
-            tags: ["text"]
-        underworld_nickname:
-            description: |-
-                Prints pc's nickname used in the underworld
-
-                See `<<overworld_nickname>>`
-
-                `<<underworld_nickname textTransform>>`
-                - **textTransform**: `string` - transformation to apply to text before printing
-                  - `"cap"`: Capitalise
-            parameters:
-                - '|+ "cap"'
-            tags: ["text"]
-        undies:
-            name: undies
-        undiestrauma:
-            name: undiestrauma
-        undress:
-            name: undress
-        undressclothes:
-            name: undressclothes
-        undressKeepFace:
-            name: undressKeepFace
-        undressmid:
-            name: undressmid
-        undressNPC:
-            name: undressNPC
-        undressOverClothes:
-            name: undressOverClothes
-        undressSleep:
-            name: undressSleep
-        unlockAdultShop:
-            name: unlockAdultShop
-        update_npc_pillory_appearance:
-            name: update_npc_pillory_appearance
-        update_school_skills:
-            name: update_school_skills
-        updateallure:
-            name: updateallure
-        updateAskColour:
-            name: updateAskColour
-        updatebuysendhome:
-            name: updatebuysendhome
-            tags: ["unused"]
-        updateChildActivity:
-            name: updateChildActivity
-        updateClothes:
-            name: updateClothes
-        updateclotheslist:
-            name: updateclotheslist
-        updateclothingshop:
-            name: updateclothingshop
-        updateFeatName:
-            name: updateFeatName
-        updateFeats:
-            name: updateFeats
-        updateFeatsPointsMenu:
-            name: updateFeatsPointsMenu
-        updateHallucinations:
-            description: |-
-                Updates pc's hallucination state based on trauma, awareness, drugs, weather, and clothing
-        updatehistorycontrols:
-            name: updatehistorycontrols
-        updatemannequin:
-            name: updatemannequin
-        updateMuseumAntiques:
-            name: updateMuseumAntiques
-        updateNewNamedNpcs:
-            description: |-
-                Adds non-present new NPCs to saves with version 1 or 2 $npcNamedVersion
-        updateNPC:
-            description: |-
-                Updates named persistent npc with data from given slot
-
-                Currently only updates virginity
-
-                `<<updateNPC npcObject>>`
-                - **npcObject**: `object` - full npc object to pull update data from
-            parameters:
-                - "var|bareword"
-        updateNPCsFirst:
-            description: |-
-                Updates all persistent npcs first-order properties to specific value
-
-                See `<<updateNPCsSecond>>` for second-order properties
-
-                Could be made to accept a function as value to increase useability in data migration. Consider refactoring
-
-                `<<updateNPCsFirst key value>>`
-                - **key**: `string` - first-order key to modify
-                - **value**: `any` - value to set
-            parameters:
-                - "string &+ var|bareword"
-            tags: ["unused", "refactor"]
-        updateNPCsSecond:
-            description: |-
-                Updates all persistent npcs second-order properties to specific value
-
-                See `<<updateNPCsFirst>>` for first-order properties
-
-                Could be made to accept a function as value to increase useability in data migration. Consider refactoring
-
-                `<<updateNPCsFirst firstKey secondKey value>>`
-                - **firstKey**: `string` - first-order key to modify
-                - **secondKey**: `string` - second-order key to modify
-                - **value**: `any` - value to set
-            parameters:
-                - "string &+ var|bareword"
-            tags: ["unused", "refactor"]
-        updateOwned:
-            name: updateOwned
-        updatePersistentNPCs:
-            description: |-
-                Updates persistent npc characteristics based on player setting changes
-
-                selectiveUpdate accepts `skincolour` but does nothing with it. Consider refactoring
-
-                `<<updatePersistentNPCs selectiveUpdate?>>`
-                - **selectiveUpdate** _optional_: `string` - category to selectively update instead of all
-                  - `"genders"` | `"breasts"` | `"penis"` | `"skincolour"`
-            parameters:
-                - '|+ "genders"|"breasts"|"penis"|"skincolour"'
-            tags: ["refactor"]
-        updateRecordedSperm:
-            name: updateRecordedSperm
-        updatesidebardescription:
-            name: updatesidebardescription
-        updatesidebarimg:
-            name: updatesidebarimg
-        updatesidebarmoney:
-            name: updatesidebarmoney
-        updateStoredSlot:
-            name: updateStoredSlot
-        updatetryonstats:
-            name: updatetryonstats
-        updatewardrobe:
-            description: |-
-                Applies wardrobe updates based on `$wear_` actions
-
-                `$wear_X` are variables where X is a clothing slot that is set to `"none"` or the name of a clothing item
-
-                `<<updatewardrobe additionalUpdates? overrideSlot?>>`
-                - **additionalUpdates** _optional_: `string` - sections to update along with wardrobe
-                  - Only accepts "outfits"
-                - **overrideSlot** _optional_: `string` - clothing slot wear action key to treat as selected
-                  - Not required for new wardrobe display
-                  - `wear_` + (%clothesTypesDesc%)
-            parameters:
-                - '|+ false|null|undefined|"outfits" |+ text'
-        updatewarmthdescription:
-            name: updatewarmthdescription
-        updatewarmthscale:
-            name: updatewarmthscale
-        updateWornClothingLocation:
-            name: updateWornClothingLocation
-        upperhas:
-            description: |-
-                Prints plural/singular prose of has (have/has) for worn `"upper"` slot
-            tags: ["text"]
-        upperimg:
-            name: upperimg
-        upperintegrity:
-            name: upperintegrity
-            tags: ["unused"]
-        upperit:
-            description: |-
-                Prints an objective case pronoun (them/it) for worn `"upper"` slot
-            tags: ["text"]
-        upperitis:
-            description: |-
-                Prints a pronoun/ present indicative pair (they are/it is) describing worn `"upper"` slot
-            tags: ["unused", "text"]
-        upperon:
-            name: upperon
-        upperplural:
-            description: |-
-                Prints a present indicative (are/is) for the worn `"upper"` slot
-            tags: ["text"]
-        upperruined:
-            description: |-
-                Destroys pc's upper slot clothing, whether worn or carried
-
-                `<<upperruined noRebuy?>>`
-                - **noRebuy** _optional_: `bool` - skip rebuying command (truthy)
-                  - Defaults to `false`
-            parameters:
-                - "|+ bool"
-        uppersend:
-            name: uppersend
-        upperslither:
-            name: upperslither
-        uppersteal:
-            name: uppersteal
-            tags: ["unused"]
-        upperstrip:
-            name: upperstrip
-        upperthat:
-            description: |-
-                Prints plural/singular prose of that (those/that) for worn `"upper"` slot
-            tags: ["unused", "text"]
-        upperundress:
-            name: upperundress
-        upperwear:
-            name: upperwear
-        upperwet:
-            description: |-
-                Adds wetness to pc's upper clothing state
-
-                `$upperwet` is a measure of how wet pc's upper clothing is where 0 is dry (0-200)
-
-                `$upperwetstate` is a measure of effects due to wetness of pc's upper clothing where 0 is dry (0-3)
-
-                Over clothes don't take into account wetness. Consider refactoring to expand
-
-                `<<upperwet change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-            tags: ["refactor"]
-        urinestat:
-            name: urinestat
-        useLube:
-            name: useLube
-        vagina_lube_amount:
-            description: |-
-                Prints the amount of lube around player vagina
-
-                Relies on `_vagina_lube_amount` being set already
-
-                See `<<vagina_lube_text>>`
-            tags: ["text", "temp"]
-        vagina_lube_text:
-            description: |-
-                Prints qualified description of lube around the vagina prior to penetration
-
-                Example:
-                ```
-                <<vagina_lube_text>> the example can be performed without trouble.
-                ```
-            tags: ["text"]
-        vaginaactionDifficulty:
-            name: vaginaactionDifficulty
-        vaginaactionDifficultyTentacle:
-            name: vaginaactionDifficultyTentacle
-        vaginaActionInit:
-            name: vaginaActionInit
-        vaginaActionInitStruggle:
-            name: vaginaActionInitStruggle
-        vaginaActionInitTentacle:
-            name: vaginaActionInitTentacle
-        vaginaActions:
-            name: vaginaActions
-        vaginaActionsTentacle:
-            name: vaginaActionsTentacle
-        vaginaFluidActive:
-            name: vaginaFluidActive
-        vaginaFluidOrgasm:
-            name: vaginaFluidOrgasm
-        vaginaFluidPassive:
-            name: vaginaFluidPassive
-        vaginainit:
-            name: vaginainit
-        vaginaldifficulty:
-            description: |-
-                Prints color-coded adjective of vaginal action difficulty in current combat
-            tags: ["text"]
-        vaginaldoublestat:
-            name: vaginaldoublestat
-        vaginalejacstat:
-            name: vaginalejacstat
-        vaginalentranceejacstat:
-            name: vaginalentranceejacstat
-        vaginalskill:
-            description: |-
-                Adds vaginal skill to pc's state
-
-                `$vaginalskill` is a measure of pc's proficiency using their vagina where 0 is awkward (0-1,000)
-
-                `<<vaginalskill change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        vaginalskilluse:
-            name: vaginalskilluse
-        vaginalstat:
-            name: vaginalstat
-        vaginaltext:
-            description: |-
-                Prints color-coded adjective of active vaginal skill usage
-            tags: ["text"]
-        vaginalvirginitywarning:
-            description: |-
-                Prints `This action will deflower you` if vaginal virginity can still be lost
-
-                Takes combat state into account to display starting pipe `| `
-            tags: ["text"]
-        vaginaraped:
-            name: vaginaraped
-        vaginaWetnessCalculate:
-            name: vaginaWetnessCalculate
-        variablesStart2:
-            name: variablesStart2
-        variablesStatic:
-            name: variablesStatic
-        variablesVersionUpdate:
-            name: variablesVersionUpdate
-        variablesVersionUpdate2:
-            name: variablesVersionUpdate2
-        versioninfo:
-            name: versioninfo
-        veteran_guard:
-            name: veteran_guard
-        victimgirl:
-            name: victimgirl
-        victimgirls:
-            name: victimgirls
-        violence:
-            name: violence
-        violence_noncombat:
-            name: violence_noncombat
-        virginitylosttext:
-            name: virginitylosttext
-        visionPrepMorph:
-            description: |-
-                Resets some stats and settings, in preparation to morph the pc into another character
-
-                **Should be used after `<<freezePlayerStats>>`**
-
-                - Resets all transformation progress, all virginities, as well as base stats like pain and arousal
-                - Removes any parasites, bodywriting, bodyliquid, chastity devices and worn sex toys
-                - Disables auto clothing rebuy
-        voice:
-            description: |-
-                Prints verb by player attempting to use their voice
-
-                Example:
-                ```
-                You <<voice "moan">>.
-                ```
-
-                `<<voice type>>`
-                - **type**: `string` - type of verb
-                  - `"plead"` | `"moan"` | `"demand"`
-            parameters:
-                - '"plead"|"moan"|"demand"'
-            tags: ["text"]
-        vore:
-            name: vore
-        voreactions:
-            name: voreactions
-        voreeffects:
-            name: voreeffects
-        voreimg:
-            name: voreimg
-        voreTrait:
-            description: |-
-                Prints `| Daredevil` or `| Tasty` depending on pc's `$submissive`
-            tags: ["unused", "text"]
-        waist_goo:
-            name: waist_goo
-        wakingEffects:
-            name: wakingEffects
-        wallet:
-            description: |-
-                Prints where active NPC would keep their money
-
-                Sets `_stealType` to type of clothing if swim suit
-
-                npcIndex and active NPC can be out of sync. Consider refactoring
-
-                `<<wallet npcIndex?>>`
-                - **npcIndex** _optional_: `number` - zero-based index of npc to check clothes for
-                  - `0-5`: Only affects swimsuit clothing check, not text output
-            parameters:
-                - "|+ number"
-            tags: ["text", "temp", "refactor"]
-        walnutStoreMessage:
-            name: walnutStoreMessage
-        wardrobe:
-            name: wardrobe
-        wardrobeClothingOptions:
-            name: wardrobeClothingOptions
-        wardrobeContents:
-            description: |-
-                Prints either `<<wardrobeList>>` or `<<wardrobeNewOutfit>>` depending on `$lastWardrobeSlot`
-
-                `<<wardrobeNewOutfit>>` is never called because $lastWardrobeSlot is never set to "NewOutfit". Consider refactoring
-            tags: ["refactor", "dom"]
-        wardrobeExits:
-            name: wardrobeExits
-        wardrobeGetRepairedClothes:
-            name: wardrobeGetRepairedClothes
-        wardrobeintegrity:
-            description: |-
-                Prints text integrity description of provided clothing item if below max
-
-                `<<wardrobeintegrity clothingObject slot>>`
-                - **clothingObject**: `object` - Clothes object to be checked for integrity
-                - **slot**: `string` - clothing setup slot to be checked if not on clothingObject
-                  - %clothesTypesDesc%
-            parameters:
-                - bareword|var &+ %clothesTypes%
-            tags: ["text"]
-        wardrobeLinks:
-            name: wardrobeLinks
-            tags: ["unused"]
-        wardrobeList:
-            description: |-
-                Prints actual wardrobe contents. Wrapped by `<<wardrobeContents>>`
-
-                `<<wardrobeList slot>>`
-                - **slot**: `string` - clothing slot player has selected selected
-                  - %clothesTypesDesc%
-            parameters:
-                - "%clothesTypes%"
-            tags: ["dom"]
-        wardrobeListReorder:
-            description: |-
-                Reorders current wardrobe items by provided sorting
-
-                `<<wardrobeListReorder slot orderType descending?>>`
-                - **slot**: `string` - clothing slot to enumerate from current wardrobe
-                  - %clothesTypesDesc%
-                - **orderType**: `string` - clothing property to sort by
-                  - `"name"` | `"color"` | `"lewd"` | `"integrity"` | `"warmth"` | `"outfit"`
-                - **descending** _optional_: `bool` - sort by descending values
-                  - Defaults to false
-            parameters:
-                - '%clothesTypes% &+ "name"|"color"|"lewd"|"integrity"|"warmth"|"outfit" |+ bool'
-            tags: ["dom"]
-        wardrobeNewOutfit:
-            name: wardrobeNewOutfit
-        wardrobeSanityCheck:
-            name: wardrobeSanityCheck
-        wardrobeSelection:
-            description: |-
-                Sets and overrides current wardrobe selection based on `$forceWardrobeLocation`
-
-                `$forceWardrobeLocation` is a string from possible `$location` values
-
-                `<<wardrobeList allowTransfer?>>`
-                - **blockTransfer** _optional_: `bool` - block transfering from this wardrobe
-                  - Defaults to false
-                  - Currently implemented as pseudo-teleportator while debug is enabled
-            parameters:
-                - "|+ bool"
-            tags: ["refactor"]
-        wardrobeSend:
-            name: wardrobeSend
-        wardrobesUpdate:
-            name: wardrobesUpdate
-        wardrobewear:
-            name: wardrobewear
-        warmth:
-            name: warmth
-        warmth_description:
-            name: warmth_description
-        warmthscale:
-            name: warmthscale
-        warmthscale-internal:
-            name: warmthscale-internal
-        wash:
-            name: wash
-        wash_face:
-            name: wash_face
-        wash_mouth:
-            name: wash_mouth
-        washmakeup:
-            name: washmakeup
-        washRecordedSperm:
-            name: washRecordedSperm
-        water:
-            name: water
-        wateraction:
-            name: wateraction
-        waterwash:
-            name: waterwash
-        wearandtear:
-            name: wearandtear
-        wearlink_norefresh:
-            description: |-
-                Creates non-refreshing links that will update clothes according to `$wardrobeOption`
-
-                `$wardrobeOption` is `0` or a form option as a string
-
-                `<<wearlink_norefresh displayName clothingId actionVariable?>>`
-                - **displayName**: `string` - the text of the link. May contain markup
-                - **clothingId**: `number|string` - id of clothing to apply when clicked
-                  - Index in slot array on selected wardrobe
-                  - Key of non-outfit actions (`"towel"` | `"large_towel"` | `"strip"`)
-                - **actionVariable** _optional_: `string` - clothing slot wear action key to treat as selected
-                  - Defaults to variable pointed to by temporary variable `_wear`
-                  - `wear_` + (%clothesTypesDesc%)
-            parameters:
-                - text &+ number|"towel"|"large_towel"|"strip" |+ text
-            tags: ["temp", "dom"]
-        wearoutfit:
-            name: wearoutfit
-        wearProp:
-            description: |-
-                Temporarily equips a handheld prop for visual effect in scenes
-
-                Props can be cleared earlier in a scene via `<<handheldon>>` or `<<clotheson>>` and are removed in `<<endevent>>`
+        Props can be cleared earlier in a scene via `<<handheldon>>` or `<<clotheson>>` and are removed in `<<endevent>>`
 
         `<<wearProp prop>>`
         - **prop**: `string` - prop to equip, should be the variable of the handheld item
           - `"milkshake"` | `"cigarette"` | `"popcorn"` | `"gingerbread"` | `"lemonade"` | `"cocoa"` | `"mug"` | `"beerbottle"` | `"beermug"` | `"shotglass"` | `"wine"` | `"torch"` | `"salad"` | `"pancake"` | `"fork"` | `"tea"`| `"pasta"` | `"coffee"` | `"creambun"` | `"spoon"`
       parameters:
         - '"milkshake"|"cigarette"|"popcorn"|"gingerbread"|"lemonade"|"cocoa"|"mug"|"beerbottle"|"beermug"|"shotglass"|"wine"|"torch"|"salad"|"pancake"|"fork"|"tea"|"pasta"|"coffee"|"creambun"|"spoon"'
+    weather_select:
+      name: weather_select
+    weatherdisplay:
+      name: weatherdisplay
+    weatherinit:
+      name: weatherinit
+      tags: ["unused"]
     wet_all:
       name: wet_all
     wet_lower:
@@ -14633,146 +14641,146 @@ sugarcube-2:
       description: |-
         Replaces pc's worn clothes with a temporary choice from Whitney
 
-                Relies on temporary variables from `<<whitneyShoppingData>>`
-            tags: ["temp"]
-        whitneyShoppingPickerChoice:
-            description: |-
-                Replaces pc's worn clothes with a permanent choice from Whitney
-
-                Relies on temporary variables from `<<whitneyShoppingData>>`
-            tags: ["temp"]
-        wHunt:
-            name: wHunt
-        wife:
-            name: wife
-        Wife:
-            name: Wife
-        willpower:
-            description: |-
-                Adds willpower to pc's state
-
-                `$willpower` is a measure of strength of pc's willpower where 0 is not strong (0-1,000)
-
-                `<<willpower change>>`
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - "number"
-        willpowerdifficulty:
-            name: willpowerdifficulty
-        willpowerorgasm:
-            name: willpowerorgasm
-        willpowerpain:
-            name: willpowerpain
-        wolf:
-            name: wolf
-        wolf_cave_plural:
-            name: wolf_cave_plural
-        wolf_cave_singular:
-            name: wolf_cave_singular
-        wolf_cave_update:
-            name: wolf_cave_update
-        wolfcaveevent:
-            name: wolfcaveevent
-        wolfcaveselect:
-            name: wolfcaveselect
-        wolfCaveSingles:
-            name: wolfCaveSingles
-        wolfcavestate:
-            name: wolfcavestate
-        wolfChildActivity:
-            name: wolfChildActivity
-        wolfeventend:
-            name: wolfeventend
-        wolfexposed:
-            name: wolfexposed
-            tags: ["unused"]
-        wolfgirl:
-            description: |-
-                Prints `| Wolfboy` or `| Wolfgirl` depending on pc's appearance
-            tags: ["text"]
-        wolfhuntevents:
-            name: wolfhuntevents
-        wolfpackfear:
-            description: |-
-                Adds fear to the wolfpack and prints `The pack fears you a little more.`
-
-                `$wolfpackfear` is a measure of how much the wolfpack fears the pc where 0 is not at all (0-30)
-            tags: ["text"]
-        wolfpackhuntoptions:
-            name: wolfpackhuntoptions
-        wolfpacktrust:
-            description: |-
-                Adds trust to the wolfpack and prints `The pack trusts you a little more.`
-
-                `$wolfpacktrust` is a measure of how much the wolfpack trusts the pc where 0 is not at all (0-30)
-            tags: ["text"]
-        wolfquick:
-            name: wolfquick
-        wolfTransform:
-            name: wolfTransform
-        wood_required:
-            name: wood_required
-        word:
-            description: |-
-                Prints an indefinite article (a/an) if needed for provided clothing slot
-
-                `<<word slot>>`
-                - **slot**: `string` - category of worn clothing to check
-                  - %clothesTypesDesc%
-            parameters:
-                - "%clothesTypes%"
-            tags: ["text"]
-        wordify_i:
-            description: |-
-                Prints the ordinal numeral for a given integer (first, second, ...)
-
-                `<<wordify_i number capitalise?>>`
-                - **number**: `number` - positive integer to convert to text
-                  - `1-11` : numbers not between 1-10 inclusive are treated as 11
-                - **capitalise** _optional_: `bool` - capitalise output (truthy)
-            parameters:
-                - "number |+ bool"
-            tags: ["text"]
-        world_corruption:
-            description: |-
-                Adds corruption to world state
-
-                `$world_corruption_hard`
-
-                `<<world_corruption type change>>`
-                - **type**: `string` - type of corrupting event
-                  - `"hard"`: world scoped changes
-                  - `"soft"`: player scoped changes
-                - **change**: `number` - +/- change to apply
-            parameters:
-                - '"hard"|"soft" &+ number'
-        wPersist:
-            name: wPersist
-        wraith_pass:
-            name: wraith_pass
-        wraithCaught:
-            name: wraithCaught
-        wraithEvent:
-            name: wraithEvent
-        wraithEventSewers:
-            name: wraithEventSewers
-        wraithEventStreet:
-            name: wraithEventStreet
-        wraithExorcise:
-            name: wraithExorcise
-        wraithEyes:
-            name: wraithEyes
-        wraithPossess:
-            name: wraithPossess
-        wraithShamble:
-            name: wraithShamble
-        wren_sabotage_nude:
-            name: wren_sabotage_nude
-        wTimerProgress:
-            name: wTimerProgress
-        xrayimg:
-            name: xrayimg
-        yogalessons:
-            name: yogalessons
-        yogalewd:
-            name: yogalewd
+        Relies on temporary variables from `<<whitneyShoppingData>>`
+      tags: ["temp"]
+    whitneyShoppingPickerChoice:
+      description: |-
+        Replaces pc's worn clothes with a permanent choice from Whitney
+
+        Relies on temporary variables from `<<whitneyShoppingData>>`
+      tags: ["temp"]
+    wHunt:
+      name: wHunt
+    wife:
+      name: wife
+    Wife:
+      name: Wife
+    willpower:
+      description: |-
+        Adds willpower to pc's state
+
+        `$willpower` is a measure of strength of pc's willpower where 0 is not strong (0-1,000)
+
+        `<<willpower change>>`
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - "number"
+    willpowerdifficulty:
+      name: willpowerdifficulty
+    willpowerorgasm:
+      name: willpowerorgasm
+    willpowerpain:
+      name: willpowerpain
+    wolf:
+      name: wolf
+    wolf_cave_plural:
+      name: wolf_cave_plural
+    wolf_cave_singular:
+      name: wolf_cave_singular
+    wolf_cave_update:
+      name: wolf_cave_update
+    wolfcaveevent:
+      name: wolfcaveevent
+    wolfcaveselect:
+      name: wolfcaveselect
+    wolfCaveSingles:
+      name: wolfCaveSingles
+    wolfcavestate:
+      name: wolfcavestate
+    wolfChildActivity:
+      name: wolfChildActivity
+    wolfeventend:
+      name: wolfeventend
+    wolfexposed:
+      name: wolfexposed
+      tags: ["unused"]
+    wolfgirl:
+      description: |-
+        Prints `| Wolfboy` or `| Wolfgirl` depending on pc's appearance
+      tags: ["text"]
+    wolfhuntevents:
+      name: wolfhuntevents
+    wolfpackfear:
+      description: |-
+        Adds fear to the wolfpack and prints `The pack fears you a little more.`
+
+        `$wolfpackfear` is a measure of how much the wolfpack fears the pc where 0 is not at all (0-30)
+      tags: ["text"]
+    wolfpackhuntoptions:
+      name: wolfpackhuntoptions
+    wolfpacktrust:
+      description: |-
+        Adds trust to the wolfpack and prints `The pack trusts you a little more.`
+
+        `$wolfpacktrust` is a measure of how much the wolfpack trusts the pc where 0 is not at all (0-30)
+      tags: ["text"]
+    wolfquick:
+      name: wolfquick
+    wolfTransform:
+      name: wolfTransform
+    wood_required:
+      name: wood_required
+    word:
+      description: |-
+        Prints an indefinite article (a/an) if needed for provided clothing slot
+
+        `<<word slot>>`
+        - **slot**: `string` - category of worn clothing to check
+          - %clothesTypesDesc%
+      parameters:
+        - "%clothesTypes%"
+      tags: ["text"]
+    wordify_i:
+      description: |-
+        Prints the ordinal numeral for a given integer (first, second, ...)
+
+        `<<wordify_i number capitalise?>>`
+        - **number**: `number` - positive integer to convert to text
+          - `1-11` : numbers not between 1-10 inclusive are treated as 11
+        - **capitalise** _optional_: `bool` - capitalise output (truthy)
+      parameters:
+        - "number |+ bool"
+      tags: ["text"]
+    world_corruption:
+      description: |-
+        Adds corruption to world state
+
+        `$world_corruption_hard`
+
+        `<<world_corruption type change>>`
+        - **type**: `string` - type of corrupting event
+          - `"hard"`: world scoped changes
+          - `"soft"`: player scoped changes
+        - **change**: `number` - +/- change to apply
+      parameters:
+        - '"hard"|"soft" &+ number'
+    wPersist:
+      name: wPersist
+    wraith_pass:
+      name: wraith_pass
+    wraithCaught:
+      name: wraithCaught
+    wraithEvent:
+      name: wraithEvent
+    wraithEventSewers:
+      name: wraithEventSewers
+    wraithEventStreet:
+      name: wraithEventStreet
+    wraithExorcise:
+      name: wraithExorcise
+    wraithEyes:
+      name: wraithEyes
+    wraithPossess:
+      name: wraithPossess
+    wraithShamble:
+      name: wraithShamble
+    wren_sabotage_nude:
+      name: wren_sabotage_nude
+    wTimerProgress:
+      name: wTimerProgress
+    xrayimg:
+      name: xrayimg
+    yogalessons:
+      name: yogalessons
+    yogalewd:
+      name: yogalewd