From ddd6608c85d3e8167b21ef03151432388d58e1ad Mon Sep 17 00:00:00 2001
From: lowercasedonkey <lowercasedonkey@gmail.com>
Date: Mon, 3 May 2021 19:39:34 -0400
Subject: [PATCH] near naked checks should use data

---
 js/003-data/slaveWearData.js                  |   2 +-
 src/endWeek/saLongTermMentalEffects.js        |   4 +-
 src/events/PE/concubineInterview.js           |   2 +-
 src/events/RESS/frighteningDick.js            |   2 +-
 src/events/RESS/meanGirls.js                  | 150 ++----------------
 src/events/RESS/tooThinForCumDiet.js          |   2 +-
 src/events/RESS/waistlineWoes.js              |   8 +-
 src/events/reRecruit/femaleRecruit.js         |   4 +-
 src/events/reRecruit/maleRecruit.js           |   4 +-
 src/js/birth/birth.js                         |   4 +-
 src/js/slaveSummaryWidgets.js                 |   4 +-
 .../descriptions/crotch/vaginalAccessory.js   |   2 +-
 src/npc/interaction/fAbuse.tw                 |   6 +-
 src/npc/interaction/fAnimal.js                |   8 +-
 src/uncategorized/PESS.tw                     |   7 +-
 src/uncategorized/RESS.tw                     |  78 +--------
 16 files changed, 42 insertions(+), 245 deletions(-)

diff --git a/js/003-data/slaveWearData.js b/js/003-data/slaveWearData.js
index 187ad4e0269..4bc7787d66f 100644
--- a/js/003-data/slaveWearData.js
+++ b/js/003-data/slaveWearData.js
@@ -24,7 +24,7 @@
 App.Data.clothes = new Map([
 	["a Fuckdoll suit",
 		{
-			name: "a Fuckdoll suit",
+			name: "Fuckdoll suit",
 			exposure: 3,
 			fuckdoll: true
 		}
diff --git a/src/endWeek/saLongTermMentalEffects.js b/src/endWeek/saLongTermMentalEffects.js
index 785ae2e977a..df248eb6019 100644
--- a/src/endWeek/saLongTermMentalEffects.js
+++ b/src/endWeek/saLongTermMentalEffects.js
@@ -1385,8 +1385,8 @@ App.SlaveAssignment.longTermMentalEffects = (function() {
 				} else if (slave.assignment === "be the Schoolteacher" && V.schoolroom >= 20) {
 					r.push(`${His} paraphilia is satisfied by ${his} work as a sexual instructor; enough eyes are fixated on ${his} lessons.`);
 					slave.paraphiliaSatisfied = 1;
-				} else if (slave.clothes === "no clothing") {
-					r.push(`${His} paraphilia is satisfied by ${his} total nudity.`);
+				} else if (App.Data.clothes.get(slave.clothes).exposure >= 4) {
+					r.push(`${His} paraphilia is satisfied by ${his} nudity.`);
 					slave.paraphiliaSatisfied = 1;
 				} else {
 					r.push(`${He} doesn't seem to feel ${he}'s getting fucked in public enough, leaving the attention whore <span class="devotion dec">depressed and anxious.</span>`);
diff --git a/src/events/PE/concubineInterview.js b/src/events/PE/concubineInterview.js
index e3561777919..c177077e95c 100644
--- a/src/events/PE/concubineInterview.js
+++ b/src/events/PE/concubineInterview.js
@@ -80,7 +80,7 @@ App.Events.PEConcubineInterview = class PEConcubineInterview extends App.Events.
 			} else {
 				t.push(`strides out`);
 			}
-			if (eventSlave.clothes === "no clothing") {
+			if (App.Data.clothes.get(eventSlave.clothes).exposure >= 4) {
 				t.push(`in magnificent nudity. It's a shock to old world values, no doubt, but the titillation should counterbalance that.`);
 			} else {
 				t.push(`resplendent in ${eventSlave.clothes}.`);
diff --git a/src/events/RESS/frighteningDick.js b/src/events/RESS/frighteningDick.js
index 2669b9a87a9..bd3bcfed353 100644
--- a/src/events/RESS/frighteningDick.js
+++ b/src/events/RESS/frighteningDick.js
@@ -112,7 +112,7 @@ App.Events.RESSFrighteningDick = class RESSFrighteningDick extends App.Events.Ba
 		function rape() {
 			t = [];
 
-			t.push(`Sometimes there's really no need to overthink things. You reach down, grab ${him} under the armpits, and haul ${him} up, throwing ${him} across your desk. ${He} lands on ${his} back, and the impact drives the wind out of ${him}, so ${he} lies there, <span class="gold">all possibility of resistance driven out of ${him}.</span> ${eventSlave.clothes === "no clothing" ? `${He}'s already naked, so there's no need to` : "You"} tear the clothes off ${him}. You force yourself in between ${his} legs as ${he} struggles to get ${his} breath back, and ${he} gets another good look at the formidable dick that's about to be slammed inside ${him}`);
+			t.push(`Sometimes there's really no need to overthink things. You reach down, grab ${him} under the armpits, and haul ${him} up, throwing ${him} across your desk. ${He} lands on ${his} back, and the impact drives the wind out of ${him}, so ${he} lies there, <span class="gold">all possibility of resistance driven out of ${him}.</span> ${App.Data.clothes.get(eventSlave.clothes).exposure >= 4 ? `${He}'s already naked, so there's no need to` : "You"} tear the clothes off ${him}. You force yourself in between ${his} legs as ${he} struggles to get ${his} breath back, and ${he} gets another good look at the formidable dick that's about to be slammed inside ${him}`);
 			if (eventSlave.belly >= 5000) {
 				t.push(`before it disappears beneath ${his} ${eventSlave.bellyPreg >= 3000 ? "pregnant" : belly} belly`);
 			}
diff --git a/src/events/RESS/meanGirls.js b/src/events/RESS/meanGirls.js
index da37c0c5685..c0924c6b426 100644
--- a/src/events/RESS/meanGirls.js
+++ b/src/events/RESS/meanGirls.js
@@ -98,147 +98,17 @@ App.Events.RESSMeanGirls = class RESSMeanGirls extends App.Events.BaseEvent {
 			r.push(`reluctantly`);
 		}
 		r.push(`showing off ${his}`);
-		if (eventSlave.clothes === "no clothing") {
-			r.push(`nude`);
-			if (eventSlave.bellyPreg >= 1500) {
-				r.push(`pregnant`);
-			} else if (eventSlave.bellyImplant >= 1500) {
-				r.push(`gravid`);
-			} else if (eventSlave.bellyFluid >= 1500) {
-				r.push(`bloated`);
-			}
-			r.push(`body`);
+		if (eventSlave.bellyPreg >= 1500) {
+			r.push(`pregnant`);
+		} else if (eventSlave.bellyImplant >= 1500) {
+			r.push(`gravid`);
+		} else if (eventSlave.bellyFluid >= 1500) {
+			r.push(`bloated`);
+		}
+		if (App.Data.clothes.get(eventSlave.clothes).exposure >= 4) {
+			r.push(`nude body`);
 		} else {
-			if (eventSlave.bellyPreg >= 1500) {
-				r.push(`pregnant`);
-			} else if (eventSlave.bellyImplant >= 1500) {
-				r.push(`gravid`);
-			} else if (eventSlave.bellyFluid >= 1500) {
-				r.push(`bloated`);
-			}
-			r.push(`body in ${his}`);
-			switch (eventSlave.clothes) {
-				case "a toga":
-					r.push(`toga`);
-					break;
-				case "a huipil":
-					r.push(`huipil`);
-					break;
-				case "a long qipao":
-				case "a slutty qipao":
-					r.push(`qipao`);
-					break;
-				case "a penitent nuns habit":
-					r.push(`habit`);
-					break;
-				case "a slave gown":
-				case "a ball gown":
-					r.push(`gown`);
-					break;
-				case "a comfortable bodysuit":
-					r.push(`bodysuit`);
-					break;
-				case "a leotard":
-					r.push(`leotard`);
-					break;
-				case "a bunny outfit":
-					r.push(`bunny outfit`);
-					break;
-				case "a nice nurse outfit":
-					r.push(`nurse outfit`);
-					break;
-				case "a slutty nurse outfit":
-					r.push(`slutty nurse outfit`);
-					break;
-				case "a schoolgirl outfit":
-					r.push(`school clothes`);
-					break;
-				case "a hijab and abaya":
-					r.push(`hijab and abaya`);
-					break;
-				case "a kimono":
-					r.push(`kimono`);
-					break;
-				case "a nice maid outfit":
-					r.push(`maid outfit`);
-					break;
-				case "a slutty maid outfit":
-					r.push(`skimpy maid outfit`);
-					break;
-				case "a biyelgee costume":
-				case "a dirndl":
-				case "a halter top dress":
-				case "a mini dress":
-				case "a maternity dress":
-					r.push(`dress`);
-					break;
-				case "a latex catsuit":
-					r.push(`latex catsuit`);
-					break;
-				case "a military uniform":
-				case "a mounty outfit":
-				case "a red army uniform":
-				case "a schutzstaffel uniform":
-				case "a slutty schutzstaffel uniform":
-					r.push(`uniform`);
-					break;
-				case "battlearmor":
-					r.push(`battlearmor`);
-					break;
-				case "Imperial Plate":
-					r.push(`imperial armor`);
-					break;
-				case "lederhosen":
-					r.push(`lederhosen`);
-					break;
-				case "spats and a tank top":
-					r.push(`spats`);
-					break;
-				case "a burkini":
-				case "a monokini":
-					r.push(`swimsuit`);
-					break;
-				case "a chattel habit":
-				case "a fallen nuns habit":
-					r.push(`slutty habit`);
-					break;
-				case "a cheerleader outfit":
-					r.push(`cheerleader outfit`);
-					break;
-				case "a cybersuit":
-					r.push(`cybersuit`);
-					break;
-				case "a tight Imperial bodysuit":
-					r.push(`imperial bodysuit`);
-					break;
-				case "an apron":
-					r.push(`apron`);
-					break;
-				case "a scalemail bikini":
-					r.push(`scalemail bikini`);
-					break;
-				case "a slutty outfit":
-					r.push(`slutty outfit`);
-					break;
-				case "a string bikini":
-					r.push(`string bikini`);
-					break;
-				case "a succubus outfit":
-					r.push(`succubus getup`);
-					break;
-				case "a hijab and blouse":
-				case "conservative clothing":
-					r.push(`conservative clothes`);
-					break;
-				case "a bimbo outfit":
-					r.push(`bimbo outfit`);
-					break;
-				case "a courtesan dress":
-					r.push(`courtesan dress`);
-					break;
-				default:
-					r.push(`${eventSlave.clothes}`);
-			}
+			r.push(`body in ${his} ${App.Data.clothes.get(eventSlave.clothes).name.toLowerCase()}`);
 		}
 		r.push(`and flirting with passersby. Or ${he} would be, if ${he} weren't surrounded by a hostile group of girls. They're very obviously inebriated, rich, vapid, and on vacation, and their rapid-fire bitchiness makes the cause clear.`);
 		App.Events.addParagraph(node, r);
diff --git a/src/events/RESS/tooThinForCumDiet.js b/src/events/RESS/tooThinForCumDiet.js
index 84de69d9e16..ecc36a0d536 100644
--- a/src/events/RESS/tooThinForCumDiet.js
+++ b/src/events/RESS/tooThinForCumDiet.js
@@ -42,7 +42,7 @@ App.Events.RESSTooThinForCumDiet = class RESSTooThinForCumDiet extends App.Event
 		t.push(`You are in your office, tending to the tedious business of requisition orders for your penthouse when you see`);
 		t.push(contextualIntro(V.PC, eventSlave, "DOM"));
 		t.push(`appear outside your door. ${He} hovers outside in the hall, peeking ${his} head around the entry-way, looking very unsure about disturbing you. You stop what you're doing and call ${him} in. ${He}'s reticent at first, but then ${he} obediently steps into your office. ${He} is`);
-		if (eventSlave.clothes === "no clothing") {
+		if (App.Data.clothes.get(eventSlave.clothes).exposure >= 4) {
 			t.push(`forced to remain naked at all times, and the most striking thing about ${his} body is how`);
 			if (eventSlave.belly >= 100000) {
 				if (eventSlave.bellyPreg >= 3000) {
diff --git a/src/events/RESS/waistlineWoes.js b/src/events/RESS/waistlineWoes.js
index c03c65210ab..77965ec6a9e 100644
--- a/src/events/RESS/waistlineWoes.js
+++ b/src/events/RESS/waistlineWoes.js
@@ -235,16 +235,16 @@ App.Events.RESSWaistlineWoes = class RESSWaistlineWoes extends App.Events.BaseEv
 			if (eventSlave.behavioralQuirk === "fitness") {
 				t.push(`${He} brightens, catching on immediately and nodding ${his} head with understanding`);
 				if (V.PC.dick === 0) {
-					t.push(`before quickly ${eventSlave.clothes !== "no clothing" && eventSlave.clothes !== "body oil" ? `shedding ${his} clothes and` : ""} retrieving an appropriate dildo, eager for the workout.`);
+					t.push(`before quickly ${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `shedding ${his} clothes and` : ""} retrieving an appropriate dildo, eager for the workout.`);
 				} else {
-					t.push(`${eventSlave.clothes !== "no clothing" && eventSlave.clothes !== "body oil" ? "before" : ""} quickly ${eventSlave.clothes !== "no clothing" && eventSlave.clothes !== "body oil" ? `shedding ${his} clothes` : ""}, eager for the workout.`);
+					t.push(`${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? "before" : ""} quickly ${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `shedding ${his} clothes` : ""}, eager for the workout.`);
 				}
 			} else {
 				t.push(`${He} catches on quickly, nodding ${his} head with understanding`);
 				if (V.PC.dick === 0) {
-					t.push(`before ${eventSlave.clothes !== "no clothing" && eventSlave.clothes !== "body oil" ? `shedding ${his} clothes and` : ""} retrieving an appropriate dildo, glad for the opportunity.`);
+					t.push(`before ${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `shedding ${his} clothes and` : ""} retrieving an appropriate dildo, glad for the opportunity.`);
 				} else {
-					t.push(`${eventSlave.clothes !== "no clothing" && eventSlave.clothes !== "body oil" ? `before shedding ${his} clothes` : ""}, glad for the opportunity.`);
+					t.push(`${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `before shedding ${his} clothes` : ""}, glad for the opportunity.`);
 				}
 			}
 			t.push(`${His} hips settle close to yours, moving seductively while ${he} makes a show of undressing you. ${His} fingers smooth`);
diff --git a/src/events/reRecruit/femaleRecruit.js b/src/events/reRecruit/femaleRecruit.js
index 3f443fc4839..7d79f308f3b 100644
--- a/src/events/reRecruit/femaleRecruit.js
+++ b/src/events/reRecruit/femaleRecruit.js
@@ -54,7 +54,7 @@ App.Events.recFemaleRecruit = class recFemaleRecruit extends App.Events.BaseEven
 			let r = [];
 			cashX(forceNeg(contractCost), "slaveTransfer", slave);
 			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} bounces nervously on ${his} heels. Finally ${he} works up ${his} courage and asks,`);
-			if (S.HeadGirl.clothes !== "no clothing") {
+			if (App.Data.clothes.get(S.HeadGirl.clothes).exposure <= 3) {
 				r.push(Spoken(slave, `"Can I have ${S.HeadGirl.clothes} like ${S.HeadGirl.slaveName}?"`));
 			} else {
 				r.push(Spoken(slave, `"Can I work with ${S.HeadGirl.slaveName}?"`));
@@ -71,7 +71,7 @@ App.Events.recFemaleRecruit = class recFemaleRecruit extends App.Events.BaseEven
 			let r = [];
 			cashX(cost, "slaveTransfer");
 			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} bounces nervously on ${his} heels. Finally ${he} works up ${his} courage and asks,`);
-			if (S.HeadGirl.clothes !== "no clothing") {
+			if (App.Data.clothes.get(S.HeadGirl.clothes).exposure <= 3) {
 				r.push(Spoken(slave, `"Can I have ${S.HeadGirl.clothes} like ${S.HeadGirl.slaveName}?"`));
 			} else {
 				r.push(Spoken(slave, `"Can I work with ${S.HeadGirl.slaveName}?"`));
diff --git a/src/events/reRecruit/maleRecruit.js b/src/events/reRecruit/maleRecruit.js
index 584898eebef..3f33670b2f8 100644
--- a/src/events/reRecruit/maleRecruit.js
+++ b/src/events/reRecruit/maleRecruit.js
@@ -50,7 +50,7 @@ App.Events.recMaleRecruit = class recMaleRecruit extends App.Events.BaseEvent {
 			let r = [];
 			cashX(forceNeg(contractCost), "slaveTransfer", slave);
 			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} bounces nervously on ${his} heels. Finally ${he} works up ${his} courage and asks,`);
-			if (S.HeadGirl.clothes !== "no clothing") {
+			if (App.Data.clothes.get(S.HeadGirl.clothes).exposure <= 3) {
 				r.push(Spoken(slave, `"Can I have ${S.HeadGirl.clothes} like ${S.HeadGirl.slaveName}?"`));
 			} else {
 				r.push(Spoken(slave, `"Can I work with ${S.HeadGirl.slaveName}?"`));
@@ -67,7 +67,7 @@ App.Events.recMaleRecruit = class recMaleRecruit extends App.Events.BaseEvent {
 			let r = [];
 			cashX(cost, "slaveTransfer");
 			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} bounces nervously on ${his} heels. Finally ${he} works up ${his} courage and asks,`);
-			if (S.HeadGirl.clothes !== "no clothing") {
+			if (App.Data.clothes.get(S.HeadGirl.clothes).exposure <= 3) {
 				r.push(Spoken(slave, `"Can I have ${S.HeadGirl.clothes} like ${S.HeadGirl.slaveName}?"`));
 			} else {
 				r.push(Spoken(slave, `"Can I work with ${S.HeadGirl.slaveName}?"`));
diff --git a/src/js/birth/birth.js b/src/js/birth/birth.js
index 5122c25a3dd..d811de7dd9b 100644
--- a/src/js/birth/birth.js
+++ b/src/js/birth/birth.js
@@ -7137,7 +7137,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {})
 			babyIntro = `${his} ${babies}${UH}`;
 		}
 
-		if (undressed === 0 && slave.clothes !== "no clothing" && slave.clothes !== "body oil") {
+		if (undressed === 0 && App.Data.clothes.get(slave.clothes).exposure <= 3) {
 			if (slave.fetish === "mindbroken") {
 				r.push(`Instinctively, ${he} begins to push out`);
 				if (slave.broodmother > 0) {
@@ -8505,7 +8505,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {})
 						}
 					}
 			}
-		} else if (slave.clothes === "no clothing" || slave.clothes === "body oil") {
+		} else if (App.Data.clothes.get(slave.clothes).exposure <= 3) {
 			if (slave.fetish === "mindbroken") {
 				r.push(`Instinctively, ${he} begins to push out`);
 				if (slave.broodmother > 0) {
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index e28ed8c61cd..99398330f52 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -137,7 +137,7 @@ App.UI.SlaveSummaryRenderers = function() {
 			}
 			if (slave.vagina === 0) {
 				makeSpan(c, "VV", "lime");
-			} else if ((slave.pregKnown === 1) && canStand(slave) && (slave.clothes === "no clothing" || slave.clothes === "body oil") && (slave.shoes === "none")) {
+			} else if ((slave.pregKnown === 1) && canStand(slave) && (App.Data.clothes.get(slave.clothes).exposure >= 3) && (slave.shoes === "none")) {
 				makeSpan(c, "NBP", "pink");
 			}
 			if (slave.anus === 0) {
@@ -459,7 +459,7 @@ App.UI.SlaveSummaryRenderers = function() {
 			}
 			if (slave.vagina === 0) {
 				helpers.makeSpan(c, "Virgin.", "lime");
-			} else if ((slave.pregKnown === 1) && canStand(slave) && (slave.clothes === "no clothing" || slave.clothes === "body oil") && (slave.shoes === "none")) {
+			} else if ((slave.pregKnown === 1) && canStand(slave) && (App.Data.clothes.get(slave.clothes).exposure >= 4) && (slave.shoes === "none")) {
 				helpers.makeSpan(c, "Naked, barefoot, and pregnant.", "pink");
 			}
 			if (slave.anus === 0) {
diff --git a/src/npc/descriptions/crotch/vaginalAccessory.js b/src/npc/descriptions/crotch/vaginalAccessory.js
index 9b5227dfd12..c607dbb59b6 100644
--- a/src/npc/descriptions/crotch/vaginalAccessory.js
+++ b/src/npc/descriptions/crotch/vaginalAccessory.js
@@ -67,7 +67,7 @@ App.Desc.vaginalAccessory = function(slave) {
 		default:
 			if (slave.chastityVagina) {
 				r.push(`${His} pussy is protected by a chastity`);
-				if (slave.clothes !== "no clothing") {
+				if (App.Data.clothes.get(slave.clothes).exposure <= 3) {
 					r.push(`belt worn under ${his} clothing.`);
 				} else {
 					r.push(`belt.`);
diff --git a/src/npc/interaction/fAbuse.tw b/src/npc/interaction/fAbuse.tw
index abe601fedf8..f0eed72bc7d 100644
--- a/src/npc/interaction/fAbuse.tw
+++ b/src/npc/interaction/fAbuse.tw
@@ -319,9 +319,9 @@
 <</if>>
 
 <<if ($PC.dick != 0)>>
-	<<if hasAnyArms(getSlave($AS)) && (getSlave($AS).clothes !== "no clothing")>>While $he strips, your<<else>>Your<</if>> stiffening cock rises<<if $PC.vagina != -1>>, revealing your pussy and<</if>> earning
+	<<if hasAnyArms(getSlave($AS)) && App.Data.clothes.get(getSlave($AS).clothes).exposure <= 3)>>While $he strips, your<<else>>Your<</if>> stiffening cock rises<<if $PC.vagina != -1>>, revealing your pussy and<</if>> earning
 <<else>>
-	<<if hasAnyArms(getSlave($AS)) && (getSlave($AS).clothes !== "no clothing")>>While $he strips, you<<else>>You<</if>> don a cruelly large strap-on, earning
+	<<if hasAnyArms(getSlave($AS)) && App.Data.clothes.get(getSlave($AS).clothes).exposure <= 3)>>While $he strips, you<<else>>You<</if>> don a cruelly large strap-on, earning
 <</if>>
 <<if (getSlave($AS).fetish == "masochist") && (getSlave($AS).fetishKnown == 1) && (getSlave($AS).fetishStrength > 95)>>
 	a sultry look
@@ -333,7 +333,7 @@
 from your victim.
 
 <<if isAmputee(getSlave($AS))>>
-	<<if (getSlave($AS).clothes !== "no clothing")>>Growing impatient, you rip the clothes off $his limbless torso<<else>>You walk up to $him<</if>> and spank $his brutally; spinning $him to present
+	<<if App.Data.clothes.get(getSlave($AS).clothes).exposure <= 3)>>Growing impatient, you rip the clothes off $his limbless torso<<else>>You walk up to $him<</if>> and spank $his brutally; spinning $him to present
 	<<if (getSlave($AS).vagina > -1)>>
 		$his holes
 	<<else>>
diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js
index d8a064064ce..d9a129bfbdb 100644
--- a/src/npc/interaction/fAnimal.js
+++ b/src/npc/interaction/fAnimal.js
@@ -265,7 +265,7 @@ App.Interact.fAnimal = function(slave, type) {
 			if (act === Acts.ORAL) {
 				r.push(`You have ${him} kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock and begins to give it a few tentative licks before finally putting it in ${his} mouth. `);
 			} else {
-				r.push(`You have ${him} ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
+				r.push(`You have ${him} ${App.Data.clothes.get(slave.clothes).exposure <= 3 ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
 			}
 
 			switch (animal) {
@@ -340,7 +340,7 @@ App.Interact.fAnimal = function(slave, type) {
 			if (act === Acts.ORAL) {
 				r.push(`You tell ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave hesitantly reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock, and, after taking a moment to steel ${his} resolve, begins to give it a few reluctant licks before putting it in ${his} mouth. `);
 			} else {
-				r.push(`You tell ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few seconds for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
+				r.push(`You tell ${him} to ${App.Data.clothes.get(slave.clothes).exposure <= 3 ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few seconds for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
 			}
 
 			switch (animal) {
@@ -415,7 +415,7 @@ App.Interact.fAnimal = function(slave, type) {
 			if (act === Acts.ORAL) {
 				r.push(`You force ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave reluctantly reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock and begins to give it a few tentative licks before finally putting it in ${his} mouth. `);
 			} else {
-				r.push(`You force ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
+				r.push(`You force ${him} to ${App.Data.clothes.get(slave.clothes).exposure <= 3 ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
 			}
 
 			switch (animal) {
@@ -490,7 +490,7 @@ App.Interact.fAnimal = function(slave, type) {
 			if (act === Acts.ORAL) {
 				r.push(`You have to physically force ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} is restrained, showing little concern when another slave reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, the slave takes its cock and lines it up with ${slave.slaveName}'s mouth. The animal needs no prompting, and thrusts itself into ${his} ring-gagged mouth. `);
 			} else {
-				r.push(`You have to physically force ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``} get on the floor, ass in the air and restraints around ${his} wrists and ankles, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
+				r.push(`You have to physically force ${him} to ${App.Data.clothes.get(slave.clothes).exposure <= 3 ? `take off ${his} clothes and ` : ``} get on the floor, ass in the air and restraints around ${his} wrists and ankles, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
 			}
 
 			switch (animal) {
diff --git a/src/uncategorized/PESS.tw b/src/uncategorized/PESS.tw
index d59d24ef611..769e94464be 100644
--- a/src/uncategorized/PESS.tw
+++ b/src/uncategorized/PESS.tw
@@ -157,11 +157,12 @@ The business is brief and inconsequential, but it's good to speak with $him. Whe
 <<= App.UI.slaveDescriptionDialog($activeSlave)>> comes wearily into your office at the end of $his day to check in with you, like a good Head Girl should. You're busy at the moment, so $he waits quietly, not wanting to interrupt you. $He seems tired, and leans <<if $activeSlave.physicalAge > 35>>heavily<<else>>lightly<</if>> against the back of the office couch<<if hasAnyProstheticArms($activeSlave)>>, $his mechanical hand hard against the leather<</if>>. Your Head Girl is a <<if $activeSlave.fetish == "dom">>very dominant $desc<<elseif $activeSlave.fetish == "sadist">>sadistic and dominant $desc<<else>>dutiful $desc and takes $his leadership position seriously<</if>>, but $he knows $he doesn't have to pretend to be invincible around you.
 <br><br>
 When you've finished your task, you raise your eyes to examine $him. $He's standing with $his <<if $activeSlave.hips > 1>>broad<<elseif $activeSlave.hips < -1>>narrow<<else>>womanly<</if>> hips slightly cocked and $his <<if $activeSlave.muscles > 95>>incredibly muscular<<elseif $activeSlave.weight > 10>>soft<<elseif $activeSlave.muscles > 10>>hard<<else>>trim<</if>> thighs bowed a bit wide. You immediately understand why: it's $his job to impregnate fertile slaves, a duty $he takes very seriously, and $his dick must be very sore.
-<<if $activeSlave.clothes == "no clothing">>
+<<set _exposure = App.Data.clothes.get(slave.clothes).exposure>>
+<<if _exposure >= 4>>
 	$He's nude, making it obvious that $his poor soft member has done its duty today. It even looks a little moist, as though it bred a fertile slave's pussy only a few minutes ago.
-<<elseif ["body oil", "chains", "clubslut netting", "restrictive latex", "shibari ropes", "uncomfortable straps"].indexOf($activeSlave.clothes) != -1>>
+<<elseif _exposure == 3>>
 	$His clothes don't cover $his dick, making it obvious that $his poor soft member has done its duty today. It even looks a little moist, as though it bred a fertile slave's pussy only a few minutes ago.
-<<elseif ["a comfortable bodysuit", "a cybersuit", "a fallen nuns habit", "a latex catsuit", "a leotard", "a monokini", "a scalemail bikini", "a string bikini", "attractive lingerie for a pregnant woman", "attractive lingerie", "harem gauze", "kitty lingerie", "restrictive latex", "striped panties", "slutty jewelry", "spats and a tank top", "stretch pants and a crop-top"].indexOf($activeSlave.clothes) != -1>>
+<<elseif _exposure == 2>>
 	$His clothes cover $his groin, but they're pretty tight, making it clear that $his poor soft member has done its duty today.
 <<else>>
 	$His clothes are relatively modest, so you can't see it, but it's clear that $his poor soft member has done its duty today.
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index b2ff185e6af..2bd00f66b9d 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -3287,84 +3287,10 @@ One afternoon, $assistant.name informs you $he that $he has a non-urgent matter
 brings up a video feed.
 <br><br>
 $activeSlave.slaveName is doing $his job, standing in an area of the arcology that's busy at this time of night, <<if $activeSlave.energy > 95>>eagerly<<elseif $activeSlave.devotion > 95>>diligently<<elseif $activeSlave.devotion > 20>>obediently<<else>>reluctantly<</if>> showing off $his
-<<if $activeSlave.clothes == "no clothing">>
+<<if App.Data.clothes.get($activeSlave.clothes).exposure >= 4>>
 	nude <<if $activeSlave.bellyPreg >= 1500>>pregnant <<elseif $activeSlave.bellyImplant >= 1500>>gravid <<elseif $activeSlave.bellyFluid >= 1500>>bloated <</if>>body
 <<else>>
-	<<if $activeSlave.bellyPreg >= 1500>>pregnant <<elseif $activeSlave.bellyImplant >= 1500>>gravid <<elseif $activeSlave.bellyFluid >= 1500>>bloated <</if>>body in $his
-	<<switch $activeSlave.clothes>>
-	<<case "a toga">>
-		toga
-	<<case "a huipil">>
-		huipil
-	<<case "a long qipao" "a slutty qipao">>
-		qipao
-	<<case "a penitent nuns habit">>
-		habit
-	<<case "a slave gown" "a ball gown">>
-		gown
-	<<case "a comfortable bodysuit">>
-		bodysuit
-	<<case "a leotard">>
-		leotard
-	<<case "a bunny outfit">>
-		bunny outfit
-	<<case "a nice nurse outfit">>
-		nurse outfit
-	<<case "a slutty nurse outfit">>
-		slutty nurse outfit
-	<<case "a schoolgirl outfit">>
-		school clothes
-	<<case "a hijab and abaya">>
-		hijab and abaya
-	<<case "a kimono">>
-		kimono
-	<<case "a nice maid outfit">>
-		maid outfit
-	<<case "a slutty maid outfit">>
-		skimpy maid outfit
-	<<case "a biyelgee costume" "a dirndl" "a halter top dress" "a mini dress" "a maternity dress">>
-		dress
-	<<case "a latex catsuit">>
-		latex catsuit
-	<<case "a military uniform" "a mounty outfit" "a red army uniform" "a schutzstaffel uniform" "a slutty schutzstaffel uniform">>
-		uniform
-	<<case "battlearmor">>
-		battlearmor
-	<<case "Imperial Plate">>
-		imperial armor
-	<<case "lederhosen">>
-		lederhosen
-	<<case "spats and a tank top">>
-		spats
-	<<case "a burkini" "a monokini">>
-		swimsuit
-	<<case "a chattel habit" "a fallen nuns habit">>
-		slutty habit
-	<<case "a cheerleader outfit">>
-		cheerleader outfit
-	<<case "a cybersuit">>
-		cybersuit
-	<<case "a tight Imperial bodysuit">>
-		imperial bodysuit
-	<<case "an apron">>
-		apron
-	<<case "a scalemail bikini">>
-		scalemail bikini
-	<<case "a slutty outfit">>
-		slutty outfit
-	<<case "a string bikini">>
-		string bikini
-	<<case "a succubus outfit">>
-		succubus getup
-	<<case "a hijab and blouse" "conservative clothing">>
-		conservative clothes
-	<<case "a bimbo outfit">>
-		bimbo outfit
-	<<case "a courtesan dress">>
-		courtesan dress
-	<<default>>
-		$activeSlave.clothes
-	<</switch>>
+	<<= App.Data.clothes.get($activeSlave.clothes).name.toLowerCase()>>
 <</if>>
 and flirting with passersby. Or $he would be, if $he weren't surrounded by a group of shame-faced college boys. They're very obviously rich, naïve, and inexperienced with both sex and the Free Cities, and their complete lack of confidence in approaching $activeSlave.slaveName make that clear.
 <br><br>
-- 
GitLab