From a5afe0a02147e82d7ac2c262215dc68efa8f59dd Mon Sep 17 00:00:00 2001
From: derek <derek_merck@brown.edu>
Date: Fri, 17 Jul 2020 17:27:32 -0400
Subject: [PATCH 01/15] Added Dockerfile to compile and serve the game

---
 docker/Dockerfile | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100644 docker/Dockerfile

diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 00000000000..bcef731d64d
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,27 @@
+# Build and run an FC Docker container
+# $ docker build -t fc .
+# $ docker run -d --rm -p 8080:80 fc
+# Access with brownser at http://localhost:8080
+
+# Compile
+FROM ubuntu
+RUN apt update
+RUN apt install -y git
+WORKDIR /opt
+RUN git clone https://gitgud.io/pregmodfan/fc-pregmod.git
+WORKDIR /opt/fc-pregmod
+RUN chmod +x devTools/tweeGo/tweego_nix*
+RUN bash ./compile.sh
+
+# Install the 3d renders hosted on mega.nz
+RUN apt install -y megatools unzip
+WORKDIR /tmp
+RUN megadl --path=renders.zip https://mega.nz/#!upoAlBaZ!EbZ5wCixxZxBhMN_ireJTXt0SIPOywO2JW9XzTIPhe0
+RUN unzip renders.zip
+RUN cp -r 'Free Cities v 0.10.4 renders'/resources /opt/fc-pregmod/bin/
+
+# Serve with nginx
+FROM nginx
+COPY --from=0 /opt/fc-pregmod/bin /usr/share/nginx/html
+WORKDIR /usr/share/nginx/html
+RUN mv FC_pregmod.html index.html
-- 
GitLab


From 0af59079baecea0a70a37cb03852aba32f665511 Mon Sep 17 00:00:00 2001
From: derek <derek_merck@brown.edu>
Date: Fri, 17 Jul 2020 20:45:42 -0400
Subject: [PATCH 02/15] Set timezone and debian noninteractive to avoid hang on
 buid

---
 docker/Dockerfile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/docker/Dockerfile b/docker/Dockerfile
index bcef731d64d..7f329418dbc 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -5,6 +5,8 @@
 
 # Compile
 FROM ubuntu
+ENV DEBIAN_FRONTEND=noninteractive
+ENV TZ=America/New_York
 RUN apt update
 RUN apt install -y git
 WORKDIR /opt
-- 
GitLab


From 9caf356d6ff634044a1c119a2b3eb8c66a966777 Mon Sep 17 00:00:00 2001
From: Svornost <11434-svornost@users.noreply.gitgud.io>
Date: Fri, 17 Jul 2020 19:43:25 -0700
Subject: [PATCH 03/15] actually output the effects of illness in the weekly
 report instead of just silently killing slaves

---
 src/endWeek/saDrugs.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/endWeek/saDrugs.js b/src/endWeek/saDrugs.js
index f29ed0e013f..6d644bf87d9 100644
--- a/src/endWeek/saDrugs.js
+++ b/src/endWeek/saDrugs.js
@@ -1772,7 +1772,7 @@ App.SlaveAssignment.drugs = (function() {
 				}
 			}
 		}
-		illness(slave);
+		r += ` ${illness(slave)}`;
 		// tiredness
 		if (slave.drugs !== "stimulants" && slave.inflationType !== "stimulant") {
 			if (slave.assignment !== Job.SPA && slave.assignment !== Job.REST && slave.assignment !== Job.CLINIC) {
-- 
GitLab


From 5179523bc08adff459ee023f14360a584a124103 Mon Sep 17 00:00:00 2001
From: PandemoniumPenguin <13130-PandemoniumPenguin@users.noreply.gitgud.io>
Date: Fri, 17 Jul 2020 21:02:44 -0700
Subject: [PATCH 04/15] Fix extra = sign breaking no education corporation
 setting

---
 src/Corporation/manageCorporation.tw | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Corporation/manageCorporation.tw b/src/Corporation/manageCorporation.tw
index 628b6302570..4ecab35defa 100644
--- a/src/Corporation/manageCorporation.tw
+++ b/src/Corporation/manageCorporation.tw
@@ -454,7 +454,7 @@ You own <<print num($personalShares)>> shares while another <<print num($publicS
 			<br>Straightforward cosmetic procedures are [[Applied|Manage Corporation][$corp.SpecCosmetics = 1, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] | [[Not Applied|Manage Corporation][$corp.SpecCosmetics = 0, $corp.SpecTimer = 2]]
 		<</if>>
 		<<if ndef $corp.SpecEducation && $corp.DivTrain > 0>> /*This used to be $trainingUpgradeEducation, it is the training specialization*/
-			<br>Slaves are given [[No Education|Manage Corporation][$corp.SpecEducation == 0, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] | [[Basic Education|Manage Corporation][$corp.SpecEducation = 1, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] -- //Further specializations possible//
+			<br>Slaves are given [[No Education|Manage Corporation][$corp.SpecEducation = 0, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] | [[Basic Education|Manage Corporation][$corp.SpecEducation = 1, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] -- //Further specializations possible//
 		<</if>>
 		<<if ndef $corp.SpecImplants && $corp.DivSurgery > 0>> /*This used to be $surgicalUpgradeImplants, it is the surgery specialization*/
 			<br>Slave implants are [[Applied|Manage Corporation][$corp.SpecImplants = 1, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] | [[Not Applied|Manage Corporation][$corp.SpecImplants = 0, $corp.SpecTimer = 2]] -- //Further specializations possible//
-- 
GitLab


From a18240040af654b713c2f443d419d381a3a922d0 Mon Sep 17 00:00:00 2001
From: Svornost <11434-svornost@users.noreply.gitgud.io>
Date: Fri, 17 Jul 2020 21:11:34 -0700
Subject: [PATCH 05/15] Don't show smart bullet vibe setting if the slave
 doesn't have a smart bullet vibe.

---
 src/interaction/slaveInteract.js | 44 ++++++++++++--------------------
 1 file changed, 17 insertions(+), 27 deletions(-)

diff --git a/src/interaction/slaveInteract.js b/src/interaction/slaveInteract.js
index ece50086303..cd56cffbf02 100644
--- a/src/interaction/slaveInteract.js
+++ b/src/interaction/slaveInteract.js
@@ -2033,17 +2033,7 @@ App.UI.SlaveInteract.nursery = function(slave) {
 App.UI.SlaveInteract.smartSettings = function(slave) {
 	let el = document.createElement('div');
 
-	const {
-		// eslint-disable-next-line no-unused-vars
-		he,
-		him,
-		his,
-		hers,
-		himself,
-		boy,
-		He,
-		His
-	} = getPronouns(slave);
+	const {His} = getPronouns(slave);
 	const bodyPart = [];
 	const BDSM = [];
 	const gender = [];
@@ -2076,33 +2066,33 @@ App.UI.SlaveInteract.smartSettings = function(slave) {
 		gender.push({text: `Anti-women`, updateSlave: {clitSetting: `anti-women`}});
 	}
 
-	let title = document.createElement('div');
+	let label = null;
 	if (slave.clitPiercing === 3) {
 		if (slave.dick < 1) {
-			title.textContent = `${His} smart clit piercing `;
+			label = `${His} smart clit piercing `;
 			if (slave.vaginalAccessory === "smart bullet vibrator") {
-				title.textContent += `and smart bullet vibrator are `;
+				label += `and smart bullet vibrator are `;
 			} else {
-				title.textContent += `is `;
+				label += `is `;
 			}
-			title.textContent += `set to: `;
+			label += `set to: `;
 		} else {
-			title.textContent = `${His} smart frenulum piercing `;
+			label = `${His} smart frenulum piercing `;
 			if (slave.vaginalAccessory === "smart bullet vibrator") {
-				title.textContent += `and smart bullet vibrator are `;
+				label += `and smart bullet vibrator are `;
 			} else {
-				title.textContent += `is `;
+				label += `is `;
 			}
-			title.textContent += `set to: `;
+			label += `set to: `;
 		}
-	} else {
-		title.textContent = `${His} smart bullet vibe is set to: `;
+	} else if (slave.vaginalAccessory === "smart bullet vibrator") {
+		label = `${His} smart bullet vibe is set to: `;
+	}
+	if (label) {
+		let title = App.UI.DOM.appendNewElement('div', el, label);
+		let selected = App.UI.DOM.appendNewElement('span', title, `${slave.clitSetting}. `);
+		selected.style.fontWeight = "bold";
 	}
-	let selected = document.createElement('span');
-	selected.style.fontWeight = "bold";
-	selected.textContent = `${slave.clitSetting}. `;
-	title.append(selected);
-	el.append(title);
 
 	App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Level", level, slave);
 	App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Body part", bodyPart, slave);
-- 
GitLab


From 02334131a46547e5273901886cd6aa19c6f205b8 Mon Sep 17 00:00:00 2001
From: Svornost <11434-svornost@users.noreply.gitgud.io>
Date: Fri, 17 Jul 2020 21:42:46 -0700
Subject: [PATCH 06/15] Fix subslave humiliation fetish trigger & transfer

---
 src/endWeek/saServeYourOtherSlaves.js | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/endWeek/saServeYourOtherSlaves.js b/src/endWeek/saServeYourOtherSlaves.js
index 7b04d0277c3..fea31cb0daf 100644
--- a/src/endWeek/saServeYourOtherSlaves.js
+++ b/src/endWeek/saServeYourOtherSlaves.js
@@ -1021,7 +1021,7 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() {
 				V.oralTotal += fuckCount;
 			}
 			r.push(`The lewdness emanating from beneath the table is not lost on the other diners, <span class="hotpink">much to ${domName}'s enjoyment.</span>`);
-			if (slave.need && slave.fetish === "exhibition") {
+			if (slave.need && slave.fetish === "humiliation") {
 				if (slave.fetishKnown) {
 					r.push(`${subName} needs this kind of exposure to be truly sexually satisfied; this week, ${his} desire for public sex is sated.`);
 				}
@@ -1531,6 +1531,14 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() {
 							slave.fetishKnown = 1;
 						}
 						break;
+					case "humiliation":
+						if (slave.fetish !== "humiliation") {
+							r.push(`${domName}'s taste for public sex has a lasting effect on ${subName}; <span class="lightcoral">${he}'s grown fond of exhibitionism.</span>`);
+							slave.fetish = "humiliation";
+							slave.fetishStrength = 35;
+							slave.fetishKnown = 1;
+						}
+						break;
 				}
 			} else {
 				switch (slave.fetish) {
-- 
GitLab


From 312d30578db8a8ecd8bf1e8b4a5d7a5f1cdeb02a Mon Sep 17 00:00:00 2001
From: Skriv <skrivelese@gmail.com>
Date: Sat, 18 Jul 2020 13:10:57 +0200
Subject: [PATCH 07/15] minor changes

---
 src/events/RECI/milf.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/events/RECI/milf.js b/src/events/RECI/milf.js
index 4c33462eedf..5750f1d8771 100644
--- a/src/events/RECI/milf.js
+++ b/src/events/RECI/milf.js
@@ -218,7 +218,7 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 
 		function roughSex() {
 			let virginityLoss = 0;
-			let inHole = 0;
+			let inHole = "";
 
 			t = [];
 			t.push(`When ${he}`);
@@ -472,7 +472,7 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 		}
 
 		function gentleSex() {
-			let inHole = 0;
+			let inHole = "";
 
 			t = [];
 			t.push(`You stand up from behind your`);
@@ -737,7 +737,7 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 			}
 			t.push(`and clearly already imagining it. You check in on ${him} later, using the video feeds, and are treated to the sight of ${him} wearing a recently-acquired, too-tight t-shirt with an old world college's mascot on it as ${he}`);
 			if ((canDoAnal(eventSlave) && eventSlave.anus === 0) || (canDoVaginal(eventSlave) && eventSlave.vagina === 0)) {
-				t.push(`<span class="virginity loss">is deflowed</span> by`);
+				t.push(`<span class="virginity loss">is deflowered</span> by`);
 			} else {
 				t.push(`rides`);
 			}
-- 
GitLab


From eddf9fbe5177fd7a6d8b4f06cb55d20d3a3867ae Mon Sep 17 00:00:00 2001
From: Skriv <skrivelese@gmail.com>
Date: Sat, 18 Jul 2020 13:16:39 +0200
Subject: [PATCH 08/15] whitespace

---
 src/npc/generate/generateNewSlaveJS.js | 35 ++++++++++++--------------
 1 file changed, 16 insertions(+), 19 deletions(-)

diff --git a/src/npc/generate/generateNewSlaveJS.js b/src/npc/generate/generateNewSlaveJS.js
index 69cdd362322..c7d9d31776e 100644
--- a/src/npc/generate/generateNewSlaveJS.js
+++ b/src/npc/generate/generateNewSlaveJS.js
@@ -1439,7 +1439,7 @@ globalThis.GenerateNewSlave = (function() {
 					slave.origSkin = jsEither(["tan", "light", "light", "light", "fair", "fair", "fair", "fair", "pale", "very pale"]);
 					eyeColor(["light grey", "blue", "blue", "blue", "blue", "blue", "blue", "brown", "brown", "green"]);
 					slave.origHColor = jsEither(["jet black", "black", "black", "dark brown", "dark brown", "brown", "brown", "brown", "chestnut", "chocolate", "amber", "golden", "golden", "blonde", "blonde", "platinum blonde", "red"]);
-				} else if (["Icelandic", "Norwegian"].includes(slave.nationality)){
+				} else if (["Icelandic", "Norwegian"].includes(slave.nationality)) {
 					slave.origSkin = jsEither(["tan", "light", "light", "light", "fair", "fair", "fair", "pale", "pale", "very pale", "very pale"]);
 					eyeColor(["light grey", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "brown", "green"]);
 					slave.origHColor = jsEither(["jet black", "black", "dark brown", "brown", "brown", "brown", "chestnut", "chocolate", "amber", "golden", "golden", "blonde", "blonde", "platinum blonde", "platinum blonde", "red"]);
@@ -1469,7 +1469,7 @@ globalThis.GenerateNewSlave = (function() {
 				slave.lips = jsRandom(5, 25);
 				if (["Iranian", "Pakistani", "Tajik", "Kazakh", "Kurdish", "Azerbaijani", "Syrian", "Kyrgyz", "Afghan", "Mongolian", "Turkmen", "Turkish", "Uzbek"].includes(slave.nationality) || (jsRandom(1, 8) === 1)) {
 					slave.origSkin = jsEither(["olive", "bronze", "tan", "light olive", "light olive", "light", "light", "fair"]);
-					if (jsRandom(1, 10) === 1){
+					if (jsRandom(1, 10) === 1) {
 						slave.origHColor = jsEither(["black", "dark brown", "brown", "chestnut", "blonde", "red"]);
 						eyeColor(["light grey", "blue", "blue", "brown", "green", "green"]);
 					} else {
@@ -1533,7 +1533,7 @@ globalThis.GenerateNewSlave = (function() {
 				slave.hStyle = "neat";
 				eyeColor(["blue", "brown", "green"], true);
 		}
-		if (slave.origHColor === "red"){
+		if (slave.origHColor === "red") {
 			slave.origHColor = jsEither(["chestnut", "auburn", "auburn", "auburn", "auburn", "ginger", "ginger", "copper", "copper", "red"]);
 		}
 		if ((skinToneLevel(slave.origSkin) > 5) && (skinToneLevel(slave.origSkin) < 10)) {
@@ -1557,7 +1557,7 @@ globalThis.GenerateNewSlave = (function() {
 			}
 		}
 	}
-	
+
 	function generateBoobTweaks() {
 		if (V.weightAffectsAssets !== 0) {
 			if (slave.weight < -10 && slave.boobs > 200) {
@@ -1798,28 +1798,27 @@ globalThis.GenerateNewSlave = (function() {
 })();
 
 globalThis.generateSalonModifications = function(slave) {
-
 	/*hair dyes*/
-	if ( (jsRandom(1, 50) === 1) || ((jsRandom(1, 20) === 1) && ["southern european", "white"].includes(slave.race)) ){
+	if ( (jsRandom(1, 50) === 1) || ((jsRandom(1, 20) === 1) && ["southern european", "white"].includes(slave.race)) ) {
 		slave.hColor = jsEither(["jet black", "black", "black", "dark brown", "brown", "chestnut", "chocolate", "amber", "golden", "blonde", "blonde", "blonde", "platinum blonde", "platinum blonde", "auburn", "ginger", "copper"]);
-        if (jsRandom(1, 10) === 1 || (["jet black", "black", "dark brown", "brown", "chestnut", "chocolate"].includes(slave.hColor) && jsRandom(1, 10) !== 1)){
-            slave.eyebrowHColor = slave.hColor;
-        }
-        slave.override_H_Color = 1;
-	} else if ( (jsRandom(1, 100) === 1) || ((jsRandom(1, 20) === 1) && ["a barber", "a barista", "a bimbo", "a blogger", "a camgirl", "a camwhore", "a cheerleader", "a child actress", "a clown", "a club recruiter", "a cocktail waitress", "a comedian", "a cosmetologist", "a dominatrix", "a gang member", "a house DJ", "an idol", "a juvenile delinquent", "a magician's assistant", "a medium", "a mime", "a musician", "a party girl", "a poet", "a political activist", "a porn star", "a radio show host", "a stage magician", "a street performer", "a stripper", "a student", "a video game streamer", "an actress", "an artist", "an aspiring pop star"].includes(slave.career)) ){
+		if (jsRandom(1, 10) === 1 || (["jet black", "black", "dark brown", "brown", "chestnut", "chocolate"].includes(slave.hColor) && jsRandom(1, 10) !== 1)) {
+			slave.eyebrowHColor = slave.hColor;
+		}
+		slave.override_H_Color = 1;
+	} else if ( (jsRandom(1, 100) === 1) || ((jsRandom(1, 20) === 1) && ["a barber", "a barista", "a bimbo", "a blogger", "a camgirl", "a camwhore", "a cheerleader", "a child actress", "a clown", "a club recruiter", "a cocktail waitress", "a comedian", "a cosmetologist", "a dominatrix", "a gang member", "a house DJ", "an idol", "a juvenile delinquent", "a magician's assistant", "a medium", "a mime", "a musician", "a party girl", "a poet", "a political activist", "a porn star", "a radio show host", "a stage magician", "a street performer", "a stripper", "a student", "a video game streamer", "an actress", "an artist", "an aspiring pop star"].includes(slave.career)) ) {
 		slave.hColor = jsEither(["platinum blonde", "platinum blonde", "blazing red", "blue-violet", "blue", "burgundy", "dark blue", "deep red", "green-yellow", "green", "grey", "neon blue", "neon green", "neon pink", "pink", "ivory", "purple", "red", "sea green", "silver"]);
-		if (jsRandom(1, 3) === 1){
+		if (jsRandom(1, 3) === 1) {
 			slave.eyebrowHColor = slave.hColor;
 		}
 		slave.override_H_Color = 1;
 	}
-	if (jsRandom(1, 6) === 1){
+	if (jsRandom(1, 6) === 1) {
 		slave.pubicHColor = slave.hColor;
 		slave.underArmHColor = slave.hColor;
 	}
 
 	/*hair style*/
-	if ( (["black", "mixed race"].includes(slave.race) && (jsRandom(1, 3) === 1)) || (jsRandom(1, 15) === 1)  ) {
+	if ( (["black", "mixed race"].includes(slave.race) && (jsRandom(1, 3) === 1)) || (jsRandom(1, 15) === 1) ) {
 		slave.hStyle = jsEither(["dreadlocks", "cornrows", "afro"]);
 	} else if (jsRandom(1, 5) === 1) {
 		slave.hStyle = jsEither(["curled", "bun", "luxurious", "permed"]);
@@ -1839,8 +1838,8 @@ globalThis.generateSalonModifications = function(slave) {
 			}
 		}
 	}
-    
-    /* sun and spray tanning */
+
+	/* sun and spray tanning */
 	if (skinToneLevel(slave.origSkin) < 13) {
 		if ( (jsRandom(1, 40) === 1) || (["a bimbo", "an exotic dancer", "a trophy wife", "a party girl"].includes(slave.career) && (jsRandom(1, 10) === 1)) ) {
 			slave.skin = "spray tanned";
@@ -1857,12 +1856,10 @@ globalThis.generateSalonModifications = function(slave) {
 			if (["the Middle East", "South America", "Africa", "Australia"].includes(V.continent)) {
 				tan_chance += 5;
 			}
-			tan_chance += (skinToneLevel(slave.origSkin)-8);
+			tan_chance += (skinToneLevel(slave.origSkin) - 8);
 			if (tan_chance >= 45) {
 				slave.skin = "sun tanned";
 			}
-
 		}
-
 	}
 };
-- 
GitLab


From 87e0b4d44fa4c906f9d7379ed24e3c132a8830ce Mon Sep 17 00:00:00 2001
From: kopareigns <kopareigns@gmail.com>
Date: Sat, 18 Jul 2020 16:10:05 -0400
Subject: [PATCH 09/15] Cockfeeder Resistance to JS

---
 src/events/RESS/cockfeederResistance.js | 140 ++++++++++++++++++++++++
 src/events/randomEvent.js               |  17 +--
 src/js/eventSelectionJS.js              |  10 --
 src/uncategorized/RESS.tw               |  52 +--------
 4 files changed, 150 insertions(+), 69 deletions(-)
 create mode 100644 src/events/RESS/cockfeederResistance.js

diff --git a/src/events/RESS/cockfeederResistance.js b/src/events/RESS/cockfeederResistance.js
new file mode 100644
index 00000000000..97d21613a58
--- /dev/null
+++ b/src/events/RESS/cockfeederResistance.js
@@ -0,0 +1,140 @@
+App.Events.RESSCockFeederResistance = class RESSCockFeederResistance extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [
+			() => V.cockFeeder !== 0
+		];
+	}
+
+	actorPrerequisites() {
+		return [
+			[ // single event slave
+				s => s.fetish !== "mindbroken",
+				hasAnyArms,
+				hasAnyLegs,
+				s => s.devotion <= 20 && s.devotion >= -50,
+				s => s.trust >= -20,
+				s => s.fetish !== "cumslut"
+			]
+		];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {
+			He, he, His, his, hers, him, himself, girl
+		} = getPronouns(eventSlave);
+		const hisA = "her";//What should go here?
+		const {s, S, ss, title: Master} = getEnunciation(eventSlave);
+		const desc = SlaveTitle(eventSlave);
+
+		/** @type {App.Entity.PlayerState} */
+		let PC = V.PC;
+
+		V.nextLink = "Next Week";
+
+		App.Events.drawEventArt(node, eventSlave, "no clothing");
+
+		let t = [];
+
+		t.push(`As you're starting your day, ${V.assistant.name} pauses ${hisA} review of business matters to report that`);
+		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
+		t.push(`is not accepting ${his} breakfast from the phallic feeders in the kitchen. With nothing else urgent, you head down to address the situation. ${eventSlave.slaveName} is in the proper position for feeding, on ${hasBothLegs(eventSlave) ? `${his} knees` : "the ground"} in front of a feeding fuckmachine. ${He} isn't sucking it off for ${his} breakfast, however. ${He} doesn't seem to be fully awake, and is ${canSee(eventSlave) ? "regarding" : "touching"} the big dildo that ${he}'s supposed to suck off for food with vague distaste. ${His} ${eventSlave.faceShape} face is scrunched into a look of tired disgust.`);
+
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		t.push(`${He} turns to you as you enter, and ${canSee(eventSlave) ? "seeing" : "realizing"} that it's you, ${he}`);
+		if(canTalk(eventSlave)) {
+			t.push(`mumbles unhappily, "Plea${s}e, ${Master}, plea${s}e, can I ju${s}t eat normally for one day? Thi${s} i${s}, um, kind of gro${ss}."`);
+		} else {
+			t.push(`uses hesitant gestures to beg you to let ${him} eat normally today. ${His} hand${hasBothArms(eventSlave) ? "s become" : " becomes"} vehement when it comes to the phallus in ${his} face, which ${he} apparently finds disgusting.`);
+		}
+
+		App.Events.addParagraph(node, t);
+
+		App.Events.addResponses(node, [
+			new App.Events.Result(`Talk ${him} through it`, talk),
+			new App.Events.Result(`Punish ${him} with a bigger feeder`, bigFeeder),
+			new App.Events.Result(`Double penetrate ${his} mouth for insolence`, penetrate),
+			PC.balls >= 14
+				? new App.Events.Result(`Force-feed ${him} with your own cock`, forceFeed)
+				: new App.Events.Result()
+		]);
+
+		function talk() {
+			t = [];
+
+			t.push(`You put as much quiet authority into your ${canHear(eventSlave) ? "voice" : "words"} as you can, and explain to ${him} that ${he} must eat ${his} breakfast this way. You do not explain any of the actual reasons why you require slaves to eat from cocks, but couch your quiet explanation in terms of ${his} life as a slave. You tell ${him} that eating breakfast out of a dick is something you've ordered ${him} to do. ${He} needs to do it. If ${he} does, ${he}'ll be treated well; if ${he} does not, that will oblige you to punish ${him}. You tell ${him} that you would like ${him} to be a good slave, and that it would be disappointing if you had to punish ${him}. You put just a hint of steel into the last sentence, and ${he} stiffens a little at it. Hesitantly, ${he} scoots forward and bends down to take the tip of the big feeder dick in ${his} mouth. Sensing that it's being sucked, it gently presses into ${his} mouth, fucking ${his} ${eventSlave.lips > 95 ? "big-lipped facepussy" : "face"}. Its strokes get longer and faster, until ${he}'s gulping down ${his} breakfast as it's shot down ${his} throat like a huge load.`);
+
+			if (V.suppository !== 0 && eventSlave.drugs !== "none") {
+				t.push(`By this time, the kitchen is also dosing ${him} with drugs by fucking ${his} butt with a phallus that ejaculates them for absorption. ${He}'s being spitroasted by the kitchen.`);
+			}
+
+			t.push(`Once ${he}'s fully awake, ${he}'s mostly <span class="mediumaquamarine">relieved</span> that you let ${him} get away with hesitation about obedience and took the time to talk ${him} through it.`);
+
+			eventSlave.trust += 4;
+			return t;
+		}
+
+		function bigFeeder() {
+			t = [];
+
+			t.push(`You give the kitchen an order by voice command. ${canHear(eventSlave) ? "It's technical" : `${He} can't hear it`}, so ${he} doesn't understand it, but the meaning becomes clear soon enough. The phallus dangling in ${his} face is withdrawn, and ${he}'s halfway through a shocked "Thank you" when it's replaced by another, noticeably larger one.`);
+			if (!canSee(eventSlave)) {
+				t.push(`${He} doesn't notice its larger size until it bumps into ${his} cheek, causing ${him} to scoot back.`);
+			}
+			t.push(`You tell ${him} in deceptively mild ${canHear(eventSlave) ? "tones" : "words"} that you'll keep increasing the size of ${his} feeder until ${he} decides to suck it off like a good little ${desc}, or you run out of size options and are forced to strap ${him} down and push them down ${his} throat. At that point, ${he} might be able to breathe; then again, ${he} might not. ${He} begins to cry, ${his}`);
+			if (eventSlave.face > 95) {
+				t.push("heartbreakingly beautiful");
+			} else if (eventSlave.face > 10) {
+				t.push("pretty");
+			} else {
+				t.push("homely");
+			}
+			t.push(`face clouding with anguish, but is so <span class="gold">frightened</span> by the threat that ${he} doesn't let ${him} tears distract ${him} from scooting forward to suck off a huge dildo for ${his} breakfast.`);
+			if (V.suppository !== 0 && eventSlave.drugs !== "none") {
+				t.push(`Once it senses ${he}'s complying, the kitchen starts dosing ${him} with drugs by fucking ${his} butt with a phallus that ejaculates them for absorption. Mercifully, ${he} doesn't try to refuse the anal fuckmachine, and avoids having ${his} asshole filled by a bigger phallus too.`);
+			}
+			t.push(`${He} keeps the threat in mind, and has a slightly sore throat to <span class="hotpink">help ${him} remember to obey without question.</span>`);
+
+			eventSlave.trust -= 2;
+			eventSlave.devotion += 2;
+			return t;
+		}
+
+		function penetrate() {
+			t = [];
+
+			t.push(`You step forward and caress the slave's throat, telling ${him} to suck like a good little ${desc}. You make no threat, but give ${him} the order in a ${canHear(eventSlave) ? "voice of brass" : "commanding manner"}. ${He} knows what you can do to ${him}, and scrabbles forward to obey, <span class="gold">terribly frightened.</span> ${His} fear is justified. You announce that ${he}'s avoided serious punishment, but ${he} still needs correction for ${his} hesitation and insolence. ${He} can't beg or even moan, since ${he}'s being facefucked by the feeder dildo by now, but ${his} ${App.Desc.eyesColor(eventSlave)} widen in terror. ${He} ${canSee(eventSlave) ? `can't watch you, since ${he} can't turn ${his} head,` : "can't see what you are doing,"} so ${he} has almost no time to prepare when you haul ${his} head most of the way off the feeder and shove ${PC.dick !== 0 ? "your own phallus" : "a strap-on"} into ${his} mouth, too. ${He} gags instantly, almost vomiting, but forces ${him}self to relax as you begin to thrust into ${his} throat, alternately with the feeder. The liquid food provides plenty of lubrication, and a lot of liquid for ${him} to gag on, and before long ${he}'s a degraded, humiliating mess. ${He} often clamps ${his} eyes shut as ${he} desperately concentrates on breathing, squeezing the tears out to run down ${his} ${eventSlave.skin} cheeks.`);
+			if (V.suppository !== 0 && eventSlave.drugs !== "none") {
+				t.push(`You leave the poor slave to take ${his} drugs up the ass, since the kitchen administers those by phallus, too. Fortunately for ${him}, ${he} doesn't object to that.`);
+			}
+
+			eventSlave.trust -= 4;
+			seX(eventSlave, "oral", PC, "penetrative");
+			return t;
+		}
+
+		function forceFeed() {
+			t = [];
+
+			t.push(`You step forward and pull ${him} away from the feeder, telling ${him} that, since ${he} doesn't like the cockfeeder, ${he} can suck yours like a good little $desc. You make no threat, but order ${him} ${canHear(eventSlave) ? "in a steely voice" : "authoritatively"} to suck you off until ${he}'s earned a meal of your cum. ${He} knows what you can do to ${him}, and hurries forward to obey. ${He} rushes to open your clothes and get to work, but pauses when ${canSee(eventSlave) ? `${his} ${App.Desc.eyesColor(eventSlave)} take in your massive testicles.` : `${his} groping hand feels your massive testicles.`} Realizing just how big ${his} meal will be, ${he}'s obviously <span class="gold">frightened.</span> You grab ${his} head, breaking ${him} out of ${his} shocked stillness, and explain that you can't let ${him} starve. If ${he} won't eat out of the feeder, you'll just have to feed ${him} some other way. With that, you ram your cock forward and start fucking ${his}`);
+			if (eventSlave.face > 95) {
+				t.push("heartbreakingly beautiful");
+			} else if (eventSlave.face > 10) {
+				t.push("pretty");
+			} else {
+				t.push("homely");
+			}
+			t.push(`face. After a few minutes of gagging oral, you start to approach your climax. Your thorough facefucking leaves ${him} unable to beg or even moan, but ${his} eyes widen in terror when ${he} realizes you're about to cum. You don't give ${him} any time to prepare, instead hilting yourself immediately, and letting ${his} throat's desperate attempts to swallow bring you over the edge. You begin your long release of pent-up jizz, spraying deciliter after deciliter of cum down ${his} throat and into ${his} stomach. By the time you've finished, you can tell ${he}'s struggling for air and in pain from the massive quantity of thick fluid in ${his} stomach. You give ${him} a helpful hint before releasing ${him}: "If you take it all the way in your throat, you don't even have to ${canTaste(eventSlave) ? "taste" : "feel"} what it's feeding you." You pull out of ${his} mouth and let ${him} go. ${He} gasps for air and almost immediately vomits some of your cum all over ${him}self, turning ${him} into a degraded, humiliated mess. ${He} lays on the floor and desperately concentrates on breathing, squeezing the tears out of ${his} eyes to run down ${his} ${eventSlave.skin} cheeks.`);
+			if (V.suppository !== 0 && eventSlave.drugs !== "none") {
+				t.push(`You leave the poor slave to take ${his} drugs up the ass, since the kitchen administers those by phallus, too. Fortunately for ${him}, ${he} doesn't object to that.`);
+			}
+
+			eventSlave.trust -= 2;
+			seX(eventSlave, "oral", PC, "penetrative");
+			return t;
+		}
+	}
+}
diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js
index 86b4997a3c3..76ab1182e06 100644
--- a/src/events/randomEvent.js
+++ b/src/events/randomEvent.js
@@ -10,18 +10,19 @@ App.Events.getIndividualEvents = function() {
 	return [
 		// instantiate all possible random individual events here
 		// example: new App.Events.TestEvent(),
-		new App.Events.RESSLazyEvening(),
-		new App.Events.RESSMuscles(),
+		new App.Events.RECIButthole(),
+		new App.Events.RECIFuta(),
+		new App.Events.RECIMilf(),
+		new App.Events.RECIOrientation(),
+		new App.Events.RESSAssFitting(),
+		new App.Events.RESSCockFeederResistance(),
 		new App.Events.RESSHotPC(),
+		new App.Events.RESSLazyEvening(),
 		new App.Events.RESSMoistPussy(),
-		new App.Events.RESSWaistlineWoes(),
-		new App.Events.RESSAssFitting(),
+		new App.Events.RESSMuscles(),
 		new App.Events.RESSRetchingCum(),
+		new App.Events.RESSWaistlineWoes(),
 		new App.Events.RETSSiblingTussle(),
-		new App.Events.RECIButthole(),
-		new App.Events.RECIFuta(),
-		new App.Events.RECIOrientation(),
-		new App.Events.RECIMilf(),
 	];
 };
 
diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js
index 121a5ab85fb..e93813aca06 100644
--- a/src/js/eventSelectionJS.js
+++ b/src/js/eventSelectionJS.js
@@ -887,11 +887,6 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 								V.RESSevent.push("suppository resistance");
 							}
 						}
-						if (V.cockFeeder !== 0) {
-							if (eventSlave.fetish !== "cumslut") {
-								V.RESSevent.push("cockfeeder resistance");
-							}
-						}
 					}
 				}
 			}
@@ -2241,11 +2236,6 @@ globalThis.generateRandomEventPoolServant = function(eventSlave) {
 								V.RESSevent.push("suppository resistance");
 							}
 						}
-						if (V.cockFeeder !== 0) {
-							if (eventSlave.fetish !== "cumslut") {
-								V.RESSevent.push("cockfeeder resistance");
-							}
-						}
 					}
 				}
 			}
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index ca8183cc968..618dbd5a3c4 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -44,7 +44,7 @@
 <<set _clothesTemp = $activeSlave.clothes>>
 <<switch $RESSevent>>
 /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/
-<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "cockfeeder resistance" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "devoted waist" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "obedient idiot" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "suppository resistance" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
+<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "devoted waist" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "obedient idiot" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "suppository resistance" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
 	<<set $activeSlave.clothes = "no clothing">>
 <<case "whore rebellious">>
 	/* this scene states they are wearing "thick, durable latex with temperature regulation and anchor points for restraint" no matter what they are assigned to wear. */
@@ -3030,19 +3030,6 @@ Passing near the slave dormitory late at night, you hear a quiet cry within. Thi
 <</switch>>
 Still dreaming, $he clasps $his arm<<if hasBothArms($activeSlave)>>s<</if>> protectively over $his <<if $activeSlave.pregKnown == 1>>unborn child<<if $activeSlave.pregType > 1>>ren<</if>><<else>>vulnerable chest<</if>>, and rolls to one side. Halfway into a fetal position, $he turns $his head against $his pillow, murmuring "N-no — plea<<s>>e no — I'll d-do anyth-thing — no..."
 
-<<case "cockfeeder resistance">>
-
-As you're starting your day, $assistant.name pauses _hisA review of business matters to report that <<= App.UI.slaveDescriptionDialog($activeSlave)>> is not accepting $his breakfast from the phallic feeders in the kitchen. With nothing else urgent, you head down to address the situation. $activeSlave.slaveName is in the proper position for feeding, on <<if hasBothLegs($activeSlave)>>$his knees<<else>>the ground<</if>> in front of a feeding fuckmachine. $He isn't sucking it off for $his breakfast, however. $He doesn't seem to be fully awake, and is <<if canSee($activeSlave)>>regarding<<else>>touching<</if>> the big dildo that $he's supposed to suck off for food with vague distaste. $His $activeSlave.faceShape face is scrunched into a look of tired disgust.
-
-<br><br>
-
-$He turns to you as you enter, and <<if canSee($activeSlave)>>seeing<<else>>realizing<</if>> that it's you, $he
-<<if !canTalk($activeSlave)>>
-	uses hesitant gestures to beg you to let $him eat normally today. $His hand<<if hasBothArms($activeSlave)>>s become<<else>> becomes<</if>> vehement when it comes to the phallus in $his face, which $he apparently finds disgusting.
-<<else>>
-	mumbles unhappily, "Plea<<s>>e, <<Master>>, plea<<s>>e, can I ju<<s>>t eat normally for one day? Thi<<s>> i<<s>>, um, kind of gro<<ss>>."
-<</if>>
-
 <<case "suppository resistance">>
 
 As you're starting your day, $assistant.name pauses _hisA review of business matters to report that <<= App.UI.slaveDescriptionDialog($activeSlave)>> is not accepting $his breakfast from the phallic feeders in the kitchen. With nothing else urgent, you head down to address the situation. $activeSlave.slaveName is standing in front of the place where $he's supposed to take $his drugs. It's a little pad on the ground on which $he's supposed to kneel, with a fuckmachine positioned to penetrate $his anus once $he does so. $He's not completely awake yet, and is just standing there, <<if canSee($activeSlave)>>viewing<<else>>feeling<</if>> the setup with a vague look of distaste. $He's facing it, and has $his <<if $activeSlave.butt > 6>>massive behind<<elseif $activeSlave.butt > 3>>beautiful bottom<<else>>cute butt<</if>> pointed very much away from the machine that's supposed to be fucking it.
@@ -16179,43 +16166,6 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h
 	<</link>><<if (($activeSlave.vagina == 0) && canDoVaginal($activeSlave)) || (($activeSlave.anus == 0) && canDoAnal($activeSlave))>> //This option will take $his virginity//<</if>>
 <</if>>
 
-<<case "cockfeeder resistance">>
-
-<<link "Talk $him through it">>
-	<<replace "#result">>
-		You put as much quiet authority into your <<if canHear($activeSlave)>>voice<<else>>words<</if>> as you can, and explain to $him that $he must eat $his breakfast this way. You do not explain any of the actual reasons why you require slaves to eat from cocks, but couch your quiet explanation in terms of $his life as a slave. You tell $him that eating breakfast out of a dick is something you've ordered $him to do. $He needs to do it. If $he does, $he'll be treated well; if $he does not, that will oblige you to punish $him. You tell $him that you would like $him to be a good slave, and that it would be disappointing if you had to punish $him. You put just a hint of steel into the last sentence, and $he stiffens a little at it. Hesitantly, $he scoots forward and bends down to take the tip of the big feeder dick in $his mouth. Sensing that it's being sucked, it gently presses into $his mouth, fucking $his <<if $activeSlave.lips > 95>>big-lipped facepussy<<else>>face<</if>>. Its strokes get longer and faster, until $he's gulping down $his breakfast as it's shot down $his throat like a huge load.
-		<<if ($suppository != 0) && ($activeSlave.drugs != "none")>>By this time, the kitchen is also dosing $him with drugs by fucking $his butt with a phallus that ejaculates them for absorption. $He's being spitroasted by the kitchen.<</if>>
-		Once $he's fully awake, $he's mostly @@.mediumaquamarine;relieved@@ that you let $him get away with hesitation about obedience and took the time to talk $him through it.
-		<<set $activeSlave.trust += 4>>
-	<</replace>>
-<</link>>
-<br><<link "Punish $him with a bigger feeder">>
-	<<replace "#result">>
-		You give the kitchen an order by voice command. <<if canHear($activeSlave)>>It's technical<<else>>$He can't hear it<</if>>, so $he doesn't understand it, but the meaning becomes clear soon enough. The phallus dangling in $his face is withdrawn, and $he's halfway through a shocked "Thank you" when it's replaced by another, noticeably larger one<<if !canSee($activeSlave)>>. $He doesn't notice its larger size until it bumps into $his cheek, causing $him to scoot back<</if>>. You tell $him in deceptively mild <<if canHear($activeSlave)>>tones<<else>>words<</if>> that you'll keep increasing the size of $his feeder until $he decides to suck it off like a good little $desc, or you run out of size options and are forced to strap $him down and push them down $his throat. At that point, $he might be able to breathe; then again, $he might not. $He begins to cry, $his <<if $activeSlave.face > 95>>heartbreakingly beautiful<<elseif $activeSlave.face > 10>>pretty<<else>>homely<</if>> face clouding with anguish, but is so @@.gold;frightened@@ by the threat that $he doesn't let $him tears distract $him from scooting forward to suck off a huge dildo for $his breakfast.
-		<<if ($suppository != 0) && ($activeSlave.drugs != "none")>>Once it senses $he's complying, the kitchen starts dosing $him with drugs by fucking $his butt with a phallus that ejaculates them for absorption. Mercifully, $he doesn't try to refuse the anal fuckmachine, and avoids having $his asshole filled by a bigger phallus too.<</if>>
-		$He keeps the threat in mind, and has a slightly sore throat to @@.hotpink;help $him remember to obey without question.@@
-		<<set $activeSlave.trust -= 2, $activeSlave.devotion += 2>>
-	<</replace>>
-<</link>>
-<br><<link "Double penetrate $his mouth for insolence">>
-	<<replace "#result">>
-		You step forward and caress the slave's throat, telling $him to suck like a good little $desc. You make no threat, but give $him the order in a <<if canHear($activeSlave)>>voice of brass<<else>>commanding manner<</if>>. $He knows what you can do to $him, and scrabbles forward to obey, @@.gold;terribly frightened.@@ $His fear is justified. You announce that $he's avoided serious punishment, but $he still needs correction for $him hesitation and insolence. $He can't beg or even moan, since $he's being facefucked by the feeder dildo by now, but $his <<= App.Desc.eyesColor($activeSlave)>> widen in terror. $He <<if canSee($activeSlave)>>can't watch you, since $he can't turn $his head,<<else>>can't see what you are doing,<</if>> so $he has almost no time to prepare when you haul $him head most of the way off the feeder and shove <<if $PC.dick != 0>>your own phallus<<else>>a strap-on<</if>> into $his mouth, too. $He gags instantly, almost vomiting, but forces $himself to relax as you begin to thrust into $his throat, alternately with the feeder. The liquid food provides plenty of lubrication, and a lot of liquid for $him to gag on, and before long $he's a degraded, humiliating mess. $He often clamps $his eyes shut as $he desperately concentrates on breathing, squeezing the tears out to run down $his $activeSlave.skin cheeks.
-		<<if ($suppository != 0) && ($activeSlave.drugs != "none")>>You leave the poor slave to take $his drugs up the ass, since the kitchen administers those by phallus, too. Fortunately for $him, $he doesn't object to that.<</if>>
-		<<set $activeSlave.trust -= 4>>
-		<<run seX($activeSlave, "oral", $PC, "penetrative")>>
-	<</replace>>
-<</link>>
-<<if $PC.balls >= 14>>
-	<br><<link "Force-feed $him with your own cock">>
-		<<replace "#result">>
-			You step forward and pull $him away from the feeder, telling $him that, since $he doesn't like the cockfeeder, $he can suck yours like a good little $desc. You make no threat, but order $him <<if canHear($activeSlave)>>in a steely voice<<else>>authoritatively<</if>> to suck you off until $he's earned a meal of your cum. $He knows what you can do to $him, and hurries forward to obey. $He rushes to open your clothes and get to work, but pauses when <<if canSee($activeSlave)>>$his <<= App.Desc.eyesColor($activeSlave)>> take in your massive testicles.<<else>>$his groping hand feels your massive testicles.<</if>> Realizing just how big $his meal will be, $he's obviously @@.gold;frightened.@@ You grab $his head, breaking $him out of $his shocked stillness, and explain that you can't let $him starve. If $he won't eat out of the feeder, you'll just have to feed $him some other way. With that, you ram your cock forward and start fucking $his <<if $activeSlave.face > 95>>heartbreakingly beautiful<<elseif $activeSlave.face > 10>>pretty<<else>>homely<</if>> face. After a few minutes of gagging oral, you start to approach your climax. Your thorough facefucking leaves $him unable to beg or even moan, but $his eyes widen in terror when $he realizes you're about to cum. You don't give $him any time to prepare, instead hilting yourself immediately, and letting $his throat's desperate attempts to swallow bring you over the edge. You begin your long release of pent-up jizz, spraying deciliter after deciliter of cum down $his throat and into $his stomach. By the time you've finished, you can tell $he's struggling for air and in pain from the massive quantity of thick fluid in $his stomach. You give $him a helpful hint before releasing $him: "If you take it all the way in your throat, you don't even have to <<if canTaste($activeSlave)>>taste<<else>>feel<</if>> what it's feeding you." You pull out of $his mouth and let $him go. $He gasps for air and almost immediately vomits some of your cum all over $himself, turning $him into a degraded, humiliated mess. $He lays on the floor and desperately concentrates on breathing, squeezing the tears out of $his eyes to run down $his $activeSlave.skin cheeks.
-			<<if ($suppository != 0) && ($activeSlave.drugs != "none")>>You leave the poor slave to take $his drugs up the ass, since the kitchen administers those by phallus, too. Fortunately for $him, $he doesn't object to that.<</if>>
-			<<set $activeSlave.trust -= 2>>
-			<<run seX($activeSlave, "oral", $PC, "penetrative")>>
-		<</replace>>
-	<</link>>
-<</if>>
-
 <<case "suppository resistance">>
 
 <<link "Talk $him through it">>
-- 
GitLab


From ce5aefd784983731311cba5b4636c4f6eff1cfed Mon Sep 17 00:00:00 2001
From: kopareigns <kopareigns@gmail.com>
Date: Sat, 18 Jul 2020 16:55:10 -0400
Subject: [PATCH 10/15] Updates

---
 src/events/RESS/cockfeederResistance.js |  2 +-
 src/events/randomEvent.js               | 10 ++++++----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/events/RESS/cockfeederResistance.js b/src/events/RESS/cockfeederResistance.js
index 97d21613a58..cd4e3169960 100644
--- a/src/events/RESS/cockfeederResistance.js
+++ b/src/events/RESS/cockfeederResistance.js
@@ -24,7 +24,7 @@ App.Events.RESSCockFeederResistance = class RESSCockFeederResistance extends App
 		const {
 			He, he, His, his, hers, him, himself, girl
 		} = getPronouns(eventSlave);
-		const hisA = "her";//What should go here?
+		const {hisA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
 		const {s, S, ss, title: Master} = getEnunciation(eventSlave);
 		const desc = SlaveTitle(eventSlave);
 
diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js
index 76ab1182e06..6da34d5a274 100644
--- a/src/events/randomEvent.js
+++ b/src/events/randomEvent.js
@@ -10,10 +10,6 @@ App.Events.getIndividualEvents = function() {
 	return [
 		// instantiate all possible random individual events here
 		// example: new App.Events.TestEvent(),
-		new App.Events.RECIButthole(),
-		new App.Events.RECIFuta(),
-		new App.Events.RECIMilf(),
-		new App.Events.RECIOrientation(),
 		new App.Events.RESSAssFitting(),
 		new App.Events.RESSCockFeederResistance(),
 		new App.Events.RESSHotPC(),
@@ -22,6 +18,12 @@ App.Events.getIndividualEvents = function() {
 		new App.Events.RESSMuscles(),
 		new App.Events.RESSRetchingCum(),
 		new App.Events.RESSWaistlineWoes(),
+
+		new App.Events.RECIButthole(),
+		new App.Events.RECIFuta(),
+		new App.Events.RECIMilf(),
+		new App.Events.RECIOrientation(),
+
 		new App.Events.RETSSiblingTussle(),
 	];
 };
-- 
GitLab


From 948278f9ab831e4e2610f9b14207d5549e6974e4 Mon Sep 17 00:00:00 2001
From: Svornost <11434-svornost@users.noreply.gitgud.io>
Date: Sat, 18 Jul 2020 16:57:38 -0700
Subject: [PATCH 11/15] Fix $desc interpolation, add semicolon.

---
 src/events/RESS/cockfeederResistance.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/events/RESS/cockfeederResistance.js b/src/events/RESS/cockfeederResistance.js
index cd4e3169960..ce35251008d 100644
--- a/src/events/RESS/cockfeederResistance.js
+++ b/src/events/RESS/cockfeederResistance.js
@@ -119,7 +119,7 @@ App.Events.RESSCockFeederResistance = class RESSCockFeederResistance extends App
 		function forceFeed() {
 			t = [];
 
-			t.push(`You step forward and pull ${him} away from the feeder, telling ${him} that, since ${he} doesn't like the cockfeeder, ${he} can suck yours like a good little $desc. You make no threat, but order ${him} ${canHear(eventSlave) ? "in a steely voice" : "authoritatively"} to suck you off until ${he}'s earned a meal of your cum. ${He} knows what you can do to ${him}, and hurries forward to obey. ${He} rushes to open your clothes and get to work, but pauses when ${canSee(eventSlave) ? `${his} ${App.Desc.eyesColor(eventSlave)} take in your massive testicles.` : `${his} groping hand feels your massive testicles.`} Realizing just how big ${his} meal will be, ${he}'s obviously <span class="gold">frightened.</span> You grab ${his} head, breaking ${him} out of ${his} shocked stillness, and explain that you can't let ${him} starve. If ${he} won't eat out of the feeder, you'll just have to feed ${him} some other way. With that, you ram your cock forward and start fucking ${his}`);
+			t.push(`You step forward and pull ${him} away from the feeder, telling ${him} that, since ${he} doesn't like the cockfeeder, ${he} can suck yours like a good little ${desc}. You make no threat, but order ${him} ${canHear(eventSlave) ? "in a steely voice" : "authoritatively"} to suck you off until ${he}'s earned a meal of your cum. ${He} knows what you can do to ${him}, and hurries forward to obey. ${He} rushes to open your clothes and get to work, but pauses when ${canSee(eventSlave) ? `${his} ${App.Desc.eyesColor(eventSlave)} take in your massive testicles.` : `${his} groping hand feels your massive testicles.`} Realizing just how big ${his} meal will be, ${he}'s obviously <span class="gold">frightened.</span> You grab ${his} head, breaking ${him} out of ${his} shocked stillness, and explain that you can't let ${him} starve. If ${he} won't eat out of the feeder, you'll just have to feed ${him} some other way. With that, you ram your cock forward and start fucking ${his}`);
 			if (eventSlave.face > 95) {
 				t.push("heartbreakingly beautiful");
 			} else if (eventSlave.face > 10) {
@@ -137,4 +137,4 @@ App.Events.RESSCockFeederResistance = class RESSCockFeederResistance extends App
 			return t;
 		}
 	}
-}
+};
-- 
GitLab


From 9c8cf36073ac0500482a1d961bab5f96c38e28b1 Mon Sep 17 00:00:00 2001
From: Svornost <11434-svornost@users.noreply.gitgud.io>
Date: Sat, 18 Jul 2020 16:58:55 -0700
Subject: [PATCH 12/15] it's randomRelatedAvailableSlave, not
 randomAvailableRelatedSlave.

---
 src/uncategorized/saRecruitGirls.tw | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/uncategorized/saRecruitGirls.tw b/src/uncategorized/saRecruitGirls.tw
index 6ab863caef6..665fa092ab1 100644
--- a/src/uncategorized/saRecruitGirls.tw
+++ b/src/uncategorized/saRecruitGirls.tw
@@ -743,7 +743,7 @@
 			<</if>>
 		<</if>>
 	<<elseif $arcologies[0].FSEgyptianRevivalist != "unset">>
-		<<set _recruiterRelation = randomAvailableRelatedSlave($slaves[$i])>>
+		<<set _recruiterRelation = randomRelatedAvailableSlave($slaves[$i])>>
 		<<if def _recruiterRelation>>
 			/* willingness; protip: relationship optional, and actual sex doesn't need to be allowed */
 			<<if ($slaves[$i].energy > 60 || $slaves[$i].sexualQuirk == "tease" || $slaves[$i].sexualQuirk == "perverted") && (_recruiterRelation.energy > 60 || _recruiterRelation.sexualQuirk == "tease" || _recruiterRelation.sexualQuirk == "perverted")>>
-- 
GitLab


From 7e55d8bc6c062b1c31a3e32a7bbffc801a516bf7 Mon Sep 17 00:00:00 2001
From: kopareigns <kopareigns@gmail.com>
Date: Sat, 18 Jul 2020 20:56:49 -0400
Subject: [PATCH 13/15] Suppository Resistance to JS

---
 src/events/RESS/cockfeederResistance.js  |   4 +-
 src/events/RESS/suppositoryResistance.js | 162 +++++++++++++++++++++++
 src/events/randomEvent.js                |   1 +
 src/js/eventSelectionJS.js               |  24 ----
 src/uncategorized/RESS.tw                |  54 +-------
 5 files changed, 166 insertions(+), 79 deletions(-)
 create mode 100644 src/events/RESS/suppositoryResistance.js

diff --git a/src/events/RESS/cockfeederResistance.js b/src/events/RESS/cockfeederResistance.js
index cd4e3169960..64e870e73c0 100644
--- a/src/events/RESS/cockfeederResistance.js
+++ b/src/events/RESS/cockfeederResistance.js
@@ -22,10 +22,10 @@ App.Events.RESSCockFeederResistance = class RESSCockFeederResistance extends App
 		/** @type {Array<App.Entity.SlaveState>} */
 		let [eventSlave] = this.actors.map(a => getSlave(a));
 		const {
-			He, he, His, his, hers, him, himself, girl
+			He, he, His, his, him
 		} = getPronouns(eventSlave);
 		const {hisA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
-		const {s, S, ss, title: Master} = getEnunciation(eventSlave);
+		const {s, ss, title: Master} = getEnunciation(eventSlave);
 		const desc = SlaveTitle(eventSlave);
 
 		/** @type {App.Entity.PlayerState} */
diff --git a/src/events/RESS/suppositoryResistance.js b/src/events/RESS/suppositoryResistance.js
new file mode 100644
index 00000000000..38dc77532d7
--- /dev/null
+++ b/src/events/RESS/suppositoryResistance.js
@@ -0,0 +1,162 @@
+App.Events.RESSSuppositoryResistance = class RESSSuppositoryResistance extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [
+			() => V.suppository !== 0
+		];
+	}
+
+	actorPrerequisites() {
+		return [
+			[ // single event slave
+				s => s.fetish !== "mindbroken",
+				hasAnyArms,
+				hasAnyLegs,
+				s => s.drugs !== "none",
+				s => s.devotion <= 20 && s.devotion >= -50,
+				s => s.trust >= -20,
+				s => s.fetish !== "buttslut"
+			]
+		];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {
+			He, he, His, his, him
+		} = getPronouns(eventSlave);
+		const {hisA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
+		const {s, sh, ss, title: Master} = getEnunciation(eventSlave);
+		const desc = SlaveTitle(eventSlave);
+		const belly = bellyAdjective(eventSlave);
+
+		/** @type {App.Entity.PlayerState} */
+		let PC = V.PC;
+
+		V.nextLink = "Next Week";
+
+		App.Events.drawEventArt(node, eventSlave, "no clothing");
+
+		let t = [];
+
+		t.push(`As you're starting your day, ${V.assistant.name} pauses ${hisA} review of business matters to report that`);
+		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
+		t.push(`is not accepting ${his} drugs from the phallic feeders in the kitchen. With nothing else urgent, you head down to address the situation. ${eventSlave.slaveName} is standing in front of the place where ${he}'s supposed to take ${his} drugs. It's a little pad on the ground on which ${he}'s supposed to kneel, with a fuckmachine positioned to penetrate ${his} anus once ${he} does so. ${He}'s not completely awake yet, and is just standing there, ${canSee(eventSlave) ? "viewing" : "feeling"} the setup with a vague look of distaste. ${He}'s facing it, and has ${his}`);
+		if (eventSlave.butt > 6) {
+			t.push("massive behind");
+		} else if (eventSlave.butt > 3) {
+			t.push("beautiful bottom");
+		} else {
+			t.push("cute butt");
+		}
+		t.push("pointed very much away from the machine that's supposed to be fucking it.");
+
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		t.push(`${He} turns to you as you enter, and ${canSee(eventSlave) ? "seeing" : "realizing"} that it's you, ${he}`);
+		if(canTalk(eventSlave)) {
+			t.push(`mumbles unhappily, "Plea${s}e, ${Master}, can I ju${s}t take a ${sh}ot? A${ss}rape from, you know, people, i${s}, um, bad enough."`);
+		} else {
+			t.push(`uses hesitant gestures to beg you to let ${him} take ${his} drugs normally. ${He} tries to use gestures to explain that ${he} thinks ${he} gets enough anal from humans, without being buttfucked by a machine every morning.`);
+		}
+
+		App.Events.addParagraph(node, t);
+
+		App.Events.addResponses(node, [
+			new App.Events.Result(`Talk ${him} through it`, talk),
+			new App.Events.Result(`Punish ${him} with a bigger phallus`, bigPhallus),
+			new App.Events.Result(`Double penetrate ${his} ass for insolence`, penetrate)
+		]);
+
+		function talk() {
+			t = [];
+
+			t.push(`You put as much quiet authority into your ${canHear(eventSlave) ? "voice" : "words"} as you can, and explain to ${him} that ${he} is required to take ${his} drugs up ${his} ass. You do not explain any of the actual reasons why you require slaves to submit to daily machine anal, but couch your quiet explanation in terms of ${his} life as a slave. You tell ${him} that taking a solid buttfuck from a machine first thing in the morning is something you've ordered ${him} to do. ${He} needs to do it. If ${he} does, ${he}'ll be treated well; if ${he} does not, that will oblige you to punish ${him}. You tell ${him} that you would like ${him} to be a good slave, and that it would be disappointing if you had to punish ${him}. You put just a hint of steel into the last sentence, and ${he} stiffens a little at it. Hesitantly, ${he}`);
+			if (eventSlave.belly >= 300000) {
+				t.push(`shifts onto ${his} ${belly} belly, uses ${his} ${hasBothArms(eventSlave) ? "hands" : "hand"} to brace ${him}self against the impending pounding, and scoots towards the phallus.`);
+			} else {
+				t.push(`gets to ${his} ${hasBothLegs(eventSlave) ? "knees" : "knee"}, using ${his} ${hasBothArms(eventSlave) ? "hands" : "hand"} to spread ${his} cheeks for the phallus.`);
+			}
+			t.push(`Sensing that it's being offered an anus, it gently pushes inside ${his} rectum. Its strokes get longer and faster,`);
+			if (eventSlave.anus > 2) {
+				t.push(`until ${he}'s groaning under the sodomy despite ${his} loose ass.`);
+			} else if (eventSlave.anus > 1) {
+				t.push(`quickly gaping ${his} big butthole and making ${him} groan.`);
+			} else {
+				t.push(`making ${him} gasp as it stretches ${his} poor little asshole.`);
+			}
+
+			if (V.cockFeeder !== 0) {
+				t.push(`${He} doesn't manage to groan for long, though, since the kitchen extends another phallus to feed ${him} ${his} breakfast. Before long, ${he}'s being spitroasted by machines.`);
+			}
+			t.push(`Once ${he}'s fully awake, ${he}'s mostly <span class="mediumaquamarine">relieved</span> that you let ${him} get away with hesitation about obedience and took the time to talk ${him} through it.`);
+
+			eventSlave.trust += 4;
+			return t;
+		}
+
+		function bigPhallus() {
+			t = [];
+
+			t.push(`You give the kitchen an order by voice command. ${canHear(eventSlave) ? "It's technical" : `${He} can't hear it`}, so ${he} doesn't understand it, but the meaning becomes clear soon enough. The phallus aiming meaningfully at the place where ${he}'s supposed to kneel and offer up ${his} butthole is withdrawn, and ${he}'s halfway through a shocked thank you when it's replaced by another, noticeably larger. You tell ${him} in deceptively mild tones that you'll keep increasing the size of ${his} phallus until ${he} decides to get down and take it like a good little ${desc}, or you run out of size options and are forced to strap ${him} down and apply two at once. At that point, ${his} ass might be able to take it; then again, it might not. ${He} begins to cry, but is so <span class="gold">frightened</span> by the threat that ${he} doesn't let ${his} tears distract ${him} from a delectable scramble to`);
+			if (eventSlave.belly >= 300000) {
+				t.push(`throw ${him}self onto ${his} ${belly} belly and`);
+			} else {
+				t.push(`get down on ${his} ${hasBothLegs(eventSlave) ? "knees" : "knee"} and`);
+			}
+			if (eventSlave.butt > 6) {
+				t.push(`heave ${his} huge buttocks apart.`);
+			} else if (eventSlave.butt > 3) {
+				t.push(`spread ${his} broad buttocks.`);
+			} else {
+				t.push(`spread ${his} cute ass wide.`);
+			}
+
+			if (V.cockFeeder !== 0) {
+				t.push(`Once it's got its phallus sliding in and out of ${his} asshole, the kitchen gives ${him} another, to suck off for ${his} breakfast. Fortunately for ${him}, ${he} doesn't object, and only gets facefucked by the normal dildo.`);
+			}
+			t.push(`${He} keeps the threat in mind, and has a slightly sore ass to <span class="hotpink">help ${him} remember to obey without question.</span>`);
+
+			eventSlave.trust -= 2;
+			eventSlave.devotion += 2;
+			return t;
+		}
+
+		function penetrate() {
+			t = [];
+
+			t.push(`You step forward and take gentle hold of the slave's throat, telling ${him} to get down on ${his} knees like a good little ${desc}. You make no threat, but give ${him} the order in a voice of brass. ${He} knows what you can do to ${him}, and hurries to obey, <span class="gold">terribly frightened.</span> ${His} fear is justified. You announce that ${he}'s avoided serious punishment, but ${he} still needs correction for ${his} hesitation and insolence. ${He}'s concerned when ${he}`);
+			if (canSee(eventSlave)) {
+				t.push("sees you");
+			} else if (canHear(eventSlave)) {
+				t.push("hears you");
+			} else {
+				t.push("feels you");
+			}
+
+			if (PC.dick !== 0) {
+				t.push(`get your dick ${PC.vagina !== -1 ? "and pussy" : ""} out,`);
+			} else {
+				t.push("don a strap-on,");
+			}
+			t.push(`though ${he}'s distracted by the rapidly accelerating buttfuck ${he}'s getting from the machine. ${He} tries to offer you ${his} throat, but ${his} hopes are dashed when you walk around behind ${him}, swing a leg over the machine pistoning in and out of ${his} asshole, and command it to stop for a moment. Then you work ${PC.dick !== 0 ? "yourself" : "your own dildo"} up ${his} ass alongside the phallus that already fills it. The drugs are delivered with lubricant, and you do fit, but only after a nice long session of sobbing, spasming, and finally crying resignation. Then you order the machine to go back to what it was doing, and the resignation vanishes, replaced with anal pain as ${eventSlave.slaveName} takes double penetration up ${his}`);
+			if (eventSlave.anus > 2) {
+				t.push("gaping anus.");
+			} else if (eventSlave.anus === 2) {
+				t.push("big butthole.");
+			} else {
+				t.push("poor, abused little butt.");
+			}
+
+			if (V.cockFeeder !== 0) {
+				t.push(`When you grow tired of the whining, you order the kitchen to give the bitch breakfast. It extends a feeding phallus and fills ${his} throat, muffling the noise somewhat.`);
+			}
+
+			t.push(VCheck.Anal(1, eventSlave));
+
+			eventSlave.trust -= 4;
+			return t;
+		}
+	}
+};
diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js
index 6da34d5a274..3e4f75771a7 100644
--- a/src/events/randomEvent.js
+++ b/src/events/randomEvent.js
@@ -17,6 +17,7 @@ App.Events.getIndividualEvents = function() {
 		new App.Events.RESSMoistPussy(),
 		new App.Events.RESSMuscles(),
 		new App.Events.RESSRetchingCum(),
+		new App.Events.RESSSuppositoryResistance(),
 		new App.Events.RESSWaistlineWoes(),
 
 		new App.Events.RECIButthole(),
diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js
index e93813aca06..4afbb50184a 100644
--- a/src/js/eventSelectionJS.js
+++ b/src/js/eventSelectionJS.js
@@ -879,18 +879,6 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 				}
 			}
 
-			if (eventSlave.devotion <= 20) {
-				if (eventSlave.devotion >= -50) {
-					if (eventSlave.trust >= -20) {
-						if (V.suppository !== 0) {
-							if (eventSlave.fetish !== "buttslut") {
-								V.RESSevent.push("suppository resistance");
-							}
-						}
-					}
-				}
-			}
-
 			if (eventSlave.relationship <= -2) {
 				if (eventSlave.trust > 50) {
 					if (eventSlave.devotion > 50) {
@@ -2228,18 +2216,6 @@ globalThis.generateRandomEventPoolServant = function(eventSlave) {
 				}
 			}
 
-			if (eventSlave.devotion <= 20) {
-				if (eventSlave.devotion >= -50) {
-					if (eventSlave.trust >= -20) {
-						if (V.suppository !== 0) {
-							if (eventSlave.fetish !== "buttslut") {
-								V.RESSevent.push("suppository resistance");
-							}
-						}
-					}
-				}
-			}
-
 			if (eventSlave.relationship <= -2) {
 				if (eventSlave.trust > 50) {
 					if (eventSlave.devotion > 50) {
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index 618dbd5a3c4..92b5101f0b6 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -44,7 +44,7 @@
 <<set _clothesTemp = $activeSlave.clothes>>
 <<switch $RESSevent>>
 /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/
-<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "devoted waist" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "obedient idiot" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "suppository resistance" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
+<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "devoted waist" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "obedient idiot" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
 	<<set $activeSlave.clothes = "no clothing">>
 <<case "whore rebellious">>
 	/* this scene states they are wearing "thick, durable latex with temperature regulation and anchor points for restraint" no matter what they are assigned to wear. */
@@ -3030,19 +3030,6 @@ Passing near the slave dormitory late at night, you hear a quiet cry within. Thi
 <</switch>>
 Still dreaming, $he clasps $his arm<<if hasBothArms($activeSlave)>>s<</if>> protectively over $his <<if $activeSlave.pregKnown == 1>>unborn child<<if $activeSlave.pregType > 1>>ren<</if>><<else>>vulnerable chest<</if>>, and rolls to one side. Halfway into a fetal position, $he turns $his head against $his pillow, murmuring "N-no — plea<<s>>e no — I'll d-do anyth-thing — no..."
 
-<<case "suppository resistance">>
-
-As you're starting your day, $assistant.name pauses _hisA review of business matters to report that <<= App.UI.slaveDescriptionDialog($activeSlave)>> is not accepting $his breakfast from the phallic feeders in the kitchen. With nothing else urgent, you head down to address the situation. $activeSlave.slaveName is standing in front of the place where $he's supposed to take $his drugs. It's a little pad on the ground on which $he's supposed to kneel, with a fuckmachine positioned to penetrate $his anus once $he does so. $He's not completely awake yet, and is just standing there, <<if canSee($activeSlave)>>viewing<<else>>feeling<</if>> the setup with a vague look of distaste. $He's facing it, and has $his <<if $activeSlave.butt > 6>>massive behind<<elseif $activeSlave.butt > 3>>beautiful bottom<<else>>cute butt<</if>> pointed very much away from the machine that's supposed to be fucking it.
-
-<br><br>
-
-$He turns to you as you enter, and <<if canSee($activeSlave)>>seeing<<else>>realizing<</if>> that it's you, $he
-<<if !canTalk($activeSlave)>>
-	uses hesitant gestures to beg you to let $him take $his drugs normally. $He tries to use gestures to explain that $he thinks $he gets enough anal from humans, without being buttfucked by a machine every morning.
-<<else>>
-	mumbles unhappily, "Plea<<s>>e, <<Master>>, can I ju<<s>>t take a <<sh>>ot? A<<ss>>rape from, you know, people, i<<s>>, um, bad enough."
-<</if>>
-
 <<case "shower slip">>
 
 <<= App.UI.slaveDescriptionDialog($activeSlave)>> finishes $his morning shower and sleepily turns to dry off. $He slips a little on the moist bathroom floor, trips over $his own feet, and starts to stumble. $His fall is immediately arrested as $he's caught by a pair of strong<<if $PC.title == 0>> yet feminine<</if>> arms. Coming to rest against
@@ -16166,45 +16153,6 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h
 	<</link>><<if (($activeSlave.vagina == 0) && canDoVaginal($activeSlave)) || (($activeSlave.anus == 0) && canDoAnal($activeSlave))>> //This option will take $his virginity//<</if>>
 <</if>>
 
-<<case "suppository resistance">>
-
-<<link "Talk $him through it">>
-	<<replace "#result">>
-		You put as much quiet authority into your voice as you can, and explain to $him that $he is required to take $his drugs up $his ass. You do not explain any of the actual reasons why you require slaves to submit to daily machine anal, but couch your quiet explanation in terms of $his life as a slave. You tell $him that taking a solid buttfuck from a machine first thing in the morning is something you've ordered $him to do. $He needs to do it. If $he does, $he'll be treated well; if $he does not, that will oblige you to punish $him. You tell $him that you would like $him to be a good slave, and that it would be disappointing if you had to punish $him. You put just a hint of steel into the last sentence, and $he stiffens a little at it. Hesitantly, $he
-		<<if $activeSlave.belly >= 300000>>
-			shifts onto $his _belly belly, uses $his hand<<if hasBothArms($activeSlave)>>s<</if>> to brace $himself against the impending pounding, and scoots towards the phallus.
-		<<else>>
-			gets to $his knee<<if hasBothLegs($activeSlave)>>s<</if>>, using $his hand<<if hasBothArms($activeSlave)>>s<</if>> to spread $his cheeks for the phallus.
-		<</if>>
-		Sensing that it's being offered an anus, it gently pushes inside $his rectum. Its strokes get longer and faster, <<if $activeSlave.anus > 2>>until $he's groaning under the sodomy despite $his loose ass<<elseif $activeSlave.anus > 1>>quickly gaping $his big butthole and making $him groan<<else>>making $him gasp as it stretches $his poor little asshole<</if>>.
-		<<if ($cockFeeder != 0) && ($activeSlave.drugs != "none")>>$He doesn't manage to groan for long, though, since the kitchen extends another phallus to feed $him $his breakfast. Before long, $he's being spitroasted by machines.<</if>>
-		Once $he's fully awake, $he's mostly @@.mediumaquamarine;relieved@@ that you let $him get away with hesitation about obedience and took the time to talk $him through it.
-		<<set $activeSlave.trust += 4>>
-	<</replace>>
-<</link>>
-<br><<link "Punish $him with a bigger phallus">>
-	<<replace "#result">>
-		You give the kitchen an order by voice command. It's technical, so $he doesn't understand it, but the meaning becomes clear soon enough. The phallus aiming meaningfully at the place where $he's supposed to kneel and offer up $his butthole is withdrawn, and $he's halfway through a shocked thank you when it's replaced by another, noticeably larger. You tell $him in deceptively mild tones that you'll keep increasing the size of $his phallus until $he decides to get down and take it like a good little $desc, or you run out of size options and are forced to strap $him down and apply two at once. At that point, $his ass might be able to take it; then again, it might not. $He begins to cry, but is so @@.gold;frightened@@ by the threat that $he doesn't let $him tears distract $him from a delectable scramble to
-		<<if $activeSlave.belly >= 300000>>
-			throw $himself onto $his _belly belly
-		<<else>>
-			get down on $his knees
-		<</if>>
-		and <<if $activeSlave.butt > 6>>heave $his huge buttocks apart<<elseif $activeSlave.butt > 3>>spread $his broad buttocks<<else>>spread $his cute ass wide<</if>>.
-		<<if ($cockFeeder != 0) && ($activeSlave.drugs != "none")>>Once it's got its phallus sliding in and out of $his asshole, the kitchen gives $him another, to suck off for $his breakfast. Fortunately for $him, $he doesn't object, and only gets facefucked by the normal dildo.<</if>>
-		$He keeps the threat in mind, and has a slightly sore ass to @@.hotpink;help $him remember to obey without question.@@
-		<<set $activeSlave.trust -= 2, $activeSlave.devotion += 2>>
-	<</replace>>
-<</link>>
-<br><<link "Double penetrate $his ass for insolence">>
-	<<replace "#result">>
-		You step forward and take gentle hold of the slave's throat, telling $him to get down on $his knees like a good little $desc. You make no threat, but give $him the order in a voice of brass. $He knows what you can do to $him, and hurries to obey, @@.gold;terribly frightened.@@ $His fear is justified. You announce that $he's avoided serious punishment, but $he still needs correction for $his hesitation and insolence. $He's concerned when $he <<if canSee($activeSlave)>>sees<<elseif canHear($activeSlave)>>hears<<else>>feels<</if>> you <<if $PC.dick != 0>>get your dick<<if $PC.vagina != -1>>and pussy<</if>> out<<else>>don a strap-on<</if>>, though $he's distracted by the rapidly accelerating buttfuck $he's getting from the machine. $He tries to offer you $his throat, but $his hopes are dashed when you walk around behind $him, swing a leg over the machine pistoning in and out of $his asshole, and command it to stop for a moment. Then you work <<if $PC.dick != 0>>yourself<<else>>your own dildo<</if>> up $his ass alongside the phallus that already fills it. The drugs are delivered with lubricant, and you do fit, but only after a nice long session of sobbing, spasming, and finally crying resignation. Then you order the machine to go back to what it was doing, and the resignation vanishes, replaced with anal pain as $activeSlave.slaveName takes double penetration up $his <<if $activeSlave.anus > 2>>gaping anus<<elseif $activeSlave.anus == 2>>big butthole<<else>>poor, abused little butt<</if>>.
-		<<if ($cockFeeder != 0) && ($activeSlave.drugs != "none")>>When you grow tired of the whining, you order the kitchen to give the bitch breakfast. It extends a feeding phallus and fills $his throat, muffling the noise somewhat.<</if>>
-		<<set $activeSlave.trust -= 4>>
-		<<= VCheck.Anal()>>
-	<</replace>>
-<</link>>
-
 <<case "shower slip">>
 
 <<link "Carry $him to where $he needs to go">>
-- 
GitLab


From 59d27038e15ee79c7c1bee72ac8ac625ca046e1e Mon Sep 17 00:00:00 2001
From: lowercasedonkey <lowercasedonkey@gmail.com>
Date: Sat, 18 Jul 2020 21:46:21 -0400
Subject: [PATCH 14/15] Pair fix

---
 src/uncategorized/recETS.tw | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/uncategorized/recETS.tw b/src/uncategorized/recETS.tw
index 516e4c2f4dd..9564b26d477 100644
--- a/src/uncategorized/recETS.tw
+++ b/src/uncategorized/recETS.tw
@@ -543,8 +543,8 @@
 			<<set $activeSlave.preg = -1>>
 			<<set $activeSlave.hStyle = "in twin tails">>
 			<<set $activeSlave.pubicHStyle = "waxed">>
-			<<set $activeSlave.sexualQuirk = "none">>
-			<<set $activeSlave.behavioralQuirk = "none">>
+			<<set $activeSlave.sexualFlaw = "none">>
+			<<set $activeSlave.behavioralFlaw = "none">>
 			<<run setMissingParents($activeSlave)>>
 			<<set $activeSlave.canRecruit = 0>>
 			<<set $activeSlave.relationship = 2>>
@@ -602,7 +602,8 @@
 			<<set $activeSlave.fetish = "pregnancy">>
 			<<set $activeSlave.fetishStrength = 100>>
 			<<set $activeSlave.sexualQuirk = "perverted">>
-			<<set $activeSlave.behavioralQuirk = "none">>
+			<<set $activeSlave.sexualFlaw = "none">>
+			<<set $activeSlave.behavioralFlaw = "none">>
 			<<run setMissingParents($activeSlave)>>
 			<<set $activeSlave.canRecruit = 0>>
 			<<set $activeSlave.relationship = 4>>
-- 
GitLab


From faafccb6280fca7ca9d230bbc792a2e97547b858 Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Sun, 19 Jul 2020 21:20:53 -0400
Subject: [PATCH 15/15] Update conditions + more tweaks

---
 src/events/RECI/futa.js                  | 1 +
 src/events/RECI/milf.js                  | 1 +
 src/events/RECI/orientation.js           | 1 +
 src/events/RESS/assFitting.js            | 2 +-
 src/events/RESS/cockfeederResistance.js  | 2 +-
 src/events/RESS/hotPC.js                 | 2 +-
 src/events/RESS/lazyEvening.js           | 2 +-
 src/events/RESS/moistPussy.js            | 4 ++--
 src/events/RESS/muscles.js               | 2 +-
 src/events/RESS/retchingCum.js           | 2 +-
 src/events/RESS/suppositoryResistance.js | 2 +-
 src/events/RESS/waistlineWoes.js         | 1 +
 src/events/RETS/reSiblingTussle.js       | 2 ++
 src/js/statsChecker/statsChecker.js      | 8 +++++---
 14 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/src/events/RECI/futa.js b/src/events/RECI/futa.js
index c709cf3c2fe..25985e61331 100644
--- a/src/events/RECI/futa.js
+++ b/src/events/RECI/futa.js
@@ -13,6 +13,7 @@ App.Events.RECIFuta = class RECIFuta extends App.Events.BaseEvent {
 				s => s.dick > 0,
 				s => s.balls > 0,
 				s => s.vagina >= 0,
+				canStand,
 				canAchieveErection,
 				canTalk,
 				canHear,
diff --git a/src/events/RECI/milf.js b/src/events/RECI/milf.js
index 2a0a1e8f49f..add23616505 100644
--- a/src/events/RECI/milf.js
+++ b/src/events/RECI/milf.js
@@ -13,6 +13,7 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 				s => s.energy > 60,
 				s => s.bodySwap === 0,
 				s => (canDoAnal(s) || canDoVaginal(s)),
+				canStand,
 				canTalk,
 				canHear,
 				hasAnyArms,
diff --git a/src/events/RECI/orientation.js b/src/events/RECI/orientation.js
index f27ffe5f5bd..7c8e701f9d0 100644
--- a/src/events/RECI/orientation.js
+++ b/src/events/RECI/orientation.js
@@ -14,6 +14,7 @@ App.Events.RECIOrientation = class RECIOrientation extends App.Events.BaseEvent
 				s => s.vagina !== 0,
 				s => (canDoAnal(s) || canDoVaginal(s)),
 				s => s.devotion >= 10,
+				canStand,
 				canTalk,
 				canHear,
 				hasBothLegs,
diff --git a/src/events/RESS/assFitting.js b/src/events/RESS/assFitting.js
index 7b4aa602686..58d170a2c95 100644
--- a/src/events/RESS/assFitting.js
+++ b/src/events/RESS/assFitting.js
@@ -12,7 +12,7 @@ App.Events.RESSAssFitting = class RESSAssFitting extends App.Events.BaseEvent {
 				s => s.butt > 5,
 				s => ["a bimbo outfit", "a biyelgee costume", "a bunny outfit", "a burkini", "a cheerleader outfit", "a comfortable bodysuit", "a dirndl", "a fallen nuns habit", "a huipil", "a latex catsuit", "a leotard", "a long qipao", "a maternity dress", "a military uniform", "a monokini", "a mounty outfit", "a nice nurse outfit", "a red army uniform", "a scalemail bikini", "a schoolgirl outfit", "a schutzstaffel uniform", "a slutty nurse outfit", "a slutty outfit", "a slutty qipao", "a slutty schutzstaffel uniform", "a succubus outfit", "attractive lingerie for a pregnant woman", "attractive lingerie", "battlearmor", "chains", "clubslut netting", "conservative clothing", "cutoffs and a t-shirt", "kitty lingerie", "lederhosen", "nice business attire", "overalls", "restrictive latex", "striped panties", "slutty business attire", "slutty jewelry", "spats and a tank top", "stretch pants and a crop-top", "uncomfortable straps", "Western clothing"].includes(s.clothes),
 				hasAnyArms,
-				hasAnyLegs,
+				canStand,
 			]
 		];
 	}
diff --git a/src/events/RESS/cockfeederResistance.js b/src/events/RESS/cockfeederResistance.js
index 6cca193e949..cf15c66a2b8 100644
--- a/src/events/RESS/cockfeederResistance.js
+++ b/src/events/RESS/cockfeederResistance.js
@@ -9,8 +9,8 @@ App.Events.RESSCockFeederResistance = class RESSCockFeederResistance extends App
 		return [
 			[ // single event slave
 				s => s.fetish !== "mindbroken",
+				canStand,
 				hasAnyArms,
-				hasAnyLegs,
 				s => s.devotion <= 20 && s.devotion >= -50,
 				s => s.trust >= -20,
 				s => s.fetish !== "cumslut"
diff --git a/src/events/RESS/hotPC.js b/src/events/RESS/hotPC.js
index bd4ae647a5e..a3f6d88267a 100644
--- a/src/events/RESS/hotPC.js
+++ b/src/events/RESS/hotPC.js
@@ -9,9 +9,9 @@ App.Events.RESSHotPC = class RESSHotPC extends App.Events.BaseEvent {
 				s => s.energy > 40,
 				s => s.devotion > 0 && s.devotion <= 50,
 				s => s.trust >= -50,
+				canMove,
 				canSee,
 				hasAnyArms,
-				hasAnyLegs,
 				s =>
 					(s.attrXX >= 50 && V.PC.belly < 5000 && (V.PC.boobs >= 300 || V.PC.title === 0)) ||
 					(s.attrXY >= 50 && V.PC.dick > 0 && V.PC.boobs < 300 && V.PC.belly < 1500) ||
diff --git a/src/events/RESS/lazyEvening.js b/src/events/RESS/lazyEvening.js
index ec6d378d45c..387bbfe9d44 100644
--- a/src/events/RESS/lazyEvening.js
+++ b/src/events/RESS/lazyEvening.js
@@ -7,8 +7,8 @@ App.Events.RESSLazyEvening = class RESSLazyEvening extends App.Events.BaseEvent
 		return [
 			[ // single event slave
 				s => s.fetish !== "mindbroken",
+				canStand,
 				hasAnyArms,
-				hasAnyLegs,
 				s => (s.assignment === Job.FUCKTOY || s.assignment === Job.MASTERSUITE || s.assignment === Job.CONCUBINE),
 				s => s.devotion > 20,
 			]
diff --git a/src/events/RESS/moistPussy.js b/src/events/RESS/moistPussy.js
index 296f40ee3b3..b0ac5aeee8b 100644
--- a/src/events/RESS/moistPussy.js
+++ b/src/events/RESS/moistPussy.js
@@ -31,7 +31,7 @@ App.Events.RESSMoistPussy = class RESSMoistPussy extends App.Events.BaseEvent {
 		t.push("Just as you're about to give");
 		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
 		t.push(`${his} weekly inspection, a minor business matter comes up and diverts your attention.`);
-		t.push(`So, for about ten minutes, ${he} has nothing at all to do other than ${canWalk(eventSlave) ? "stand" : hasAnyLegs(eventSlave) ? "kneel" : "sit"} in front of your desk in your office, ${canSee(eventSlave) ? "watching" : canHear(eventSlave) ? "listening to" : "feeling the subtle vibrations from"} you, ${(V.assistant.personality > 0) ? `${V.assistant.name}'s avatar,` : ""} the other slaves who come and go, and the general lewdness of the arcology, much of which is ${(canSee(eventSlave)) ? "visible" : canHear(eventSlave) ? "audible" : "apparent"} from right here.`);
+		t.push(`So, for about ten minutes, ${he} has nothing at all to do other than ${canStand(eventSlave) ? "stand" : hasAnyLegs(eventSlave) ? "kneel" : "sit"} in front of your desk in your office, ${canSee(eventSlave) ? "watching" : canHear(eventSlave) ? "listening to" : "feeling the subtle vibrations from"} you, ${(V.assistant.personality > 0) ? `${V.assistant.name}'s avatar,` : ""} the other slaves who come and go, and the general lewdness of the arcology, much of which is ${(canSee(eventSlave)) ? "visible" : canHear(eventSlave) ? "audible" : "apparent"} from right here.`);
 		if ((eventSlave.attrXY > 50) && (V.PC.boobs < 300)) {
 			t.push(`${He} finds your strong body attractive, and ${his} gaze rests most frequently ${canSee(eventSlave) ? "on" : "towards"} you.`);
 		} else if ((eventSlave.attrXX > 50) && (V.PC.boobs >= 650)) {
@@ -55,7 +55,7 @@ App.Events.RESSMoistPussy = class RESSMoistPussy extends App.Events.BaseEvent {
 		App.Events.addParagraph(node, t);
 
 		t = [];
-		t.push(`Your slaves are all in the very best of vaginal health, so the scent of ${his} female arousal is not strong. But ${his} cunt produces such copious natural lubricant that with nothing to do but ${canWalk(eventSlave) ? "stand" : "rest"} there, ${his} ${eventSlave.counter.births > 0 ? "motherly" : eventSlave.weight > 30 ? "thick" : eventSlave.muscles > 30 ? "strong" : "feminine"} inner thighs are soon slick with a sheen of healthy pussyjuice. You notice a droplet of the stuff running down ${his} warm ${eventSlave.skin} skin.`);
+		t.push(`Your slaves are all in the very best of vaginal health, so the scent of ${his} female arousal is not strong. But ${his} cunt produces such copious natural lubricant that with nothing to do but ${canStand(eventSlave) ? "stand" : "rest"} there, ${his} ${eventSlave.counter.births > 0 ? "motherly" : eventSlave.weight > 30 ? "thick" : eventSlave.muscles > 30 ? "strong" : "feminine"} inner thighs are soon slick with a sheen of healthy pussyjuice. You notice a droplet of the stuff running down ${his} warm ${eventSlave.skin} skin.`);
 		if (canAchieveErection(eventSlave) && eventSlave.chastityPenis !== 1) {
 			t.push(`${His} ${eventSlave.dick > 3 ? "stiff prick" : "hard little dick"} is sticking up from atop ${his} pussy, leaving it nice and visible.`);
 		} else if (eventSlave.dick > 0) {
diff --git a/src/events/RESS/muscles.js b/src/events/RESS/muscles.js
index 5e0a0ea033f..926e5b62267 100644
--- a/src/events/RESS/muscles.js
+++ b/src/events/RESS/muscles.js
@@ -7,8 +7,8 @@ App.Events.RESSMuscles = class RESSMuscles extends App.Events.BaseEvent {
 		return [
 			[ // single event slave
 				s => s.fetish !== "mindbroken",
+				canMove,
 				hasAnyArms,
-				hasAnyLegs,
 				s => s.muscles > 30,
 				s => s.weight <= 10
 			]
diff --git a/src/events/RESS/retchingCum.js b/src/events/RESS/retchingCum.js
index 05c48157f20..a8e6ebdbf19 100644
--- a/src/events/RESS/retchingCum.js
+++ b/src/events/RESS/retchingCum.js
@@ -8,8 +8,8 @@ App.Events.RESSRetchingCum = class RESSRetchingCum extends App.Events.BaseEvent
 			[
 				s => s.fetish !== "mindbroken",
 				s => s.assignment !== "work as a servant",
+				canStand,
 				hasAnyArms,
-				hasAnyLegs,
 				s => s.dietCum > 0,
 				s => s.devotion <= 20,
 				s => (s.fetish !== "cumslut" && s.fetish !== "masochist" && s.fetishStrength < 60) || s.fetishKnown === 0,
diff --git a/src/events/RESS/suppositoryResistance.js b/src/events/RESS/suppositoryResistance.js
index 38dc77532d7..dca8214a470 100644
--- a/src/events/RESS/suppositoryResistance.js
+++ b/src/events/RESS/suppositoryResistance.js
@@ -9,8 +9,8 @@ App.Events.RESSSuppositoryResistance = class RESSSuppositoryResistance extends A
 		return [
 			[ // single event slave
 				s => s.fetish !== "mindbroken",
+				canStand,
 				hasAnyArms,
-				hasAnyLegs,
 				s => s.drugs !== "none",
 				s => s.devotion <= 20 && s.devotion >= -50,
 				s => s.trust >= -20,
diff --git a/src/events/RESS/waistlineWoes.js b/src/events/RESS/waistlineWoes.js
index 2dfa25fe0a3..f800601eea2 100644
--- a/src/events/RESS/waistlineWoes.js
+++ b/src/events/RESS/waistlineWoes.js
@@ -8,6 +8,7 @@ App.Events.RESSWaistlineWoes = class RESSWaistlineWoes extends App.Events.BaseEv
 			[ // single event slave
 				s => s.fetish !== "mindbroken",
 				canHear,
+				canWalk,
 				hasAnyArms,
 				hasAnyLegs,
 				s => s.devotion > 20 && s.devotion <= 50,
diff --git a/src/events/RETS/reSiblingTussle.js b/src/events/RETS/reSiblingTussle.js
index fbf9efe1f16..19967d2e337 100644
--- a/src/events/RETS/reSiblingTussle.js
+++ b/src/events/RETS/reSiblingTussle.js
@@ -9,6 +9,7 @@ App.Events.RETSSiblingTussle = class RETSSiblingTussle extends App.Events.BaseEv
 		return [
 			[ // event slave
 				s => s.fetish !== "mindbroken",
+				canStand,
 				hasAnyArms,
 				hasBothLegs,
 				s => s.actualAge < 18,
@@ -16,6 +17,7 @@ App.Events.RETSSiblingTussle = class RETSSiblingTussle extends App.Events.BaseEv
 			],
 			[ // and her sibling
 				s => s.fetish !== "mindbroken",
+				canStand,
 				hasAnyArms,
 				hasBothLegs,
 				isSlaveAvailable,
diff --git a/src/js/statsChecker/statsChecker.js b/src/js/statsChecker/statsChecker.js
index c2ffc260f92..aa7a2c18569 100644
--- a/src/js/statsChecker/statsChecker.js
+++ b/src/js/statsChecker/statsChecker.js
@@ -800,7 +800,7 @@ globalThis.canHold = function(slave) {
 	return hasAnyArms(slave);
 };
 
-/**
+/** If a slave can walk, she can move and stand.
  * @param {App.Entity.SlaveState} slave
  * @returns {boolean}
  */
@@ -827,14 +827,16 @@ globalThis.canWalk = function(slave) {
 	return true;
 };
 
-/** can this slave stay upright for any period of time?
+/** If a slave can stand, she can move, but not necessarily walk.
  * @param {App.Entity.SlaveState} slave
  * @returns {boolean}
  */
 globalThis.canStand = function(slave) {
 	if (!slave) {
 		return null;
-	} else if (!hasBothLegs(slave)) {
+	} else if (!canMove(eventSlave)) {
+		return false;
+	} else if (!hasAnyLegs(slave)) {
 		return false;
 	} else if (slave.heels === 1 && !setup.highHeels.includes(slave.shoes)) {
 		return false;
-- 
GitLab