From dc8b23122e229ce7b388055742f54f00399f1b94 Mon Sep 17 00:00:00 2001
From: Skriv <skrivelese@gmail.com>
Date: Sat, 10 Jul 2021 22:39:07 +0000
Subject: [PATCH] Misc text cleaning and compression

---
 src/js/statsChecker/limbChecker.js  |  28 +++---
 src/npc/interaction/fAbuse.js       |   1 +
 src/npc/interaction/fAnus.js        |  33 +++---
 src/npc/interaction/fAssistedSex.js |   4 +-
 src/npc/interaction/fBeg.js         |  35 ++++---
 src/npc/interaction/fButt.js        |   2 +-
 src/npc/interaction/fCaress.js      |  25 +----
 src/npc/interaction/fDick.js        | 150 +++++++---------------------
 src/npc/interaction/fEmbrace.js     |  56 ++---------
 src/npc/interaction/fFeelings.js    |  27 +++--
 src/npc/interaction/fFeet.js        |  39 ++++----
 11 files changed, 132 insertions(+), 268 deletions(-)

diff --git a/src/js/statsChecker/limbChecker.js b/src/js/statsChecker/limbChecker.js
index f13e66a1f3b..5ba437f68db 100644
--- a/src/js/statsChecker/limbChecker.js
+++ b/src/js/statsChecker/limbChecker.js
@@ -305,27 +305,25 @@ globalThis.idToDescription = function(id) {
 
 /**
  * Returns count of specified limb type. Uses new limb IDs:
- * 0: no limb
- * 1: natural
- * 2: basic
- * 3: sex
- * 4: beauty
- * 5: combat
- * 6: cybernetic
+ * * 0: no limb
+ * * 1: natural
+ * * 2: basic
+ * * 3: sex
+ * * 4: beauty
+ * * 5: combat
+ * * 6: cybernetic
  *
  * Can also be used to check for groups:
- * 101: any limbs, that are not amputated
- * 102: prosthetic limbs off all kind
- * 103: sex-prosthetic
- * 104: beauty-prosthetic
- * 105: combat-prosthetic
+ * * 101: any limbs, that are not amputated
+ * * 102: prosthetic limbs off all kind
+ * * 103: sex-prosthetic
+ * * 104: beauty-prosthetic
+ * * 105: combat-prosthetic
  *
  * 103-105 mean the sum of 3-5 and 6 respectfully.
  *
- * No ID means all limbs = 101
- *
  * @param {FC.LimbsState} slave
- * @param {number} [id]
+ * @param {number} [id] Defaults to all limb types if unspecified (id = 101)
  * @returns {number}
  */
 globalThis.getLimbCount = function(slave, id = 101) {
diff --git a/src/npc/interaction/fAbuse.js b/src/npc/interaction/fAbuse.js
index 0fed52f19ef..b93824aef30 100644
--- a/src/npc/interaction/fAbuse.js
+++ b/src/npc/interaction/fAbuse.js
@@ -621,6 +621,7 @@ App.Interact.fAbuse = function(slave) {
 		}
 		r.push(`into ${his} sissy butt without lubricant. As ${he} flinches you announce that ${he}'ll be taking part in giving ${himself} anal pain. ${He} humps into you lamely, so you administer a truly agonizing slap to ${his} balls`);
 		if (V.PC.dick === 0) {
+			r.push(r.pop() + ".");
 		} else {
 			r.push(`that makes ${his} anal ring stiffen deliciously around your dick.`);
 		}
diff --git a/src/npc/interaction/fAnus.js b/src/npc/interaction/fAnus.js
index 97c3d14f97b..dabd798e43c 100644
--- a/src/npc/interaction/fAnus.js
+++ b/src/npc/interaction/fAnus.js
@@ -104,27 +104,20 @@ App.Interact.fAnus = function(slave) {
 			} else {
 				r.push(`bends over`);
 			}
-			r.push(`and spreads ${his} buttocks${V.PC.dick === 0 ? `as you don a strap-on` : ``}. You spit on ${his} hole and ram`);
-			if (V.PC.dick === 0) {
-				r.push(`it`);
-			} else {
-				r.push(`your cock`);
-			}
-			r.push(`up ${his} butt.`);
+			r.push(`and spreads ${his} buttocks${V.PC.dick === 0 ? ` as you don a strap-on` : ``}. You spit on ${his} hole and ram`);
 		} else {
 			r.push(`Talking to a broken mind is pointless, so you simply set ${him} on the couch, spread ${his} buttocks with one hand, spit on ${his} hole, and ram`);
-			if (V.PC.dick === 0) {
-				r.push(`it`);
-			} else {
-				r.push(`your cock`);
-			}
-			r.push(`up ${his}`);
-			if (V.seeRace === 1) {
-				r.push(slave.race);
-			}
-			r.push(`butt.`);
 		}
-		r.push(`${His} butthole spasms as you assrape ${him},`);
+		if (V.PC.dick === 0) {
+			r.push(`it`);
+		} else {
+			r.push(`your cock`);
+		}
+		r.push(`up ${his}`);
+		if (V.seeRace === 1) {
+			r.push(slave.race);
+		}
+		r.push(`butt. ${His} butthole spasms as you assrape ${him},`);
 		if (V.PC.dick === 0) {
 			r.push(`an amusing sight.`);
 		} else {
@@ -262,9 +255,9 @@ App.Interact.fAnus = function(slave) {
 		} else {
 			r.push(`${His} asspussy is so loose you can pound it as hard as you like`);
 		}
-		if (slave.dick !== 0) {
+		if (slave.dick !== 0 && !canAchieveErection(slave)) {
 			r.push(`as ${his} limp dick flops around.`);
-		} else if (slave.dick !== 0) {
+		} else if (slave.dick !== 0 && canAchieveErection(slave)) {
 			r.push(`as ${his} erect dick waves in the air.`);
 		} else if (slave.vagina === -1) {
 			r.push(`as it does its duty as ${his} sole fuckhole.`);
diff --git a/src/npc/interaction/fAssistedSex.js b/src/npc/interaction/fAssistedSex.js
index ac12ad4d45b..f80db4b197d 100644
--- a/src/npc/interaction/fAssistedSex.js
+++ b/src/npc/interaction/fAssistedSex.js
@@ -112,11 +112,11 @@ App.Interact.fAssistedSex = function(slave) {
 		r.push(`level with your erection. Two of ${his} servants reach around ${his} inflated profile and push ${his} cheeks together, wrapping your dick in a firm layer of butt cleavage. ${He} lifts ${his} ass, then drops it, again and again, smacking your chest on the downswing as ${his} servants manipulate ${his} hotdogging to maximize your pleasure.`);
 		if (canDoVaginal(slave)) {
 			r.push(`When you feel the tension within you reaching its apex, you signal to ${his} servants to hold ${him} in place. With ${his} silent menials, still as statues, anchoring ${his} bloated body at the perfect angle for fucking while contorting their anonymous bodies to frame ${him} in a manner that maximizes ${his} visual attractiveness, you grab hold of ${his} flanks and ram into ${his} pregnant pussy, driving ${him} to the first of many orgasms in just a few casual thrusts.`);
-			r.push(`${VCheck.Vaginal(slave, 1)}`);
+			r.push(VCheck.Vaginal(slave, 1));
 			r.push(`When you feel your own orgasm approaching, you pull out, ejaculating`);
 		} else if (canDoAnal(slave)) {
 			r.push(`When you feel the tension within you reaching its apex, you signal to ${his} servants to hold ${him} in place. With ${his} silent menials, still as statues, anchoring ${his} bloated body at the perfect angle for fucking while contorting their anonymous bodies to frame ${him} in a manner that maximizes ${his} visual attractiveness, you grab hold of ${his} flanks and ram into ${his} asshole, driving ${him} to the first of many orgasms with just a few casual thrusts.`);
-			r.push(`${VCheck.Anal(slave, 1)}`);
+			r.push(VCheck.Anal(slave, 1));
 			r.push(`When you feel your own orgasm approaching, you pull out, ejaculating`);
 		} else {
 			r.push(`When you feel the tension with your reaching its apex, you signal to ${his} servants and they pull ${him} forward. You ejaculate`);
diff --git a/src/npc/interaction/fBeg.js b/src/npc/interaction/fBeg.js
index b61f3732d80..ef815f9e505 100644
--- a/src/npc/interaction/fBeg.js
+++ b/src/npc/interaction/fBeg.js
@@ -19,6 +19,8 @@ App.Interact.fBeg = function(slave) {
 	} = getPronouns(V.PC).appendSuffix("P");
 
 	const {womenU} = getNonlocalPronouns(V.seeDicks).appendSuffix("U");
+	const hands = hasBothArms(slave) ? "hands" : "hand";
+	const knees = hasBothLegs(slave) ? "knees" : "knee";
 
 	/* things I need: checks for canWalk() to see how easily she can move, blindness checks, replacement for BoobsDesc, maybe devotion catches for certain flaws */
 	/* priority! femPC support! */
@@ -30,7 +32,7 @@ App.Interact.fBeg = function(slave) {
 	} else if (slave.sexualQuirk === "tease") {
 		r.push(`${He} blushes with arousal. ${He} has kept ${his} innate embarrassment at the thought of being naked, but you have infused this with overwhelming arousal. ${His} cheeks are red as ${he} removes ${his} clothes, giving quite a strip tease as ${he} does.`);
 	} else if (slave.sexualFlaw === "repressed") {
-		r.push(`${He} subconsciously uses ${his} ${hasBothArms(slave) ? `hands` : `hand`} to try to cover ${his} body. ${He} is still repressing ${his} own sexuality. That type of behavior may have been allowed in the old world, but it has no place in a Free City.`);
+		r.push(`${He} subconsciously uses ${his} ${hands} to try to cover ${his} body. ${He} is still repressing ${his} own sexuality. That type of behavior may have been allowed in the old world, but it has no place in a Free City.`);
 	} else if (slave.sexualFlaw === "idealistic") {
 		r.push(
 			`${He} shakes ${his} head pleadingly.`,
@@ -208,12 +210,12 @@ App.Interact.fBeg = function(slave) {
 			}
 			r.push(`"One more chance, slut." By now, the other slaves have arrived and are standing loyally by your side. Your loyal slaves force ${him} to`);
 			if (hasAnyLegs(slave)) {
-				r.push(`${his} ${hasBothLegs(slave) ? `knees` : `knee`}.`);
+				r.push(`${his} ${knees}.`);
 			} else {
 				r.push(`the ground.`);
 			}
 		}
-		r.push(`"Head at crotch level," you clarify. "Remember your purpose."`);
+		r.push(`"Head at crotch level," you clarify. "Remember your purpose."`); // Rewrite to remove player voice?
 	} else if (slave.devotion < 20) {
 		r.push(`is not enthusiastic, but is obedient enough to go down without much threat of discipline.`);
 	} else if (slave.devotion > 20) {
@@ -251,7 +253,7 @@ App.Interact.fBeg = function(slave) {
 				case "buttslut":
 					r.push(`leans heavily forward so that ${his} ass sticks out ridiculously far as ${he}`);
 					if (hasAnyLegs(slave)) {
-						r.push(`bends ${his} ${hasBothLegs(slave) ? `knees` : `knee`} and`);
+						r.push(`bends ${his} ${knees} and`);
 					}
 					r.push(`goes to the floor.`);
 					break;
@@ -347,7 +349,7 @@ App.Interact.fBeg = function(slave) {
 		}
 		r.push(`deep.`);
 	} else if (slave.butt > 2) {
-		r.push(`${His} nice ${either("plump", "thick")} ${either("ass", "butt")} curves out noticeably, even while ${he} sits on ${his} ${hasBothLegs(slave) ? `knees` : `knee`}.`);
+		r.push(`${His} nice ${either("plump", "thick")} ${either("ass", "butt")} curves out noticeably, even while ${he} sits on ${his} ${knees}.`);
 	} else {
 		r.push(`${His} cute and tight ass rests gently on ${his} ${hasBothLegs(slave) ? `ankles` : `ankle`}.`);
 	}
@@ -368,8 +370,8 @@ App.Interact.fBeg = function(slave) {
 				case "masochist":
 					r.push(`${He} positions ${himself} uncomfortably, bringing visual pleasure to you and pain to ${himself}. ${He} accentuates ${his} most sensitive parts, inviting you to slap or spank them.`);
 					break;
-				case "cumslut":
-					r.push(`${he} goes to ${his} ${hasBothLegs(slave) ? `knees` : `knee`}, all the while staring at your`);
+				case "cumslut": {
+					r.push(`${he} goes to ${his} ${knees}, all the while staring at your`);
 					const pcCrotch = [];
 					if (V.PC.dick !== 0) {
 						pcCrotch.push(`manly bulge`);
@@ -379,6 +381,7 @@ App.Interact.fBeg = function(slave) {
 					}
 					r.push(`${toSentence(pcCrotch)}.`);
 					break;
+				}
 				case "humiliation":
 					r.push(`${He} eagerly takes to this humiliating position, hoping to demonstrate ${his} willingness to be degraded by ${his} ${getWrittenTitle(slave)}.`);
 					break;
@@ -407,7 +410,7 @@ App.Interact.fBeg = function(slave) {
 					r.push(`This is, of course, how all slaves are supposed to kneel, but ${he} takes the pose with added dedication.`);
 					break;
 				default:
-					r.push(`${He} positions ${himself} with ${his} ${hasBothLegs(slave) ? `knees` : `knee`} spread wide, hoping that you will turn your attention to`);
+					r.push(`${He} positions ${himself} with ${his} ${knees} spread wide, hoping that you will turn your attention to`);
 					if (canDoVaginal(slave)) {
 						r.push(`${his} wet pussy.`);
 					} else if (canAchieveErection(slave)) {
@@ -426,20 +429,20 @@ App.Interact.fBeg = function(slave) {
 				case "confinement":
 					r.push(`Your slave simply`);
 					if (hasAnyArms(slave)) {
-						r.push(`presses ${his} ${hasBothArms(slave) ? `hands` : `hand`} together and`);
+						r.push(`presses ${his} ${hands} together and`);
 					}
 					r.push(`begs you not to lock ${him} up in the bad-${girl} box.`);
 					break;
 				case "whipping":
 					r.push(`Your slave simply`);
 					if (hasAnyArms(slave)) {
-						r.push(`presses ${his} ${hasBothArms(slave) ? `hands` : `hand`} together and`);
+						r.push(`presses ${his} ${hands} together and`);
 					}
 					r.push(`begs you not to whip ${him}.`);
 					break;
 				case "chastity":
 					if (slave.energy > 60) {
-						r.push(`Your slave simply presses ${his} ${hasBothArms(slave) ? `hands` : `hand`} together and begs you not to take away ${his} next orgasm`);
+						r.push(`Your slave simply presses ${his} ${hands} together and begs you not to take away ${his} next orgasm`);
 					} else {
 						r.push(`Your slave simply asks that you not change ${his} punishment. ${He} fears you, but using chastity as a punishment is not an efficient way to command ${his} obedience, since ${he} has no sexual energy.`);
 					}
@@ -530,7 +533,7 @@ App.Interact.fBeg = function(slave) {
 	} else if (slave.devotion <= 100) {
 		r.push(`Your devoted slave takes the begging position,`);
 		if (slave.fetish !== "submissive") {
-			r.push(`${he} even brings ${his} ${hasBothArms(slave) ? `hands` : `hand`} up like a dog's paws.`);
+			r.push(`${he} even brings ${his} ${hands} up like a dog's paws.`);
 		} else {
 			if (slave.fetishKnown === 1 && slave.fetishStrength > 60) {
 				r.push(`and ${he} bows ${his} head in total submission.`);
@@ -542,7 +545,7 @@ App.Interact.fBeg = function(slave) {
 					r.push(`The armbinder thrusts ${his} tits out nicely and ${his} nipples are now red from the clamps pressing down hard on ${his} sensitive flesh. Every painful shudder makes the bells jungle ever so sweetly.`);
 				}
 			} else {
-				r.push(`${he} even brings ${his} ${hasBothArms(slave) ? `hands` : `hand`} up like a dog's paws.`);
+				r.push(`${he} even brings ${his} ${hands} up like a dog's paws.`);
 			}
 		}
 
@@ -627,7 +630,7 @@ App.Interact.fBeg = function(slave) {
 						if (!hasAnyArms(slave)) {
 							r.push(`leans ${his} head back and juts out ${his} tits, raising`);
 						} else {
-							r.push(`takes ${his} ${hasBothArms(slave) ? `hands` : `hand`} and presses ${his} tits together, lifting`);
+							r.push(`takes ${his} ${hands} and presses ${his} tits together, lifting`);
 						}
 						r.push(`them to display for you ${his} primary purpose in life.`);
 						if (slave.lactation > 0) {
@@ -693,14 +696,14 @@ App.Interact.fBeg = function(slave) {
 
 	if (random(1, 100) > (100 + slave.devotion)) {
 		if (slave.fetish !== "submissive" && slave.energy <= 95 && slave.behavioralFlaw !== "liberated") {
-			r.push(`Seeing the humiliating acts your slaves are expected to perform has made ${him} <span class="red">determined to be free.</span>`);
+			r.push(`Seeing the humiliating acts your slaves are expected to perform has made ${him} <span class="flaw gain">determined to be free.</span>`);
 			slave.behavioralFlaw = "liberated";
 		}
 	} else if (random(1, 100) > (110 - slave.devotion)) {
 		if (slave.fetish === "none" && slave.behavioralFlaw !== "liberated") {
 			r.push(`Feeling the joy of kneeling before such a powerful ${getWrittenTitle(slave)}`);
 
-			r.push(`and begging at ${hisP} feet has <span class="lightcoral">encouraged ${him} to be more submissive.</span>`);
+			r.push(`and begging at ${hisP} feet has <span class="fetish gain">encouraged ${him} to be more submissive.</span>`);
 			slave.fetish = "submissive";
 			slave.fetishKnown = 1;
 		}
diff --git a/src/npc/interaction/fButt.js b/src/npc/interaction/fButt.js
index 8a8868c6728..5b822ea9bfd 100644
--- a/src/npc/interaction/fButt.js
+++ b/src/npc/interaction/fButt.js
@@ -12,7 +12,7 @@ App.Interact.fButt = function(slave) {
 		he, his, him, girl
 	} = getPronouns(slave);
 
-	slave.partners.add(-1);
+	addPartner(slave, -1);
 
 	r.push(`You call ${him} over so you can`);
 	if (!canDoVaginal(slave)) {
diff --git a/src/npc/interaction/fCaress.js b/src/npc/interaction/fCaress.js
index dda4abb1e66..a349a6862d9 100644
--- a/src/npc/interaction/fCaress.js
+++ b/src/npc/interaction/fCaress.js
@@ -257,30 +257,13 @@ App.Interact.fCaress = function(slave) {
 		r.push(`${He} looks at you as if ${he} wants more than your hands touching ${him}.`);
 	} else if (slave.devotion > 50) {
 		r.push(`${He} accepts your touch with devotion, leaning ${his} head back at your gentle caress along ${his} face. ${He} leans ${his} body forward, pressing ${himself} against you, and you feel the intense heat from ${his} body against your`);
+		const firm = V.PC.boobsImplant/V.PC.boobs >= .60 ? "firm" : "soft";
 		if (V.PC.boobs >= 1400) {
-			r.push(`expansive`);
-			if (V.PC.boobsImplant/V.PC.boobs >= .60) {
-				r.push(`firm`);
-			} else {
-				r.push(`soft`);
-			}
-			r.push(`chest.`);
+			r.push(`expansive ${firm} chest.`);
 		} else if (V.PC.boobs >= 1200) {
-			r.push(`huge`);
-			if (V.PC.boobsImplant/V.PC.boobs >= .60) {
-				r.push(`firm`);
-			} else {
-				r.push(`soft`);
-			}
-			r.push(`breasts.`);
+			r.push(`huge ${firm} breasts.`);
 		} else if (V.PC.boobs >= 1000) {
-			r.push(`big`);
-			if (V.PC.boobsImplant/V.PC.boobs >= .60) {
-				r.push(`firm`);
-			} else {
-				r.push(`soft`);
-			}
-			r.push(`breasts.`);
+			r.push(`big ${firm} breasts.`);
 		} else if (V.PC.boobs >= 800) {
 			r.push(`soft breasts.`);
 		} else if (V.PC.boobs >= 500) {
diff --git a/src/npc/interaction/fDick.js b/src/npc/interaction/fDick.js
index fee933a5de7..ef9814f9054 100644
--- a/src/npc/interaction/fDick.js
+++ b/src/npc/interaction/fDick.js
@@ -16,6 +16,7 @@ App.Interact.fDick = function(slave) {
 
 	addPartner(slave, -1);
 
+	const cunt = V.PC.vagina !== -1 ? "cunt" : "rectal";
 	const _belly = bellyAdjective(slave);
 	const _amount = cumAmount(slave);
 	let _load;
@@ -62,6 +63,30 @@ App.Interact.fDick = function(slave) {
 		_nutte = "overly massive";
 	}
 
+	let dickAdj;
+	if (slave.dick === 1) {
+		dickAdj = "tiny";
+	} else if (slave.dick === 2) {
+		dickAdj = "cute";
+	} else if (slave.dick === 3) {
+		dickAdj = "average";
+	} else if (slave.dick === 4) {
+		dickAdj = "big";
+	} else if (slave.dick === 5) {
+		dickAdj = "impressive";
+	} else if (slave.dick === 6) {
+		dickAdj = "huge";
+	} else if (slave.dick === 7) {
+		dickAdj = "gigantic";
+	} else if (slave.dick === 8) {
+		dickAdj = "titanic";
+	} else if (slave.dick === 9) {
+		dickAdj = "absurd";
+	} else if (slave.dick === 10) {
+		dickAdj = "inhuman";
+	} else {
+		dickAdj = "hypertrophied";
+	}
 
 	/* CHECK*/
 
@@ -96,31 +121,7 @@ App.Interact.fDick = function(slave) {
 			}
 		}
 
-		r.push(`You slowly lower yourself onto ${his}`);
-		if (slave.dick === 1) {
-			r.push(`tiny`);
-		} else if (slave.dick === 2) {
-			r.push(`cute`);
-		} else if (slave.dick === 3) {
-			r.push(`average`);
-		} else if (slave.dick === 4) {
-			r.push(`big`);
-		} else if (slave.dick === 5) {
-			r.push(`impressive`);
-		} else if (slave.dick === 6) {
-			r.push(`huge`);
-		} else if (slave.dick === 7) {
-			r.push(`gigantic`);
-		} else if (slave.dick === 8) {
-			r.push(`titanic`);
-		} else if (slave.dick === 9) {
-			r.push(`absurd`);
-		} else if (slave.dick === 10) {
-			r.push(`inhuman`);
-		} else {
-			r.push(`hypertrophied`);
-		}
-		r.push(`dick, savoring every`);
+		r.push(`You slowly lower yourself onto ${his} ${dickAdj} dick, savoring every`);
 		if (V.showInches === 2) {
 			r.push(`inch,`);
 		} else {
@@ -171,37 +172,19 @@ App.Interact.fDick = function(slave) {
 				if (V.PC.belly >= 5000) {
 					r.push(`your gravid bulk`);
 				}
-				r.push(`on ${his} obedient cock. ${He} timidly warns you that ${he} is about to cum; in response you speed up your pace and clamp down hard on ${his} throbbing shaft. ${He} squeaks lewdly, overwhelmed by your orgasmic`);
-				if (V.PC.vagina !== -1) {
-					r.push(`cunt`);
-				} else {
-					r.push(`rectal`);
-				}
-				r.push(`spasms, and unloads ${_load} inside of you before apologizing submissively.`);
+				r.push(`on ${his} obedient cock. ${He} timidly warns you that ${he} is about to cum; in response you speed up your pace and clamp down hard on ${his} throbbing shaft. ${He} squeaks lewdly, overwhelmed by your orgasmic ${cunt} spasms, and unloads ${_load} inside of you before apologizing submissively.`);
 			} else if (slave.trust <= 20) {
 				r.push(`Having followed your instructions quickly and obediently, ${he} tries ${his} best to please you while you bounce`);
 				if (V.PC.belly >= 5000) {
 					r.push(`your gravid bulk`);
 				}
-				r.push(`on ${his} eager cock. ${He} grabs your hips and warns you ${he} is about to cum; in response you speed up your pace, encouraging ${him} to impale you on ${his} throbbing shaft. ${He} squeals lewdly, overwhelmed by your orgasmic`);
-				if (V.PC.vagina !== -1) {
-					r.push(`cunt`);
-				} else {
-					r.push(`rectal`);
-				}
-				r.push(`spasms, and unloads ${_load} into you before helping you up.`);
+				r.push(`on ${his} eager cock. ${He} grabs your hips and warns you ${he} is about to cum; in response you speed up your pace, encouraging ${him} to impale you on ${his} throbbing shaft. ${He} squeals lewdly, overwhelmed by your orgasmic ${cunt} spasms, and unloads ${_load} into you before helping you up.`);
 			} else {
 				r.push(`Having followed your instructions with gusto, ${he} energetically pounds you while you bounce`);
 				if (V.PC.belly >= 5000) {
 					r.push(`your gravid bulk`);
 				}
-				r.push(`on ${his} eager cock. ${He} grabs your hips and desperately warns you ${he} can't hold out any longer; in response you speed up your pace, tipping ${him} over the edge and forcing ${him} to impale you on ${his} twitching shaft. ${He} moans loudly, overwhelmed by your orgasmic`);
-				if (V.PC.vagina !== -1) {
-					r.push(`cunt`);
-				} else {
-					r.push(`rectal`);
-				}
-				r.push(`spasms, and unloads ${_load} into you before pulling you into a post coitus embrace.`);
+				r.push(`on ${his} eager cock. ${He} grabs your hips and desperately warns you ${he} can't hold out any longer; in response you speed up your pace, tipping ${him} over the edge and forcing ${him} to impale you on ${his} twitching shaft. ${He} moans loudly, overwhelmed by your orgasmic ${cunt} spasms, and unloads ${_load} into you before pulling you into a post coitus embrace.`);
 			}
 		} else if (slave.devotion >= -20) {
 			if (slave.trust < -20) {
@@ -209,37 +192,19 @@ App.Interact.fDick = function(slave) {
 				if (V.PC.belly >= 5000) {
 					r.push(`your gravid bulk`);
 				}
-				r.push(`on ${his} terrified cock. While ${he} is too afraid to enjoy pleasuring you, ${he} obediently thrusts into you. ${He} timidly warns you that ${he} is about to cum; in response you speed up your pace and clamp down hard on ${his} throbbing shaft. ${He} cries out in surprise, overwhelmed by your orgasmic`);
-				if (V.PC.vagina !== -1) {
-					r.push(`cunt`);
-				} else {
-					r.push(`rectal`);
-				}
-				r.push(`spasms, and blows ${_load} in you like a good little slave.`);
+				r.push(`on ${his} terrified cock. While ${he} is too afraid to enjoy pleasuring you, ${he} obediently thrusts into you. ${He} timidly warns you that ${he} is about to cum; in response you speed up your pace and clamp down hard on ${his} throbbing shaft. ${He} cries out in surprise, overwhelmed by your orgasmic ${cunt} spasms, and blows ${_load} in you like a good little slave.`);
 			} else if (slave.trust <= 20) {
 				r.push(`Having obediently followed your instructions, ${he} lies as still as ${he} can beneath you while you bounce`);
 				if (V.PC.belly >= 5000) {
 					r.push(`your gravid bulk`);
 				}
-				r.push(`on ${his} willing cock. While ${he} is too uncertain of ${his} position in the hierarchy to really enjoy ${himself}, ${he} hesitatingly thrusts into you. When ${he} feels ${he} is nearing ${his} limit, ${he} gives you proper warning that ${he} is about to cum; in response you speed up your pace and clamp down hard on ${his} throbbing shaft. ${He} cries out in surprise, overwhelmed by your orgasmic`);
-				if (V.PC.vagina !== -1) {
-					r.push(`cunt`);
-				} else {
-					r.push(`rectal`);
-				}
-				r.push(`spasms and boldness, and blows ${_load} in you during the confusion.`);
+				r.push(`on ${his} willing cock. While ${he} is too uncertain of ${his} position in the hierarchy to really enjoy ${himself}, ${he} hesitatingly thrusts into you. When ${he} feels ${he} is nearing ${his} limit, ${he} gives you proper warning that ${he} is about to cum; in response you speed up your pace and clamp down hard on ${his} throbbing shaft. ${He} cries out in surprise, overwhelmed by your orgasmic ${cunt} spasms and boldness, and blows ${_load} in you during the confusion.`);
 			} else {
 				r.push(`Having obediently followed your instructions, ${he} energetically pounds you while you bounce`);
 				if (V.PC.belly >= 5000) {
 					r.push(`your gravid bulk`);
 				}
-				r.push(`on ${his} eager cock. ${He} grabs your hips and pounds you a little too eagerly, not even slowing down as you begin to feel ${him} tense with orgasm. Without so much as a warning to you, ${he} trembles with orgasm, pumping ${his} load deep into your`);
-				if (V.PC.vagina !== -1) {
-					r.push(`cunt`);
-				} else {
-					r.push(`rectum`);
-				}
-				r.push(`and setting off your own. You glare daggers at ${him} as ${he} profusely apologizes for ${his} lack of restraint.`);
+				r.push(`on ${his} eager cock. ${He} grabs your hips and pounds you a little too eagerly, not even slowing down as you begin to feel ${him} tense with orgasm. Without so much as a warning to you, ${he} trembles with orgasm, pumping ${his} load deep into your ${cunt} and setting off your own. You glare daggers at ${him} as ${he} profusely apologizes for ${his} lack of restraint.`);
 			}
 		} else {
 			if (slave.trust < -20) {
@@ -247,25 +212,13 @@ App.Interact.fDick = function(slave) {
 				if (V.PC.belly >= 5000) {
 					r.push(`your gravid bulk`);
 				}
-				r.push(`on ${his} reluctant cock. While ${he} is too afraid to be an active participant in pleasuring you, you make do with what ${he}'s giving. ${He} timidly warns you that ${he} is about to cum; in response you speed up your pace and clamp down hard on ${his} throbbing shaft. ${He} cries out lewdly, overwhelmed by your orgasmic`);
-				if (V.PC.vagina !== -1) {
-					r.push(`cunt`);
-				} else {
-					r.push(`rectal`);
-				}
-				r.push(`spasms, and unloads ${_load} inside of you despite ${his} fear.`);
+				r.push(`on ${his} reluctant cock. While ${he} is too afraid to be an active participant in pleasuring you, you make do with what ${he}'s giving. ${He} timidly warns you that ${he} is about to cum; in response you speed up your pace and clamp down hard on ${his} throbbing shaft. ${He} cries out lewdly, overwhelmed by your orgasmic ${cunt} spasms, and unloads ${_load} inside of you despite ${his} fear.`);
 			} else if (slave.trust <= 20) {
 				r.push(`Having followed your instructions as quickly as ${he} could, ${he} lies as still as ${he} can beneath you while you bounce`);
 				if (V.PC.belly >= 5000) {
 					r.push(`your gravid bulk`);
 				}
-				r.push(`on ${his} reluctant cock. While ${he} is too hateful to be an active participant in pleasuring you, you make do with what ${he}'s got. ${He} cries out lewdly, overwhelmed by your orgasmic`);
-				if (V.PC.vagina !== -1) {
-					r.push(`cunt`);
-				} else {
-					r.push(`rectal`);
-				}
-				r.push(`spasms, and unloads ${_load} deep inside you without warning. ${He} <span class="orangered">smirks a little</span> as you glare daggers at ${him}.`);
+				r.push(`on ${his} reluctant cock. While ${he} is too hateful to be an active participant in pleasuring you, you make do with what ${he}'s got. ${He} cries out lewdly, overwhelmed by your orgasmic ${cunt} spasms, and unloads ${_load} deep inside you without warning. ${He} <span class="orangered">smirks a little</span> as you glare daggers at ${him}.`);
 				slave.trust++;
 			} else if (overpowerCheck(slave, V.PC) < random(1, 100)) {
 				r.push(`Without warning, ${he} flips you onto your side and, still hilted,`);
@@ -313,13 +266,7 @@ App.Interact.fDick = function(slave) {
 				if (V.PC.belly >= 5000) {
 					r.push(`your gravid bulk`);
 				}
-				r.push(`on ${his} traitorous cock. ${He} might not want to bend to your will, but you have ${his} body wrapped around your little finger, even though it still leaves you doing all the work. ${He} cries out lewdly, overwhelmed by your orgasmic`);
-				if (V.PC.vagina !== -1) {
-					r.push(`cunt`);
-				} else {
-					r.push(`rectal`);
-				}
-				r.push(`spasms, and unloads deep inside you without warning. ${He} <span class="orangered">smirks a little</span> as you glare daggers at ${him}.`);
+				r.push(`on ${his} traitorous cock. ${He} might not want to bend to your will, but you have ${his} body wrapped around your little finger, even though it still leaves you doing all the work. ${He} cries out lewdly, overwhelmed by your orgasmic ${cunt} spasms, and unloads deep inside you without warning. ${He} <span class="orangered">smirks a little</span> as you glare daggers at ${him}.`);
 				slave.trust++;
 			}
 		}
@@ -339,31 +286,7 @@ App.Interact.fDick = function(slave) {
 		} else {
 			r.push(`${his} cock`);
 		}
-		r.push(`and lower yourself onto ${his}`);
-
-		if (slave.dick === 1) {
-			r.push(`tiny dick`);
-		} else if (slave.dick === 2) {
-			r.push(`cute dick`);
-		} else if (slave.dick === 3) {
-			r.push(`dick`);
-		} else if (slave.dick === 4) {
-			r.push(`big dick`);
-		} else if (slave.dick === 5) {
-			r.push(`impressive dick`);
-		} else if (slave.dick === 6) {
-			r.push(`huge dick`);
-		} else if (slave.dick === 7) {
-			r.push(`gigantic dick`);
-		} else if (slave.dick === 8) {
-			r.push(`titanic dick`);
-		} else if (slave.dick === 9) {
-			r.push(`absurd dick`);
-		} else if (slave.dick === 10) {
-			r.push(`inhuman dick`);
-		} else {
-			r.push(`hypertrophied dick`);
-		}
+		r.push(`and lower yourself onto ${his} ${dickAdj} dick`);
 		if (slave.dick <= 6) {
 			r.push(`until you are sitting on ${his} loins.`);
 		} else {
@@ -371,7 +294,6 @@ App.Interact.fDick = function(slave) {
 		}
 
 		r.push(`You reach back`);
-
 		if (slave.scrotum > 0) {
 			r.push(`and stroke ${his} ${_nutte} balls.`);
 		} else if (slave.vagina > -1) {
diff --git a/src/npc/interaction/fEmbrace.js b/src/npc/interaction/fEmbrace.js
index b6c80d961b3..24f091ec6fa 100644
--- a/src/npc/interaction/fEmbrace.js
+++ b/src/npc/interaction/fEmbrace.js
@@ -15,8 +15,9 @@ App.Interact.fEmbrace = function(slave) {
 	const {title: Master, say: say} = getEnunciation(slave);
 
 	const {womanP} = getPronouns(V.PC).appendSuffix("P");
+	const bosom = V.PC.boobs >= 300 ? "bosom" : "chest";
 
-	slave.partners.add(-1);
+	addPartner(slave, -1);
 
 	r.push(`You tell  ${slave.slaveName} to`);
 	if (hasAnyLegs(slave)) {
@@ -41,12 +42,7 @@ App.Interact.fEmbrace = function(slave) {
 		} else if (slave.devotion+slave.trust >= 175) {
 			r.push(`${He} lovingly complies, hurrying to come close to the ${womanP} who married ${him}. Once ${he}'s close, you take your willing ${wife}'s head in your hands and gaze deeply into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to affirming, and looks down with a`);
 			if (canSee(slave)) {
-				r.push(`smile, running ${his} eyes over your`);
-				if (V.PC.boobs >= 300) {
-					r.push(`bosom.`);
-				} else {
-					r.push(`chest.`);
-				}
+				r.push(`smile, running ${his} eyes over your ${bosom}.`);
 			} else {
 				r.push(`smile.`);
 			}
@@ -67,12 +63,7 @@ App.Interact.fEmbrace = function(slave) {
 		} else {
 			r.push(`${He} complies obediently. Once ${he}'s close, you take your willing ${wife}'s head in your hands and gaze deeply into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to reassuring, and looks down with a slight `);
 			if (canSee(slave)) {
-				r.push(`smile, running ${his} eyes over your`);
-				if (V.PC.boobs >= 300) {
-					r.push(`bosom.`);
-				} else {
-					r.push(`chest.`);
-				}
+				r.push(`smile, running ${his} eyes over your ${bosom}.`);
 			} else {
 				r.push(`smile.`);
 			}
@@ -133,19 +124,9 @@ App.Interact.fEmbrace = function(slave) {
 		} else {
 			r.push(`As you move to ${his} front, with one arm still around ${him}, ${he} again tries to break away but you keep ${him} held tightly and you whisper the alternatives to ${him}, reminding ${him}.`);
 		}
-		r.push(`You wrap your arms around ${his} back as you press ${his} breasts against your`);
-		if (V.PC.boobs >= 300) {
-			r.push(`bosom.`);
-		} else {
-			r.push(`chest.`);
-		}
+		r.push(`You wrap your arms around ${his} back as you press ${his} breasts against your ${bosom}.`);
 	} else {
-		r.push(`${His} massive tits are too large for you to wrap your arms around so you start to wrap your arms around ${his} waist. You feel ${his} heart beat against your chest, ${he} starts to breathe faster as you press ${his} back against your`);
-		if (V.PC.boobs >= 300) {
-			r.push(`bosom.`);
-		} else {
-			r.push(`chest.`);
-		}
+		r.push(`${His} massive tits are too large for you to wrap your arms around so you start to wrap your arms around ${his} waist. You feel ${his} heart beat against your chest, ${he} starts to breathe faster as you press ${his} back against your ${bosom}.`);
 	}
 
 	if (slave.fetish === "mindbroken") {
@@ -196,31 +177,14 @@ App.Interact.fEmbrace = function(slave) {
 		if (hasAnyArms(slave)) {
 			r.push(`${His} ${hasBothArms(slave) ? `hands` : `hand`} reach to your arms and ${he} strokes them longingly as you squeeze.`);
 		}
+		const firm = V.PC.boobsImplant/V.PC.boobs >= .60 ? "firm" : "soft";
 		r.push(`${He} gradually closes ${his} eyes as ${he} leans ${his} body against yours, melting in your warm embrace, and you feel the intense heat from ${his} body against your`);
 		if (V.PC.boobs >= 1400) {
-			r.push(`expansive`);
-			if (V.PC.boobsImplant/V.PC.boobs >= .60) {
-				r.push(`firm`);
-			} else {
-				r.push(`soft`);
-			}
-			r.push(`chest.`);
+			r.push(`expansive ${firm} chest.`);
 		} else if (V.PC.boobs >= 1200) {
-			r.push(`huge`);
-			if (V.PC.boobsImplant/V.PC.boobs >= .60) {
-				r.push(`firm`);
-			} else {
-				r.push(`soft`);
-			}
-			r.push(`breasts.`);
+			r.push(`huge ${firm} breasts.`);
 		} else if (V.PC.boobs >= 1000) {
-			r.push(`big`);
-			if (V.PC.boobsImplant/V.PC.boobs >= .60) {
-				r.push(`firm`);
-			} else {
-				r.push(`soft`);
-			}
-			r.push(`breasts.`);
+			r.push(`big ${firm} breasts.`);
 		} else if (V.PC.boobs >= 800) {
 			r.push(`soft breasts.`);
 		} else if (V.PC.boobs >= 500) {
diff --git a/src/npc/interaction/fFeelings.js b/src/npc/interaction/fFeelings.js
index fdf1c88bbf7..dcd24a05578 100644
--- a/src/npc/interaction/fFeelings.js
+++ b/src/npc/interaction/fFeelings.js
@@ -15,7 +15,7 @@ App.Interact.feelings = function(slave) {
 	if (!canTalk(slave) && !hasAnyArms(slave)) {
 		r.push(`${slave.slaveName} is unable to communicate and thus this place should have been unreachable. Please report this.`);
 	}
-	const _lisping = (canTalk(slave) && SlaveStatsChecker.checkForLisp(slave)) ? 1 :0;
+	const willLisp = canTalk(slave) && SlaveStatsChecker.checkForLisp(slave);
 
 	/* TODO: clean up this passage - lots of repeating blocks */
 	if (slave.devotion < -50) {
@@ -23,7 +23,7 @@ App.Interact.feelings = function(slave) {
 		if (slave.trust >= -20) {
 			if (!canTalk(slave)) {
 				r.push(`gestures`);
-			} else if (_lisping === 1) {
+			} else if (willLisp) {
 				r.push(`lisps`);
 			} else {
 				r.push(`declares`);
@@ -32,7 +32,7 @@ App.Interact.feelings = function(slave) {
 		} else if (slave.trust >= -50) {
 			if (!canTalk(slave)) {
 				r.push(`gestures`);
-			} else if (_lisping === 1) {
+			} else if (willLisp) {
 				r.push(`lisps`);
 			} else {
 				r.push(`mutters`);
@@ -50,7 +50,7 @@ App.Interact.feelings = function(slave) {
 		r.push(`${He}`);
 		if (!canTalk(slave)) {
 			r.push(`gestures`);
-		} else if (_lisping === 1) {
+		} else if (willLisp) {
 			r.push(`lisps`);
 		} else {
 			r.push(`mutters`);
@@ -354,7 +354,7 @@ App.Interact.feelings = function(slave) {
 						r.push(`Thank you for breeding us, ${Master}! Our womb is yours to impregnate.`);
 					}
 					r.push(`What? Oh, I'm thinking of myself and my`);
-					if (slave.fetus_count >= 2 || slave.broodmother >= 1) {
+					if (slave.fetus_count >= 2 || slave.broodmother >= 1) { // FIXME: should be slave.pregType?
 						r.push(`babies`);
 					} else {
 						r.push(`baby`);
@@ -366,7 +366,7 @@ App.Interact.feelings = function(slave) {
 						r.push(`Thank you for breeding us, ${Master}! Our womb is yours to impregnate.`);
 					}
 					r.push(`What? Oh, I'm thinking of myself and my`);
-					if (slave.fetus_count >= 2 || slave.broodmother >= 1) {
+					if (slave.fetus_count >= 2 || slave.broodmother >= 1) { // FIXME: should be slave.pregType?
 						r.push(`babies`);
 					} else {
 						r.push(`baby`);
@@ -378,7 +378,7 @@ App.Interact.feelings = function(slave) {
 						r.push(`Thank you for breeding us, ${Master}! Our womb is yours to impregnate.`);
 					}
 					r.push(`What? Oh, I'm thinking of myself and my`);
-					if (slave.fetus_count >= 2 || slave.broodmother >= 1) {
+					if (slave.fetus_count >= 2 || slave.broodmother >= 1) { // FIXME: should be slave.pregType?
 						r.push(`babies`);
 					} else {
 						r.push(`baby`);
@@ -390,7 +390,7 @@ App.Interact.feelings = function(slave) {
 						r.push(`Thank you for breeding us, ${Master}! Our womb is yours to impregnate.`);
 					}
 					r.push(`What? Oh, I'm thinking of myself and my`);
-					if (slave.fetus_count >= 2) {
+					if (slave.fetus_count >= 2) { // FIXME: should be slave.pregType?
 						r.push(`babies`);
 					} else {
 						r.push(`baby`);
@@ -398,7 +398,7 @@ App.Interact.feelings = function(slave) {
 					r.push(`as one person again, aren't I? I'm sorry, ${Master}. It's just so hard to remember when my womb is so much more than I am in every way.`);
 				} else if (slave.pregKnown === 1) {
 					r.push(`my belly, now that it has`);
-					if (slave.fetus_count >= 2) {
+					if (slave.fetus_count >= 2) { // FIXME: should be slave.pregType?
 						r.push(`the babies`);
 					} else {
 						r.push(`a baby`);
@@ -1701,7 +1701,7 @@ App.Interact.feelings = function(slave) {
 			} = getPronouns(_partner).appendSuffix("2");
 			let _partnerName;
 			if (_partner) {
-				if (_lisping === 1) {
+				if (willLisp) {
 					_partnerName = lispReplace(_partner.slaveName);
 				} else {
 					_partnerName = _partner.slaveName;
@@ -1786,7 +1786,7 @@ App.Interact.feelings = function(slave) {
 					} else if (_beauty > 0 && _combat > 0) {
 						r.push(Spoken(slave, `${His2} P-Limbs do look cool and I like how strong they can make ${him2} but they scare me a little, sometimes. Though of course ${he2} disables the weapons when we're together.`));
 					} else if (_sex > 0 && _combat > 0) {
-						r.push(`${His2} P-Limbs do scare me a little, sometimes. Though of course ${he2} disables the weapons when we're together."`);
+						r.push(Spoken(slave, `${His2} P-Limbs do scare me a little, sometimes. Though of course ${he2} disables the weapons when we're together."`));
 						r.push(`${He} giggles.`);
 						r.push(Spoken(slave, `"${He2} has vibe fingers. so that's awesome.`));
 					} else if (_sex > 0) {
@@ -1831,11 +1831,10 @@ App.Interact.feelings = function(slave) {
 			}
 		} else if (slave.relationship === -2) {
 			r.push(Spoken(slave, `I'm good friends with some of the other slaves,"`));
-			r.push(`${he}`);
 			if (!canTalk(slave)) {
-				r.push(`gestures`);
+				r.push(`${he} gestures`);
 			} else {
-				r.push(`mutters`);
+				r.push(`${he} mutters`);
 			}
 			r.push(`hesitantly, looking suddenly embarrassed.`);
 			r.push(Spoken(slave, `"I really like you, though, ${Master}. Like, <span class="note">like</span> you, like you."`));
diff --git a/src/npc/interaction/fFeet.js b/src/npc/interaction/fFeet.js
index e6535bd7d33..2f4d16cfeae 100644
--- a/src/npc/interaction/fFeet.js
+++ b/src/npc/interaction/fFeet.js
@@ -13,7 +13,7 @@ App.Interact.fFeet = function(slave) {
 	} = getPronouns(slave);
 	const {title: Master} = getEnunciation(slave);
 
-	slave.partners.add(-1);
+	addPartner(slave, -1);
 
 	const _footSeed = random(1, 100);
 	let thighsAdj;
@@ -24,7 +24,7 @@ App.Interact.fFeet = function(slave) {
 	let ballsDesc;
 	let dickAdj;
 	let buttAdj;
-	let _hips;
+	let hipAdj;
 	let skin;
 
 	if (slave.weight > 190) {
@@ -225,17 +225,17 @@ App.Interact.fFeet = function(slave) {
 	}
 
 	if (slave.hips > 2) {
-		_hips = "inhumanly wide";
+		hipAdj = "inhumanly wide";
 	} else if (slave.hips > 1) {
-		_hips = "very wide";
+		hipAdj = "very wide";
 	} else if (slave.hips > 0) {
-		_hips = "wide";
+		hipAdj = "wide";
 	} else if (slave.hips > -1) {
-		_hips = "ample";
+		hipAdj = "ample";
 	} else if (slave.hips > -2) {
-		_hips = "narrow";
+		hipAdj = "narrow";
 	} else {
-		_hips = "very narrow";
+		hipAdj = "very narrow";
 	}
 
 	if (slave.skin === slave.race || slave.race === "white" || slave.race === "black" || V.seeRace === 0) {
@@ -246,6 +246,7 @@ App.Interact.fFeet = function(slave) {
 
 	const legs = hasBothLegs(slave) ? "legs" : "leg";
 	const feet = hasBothLegs(slave) ? "feet" : "foot";
+	const hands = hasBothArms(slave) ? "hands" : "hand";
 
 	// Part 1: Order and reaction
 
@@ -327,7 +328,7 @@ App.Interact.fFeet = function(slave) {
 		} else if (slave.devotion > 20 && slave.sexualFlaw === "shamefast") {
 			r.push(`${He}`);
 			if (hasAnyArms(slave)) {
-				r.push(`hides ${his} face in ${his} ${hasBothArms(slave) ? `hands` : `hand`}`);
+				r.push(`hides ${his} face in ${his} ${hands}`);
 			} else {
 				r.push(`attempts to hide ${his} face`);
 			}
@@ -500,7 +501,7 @@ App.Interact.fFeet = function(slave) {
 				if (hasBothArms(slave)) {
 					r.push(`one of`);
 				}
-				r.push(`${his} ${hasBothArms(slave) ? `hands` : `hand`} roaming across ${his} ${_belly} belly as ${he} happily services you.`);
+				r.push(`${his} ${hands} roaming across ${his} ${_belly} belly as ${he} happily services you.`);
 			} else {
 				r.push(`${feet}.`);
 			}
@@ -541,11 +542,11 @@ App.Interact.fFeet = function(slave) {
 		r.push(`you near your orgasm, ${he}`);
 		if (_footSeed < 40 && hasAnyArms(slave)) {
 			if (slave.boobs < 300) {
-				r.push(`presses ${his} ${hasBothArms(slave) ? `hands` : `hand`} on ${his} flat chest,`);
+				r.push(`presses ${his} ${hands} on ${his} flat chest,`);
 			} else if (slave.boobs < 500) {
-				r.push(`puts ${his} ${hasBothArms(slave) ? `hands` : `hand`} under ${his} small chest,`);
+				r.push(`puts ${his} ${hands} under ${his} small chest,`);
 			} else {
-				r.push(`cups ${his} ${_boobs} breasts with ${his} ${hasBothArms(slave) ? `hands` : `hand`},`);
+				r.push(`cups ${his} ${_boobs} breasts with ${his} ${hands},`);
 			}
 			r.push(`then sticks out ${his} tongue, posing like a Free Cities whore who wants a cumshot.`);
 		} else if (_footSeed < 70 && !(slave.chastityPenis) && !(slave.chastityVagina) && (slave.dick > 0 || slave.vagina >= 0 )) {
@@ -599,7 +600,7 @@ App.Interact.fFeet = function(slave) {
 			}
 			r.push(`with a sultry smile.`);
 		} else {
-			r.push(`rolls onto ${his} side while still stroking your dick, revealing ${his} ${buttAdj} ass, ${_hips} hips and ${thighsAdj} thighs with a sultry smile.`);
+			r.push(`rolls onto ${his} side while still stroking your dick, revealing ${his} ${buttAdj} ass, ${hipAdj} hips and ${thighsAdj} thighs with a sultry smile.`);
 		}
 	}
 
@@ -625,9 +626,9 @@ App.Interact.fFeet = function(slave) {
 		} else if (slave.devotion < -20) {
 			r.push(`You eventually cum all over ${his} ${skin}`);
 			if (V.PC.balls >= 9) {
-				r.push(`${feet} ${legsAdj} ${legs}, and even ${his} side with your massive load`);
+				r.push(`${feet} ${legsAdj} ${legs}, and even ${his} side with your massive load.`);
 			} else if (V.PC.balls >= 5) {
-				r.push(`${feet} and ${legsAdj} ${legs} with your large load`);
+				r.push(`${feet} and ${legsAdj} ${legs} with your large load.`);
 			} else {
 				r.push(`${feet}.`);
 			}
@@ -748,7 +749,7 @@ App.Interact.fFeet = function(slave) {
 		} else if (slave.fetish === "buttslut" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
 			r.push(`When you eventually cum, ${slave.slaveName} moans as your semen lands on ${his} ${skin} ${feet},`);
 			if (V.PC.balls >= 5) {
-				r.push(`but quickly turns to present ${his} ${buttAdj} ass and ${_hips} hips as a new target.`);
+				r.push(`but quickly turns to present ${his} ${buttAdj} ass and ${hipAdj} hips as a new target.`);
 				if (V.PC.balls >= 9) {
 					r.push(`Your massive load quickly covers ${his} ${thighsAdj} ass and thighs, sticky cum dripping all the way to ${his} calves.`);
 				} else {
@@ -768,7 +769,7 @@ App.Interact.fFeet = function(slave) {
 			if (slave.boobs < 300) {
 				r.push(`pinches both ${his} erect nipples`);
 			} else if (slave.boobs < 500) {
-				r.push(`rubs ${his} ${hasBothArms(slave) ? `hands` : `hand`} across ${his} small chest`);
+				r.push(`rubs ${his} ${hands} across ${his} small chest`);
 			} else {
 				r.push(`squeezes ${his} ${_boobs} breasts tightly`);
 			}
@@ -822,7 +823,7 @@ App.Interact.fFeet = function(slave) {
 			}
 			r.push(`Your orgasm shoots across ${his} ${skin}`);
 			if (V.PC.balls >= 9) {
-				r.push(`${feet}, ${legsAdj} ${legs}, and even ${his} ${_belly} belly is marked with your massive load. ${He} runs ${his} ${hasBothArms(slave) ? `hands` : `hand`} through the cum on ${his} belly, massaging the semen into ${his} skin.`);
+				r.push(`${feet}, ${legsAdj} ${legs}, and even ${his} ${_belly} belly is marked with your massive load. ${He} runs ${his} ${hands} through the cum on ${his} belly, massaging the semen into ${his} skin.`);
 			} else if (V.PC.balls >= 5) {
 				r.push(`${feet} and ${legsAdj} ${legs}.`);
 			} else {
-- 
GitLab