From 713ac8b912a2fdfed62ded1b7a2b6f92a443cc11 Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Sat, 14 Sep 2019 17:43:44 -0400
Subject: [PATCH] FS work

---
 src/endWeek/saServeThePublic.js           |  50 +++++++-
 src/endWeek/saWhore.js                    |  50 +++++++-
 src/endWeek/saWorkAGloryHole.js           |  12 ++
 src/endWeek/saWorkTheFarm.js              |  12 ++
 src/js/economyJS.js                       |   4 +
 src/js/itemAvailability.js                |   8 ++
 src/js/slaveCostJS.js                     |  33 ++++-
 src/js/slaveStatsChecker.js               |  48 ++++++-
 src/js/slaveSummaryWidgets.js             |   8 +-
 src/js/vignettes.js                       | 150 ++++++++++++++++++++++
 src/uncategorized/costsReport.tw          |   8 +-
 src/uncategorized/costsWidgets.tw         |   8 +-
 src/uncategorized/longSlaveDescription.tw |  21 +++
 src/uncategorized/saGetMilked.tw          |   8 ++
 src/uncategorized/saLongTermEffects.tw    |  64 +++++++++
 15 files changed, 470 insertions(+), 14 deletions(-)

diff --git a/src/endWeek/saServeThePublic.js b/src/endWeek/saServeThePublic.js
index 75eaf26d173..017b6639779 100644
--- a/src/endWeek/saServeThePublic.js
+++ b/src/endWeek/saServeThePublic.js
@@ -619,7 +619,9 @@ window.saServeThePublic = (function saServeThePublic() {
 		}
 
 		if (canTalk(slave)) {
-			if (slave.voice > 2) {
+			if (arcology.FSSlaveProfessionalism !== "unset" && slave.accent > 1) {
+				r += ` ${His} butchery of the local tongue drives away curious citizens.`;
+			} else if (slave.voice > 2) {
 				if (slave.voiceImplant > 0) {
 					r += ` ${His} high-pitched bimbo voice improves ${his} come-ons.`;
 				} else {
@@ -690,6 +692,20 @@ window.saServeThePublic = (function saServeThePublic() {
 			}
 		}
 
+		if (arcology.FSPetiteAdmiration !== "unset") {
+			if (heightPass(slave)) {
+				r += ` ${His} adorably petite stature catches and holds the public's eye.`;
+			} else if (slave.height >= 170) {
+				r += ` ${His} tall stature turns off most citizens.`;
+			}
+		} else if (arcology.FSStatuesqueGlorification !== "unset") {
+			if (heightPass(slave)) {
+				r += ` ${His} gloriously tall stature catches and holds the public's eye.`;
+			} else {
+				r += ` ${His} short stature turns off most citizens.`;
+			}
+		}
+
 		if (slave.visualAge >= 30) {
 			if (arcology.FSMaturityPreferentialist !== "unset") {
 				r += ` ${His} mature body is very fashionable.`;
@@ -766,6 +782,12 @@ window.saServeThePublic = (function saServeThePublic() {
 			}
 		}
 
+		if (arcology.FSIntellectualDependencyLawBeauty === 1) {
+			if (bimboScore(slave) >= 6) {
+				r += ` Citizens flock to spend time with a complete bimbo like ${him}.`;
+			}
+		}
+
 		if (slave.boobsImplant === 0 && slave.buttImplant === 0 && slave.waist >= -95 && slave.bellyImplant === -1 && slave.lipsImplant === 0 && slave.faceImplant < 30) {
 			if (arcology.FSBodyPurist !== "unset") {
 				r += ` With ${his} all-natural, implant free appearance, ${he}'s very popular.`;
@@ -878,7 +900,19 @@ window.saServeThePublic = (function saServeThePublic() {
 			}
 		}
 
-		if (slave.intelligence + slave.intelligenceImplant > 15) {
+		if (arcology.FSSlaveProfessionalism !== "unset") {
+			if (slave.intelligence + slave.intelligenceImplant > 50) {
+				r += ` ${His} intelligence satisfies citizens looking for something more than just a hole.`;
+			} else if (slave.intelligence + slave.intelligenceImplant < -10) {
+				r += ` ${His} stupidity gives aggravates citizens looking for something more than just a cum dump.`;
+			}
+		} else if (arcology.FSIntellectualDependency !== "unset") {
+			if (slave.intelligence + slave.intelligenceImplant > 10) {
+				r += ` ${His} intellectual baggage is more than most citizens wish to deal with.`;
+			} else if (slave.intelligence + slave.intelligenceImplant < -50) {
+				r += ` ${His} simplicity makes ${him} pliable and ready to do or try anything.`;
+			}
+		} else if (slave.intelligence + slave.intelligenceImplant > 15) {
 			r += ` ${His} intelligence helps ${him} discern everyone's needs.`;
 		} else if (slave.intelligence + slave.intelligenceImplant < -15) {
 			r += ` ${He} has trouble figuring out what everyone needs.`;
@@ -1279,6 +1313,18 @@ window.saServeThePublic = (function saServeThePublic() {
 			case "Slimness Enthusiast":
 				arcology.FSSlimnessEnthusiast += fsBeauty;
 				break;
+			case "Slave Professionalism":
+				arcology.FSSlaveProfessionalism += fsBeauty;
+				break;
+			case "Intellectual Dependency":
+				arcology.FSIntellectualDependency += fsBeauty;
+				break;
+			case "Petite Admiration":
+				arcology.FSPetiteAdmiration += fsBeauty;
+				break;
+			case "Statuesque Glorification":
+				arcology.FSStatuesqueGlorification += fsBeauty;
+				break;
 		}
 	}
 
diff --git a/src/endWeek/saWhore.js b/src/endWeek/saWhore.js
index 5e9978dc9bd..59f0b260f1b 100644
--- a/src/endWeek/saWhore.js
+++ b/src/endWeek/saWhore.js
@@ -815,7 +815,9 @@ window.saWhore = (function saWhore() {
 		}
 
 		if (canTalk(slave)) {
-			if (slave.voice > 2) {
+			if (arcology.FSSlaveProfessionalism !== "unset" && slave.accent > 1) {
+				r += ` ${His} butchery of the local tongue drives away potential customers.`;
+			} else if (slave.voice > 2) {
 				if (slave.voiceImplant > 0) {
 					r += ` ${His} high-pitched bimbo voice makes it easier for ${him} to entice potential customers.`;
 				} else {
@@ -886,6 +888,20 @@ window.saWhore = (function saWhore() {
 			}
 		}
 
+		if (arcology.FSPetiteAdmiration !== "unset") {
+			if (heightPass(slave)) {
+				r += ` ${His} adorably petite stature attracts additional customers.`;
+			} else if (slave.height >= 170) {
+				r += ` ${His} tall stature turns off potential costumers.`;
+			}
+		} else if (arcology.FSStatuesqueGlorification !== "unset") {
+			if (heightPass(slave)) {
+				r += ` ${His} gloriously tall stature attracts additional customers.`;
+			} else {
+				r += ` ${His} short stature turns off potential costumers.`;
+			}
+		}
+
 		if (slave.visualAge >= 30) {
 			if (arcology.FSMaturityPreferentialist !== "unset") {
 				r += ` ${His} mature body is very fashionable.`;
@@ -962,6 +978,12 @@ window.saWhore = (function saWhore() {
 			}
 		}
 
+		if (arcology.FSIntellectualDependencyLawBeauty === 1) {
+			if (bimboScore(slave) >= 6) {
+				r += ` Clients are more than willing to pay extra ¤ to spend time with a complete bimbo like ${him}.`;
+			}
+		}
+
 		if (slave.boobsImplant === 0 && slave.buttImplant === 0 && slave.waist >= -95 && slave.bellyImplant === -1 && slave.lipsImplant === 0 && slave.faceImplant < 30) {
 			if (arcology.FSBodyPurist !== "unset") {
 				r += ` With ${his} all-natural, implant free appearance, ${he}'s very profitable.`;
@@ -1074,7 +1096,19 @@ window.saWhore = (function saWhore() {
 			}
 		}
 
-		if (slave.intelligence + slave.intelligenceImplant > 15) {
+		if (arcology.FSSlaveProfessionalism !== "unset") {
+			if (slave.intelligence + slave.intelligenceImplant > 50) {
+				r += ` ${His} intelligence satisfies customers looking for more than just a hole to fuck.`;
+			} else if (slave.intelligence + slave.intelligenceImplant < -10) {
+				r += ` ${His} stupidity gives aggravates customers looking for more than just a hole to fuck.`;
+			}
+		} else if (arcology.FSIntellectualDependency !== "unset") {
+			if (slave.intelligence + slave.intelligenceImplant > 10) {
+				r += ` ${His} intellectual baggage annoys customers looking for a simple fuck.`;
+			} else if (slave.intelligence + slave.intelligenceImplant < -50) {
+				r += ` ${His} simplicity makes ${him} pliable and ready to try anything with a customer.`;
+			}
+		} else if (slave.intelligence + slave.intelligenceImplant > 15) {
 			r += ` ${His} intelligence gives ${him} an advantage at the business of selling ${his} body.`;
 		} else if (slave.intelligence + slave.intelligenceImplant < -15) {
 			r += ` ${His} stupidity gives ${him} a handicap at the business of selling ${his} body.`;
@@ -1475,6 +1509,18 @@ window.saWhore = (function saWhore() {
 			case "Slimness Enthusiast":
 				arcology.FSSlimnessEnthusiast += fsBeauty;
 				break;
+			case "Slave Professionalism":
+				arcology.FSSlaveProfessionalism += fsBeauty;
+				break;
+			case "Intellectual Dependency":
+				arcology.FSIntellectualDependency += fsBeauty;
+				break;
+			case "Petite Admiration":
+				arcology.FSPetiteAdmiration += fsBeauty;
+				break;
+			case "Statuesque Glorification":
+				arcology.FSStatuesqueGlorification += fsBeauty;
+				break;
 		}
 	}
 
diff --git a/src/endWeek/saWorkAGloryHole.js b/src/endWeek/saWorkAGloryHole.js
index ad5d9156601..7b558c50a80 100644
--- a/src/endWeek/saWorkAGloryHole.js
+++ b/src/endWeek/saWorkAGloryHole.js
@@ -323,6 +323,18 @@ window.saWorkAGloryHole = (function saWorkAGloryHole() {
 				case "Slimness Enthusiast":
 					V.arcologies[0].FSSlimnessEnthusiast += impact;
 					break;
+				case "Slave Professionalism":
+					arcology.FSSlaveProfessionalism += impact;
+					break;
+				case "Intellectual Dependency":
+					arcology.FSIntellectualDependency += impact;
+					break;
+				case "Petite Admiration":
+					arcology.FSPetiteAdmiration += impact;
+					break;
+				case "Statuesque Glorification":
+					arcology.FSStatuesqueGlorification += impact;
+					break;
 			}
 		}
 	}
diff --git a/src/endWeek/saWorkTheFarm.js b/src/endWeek/saWorkTheFarm.js
index d8b0cb4e2b7..3ef28f6270e 100644
--- a/src/endWeek/saWorkTheFarm.js
+++ b/src/endWeek/saWorkTheFarm.js
@@ -592,6 +592,18 @@ window.saWorkTheFarm = function saWorkTheFarm(slave) {
 			case "Slimness Enthusiast":
 				arcology.FSSlimnessEnthusiast = Math.clamp(arcology.FSSlimnessEnthusiast += fsGain, 0, 100);
 				break;
+			case "Slave Professionalism":
+				arcology.FSSlaveProfessionalism = Math.clamp(arcology.FSSlaveProfessionalism += fsGain, 0, 100);
+				break;
+			case "Intellectual Dependency":
+				arcology.FSIntellectualDependency = Math.clamp(arcology.FSIntellectualDependency += fsGain, 0, 100);
+				break;
+			case "Petite Admiration":
+				arcology.FSPetiteAdmiration = Math.clamp(arcology.FSPetiteAdmiration += fsGain, 0, 100);
+				break;
+			case "Statuesque Glorification":
+				arcology.FSStatuesqueGlorification = Math.clamp(arcology.FSStatuesqueGlorification += fsGain, 0, 100);
+				break;
 		}
 	}
 
diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 2dce41bbaa0..0318d91146b 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -856,6 +856,10 @@ window.getSlaveCost = function(s) {
 	if (s.preg === -1 && isFertile(s)) {
 		cost += Math.trunc((drugsCost * 0.5));
 	}
+	
+	if ((Job.CONCUBINE === s.assignment || s.relationship === -3) && State.variables.arcologies[0].FSPetiteAdmirationLaw === 1) {
+		cost -= 200;
+	}
 
 	// Promotion costs
 	if (State.variables.studio === 1) {
diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js
index 7fc1eef370a..745ab63bda8 100644
--- a/src/js/itemAvailability.js
+++ b/src/js/itemAvailability.js
@@ -43,6 +43,12 @@ window.isItemAccessible = function(string) {
 			return (V.arcologies[0].FSRomanRevivalist > 0 || V.clothesBoughtToga === 1);
 		case "Western clothing":
 			return (V.arcologies[0].FSPastoralist > 0 || V.clothesBoughtWestern === 1);
+		case "a courtesan dress":
+			return (V.arcologies[0].FSSlaveProfessionalism > 0 || V.clothesBoughtCourtesan === 1);
+		case "a bimbo outfit":
+			return (V.arcologies[0].FSIntellectualDependency > 0 || V.clothesBoughtBimbo === 1);
+		case "petite admi outfit":
+			return (V.arcologies[0].FSPetiteAdmiration > 0 || V.clothesBoughtPetite === 1);
 		case "battlearmor":
 		case "a military uniform":
 		case "a red army uniform":
@@ -129,6 +135,8 @@ window.isItemAccessible = function(string) {
 		case "striped panties":
 		case "striped underwear":
 			return (V.clothesBoughtPantsu === 1 || V.continent === "Japan");
+		case "tall shoes":
+			return (V.arcologies[0].FSStatuesqueGlorification > 0 || V.shoesBoughtHeels === 1);
 		case "bowtie":
 			return (V.arcologies[0].FSGenderFundamentalist > 0 || V.clothesBoughtBunny === 1);
 		case "ancient Egyptian":
diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js
index 54d5bdc5cb6..40678dccd52 100644
--- a/src/js/slaveCostJS.js
+++ b/src/js/slaveCostJS.js
@@ -109,7 +109,38 @@ window.Beauty = (function() {
 	 * @param {App.Entity.SlaveState} slave
 	 */
 	function calcHeightBeauty(slave) {
-		beauty += (slave.height - 160) / 10;
+		if (arcology.FSPetiteAdmiration !== "unset") {
+			if (arcology.FSPetiteAdmirationLaw2 === 1) {
+				if (heightPass(slave)) {
+					beauty += (Height.mean(slave) - slave.height) * (arcology.FSPetiteAdmiration / 50);
+				} else {
+					beauty -= (slave.height - Height.mean(slave)) * (arcology.FSPetiteAdmiration / 50);
+				}
+			} else {
+				if (heightPass(slave)) {
+					let ageDiv = (slave.physicalAge >= 16) ? 1 : (16 - slave.physicalAge); // this could probably be better, but bad at math. Intent is for younger, and thus naturally shorter than the threshold, slaves receive a weaker bonus.
+					beauty += (161 - slave.height) * ((arcology.FSPetiteAdmiration / 50) + 0.5) / ageDiv;
+				} else if (slave.height >= 170) {
+					beauty -= (slave.height - 169) * (arcology.FSPetiteAdmiration / 50);
+				}
+			}
+		} else if (arcology.FSStatuesqueGlorification !== "unset") {
+			if (arcology.FSStatuesqueGlorificationLaw2 === 1) {
+				if (heightPass(slave)) {
+					beauty += (slave.height - Height.mean(slave)) * (arcology.FSStatuesqueGlorification / 50);
+				} else {
+					beauty -= (Height.mean(slave) - slave.height) * (arcology.FSStatuesqueGlorification / 50);
+				}
+			} else {
+				if (heightPass(slave)) {
+					beauty += (slave.height + heelLength(slave) - 169) * ((arcology.FSStatuesqueGlorification / 50) + 0.5);
+				} else {
+					beauty -= ((arcology.FSStatuesqueGlorification / 10) + (170 - slave.height + heelLength(slave))) * 2;
+				}
+			}
+		} else {
+			beauty += (slave.height - 160) / 10;
+		}
 	}
 
 	/**
diff --git a/src/js/slaveStatsChecker.js b/src/js/slaveStatsChecker.js
index e2f5ebc3269..7a007677bef 100644
--- a/src/js/slaveStatsChecker.js
+++ b/src/js/slaveStatsChecker.js
@@ -308,9 +308,51 @@ window.slimLawPass = function(slave) {
  * @returns {boolean}
  */
 window.heightPass = function(slave) {
-	let measuresUp = false;
-	// to make the other js that calls this unfinished function not meltdown
-	return measuresUp;
+	let	V = State.variables;
+	let arcology = V.arcologies[0];
+
+	if (arcology.FSPetiteAdmiration !== "unset") {
+		if (arcology.FSPetiteAdmirationLaw2 === 1) {
+			if (slave.height < Height.mean(slave) - 5) {
+				return true;
+			}
+		} else {
+			if (slave.height < 160) {
+				return true;
+			}
+		}
+	} else if (arcology.FSStatuesqueGlorification !== "unset") {
+		if (arcology.FSStatuesqueGlorificationLaw2 === 1) {
+			if (slave.height + heelLength(slave) > Height.mean(slave) + 5) {
+				return true;
+			}
+		} else {
+			if (slave.height + heelLength(slave) >= 170) {
+				return true;
+			}
+		}
+	}
+	return false;
+};
+
+/**
+ * Returns the height, in cm, of a slave's heels
+ * @param {App.Entity.SlaveState} slave
+ * @returns {number}
+ */
+window.heelLength = function(slave) {
+	switch (slave.shoes) {
+		case "pumps":
+			// 2 inch heels
+			return 5;
+		case "heels":
+			// 5 inch heels
+			return 13;
+		case "extreme heels":
+			// 8 inch heels
+			return 21;
+	}
+	return 0;
 };
 
 /**
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index cc3d2294842..5b91442304c 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -2365,11 +2365,11 @@ window.SlaveSummaryUncached = (function() {
 	function long_hips(slave, c) {
 		const styles = "red";
 		if (slave.hips < -1) {
-			if (slave.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
+			if (slave.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset") && (V.arcologies[0].FSIntellectualDependencyLawBeauty === 0)) {
 				makeSpan(c, "Disproportionately big butt.", styles);
 			}
 		} else if (slave.hips < 0) {
-			if (slave.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
+			if (slave.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset") && (V.arcologies[0].FSIntellectualDependencyLawBeauty === 0)) {
 				makeSpan(c, "Disproportionately big butt.", styles);
 			}
 		} else if (slave.hips > 2) {
@@ -2382,7 +2382,7 @@ window.SlaveSummaryUncached = (function() {
 			}
 		} else if (slave.hips > 0) {
 			if (slave.butt > 8) {
-				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
+				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset") && (V.arcologies[0].FSIntellectualDependencyLawBeauty === 0)) {
 					makeSpan(c, "Disproportionately big butt.", styles);
 				}
 			} else if (slave.butt <= 2 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (slave.boobs >= 500))) {
@@ -2390,7 +2390,7 @@ window.SlaveSummaryUncached = (function() {
 			}
 		} else {
 			if (slave.butt > 6) {
-				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
+				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset") && (V.arcologies[0].FSIntellectualDependencyLawBeauty === 0)) {
 					makeSpan(c, "Disproportionately big butt.", styles);
 				}
 			} else if (slave.butt <= 1 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (slave.boobs >= 500))) {
diff --git a/src/js/vignettes.js b/src/js/vignettes.js
index d63459b9cb4..e574104c044 100644
--- a/src/js/vignettes.js
+++ b/src/js/vignettes.js
@@ -1673,6 +1673,81 @@ window.GetVignette = function GetVignette(slave) {
 				});
 			}
 		}
+		if (V.arcologies[0].FSIntellectualDependency !== "unset") {
+			if (slave.energy < 70) {
+				vignettes.push({
+					text: `${he} was called a dead fish by an irate customer unsatisfied by ${his} libido,`,
+					type: "trust",
+					effect: -1,
+				});
+			}
+			if (slave.intelligence + slave.intelligenceImplant < -50) {
+				vignettes.push({
+					text: `a gameshow host asked to hire ${him} for a taping so ${he} could provide comedic relief when compared to the actual contestants,`,
+					type: "cash",
+					effect: 2,
+				});
+			}
+		} else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") {
+			if (slave.intelligence + slave.intelligenceImplant > 95) {
+				vignettes.push({
+					text: `${he} got repeat business from a customer that wanted to continue their post-coital conversation,`,
+					type: "cash",
+					effect: 2,
+				});
+			} else if (slave.intelligence + slave.intelligenceImplant <= 10 && canTalk(slave)) {
+				vignettes.push({
+					text: `a customer complained about the idiotic statements that kept leaving ${his} mouth,`,
+					type: "rep",
+					effect: -1,
+				});
+			}
+			if (canTalk(slave) && slave.accent > 1) {
+				vignettes.push({
+					text: `${he} was publicly ridiculed for not being able to properly speak,`,
+					type: "rep",
+					effect: -1,
+				});
+			}
+		}
+		if (V.arcologies[0].FSStatuesqueGlorification !== "unset") {
+			if (!heightPass(slave)) {
+				vignettes.push({
+					text: `${he} lost a customer who refused to be seen with such a short bitch,`,
+					type: "cash",
+					effect: -1,
+				});
+				vignettes.push({
+					text: `${he} got repeat business from a hungry customer with a taste for short ${boy}s,`,
+					type: "cash",
+					effect: 2,
+				});
+			} else if (slave.height >= 230) {
+				vignettes.push({
+					text: `${he} lost a customer who was so intimidated by ${his} height that they couldn't get aroused,`,
+					type: "cash",
+					effect: -1,
+				});
+				vignettes.push({
+					text: `${he} got repeat business from a customer ecstatic to finally fuck someone taller than themself,`,
+					type: "cash",
+					effect: 1,
+				});
+			}
+		} else if (V.arcologies[0].FSPetiteAdmiration !== "unset") {
+			if (heightPass(slave)) {
+				vignettes.push({
+					text: `${he} got repeat business from a customer whose crotch was the perfect height for ${his} mouth,`,
+					type: "cash",
+					effect: 1,
+				});
+				vignettes.push({
+					text: `${he} got used as a foot rest by a customer while they enjoyed taller fair,`,
+					type: "health",
+					effect: -1,
+				});
+			}
+		}
 		if (V.arcologies[0].FSChattelReligionist !== "unset") {
 			if (slave.behavioralFlaw === "devout") {
 				vignettes.push({
@@ -3566,6 +3641,81 @@ window.GetVignette = function GetVignette(slave) {
 				});
 			}
 		}
+		if (V.arcologies[0].FSIntellectualDependency !== "unset") {
+			if (slave.energy < 70) {
+				vignettes.push({
+					text: `${he} was called a dead fish by an irate citizen unsatisfied by ${his} libido,`,
+					type: "trust",
+					effect: -1,
+				});
+			}
+			if (slave.intelligence + slave.intelligenceImplant < -50) {
+				vignettes.push({
+					text: `${he} was asked to compete in a trivia contest with several other airheads, ${he} was a hit with ${his} audience,`,
+					type: "rep",
+					effect: 1,
+				});
+			}
+		} else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") {
+			if (slave.intelligence + slave.intelligenceImplant > 95) {
+				vignettes.push({
+					text: `${he} spent a lot of time with a citizen that wanted a follow-up on their post-coital conversation,`,
+					type: "rep",
+					effect: 2,
+				});
+			} else if (slave.intelligence + slave.intelligenceImplant <= 10 && canTalk(slave)) {
+				vignettes.push({
+					text: `a citizen loudly complained about the idiotic statements that kept leaving ${his} mouth,`,
+					type: "rep",
+					effect: -1,
+				});
+			}
+			if (canTalk(slave) && slave.accent > 1) {
+				vignettes.push({
+					text: `${he} was publicly ridiculed for not being able to properly speak,`,
+					type: "rep",
+					effect: -1,
+				});
+			}
+		}
+		if (V.arcologies[0].FSStatuesqueGlorification !== "unset") {
+			if (!heightPass(slave)) {
+				vignettes.push({
+					text: `${he} upset a citizen who refused to be seen with such a short bitch,`,
+					type: "rep",
+					effect: -1,
+				});
+				vignettes.push({
+					text: `${he} gratified a citizen with a secret fetish for short ${boy}s,`,
+					type: "rep",
+					effect: 1,
+				});
+			} else if (slave.height >= 230) {
+				vignettes.push({
+					text: `${he} terrified a young citizen to the brink of tears with ${his} staggering height,`,
+					type: "rep",
+					effect: -1,
+				});
+				vignettes.push({
+					text: `${he} gratified a citizen ecstatic to finally fuck someone taller than themself,`,
+					type: "rep",
+					effect: 1,
+				});
+			}
+		} else if (V.arcologies[0].FSPetiteAdmiration !== "unset") {
+			if (heightPass(slave)) {
+				vignettes.push({
+					text: `${he} gratified a citizen whose crotch was the perfect height for ${his} mouth,`,
+					type: "rep",
+					effect: 1,
+				});
+				vignettes.push({
+					text: `a short customer used ${him} as a footstool to steal a kiss from a taller slut,`,
+					type: "health",
+					effect: -1,
+				});
+			}
+		}
 		if (V.arcologies[0].FSChattelReligionist !== "unset") {
 			if (slave.behavioralFlaw === "devout") {
 				vignettes.push({
diff --git a/src/uncategorized/costsReport.tw b/src/uncategorized/costsReport.tw
index 8d78b14c051..30bf3bc0aca 100644
--- a/src/uncategorized/costsReport.tw
+++ b/src/uncategorized/costsReport.tw
@@ -860,7 +860,13 @@ $researchLab.level > 0>>
 			@@.yellowgreen;<<print cashFormat($slaves[$i].pornFameSpending/$PCSlutContacts)>>@@
 			<<set _individualCosts += ($slaves[$i].pornFameSpending/$PCSlutContacts)>>
 		<</if>>
-	<</if>> <<set _total += Math.trunc(_individualCosts)>>
+	<</if>>
+	<<if (($slaves[$i].assignment == "be your Concubine" ||$slaves[$i].relationship == -3) && $arcologies[0].FSPetiteAdmirationLaw == 1)>>
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Big & Small Subsidy:</i>
+		@@.yellowgreen;<<print cashFormat(-200)>>@@
+		<<set _individualCosts -= 200>>
+	<</if>>
+	<<set _total += Math.trunc(_individualCosts)>>
 	<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__Total__:
 	@@.yellowgreen;<<print cashFormat(Math.trunc(_individualCosts))>>@@
 	<br>
diff --git a/src/uncategorized/costsWidgets.tw b/src/uncategorized/costsWidgets.tw
index f1176bc20ff..7a5bb8e29e9 100644
--- a/src/uncategorized/costsWidgets.tw
+++ b/src/uncategorized/costsWidgets.tw
@@ -400,7 +400,13 @@
 			@@.yellowgreen;<<print cashFormat($args[0].pornFameSpending/$PCSlutContacts)>>@@
 			<<set _individualCosts += ($args[0].pornFameSpending/$PCSlutContacts)>>
 		<</if>>
-	<</if>> <<set _total += Math.trunc(_individualCosts)>>
+	<</if>>
+	<<if (($args[0].assignment == "be your Concubine" ||$args[0].relationship == -3) && $arcologies[0].FSPetiteAdmirationLaw == 1)>>
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Big & Small Subsidy:</i>
+		@@.yellowgreen;<<print cashFormat(-200)>>@@
+		<<set _individualCosts -= 200>>
+	<</if>>
+	<<set _total += Math.trunc(_individualCosts)>>
 	<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__Predicted expense__: @@.red;<<print cashFormat(Math.trunc(_individualCosts))>>@@
 	<<if $assistantPower > 0>>
 		<<if $args[0].lastWeeksCashIncome > 0>>
diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw
index 18b20ea4964..b6ed59e170e 100644
--- a/src/uncategorized/longSlaveDescription.tw
+++ b/src/uncategorized/longSlaveDescription.tw
@@ -1675,6 +1675,27 @@ is
 	$His body is a perfect example of a subhuman who has accepted their place in society.
 <</if>>
 
+<<if $arcologies[0].FSIntellectualDependencyLawBeauty == 1>>
+	$He currently is graded
+	<<switch bimboScore($activeSlave)>>
+	<<case 6>>
+		an S-class
+	<<case 5>>
+		an A-class
+	<<case 4>>
+		a B-class
+	<<case 3>>
+		a C-class
+	<<case 2>>
+		a D-class
+	<<case 1>>
+		an E-class
+	<<default>>
+		an F-class
+	<</switch>>
+	bimbo by societal trends.
+<</if>>
+
 <<if ($showScores != 0)>>
 	<<set $FResult = FResult($activeSlave)>>
 	Currently, $he has an @@.pink;''attractiveness score'' of __''$beauty''__@@ and a @@.lightcoral;''sexual score'' of __''$FResult''__.@@
diff --git a/src/uncategorized/saGetMilked.tw b/src/uncategorized/saGetMilked.tw
index c2a93bfa688..1606670832d 100644
--- a/src/uncategorized/saGetMilked.tw
+++ b/src/uncategorized/saGetMilked.tw
@@ -668,6 +668,14 @@ gets milked this week.
 				<<set $arcologies[0].FSBodyPurist = Math.clamp($arcologies[0].FSBodyPurist += _fsGain,0,100)>>
 			<<case "Slimness Enthusiast">>
 				<<set $arcologies[0].FSSlimnessEnthusiast = Math.clamp($arcologies[0].FSSlimnessEnthusiast += _fsGain,0,100)>>
+			<<case "Slave Professionalism">>
+				<<set $arcologies[0].FSSlaveProfessionalism = Math.clamp($arcologies[0].FSSlaveProfessionalism += _fsGain,0,100)>>
+			<<case "Intellectual Dependency">>
+				<<set $arcologies[0].FSIntellectualDependency = Math.clamp($arcologies[0].FSIntellectualDependency += _fsGain,0,100)>>
+			<<case "Petite Admiration">>
+				<<set $arcologies[0].FSPetiteAdmiration = Math.clamp($arcologies[0].FSPetiteAdmiration += _fsGain,0,100)>>
+			<<case "Statuesque Glorification">>
+				<<set $arcologies[0].FSStatuesqueGlorification = Math.clamp($arcologies[0].FSStatuesqueGlorification += _fsGain,0,100)>>
 			<</switch>>
 		<</if>>
 	<</if>>
diff --git a/src/uncategorized/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw
index 08bcb29cfe6..1af1ddcd8f7 100644
--- a/src/uncategorized/saLongTermEffects.tw
+++ b/src/uncategorized/saLongTermEffects.tw
@@ -5313,6 +5313,24 @@
 		<</if>>
 	<</if>>
 
+	<<if $arcologies[0].FSPetiteAdmiration != "unset">>
+		<<if heightPass($slaves[$i])>>
+			Society @@.green;approves@@ of keeping a slave as short as $slaves[$i].slaveName is; $he furthers the fashion for shorter slaves.
+			<<= FutureSocieties.ChangePorn("PetiteAdmiration", 1)>>
+		<<elseif $slaves[$i].height >= 170>>
+			Society @@.red;frowns@@ at keeping a slave as tall as $slaves[$i].slaveName; $he hinders the fashion for shorter slaves.
+			<<= FutureSocieties.ChangePorn("PetiteAdmiration", -1)>>
+		<</if>>
+	<<elseif $arcologies[0].FSStatuesqueGlorification != "unset">>
+		<<if heightPass($slaves[$i])>>
+			Society @@.green;approves@@ of keeping a slave as tall as $slaves[$i].slaveName is; $he furthers the fashion for taller slaves.
+			<<= FutureSocieties.ChangePorn("StatuesqueGlorification", 1)>>
+		<<else>>
+			Society @@.red;frowns@@ at keeping someone as embarrassingly short as $slaves[$i].slaveName; $he hinders the fashion for taller slaves.
+			<<= FutureSocieties.ChangePorn("StatuesqueGlorification", -1)>>
+		<</if>>
+	<</if>>
+
 	<<if $arcologies[0].FSGenderRadicalist != "unset">>
 		<<if ($slaves[$i].balls > 0) && ($slaves[$i].dick > 0) && ($slaves[$i].hormoneBalance >= 100)>>
 			Society @@.green;approves@@ of your heavy hormonal feminization of $slaves[$i].slaveName; this advances public interest in <<= $girl>>s with soft little dicks.
@@ -5645,6 +5663,52 @@
 		<</for>>
 	<</if>>
 
+	<<if $arcologies[0].FSIntellectualDependency != "unset">>
+		<<if $arcologies[0].FSIntellectualDependencyLawBeauty == 1>>
+			<<if bimboScore($slaves[$i]) == 6>>
+				Society @@.green;is delighted@@ by $slaves[$i].slaveName's perfect bimbo appearance.
+				<<= FutureSocieties.ChangePorn("IntellectualDependency", 1)>>
+			<</if>>
+		<</if>>
+		<<if ($slaves[$i].intelligence+$slaves[$i].intelligenceImplant < -10)>>
+			Society @@.green;approves@@ of $slaves[$i].slaveName's dimwitted mind; this supports the idea that slaves should be entirely dependent on their owner.
+			<<= FutureSocieties.ChangePorn("IntellectualDependency", 1)>>
+		<<elseif ($slaves[$i].intelligence+$slaves[$i].intelligenceImplant > 10)>>
+			Society @@.red;disapproves@@ of $slaves[$i].slaveName's sharp mind; this holds back acceptance of the idea that slaves should be dumb and dependent.
+			<<= FutureSocieties.ChangePorn("IntellectualDependency", -1)>>
+		<</if>>
+		<<if ($slaves[$i].energy > 95)>>
+			Society @@.green;approves@@ of $slaves[$i].slaveName's bottomless lust, showing the public one more way a slave may be reliant on $his ownwer.
+			<<= FutureSocieties.ChangePorn("IntellectualDependency", 1)>>
+		<<elseif ($slaves[$i].energy <= 60)>>
+			Society @@.red;disapproves@@ of $slaves[$i].slaveName's restrained libido; to the public, this gives $him too much freedom to focus on things other than sex.
+			<<= FutureSocieties.ChangePorn("IntellectualDependency", -1)>>
+		<</if>>
+	<<elseif $arcologies[0].FSSlaveProfessionalism != "unset">>
+		<<if $slaves[$i].intelligence+$slaves[$i].intelligenceImplant > 95>>
+			Society @@.green;strongly approves@@ of $slaves[$i].slaveName's brilliance; $his sharp wit is the foundation of slave perfectionism.
+			<<= FutureSocieties.ChangePorn("SlaveProfessionalism", 1)>>
+		<<elseif $slaves[$i].intelligenceImplant >= 30>>
+			Society @@.green;approves@@ of $slaves[$i].slaveName's advanced education; this advances ideas about crafting the perfect slave.
+			<<= FutureSocieties.ChangePorn("SlaveProfessionalism", 1)>>
+		<<elseif $slaves[$i].intelligence < -10>>
+			Society @@.red;frowns@@ of keeping a slave as slow as $slaves[$i].slaveName; the lack of any effort to rectify $his lack of intelligence sets a bad example for other owners.
+			<<= FutureSocieties.ChangePorn("SlaveProfessionalism", -2)>>
+		<</if>>
+		<<if $slaves[$i].accent > 1 && canTalk($slaves[$i]) && ($slaves[$i].speechRules != "restrictive" || ($slaves[$i].speechRules == "restrictive" && $slaves[$i].devotion < 20 && $slaves[$i].trust >= -20))>>
+			Society @@.red;dislikes@@ $slaves[$i].slaveName's inability to properly speak $language or hold $his tongue; allowing such a flaw hinders the notion of proffesional slavery.
+			<<= FutureSocieties.ChangePorn("SlaveProfessionalism", -2)>>
+		<</if>>
+		<<if $slaves[$i].skill.entertainment + $slaves[$i].skill.whoring + $slaves[$i].skill.oral + $slaves[$i].skill.anal + $slaves[$i].skill.vaginal >= 400>>
+			Society @@.green;appreciates@@ a slave with skills of $slaves[$i].slaveName's caliber.
+			<<= FutureSocieties.ChangePorn("SlaveProfessionalism", 1)>>
+		<</if>>
+		<<if $slaves[$i].energy <= 40 && $slaves[$i].devotion > 50>>
+			Society @@.green;approves@@ of a $girl with a clear mind like $slaves[$i].slaveName; $he can pour all $his efforts into $his lover's pleasure without being lost in $his own.
+			<<= FutureSocieties.ChangePorn("SlaveProfessionalism", 1)>>
+		<</if>>
+	<</if>>
+
 	<<if $arcologies[0].FSBodyPurist != "unset">>
 		<<if ($slaves[$i].boobsImplant == 0) && ($slaves[$i].buttImplant == 0) && ($slaves[$i].lipsImplant == 0) && ($slaves[$i].bellyImplant == -1)>>
 			Society @@.green;approves@@ of $slaves[$i].slaveName's natural body; this supports the fashion for surgically untouched slaves.
-- 
GitLab