From 8e9d56f9a6073fde8c8f74d81e97126796856d16 Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Wed, 11 Dec 2019 22:27:03 -0500
Subject: [PATCH] Pregmod v3.1.4

---
 Changelog.txt                               |    5 +
 src/endWeek/saGetMilked.js                  | 1001 +++++++++++++++++++
 src/npc/descriptions/boobs/boobs.js         |    2 +-
 src/uncategorized/arcadeReport.tw           |    4 +-
 src/uncategorized/dairyReport.tw            |    4 +-
 src/uncategorized/fullReport.tw             |    4 +-
 src/uncategorized/masterSuiteReport.tw      |    4 +-
 src/uncategorized/saGetMilked.tw            |  683 -------------
 src/uncategorized/saRules.tw                |   20 +-
 src/uncategorized/servantsQuartersReport.tw |    4 +-
 10 files changed, 1027 insertions(+), 704 deletions(-)
 create mode 100644 src/endWeek/saGetMilked.js
 delete mode 100644 src/uncategorized/saGetMilked.tw

diff --git a/Changelog.txt b/Changelog.txt
index 5e6f588ec14..22f2ce1ac32 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -4,6 +4,11 @@ Pregmod
 
 	12/11/2019
 
+	4
+	-JS'd saGetMilked
+	-milk value slightly boosted with repopulation law
+	-tweaked femCum output upwards
+
 	3
 	-removed lingering isPlayerFertile()s
 	-fixes
diff --git a/src/endWeek/saGetMilked.js b/src/endWeek/saGetMilked.js
new file mode 100644
index 00000000000..958d008f60a
--- /dev/null
+++ b/src/endWeek/saGetMilked.js
@@ -0,0 +1,1001 @@
+window.saGetMilked = (function saGetMilked() {
+	"use strict";
+
+	let T;
+	let r;
+	let arcology;
+
+	// If these are moved out of the file, they must be set in it as well!
+	let milk;
+	let milkSale;
+	let cum;
+	let cumSale;
+	let fluid;
+	let fluidSale;
+
+	// could probably move these back or something
+	let hormones;
+	let cumHormones;
+	let implantEffect;
+
+	let he, him, his, hers, himself, girl, loli, He, His;
+
+	return saGetMilked;
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * @returns {string}
+	 */
+	function saGetMilked(slave) {
+		T = State.temporary;
+		arcology = V.arcologies[0];
+		milk = 0;
+		cum = 0;
+		fluid = 0;
+		r = ` `;
+		({
+			he, him, his, hers, himself, girl, He, His, loli
+		} = getPronouns(slave));
+
+		gatherStatistics(slave);
+		jobPreface(slave);
+		if (slave.lactation > 0) {
+			milkStatistics(slave);
+			harvestMilk(slave);
+			milkingEffects(slave);
+		}
+		// Limits penthouse milkers to milk only.
+		if (["be confined in the arcade", "get milked", "work in the dairy"].includes(slave.assignment)) {
+			if (slave.balls > 0) {
+				cumStatistics(slave);
+				harvestCum(slave);
+				cumEffects(slave);
+			}
+			if (slave.genes === "XX" && slave.prostate > 0 && slave.balls === 0) {
+				girlCumStatistics(slave);
+				harvestGirlCum(slave);
+			}
+		}
+		mentalEffects(slave);
+		if (V.showVignettes === 1 && (slave.assignment === "get milked" || slave.assignment === "work in the dairy")) {
+			assignmentVignette(slave);
+		}
+		if (slave.assignment === "work in the dairy") {
+			applyFSDecoration();
+		}
+
+		// These are a pain. They are usually called immediately after this function. Could possibly return an object instead.
+		V.cum = cum;
+		V.milk = milk;
+		V.milkSale = milkSale;
+		V.cumSale = cumSale;
+		V.fluid = fluid;
+		V.fluidSale = fluidSale;
+
+		return r;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function gatherStatistics(slave) {
+		/* Statistics gathering */
+		let facility;
+		if (slave.assignment === Job.DAIRY) {
+			facility = V.facility.dairy;
+		}
+		T.incomeStats = getSlaveStatisticData(slave, facility);
+		T.incomeStats.milk = 0;
+		T.incomeStats.cum = 0;
+		T.incomeStats.fluid = 0;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function jobPreface(slave) {
+		r += `gets milked this week.`;
+		if (V.dairy > 0 && V.dairyRestraintsSetting < 2) {
+			if ((V.universalRulesFacilityWork === 1 && V.slave.assignment === "get milked" && V.dairySpots > 0) || (slave.assignment === "work in the dairy")) {
+				if (slave.assignment === "get milked") {
+					r += ` Since there's extra space in ${V.dairyName}, ${he} spends most of ${his} milkings there.`;
+					V.dairySpots -= 1; // Would this need to be pulled for statistics gathering?
+				}
+				if (V.Milkmaid !== 0) {
+					r += ` While there, ${he} gets the benefit of ${V.Milkmaid.slaveName}'s `;
+					if (V.Milkmaid.physicalAge < 21) {
+						r += `youthful energy`;
+					} else {
+						r += `care`;
+					}
+					if (V.Milkmaid.skill.oral >= 100) {
+						r += ` and talented tongue`;
+					}
+					r += `.`;
+					if (slave.devotion < V.milkmaidDevotionThreshold) {
+						slave.devotion += V.milkmaidDevotionBonus;
+					}
+					if (slave.trust < V.milkmaidTrustThreshold) {
+						slave.trust += V.milkmaidTrustBonus;
+					}
+					if (slave.health < 100) {
+						slave.health += V.milkmaidHealthBonus;
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function harvestMilk(slave) {
+		 /* milk = milkAmount(slave); // Set it or else! */
+
+		r += ` ${He} produces from ${his} ${jsEither(["boobs", "breasts", "mammaries", "tits", "udders"])}, which have a combined volume of ${(slave.boobs * 2)} CCs; `;
+		if (slave.lactation === 1) {
+			r += `${he} is lactating naturally and produces `;
+			if (implantEffect >= .90) {
+				r += `a weak trickle of milk.`;
+			} else if (implantEffect >= .75) {
+				r += `a weak stream of milk.`;
+			} else {
+				r += `a healthy stream of milk.`;
+			}
+		} else if (slave.lactation === 2) {
+			r += `${he} is on lactation drugs and produces `;
+			if (implantEffect >= .90) {
+				r += `a steady flow of milk.`;
+			} else if (implantEffect >= .75) {
+				r += `strong bursts of milk.`;
+			} else {
+				r += `a river of milk.`;
+			}
+			if (slave.lactationAdaptation < 100) {
+				r += ` ${His} udders are forced to adapt to this unnatural productivity.`;
+				slave.lactationAdaptation += 1;
+			}
+			if (slave.curatives === 0 && slave.inflationType !== "curative") {
+				r += ` The stress of extreme milk production <span class="red">damages ${his} health.</span>`;
+				slave.health -= 3;
+			}
+		}
+
+		if (slave.boobsMilk > 0) {
+			r += ` ${He} was in need of a good milking, too.`;
+		}
+
+		if (slave.devotion > 50) {
+			r += ` ${He}'s such a happy cow that ${his} mental state has a positive impact on ${his} production.`;
+		} else if (slave.devotion < -50) {
+			r += ` ${He}'s such an unhappy cow that ${his} mental state has a negative impact on ${his} production.`;
+		}
+
+		if (slave.boobsImplant > 0) {
+			implantEffect = (slave.boobsImplant / slave.boobs);
+		}
+		if (slave.boobsImplant > 0) {
+			r += ` However, ${his} `;
+			if (implantEffect >= .90) {
+				r += `breast implants are ill-suited for`;
+			} else if (implantEffect >= .75) {
+				r += `breasts are almost entirely implant, greatly restricting ${his}`;
+			} else if (implantEffect >= .60) {
+				r += `breasts are mostly implant, restricting ${his}`;
+			} else if (implantEffect >= .45) {
+				r += `implants make up a considerable amount of ${his} breasts and greatly impede`;
+			} else if (implantEffect >= .30) {
+				r += `breast implants take up enough space to impede`;
+			} else if (implantEffect >= .10) {
+				r += `breast implants slightly impede`;
+			} else {
+				r += `breast implants cause a minor decrease in`;
+			}
+			r += ` milk production`;
+			if (implantEffect >= .90) {
+				r += `, given the lack of actual breast flesh`;
+			}
+			r += `.`;
+		}
+
+		hormones = (slave.hormoneBalance / 100);
+		if (slave.balls !== 0) {
+			hormones -= 1;
+		}
+		if (slave.ovaries !== 0 || slave.mpreg !== 0) {
+			hormones += 1;
+		}
+		if (hormones > 1) {
+			r += ` ${His} internal chemistry is perfectly suited to milk production.`;
+		} else if (hormones > 0) {
+			r += ` ${His} hormonal balance favors milk production.`;
+		} else if (hormones < 0) {
+			r += ` ${His} hormonal balance impedes milk production.`;
+		} else if (hormones < -1) {
+			r += ` ${His} internal chemistry is poorly suited to milk production.`;
+		}
+
+		if (slave.lactationAdaptation < 100) {
+			if (slave.assignment === "get milked" || slave.assignment === "work in the dairy") {
+				r += ` Living as a cow helps ${his} body and mind adapt to producing milk.`;
+				slave.lactationAdaptation += 1;
+			}
+		}
+
+		if (slave.preg > (slave.pregData.normalBirth / 8) && slave.pregKnown === 1) {
+			r += ` ${His} pregnancy helps ${his} body produce more milk naturally`;
+			if (slave.lactationAdaptation < 100) {
+				r += `, and also helps it adapt to milk production`;
+				slave.lactationAdaptation += 1;
+			}
+			r += `.`;
+		}
+
+		if (slave.health > 50) {
+			r += ` ${His} shining health helps ${him} really produce.`;
+		} else if (slave.health < -50) {
+			r += ` ${His} poor health impedes milk production.`;
+		}
+
+		if (slave.weight > 10) {
+			r += ` ${His} extra weight supports ${his} productivity.`;
+		} else if (slave.weight < -10) {
+			r += ` ${His} thinness hinders ${his} productivity.`;
+		}
+
+		if (slave.lactationAdaptation > 10) {
+			if (slave.lactationAdaptation > 50) {
+				r += ` ${His} body has adapted heavily to milk production, making ${him} extremely productive.`;
+			} else {
+				r += ` ${His} body has gotten used to producing milk, making ${him} very productive.`;
+			}
+		}
+
+		if (V.dairySlimMaintainUpgrade === 1) {
+			if (V.dairySlimMaintain === 1) {
+				if (slave.boobs <= 700) {
+					if (arcology.FSSlimnessEnthusiast > 80) {
+						r += ` Your arcology's milkers are optimized to extract maximum output from small breasted slaves, which substantially increases ${his} otherwise modest productivity.`;
+					} else if (arcology.FSSlimnessEnthusiast > 20) {
+						r += ` Your arcology's milkers have been carefully modified to more readily accommodate slaves with tiny breasts, which slightly mitigates ${his} less than ideal physiology for milk production.`;
+					}
+				}
+			}
+		}
+
+		r += ` As a result, $he produces ${milk} liters of milk over the week.`;
+
+		/*
+		slaves.counter.milk += milk;
+		V.milkTotal += milk;
+		T.incomeStats.milk = milk;
+		*/
+
+		// make sure milkSale is set here
+		if (arcology.FSPastoralistLaw === 1) {
+			r += ` Since breast milk is ${arcology.name}'s only legal dairy product, ${he} can scarcely be milked fast enough, and ${he} makes <span class="yellowgreen">${cashFormat(milkSale)}.</span>`;
+		} else if (arcology.FSPastoralist !== "unset") {
+			r += ` Since milk is fast becoming a major part of the ${arcology.name}'s dietary culture, ${his} milk is in demand, and ${he} makes <span class="yellowgreen">${cashFormat(milkSale)}.</span>`;
+		} else if (arcology.FSRepopulationFocusLaw === 1) {
+			r += ` Since the number of hungry babies outweighs the supply of available breasts in ${arcology.name}, ${his} milk is in demand, and ${he} makes <span class="yellowgreen">${cashFormat(milkSale)}.</span>`;
+		} else {
+			r += ` ${His} milk is sold for <span class="yellowgreen">${cashFormat(milkSale)}.</span>`;
+		}
+
+		/*
+		if (slave.assignment === "work in the dairy") {
+			cashX(milkSale, "milkedDairy", slave);
+		} else if (slave.assignment == "get milked") {
+			cashX(milkSale, "milked", slave);
+		} else {
+			cashX(milkSale, "extraMilk", slave);
+		}
+		T.incomeStats.income += milkSale;
+		*/
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function milkStatistics(slave) {
+		milk = milkAmount(slave);
+
+		if (V.dairySlimMaintainUpgrade === 1) {
+			if (V.dairySlimMaintain === 1) {
+				if (slave.boobs <= 700) {
+					if (arcology.FSSlimnessEnthusiast > 80) {
+						milk *= 1.5;
+					} else if (arcology.FSSlimnessEnthusiast > 20) {
+						milk *= 1.1;
+					}
+				}
+			}
+		}
+
+		if (slave.assignment === "work in the dairy") {
+			if (V.dairyFeedersUpgrade === 1) {
+				if (V.dairyFeedersSetting > 0) {
+					milk += (milk * (0.1 * (V.dairyFeedersUpgrade + V.dairyRestraintsSetting + ((50 - slave.physicalAge) / 20))));
+					if (slave.chem > 360) {
+						milk *= 0.6;
+					} else if (slave.chem > 100) {
+						milk *= ((600 - slave.chem) / 600);
+					}
+				}
+			}
+		} else if (slave.assignment === "be confined in the arcade") {
+			milk *= 0.5;
+		}
+
+		milk *= V.servantMilkersMultiplier;
+		milk = Math.trunc(milk);
+		if (milk < 1) {
+			milk = 1;
+		}
+
+		// Consider returning these if this function gets gutted
+		slave.counter.milk += milk;
+		V.milkTotal += milk;
+		T.incomeStats.milk = milk;
+
+		if (arcology.FSPastoralistLaw === 1) {
+			milkSale = (milk * (8 + Math.trunc(arcology.FSPastoralist / 30)));
+		} else if (arcology.FSPastoralist !== "unset") {
+			milkSale = (milk * (6 + Math.trunc(arcology.FSPastoralist / 30)));
+		} else if (arcology.FSRepopulationFocusLaw === 1) {
+			milkSale = (milk * (6 + Math.trunc(arcology.FSRepopulationFocus / 50)));
+		} else {
+			milkSale = (milk * 6);
+		}
+
+		// Consider returning these if this function gets gutted
+		if (slave.assignment === "work in the dairy") {
+			cashX(milkSale, "milkedDairy", slave);
+		} else if (slave.assignment === "get milked") {
+			cashX(milkSale, "milked", slave);
+		} else {
+			cashX(milkSale, "extraMilk", slave);
+		}
+		T.incomeStats.income += milkSale;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function milkingEffects(slave) {
+		if (slave.fetishKnown) {
+			if (slave.fetish === "boobs" || slave.energy > 95) {
+				r += ` Getting constantly milked is as good as sex, as far as ${he}'s concerned. <span class="hotpink">$He is happy</span> to have ${his} breasts receive so much attention.`;
+				slave.devotion += 1;
+				if (slave.need > 0) {
+					slave.need = 0;
+				}
+			}
+		}
+
+		if (slave.career === "a dairy cow" && slave.fetish !== "mindbroken" && slave.fuckdoll === 0) {
+			r += ` ${He} feels like <span class="hotpink">${he} was made to be milked,</span> <span class="mediumaquamarine">not that ${he}'d complain about such a good feeling.</span>`;
+			slave.devotion++;
+			slave.trust++;
+			if (slave.need > 0) {
+				slave.need = 0;
+			}
+		}
+
+		if (slave.nipples !== "huge") {
+			if (slave.nipples === "inverted") {
+				if (slave.fetish === "masochist" && slave.fetishKnown === 1) {
+					r += ` Having the milkers constantly haul ${his} inverted nipples out is <span class="hotpink">extremely uncomfortable; ${he} loves it.</span>`;
+					slave.devotion += 3;
+				} else {
+					r += ` Having the milkers constantly haul ${his} inverted nipples out is <span class="mediumorchid">extremely uncomfortable.</span>`;
+					slave.devotion -= 3;
+				}
+				if (jsRandom(1, 100) > 50) {
+					r += ` The constant suction <span class="lime">permanently protrudes them,</span> and `;
+					if (jsRandom(1, 2) === 1) {
+						r += `it turns out they're absolutely massive.`;
+						slave.nipples = "huge";
+					} else {
+						r += `it turns out they're nice and puffy.`;
+						slave.nipples = "puffy";
+					}
+				}
+			} else if (slave.nipples === "partially inverted") {
+				if (slave.fetish === "masochist" && slave.fetishKnown === 1) {
+					r += ` Having the milkers constantly haul ${his} inverted nipples out is <span class="hotpink">quite uncomfortable; ${he} loves it.</span>`;
+					slave.devotion += 1;
+				} else {
+					r += ` Having the milkers constantly haul ${his} inverted nipples out is <span class="mediumorchid">quite uncomfortable.</span>`;
+					slave.devotion -= 1;
+				}
+				if (jsRandom(1, 100) > 30) {
+					r += ` The constant suction <span class="lime">permanently protrudes them,</span> and `;
+					if (jsRandom(1, 2) === 1) {
+						r += `it turns out they're pretty cute.`;
+						slave.nipples = "cute";
+					} else {
+						r += `it turns out they're nice and puffy.`;
+						slave.nipples = "puffy";
+					}
+				}
+			} else if (slave.nipples === "puffy" && jsRandom(1, 100) > 90) {
+				r += ` Producing this river of milk <span class="lime">enlarges ${his} nipples:</span> they're now enormous.`;
+				slave.nipples = "huge";
+			} else if (slave.nipples === "cute" && jsRandom(1, 100) > 80) {
+				r += ` Producing this river of milk <span class="lime">makes ${his} nipples nice and puffy.</span>`;
+				slave.nipples = "puffy";
+			} else if (slave.nipples === "tiny") {
+				r += ` Producing this river of milk <span class="lime">makes ${his} nipples grow to a nice size.</span>`;
+				slave.nipples = "cute";
+			} else if (slave.areolae < 4 && jsRandom(1, 100) > (30 + (slave.areolae * 20))) {
+				if (slave.nipples === "fuckable") {
+					r += ` The constant suction around of $his nipples as their depths are drained of milk`;
+				} else {
+					r += ` Producing this river of milk`;
+				}
+				r += ` <span class="lime">broadens ${his} areolae.</span>`;
+				slave.areolae += 1;
+			}
+		}
+		slave.lactationDuration = 2;
+		if (slave.boobsMilk > 0) {
+			slave.boobs -= slave.boobsMilk;
+			slave.boobsMilk = 0;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function harvestCum(slave) {
+		V.cumSlaves += 1;
+		/* cum = cumAmount(slave); // Set it or else */
+
+		if (slave.lactation > 0) {
+			r += ` ${His} `;
+		} else {
+			r += ` ${slave.slaveName}'s `;
+		}
+
+		if (slave.dick > 0) {
+			if (slave.dick > 6) {
+				r += `inhuman`;
+			} else if (slave.dick > 5) {
+				r += `massive`;
+			} else if (slave.dick > 4) {
+				r += `big`;
+			} else if (slave.dick > 3) {
+				r += `sizable`;
+			} else if (slave.dick > 2) {
+				r += `moderate`;
+			} else if (slave.dick > 1) {
+				r += `little`;
+			} else {
+				r += `tiny`;
+			}
+			r += ` prick is`;
+			if (slave.lactation > 0) {
+				r += ` also`;
+			}
+			r += ` machine-milked`;
+		} else {
+			r += `butt is machine-fucked`;
+		}
+		r += ` to extract the cum from $his `;
+		if (slave.scrotum === 0) {
+			r += `invisible`;
+		} else {
+			if (slave.balls > 10) {
+				r += `hypertrophied`;
+			} else if (slave.balls >= 10) {
+				r += `inhuman`;
+			} else if (slave.balls >= 9) {
+				r += `titanic`;
+			} else if (slave.balls >= 8) {
+				r += `gigantic`;
+			} else if (slave.balls >= 7) {
+				r += `monstrous`;
+			} else if (slave.balls >= 6) {
+				r += `pendulous`;
+			} else if (slave.balls >= 5) {
+				r += `huge`;
+			} else if (slave.balls >= 4) {
+				r += `swinging`;
+			} else if (slave.balls >= 4) {
+				r += `big`;
+			} else if (slave.balls >= 3) {
+				r += `average`;
+			} else {
+				r += `pathetic`;
+			}
+		}
+		if (slave.drugs === "testicle enhancement") {
+			r += ` balls, relieving them of the excessive cum production caused by the testicle enhancement drugs.`;
+		} else if (slave.drugs === "hyper testicle enhancement") {
+			r += ` balls, relieving them of the excessive cum production caused by the hyper testicle enhancement drugs.`;
+		} else {
+			r += ` balls.`;
+		}
+
+		if (slave.diet === "cum production") {
+			r += ` ${His} diet is designed for cum production.`;
+		}
+
+		cumHormones = (slave.hormoneBalance / 50);
+		if (cumHormones < -1) {
+			r += ` ${His} internal chemistry is perfectly suited to cum production.`;
+		} else if (cumHormones < 0) {
+			r += ` ${His} hormonal balance favors cum production.`;
+		} else if (cumHormones > 0) {
+			r += ` ${His} hormonal balance impedes cum production.`;
+		} else if (cumHormones > 1) {
+			r += ` ${His} internal chemistry is poorly suited to cum production.`;
+		}
+
+		if (slave.scrotum === 0) {
+			r += ` ${He} does produce cum despite ${his} apparent ballslessness, but less than ${he} would if they weren't hidden inside ${him}.`;
+		}
+
+		if (slave.prostate > 0) {
+			if (slave.prostate > 2) {
+				r += ` ${His} heavily altered prostate greatly increases the volume of ${his} ejaculations and promotes excessive, watery semen production. This dilute ejaculate<span class="red">sells poorly</span> compared to normal cum.`;
+			} else if (slave.prostate > 1) {
+				r += ` ${His} hyperactive prostate increases the volume of ${his} ejaculations and promotes good semen production.`;
+			}
+		} else {
+			r += ` ${His} lack of a prostate reduces the health and volume of ${his} ejaculations.`;
+		}
+
+		if (slave.devotion > 50) {
+			r += ` ${He}'s so happy that ${his} mental state has a positive impact on ${his} semen production.`;
+		} else if (slave.devotion < -50) {
+			r += ` ${He}'s so unhappy that ${his} mental state has a negative impact on ${his} semen production.`;
+		}
+
+		if (slave.health > 50) {
+			r += ` ${His} shining health helps ${him} really produce.`;
+		} else if (slave.health < -50) {
+			r += ` ${His} poor health impedes semen production.`;
+		}
+
+		if (slave.vasectomy === 1) {
+			r += ` ${His} cum lacks the primary ingredient, sperm, thanks to ${his} vasectomy, <span class="red">considerably lowering the value</span> of ${his} ejaculate.`;
+		} else if (slave.ballType === "sterile") {
+			r += ` ${His} cum lacks vigor entirely, thanks to ${his} chemical castration, <span class="red">considerably lowering the value</span> of ${his} ejaculate.`;
+		}
+
+		/* Dairy rework cum half here */
+		if (slave.assignment === "work in the dairy") {
+			if (V.dairyStimulatorsUpgrade !== 1) {
+				if (V.Milkmaid !== 0) {
+					if (V.Milkmaid.dick > 4 && canAchieveErection(V.Milkmaid)) {
+						const milkmaidPronouns = getPronouns(V.Milkmaid);
+						r += ` ${V.Milkmaid.slaveName} sometimes stands in for the machines, which is a polite way of saying ${milkmaidPronouns.he} sometimes fucks ${slave.slaveName}'s ass to help ${him} cum.`;
+					}
+				}
+			}
+		}
+
+		/*
+		slave.counter.cum += cum;
+		V.cumTotal += cum;
+		T.incomeStats.cum = cum;
+		*/
+
+		if (arcology.FSPastoralist === "unset") {
+			r += ` ${He} produces ${cum} deciliters of cum over the week; the fresh ejaculate is sold for <span class="yellowgreen">${cashFormat(cumSale)}.</span>`;
+		} else if (arcology.FSPastoralistLaw === 1) {
+			r += ` ${He} produces ${cum} deciliters of cum over the week; the fresh ejaculate, which is in extremely high demand as one of ${arcology.name}'s few legal sources of animal protein, is sold for <span class="yellowgreen">${cashFormat(cumSale)}.</span>`;
+		} else {
+			r += ` ${He} produces ${cum} deciliters of cum over the week; the fresh ejaculate, which is in high demand given the new cultural preference for slave products, is sold for <span class="yellowgreen">${cashFormat(cumSale)}.</span>`;
+		}
+
+		/*
+		if (slave.assignment === "work in the dairy") {
+			cashX(cumSale, "milkedDairy", slave);
+		} else if (slave.assignment === "get milked") {
+			cashX(cumSale, "milked", slave);
+		} else {
+			cashX(cumSale, "extraMilk", slave);
+		}
+		T.incomeStats.income += cumSale;
+		*/
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function cumStatistics(slave) {
+		cum = cumAmount(slave);
+
+		/* Dairy rework cum half here */
+		if (slave.assignment === "work in the dairy") {
+			if (V.dairyStimulatorsUpgrade === 1) {
+				if (V.dairyStimulatorsSetting > 0) {
+					cum += (cum * (0.2 * (V.dairyStimulatorsSetting + V.dairyRestraintsSetting + Math.trunc((50 - slave.physicalAge) / 20))));
+				}
+				if (slave.chem > 360) {
+					cum *= 0.6;
+				} else if (slave.chem > 100) {
+					cum *= ((600 - slave.chem) / 600);
+				}
+			} else if (V.Milkmaid !== 0) {
+				if (V.Milkmaid.dick > 4 && canAchieveErection(V.Milkmaid)) {
+					cum *= 1.2;
+				}
+			}
+		} else if (slave.assignment === "be confined in the arcade") {
+			cum *= 0.5;
+		}
+
+		cum = Math.trunc(cum);
+		if (cum < 1) {
+			cum = 1;
+		}
+
+		// Consider returning these if this function gets gutted
+		slave.counter.cum += cum;
+		V.cumTotal += cum;
+		T.incomeStats.cum = cum;
+
+		if (arcology.FSPastoralist === "unset") {
+			cumSale = (cum * jsRandom(15, 25));
+		} else if (arcology.FSPastoralistLaw === 1) {
+			cumSale = (cum * (jsRandom(20, 40)));
+		} else {
+			cumSale = (cum * (jsRandom(10, 20) + Math.trunc(arcology.FSPastoralist / 10)));
+		}
+		if (slave.vasectomy === 1 || slave.ballType === "sterile") {
+			cumSale *= 0.2;
+		}
+		if (slave.prostate === 3) {
+			cumSale *= 0.5;
+		}
+
+		// Consider returning these if this function gets gutted
+		if (slave.assignment === "work in the dairy") {
+			cashX(cumSale, "milkedDairy", slave);
+		} else if (slave.assignment === "get milked") {
+			cashX(cumSale, "milked", slave);
+		} else {
+			cashX(cumSale, "extraMilk", slave);
+		}
+		T.incomeStats.income += cumSale;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function cumEffects(slave) {
+		if (slave.energy > 95) {
+			r += ` Getting ${his} dick constantly milked is almost as good as getting constant blowjobs as far as ${he}'s concerned. <span class="hotpink">${He} is happy</span> to have ${his} member receive so much attention.`;
+			slave.devotion += 1;
+		}
+
+		if (slave.need > 0) {
+			r += ` ${His} cock and balls are milked so thoroughly that ${he}'s involuntarily sexually sated, regardless of ${his} feelings and tastes.`;
+			slave.need = 0;
+		}
+
+		if (!canAchieveErection(slave)) {
+			r += ` Since ${he} cannot maintain an erection, ${he} requires <span class="gold">painful</span> and <span class="mediumorchid">degrading</span> anal electrostimulation to produce.`;
+			slave.devotion -= 2;
+			slave.trust -= 2;
+			if (slave.anus === 0) {
+				r += ` The electrostimulator <span class="lime">breaks in ${his} virgin asshole.</span>`;
+				slave.anus = 1;
+			}
+		} else if (slave.devotion <= 20) {
+			r += ` Since ${he}'s unaroused by ${his} situation, ${he} requires <span class="gold">painful</span> and <span class="mediumorchid">degrading</span> anal electrostimulation to produce.`;
+			slave.devotion -= 2;
+			slave.trust -= 2;
+			if (slave.anus === 0) {
+				r += ` The electrostimulator <span class="lime">breaks in ${his} virgin asshole.</span>`;
+				slave.anus = 1;
+			}
+		}
+
+		if (slave.balls < 3 && slave.ballType !== "sterile") {
+			if (slave.balls < 2) {
+				if (jsRandom(1, 100) > (70 + (slave.geneMods.NCS * 15))) {
+					r += ` Constant semen production and continual emptying and refilling <span class="lime">increases the size of ${his} tiny testicles.</span>`;
+					slave.balls += 1;
+				}
+			} else if (jsRandom(1, 100) > (90 + (slave.geneMods.NCS * 5))) {
+				r += ` Constant semen production and continual emptying and refilling <span class="lime">increases the size of ${his} small testicles.</span>`;
+				slave.balls += 1;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function harvestGirlCum(slave) {
+		/* fluid = ((slave.prostate * (slave.energy / 5)) + 1); // Set it or else! */
+		r += ` ${His} female prostate fluid is considered an exotic delicacy.`;
+		if (slave.vagina >= 0) {
+			if (slave.vaginaLube === 2) {
+				r += ` ${His} excessive vaginal secretions bolster the mix.`;
+			} else if (slave.vaginaLube === 1) {
+				r += ` ${His} natural vaginal secretions add to the mix.`;
+			}
+		}
+		if (slave.energy > 10) {
+			if (slave.health > 50) {
+				if (slave.energy > 90) {
+					r += ` As a nympho, ${he} has no trouble orgasming almost constantly.`;
+				}
+				r += ` ${His} shining health keeps ${his} juices flowing.`;
+			} else if (slave.health < -50) {
+				r += ` ${He} is so unwell, ${he} produces less than normal.`;
+			}
+		} else {
+			/* slave.energy <= 10 */
+			r += ` Unfortunately, ${he} is frigid and rarely reaches orgasm in spite of the intense automatic stimulation.`;
+		}
+
+		/*
+		T.incomeStats.fluid = fluid;
+		*/
+
+		// make sure fluidSale is set here
+		r += ` ${fluid} deciliters of uncommon ejaculate is gathered during ${his} milkings.`;
+		if (arcology.FSPastoralist !== "unset" && arcology.FSPastoralist > 30) {
+			r += ` Because of your arcology's cultural preferences, it comes with extra value.`;
+		}
+		r += ` It is sold for <span class="yellowgreen">${cashFormat(fluidSale)}.</span>`;
+
+		/*
+		if (slave.assignment === "work in the dairy") {
+			cashX(fluidSale, "milkedDairy", slave);
+		} else if (slave.assignment === "get milked") {
+			cashX(fluidSale, "milked", slave);
+		} else {
+			cashX(fluidSale, "extraMilk", slave);
+		}
+		T.incomeStats.income += fluidSale;
+		*/
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function girlCumStatistics(slave) {
+		fluid = ((slave.prostate * (slave.energy / 5)) + 1);
+		if (slave.vagina >= 0) {
+			if (slave.vaginaLube === 2) {
+				fluid *= 1.3;
+			} else if (slave.vaginaLube === 1) {
+				fluid *= 1.1;
+			}
+		}
+		if (slave.energy > 10) {
+			if (slave.health > 50) {
+				fluid *= (slave.health / 50);
+			} else if (slave.health < -50) {
+				fluid *= (1 + (slave.health / 50));
+			}
+		}
+		fluid = Math.trunc(fluid);
+		if (fluid < 1) {
+			fluid = 1;
+		}
+
+		// Consider returning these if this function gets gutted
+		T.incomeStats.fluid = fluid;
+
+		fluidSale = (fluid * jsRandom(40, 50));
+		if (arcology.FSPastoralist !== "unset" && arcology.FSPastoralist > 30) {
+			fluidSale = (Math.trunc(fluidSale*(1 + (arcology.FSPastoralist - 30) / 140))); /* fully accepted pastoralism gives +50% on the price*/
+		}
+
+		// Consider returning these if this function gets gutted
+		if (slave.assignment === "work in the dairy") {
+			cashX(fluidSale, "milkedDairy", slave);
+		} else if (slave.assignment === "get milked") {
+			cashX(fluidSale, "milked", slave);
+		} else {
+			cashX(fluidSale, "extraMilk", slave);
+		}
+		T.incomeStats.income += fluidSale;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function mentalEffects(slave) {
+		if (slave.assignment === "get milked" || (slave.assignment === "work in the dairy" && V.dairyRestraintsSetting < 2)) {
+			if (slave.behavioralQuirk === "fitness") {
+				r += ` ${slave.slaveName} <span class="hotpink">privately enjoys</span> the focus on ${his} health and fitness that comes with being a cow.`;
+				slave.devotion += 1;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * */
+	function assignmentVignette(slave) {
+		const vignette = GetVignette(slave);
+		const FuckResult = FResult(slave); // Got to be something better than this
+		r += ` __This week__ ${vignette.text} `;
+		if (vignette.type === "cash") {
+			const cashVign = Math.trunc(FuckResult * vignette.effect);
+			if (vignette.effect > 0) {
+				r += `<span class="yellowgreen">making you an extra ${cashFormat(cashVign)}.</span>`;
+			} else if (vignette.effect < 0) {
+				r += `<span class="red">losing you ${cashFormat(Math.abs(cashVign))}.</span>`;
+			} else {
+				r += `an incident without lasting effect.`;
+			}
+			if (slave.assignment === "work in the dairy") {
+				cashX(cashVign, "milkedDairy", slave);
+			} else if (slave.assignment === "get milked") {
+				cashX(cashVign, "milked", slave);
+			} else {
+				cashX(cashVign, "extraMilk", slave);
+			}
+			T.incomeStats.income += cashVign;
+		} else if (vignette.type === "devotion") {
+			if (vignette.effect > 0) {
+				if (slave.devotion > 50) {
+					r += `<span class="hotpink">increasing ${his} devotion to you.</span>`;
+				} else if (slave.devotion >= -20) {
+					r += `<span class="hotpink">increasing ${his} acceptance of you.</span>`;
+				} else if (slave.devotion >= -50) {
+					r += `<span class="hotpink">reducing ${his} dislike of you.</span>`;
+				} else {
+					r += `<span class="hotpink">reducing ${his} hatred of you.</span>`;
+				}
+			} else if (vignette.effect < 0) {
+				if (slave.devotion > 50) {
+					r += `<span class="mediumorchid">reducing ${his} devotion to you.</span>`;
+				} else if (slave.devotion >= -20) {
+					r += `<span class="mediumorchid">reducing ${his} acceptance of you.</span>`;
+				} else if (slave.devotion >= -50) {
+					r += `<span class="mediumorchid">increasing ${his} dislike of you.</span>`;
+				} else {
+					r += `<span class="mediumorchid">increasing ${his} hatred of you.</span>`;
+				}
+			} else {
+				r += `an incident without lasting effect.`;
+			}
+			slave.devotion += (1 * vignette.effect);
+		} else if (vignette.type === "trust") {
+			if (vignette.effect > 0) {
+				if (slave.trust > 20) {
+					r += `<span class="mediumaquamarine">increasing ${his} trust in you.</span>`;
+				} else if (slave.trust >= -50) {
+					r += `<span class="mediumaquamarine">reducing ${his} fear of you.</span>`;
+				} else {
+					r += `<span class="mediumaquamarine">reducing ${his} terror of you.</span>`;
+				}
+			} else if (vignette.effect < 0) {
+				if (slave.trust > 20) {
+					r += `<span class="gold">reducing ${his} trust in you.</span>`;
+				} else if (slave.trust >= -20) {
+					r += `<span class="gold">increasing ${his} fear of you.</span>`;
+				} else {
+					r += `<span class="gold">increasing ${his} terror of you.</span>`;
+				}
+			} else {
+				r += `an incident without lasting effect.`;
+			}
+			slave.trust += (1 * vignette.effect);
+		} else if (vignette.type === "health") {
+			if (vignette.effect > 0) {
+				r += `<span class="green">improving ${his} health.</span>`;
+			} else if (vignette.effect < 0) {
+				r += `<span class="red">affecting ${his} health.</span>`;
+			} else {
+				r += `an incident without lasting effect.`;
+			}
+			slave.health += (2 * vignette.effect);
+		} else {
+			if (vignette.effect > 0) {
+				r += `<span class="green">gaining you a bit of reputation.</span>`;
+			} else if (vignette.effect < 0) {
+				r += `<span class="red">losing you a bit of reputation.</span>`;
+			} else {
+				r += `an incident without lasting effect.`;
+			}
+			repX(Math.trunc(FuckResult * vignette.effect * 0.1), "vignette", slave);
+			T.incomeStats.rep += Math.trunc(FuckResult * vignette.effect * 0.1);
+		}
+	}
+
+	// FACILITY DECORATION IMPACTS
+	function applyFSDecoration() {
+		if (V.dairyDecoration !== "standard") {
+			let fsGain = Math.min(0.0001 * V.FSSingleSlaveRep * (milk + (5 * cum)), 1);
+			switch (V.dairyDecoration) {
+				case "Roman Revivalist":
+					arcology.FSRomanRevivalist = Math.clamp(arcology.FSRomanRevivalist += fsGain, 0, 100);
+					break;
+				case "Aztec Revivalist":
+					arcology.FSAztecRevivalist = Math.clamp(arcology.FSAztecRevivalist += fsGain, 0, 100);
+					break;
+				case "Egyptian Revivalist":
+					arcology.FSEgyptianRevivalist = Math.clamp(arcology.FSEgyptianRevivalist += fsGain, 0, 100);
+					break;
+				case "Edo Revivalist":
+					arcology.FSEdoRevivalist = Math.clamp(arcology.FSEdoRevivalist += fsGain, 0, 100);
+					break;
+				case "Arabian Revivalist":
+					arcology.FSArabianRevivalist = Math.clamp(arcology.FSArabianRevivalist += fsGain, 0, 100);
+					break;
+				case "Chinese Revivalist":
+					arcology.FSChineseRevivalist = Math.clamp(arcology.FSChineseRevivalist += fsGain, 0, 100);
+					break;
+				case "Chattel Religionist":
+					arcology.FSChattelReligionist = Math.clamp(arcology.FSChattelReligionist += fsGain, 0, 100);
+					break;
+				case "Degradationist":
+					arcology.FSDegradationist = Math.clamp(arcology.FSDegradationist += fsGain, 0, 100);
+					break;
+				case "Repopulation Focus":
+					arcology.FSRepopulationFocus = Math.clamp(arcology.FSRepopulationFocus += fsGain, 0, 100);
+					break;
+				case "Eugenics":
+					arcology.FSRestart = Math.clamp(arcology.FSRestart += fsGain, 0, 100);
+					break;
+				case "Asset Expansionist":
+					arcology.FSAssetExpansionist = Math.clamp(arcology.FSAssetExpansionist += fsGain, 0, 100);
+					break;
+				case "Transformation Fetishist":
+					arcology.FSTransformationFetishist = Math.clamp(arcology.FSTransformationFetishist += fsGain, 0, 100);
+					break;
+				case "Gender Radicalist":
+					arcology.FSGenderRadicalist = Math.clamp(arcology.FSGenderRadicalist += fsGain, 0, 100);
+					break;
+				case "Gender Fundamentalist":
+					arcology.FSGenderFundamentalist = Math.clamp(arcology.FSGenderFundamentalist += fsGain, 0, 100);
+					break;
+				case "Physical Idealist":
+					arcology.FSPhysicalIdealist = Math.clamp(arcology.FSPhysicalIdealist += fsGain, 0, 100);
+					break;
+				case "Hedonistic":
+					arcology.FSHedonisticDecadence = Math.clamp(arcology.FSHedonisticDecadence += fsGain, 0, 100);
+					break;
+				case "Supremacist":
+					arcology.FSSupremacist = Math.clamp(arcology.FSSupremacist += fsGain, 0, 100);
+					break;
+				case "Subjugationist":
+					arcology.FSSubjugationist = Math.clamp(arcology.FSSubjugationist += fsGain, 0, 100);
+					break;
+				case "Paternalist":
+					arcology.FSPaternalist = Math.clamp(arcology.FSPaternalist += fsGain, 0, 100);
+					break;
+				case "Pastoralist":
+					arcology.FSPastoralist = Math.clamp(arcology.FSPastoralist += fsGain, 0, 100);
+					break;
+				case "Maturity Preferentialist":
+					arcology.FSMaturityPreferentialist = Math.clamp(arcology.FSMaturityPreferentialist += fsGain, 0, 100);
+					break;
+				case "Youth Preferentialist":
+					arcology.FSYouthPreferentialist = Math.clamp(arcology.FSYouthPreferentialist += fsGain, 0, 100);
+					break;
+				case "Body Purist":
+					arcology.FSBodyPurist = Math.clamp(arcology.FSBodyPurist += fsGain, 0, 100);
+					break;
+				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/npc/descriptions/boobs/boobs.js b/src/npc/descriptions/boobs/boobs.js
index 13335d64dcd..f0e3d2c8375 100644
--- a/src/npc/descriptions/boobs/boobs.js
+++ b/src/npc/descriptions/boobs/boobs.js
@@ -1566,7 +1566,7 @@ App.Desc.nipples = function(slave, pronouns) {
 				r += `huge ${nipColor} nipples fill the milkers completely.`;
 				break;
 			case "fuckable":
-				r += `fuckable ${nipColor} nipples leave nothing for the milkers, and the suction is drawing a lot of boob in with them.`;
+				r += `fuckable ${nipColor} nipples are filled by special milkers that extend into ${his} breasts.`;
 				break;
 			default:
 				r += `${nipColor} nipples are being tugged at by the milkers' powerful suction.`;
diff --git a/src/uncategorized/arcadeReport.tw b/src/uncategorized/arcadeReport.tw
index a5968a8e7a1..ce7c8ad38fc 100644
--- a/src/uncategorized/arcadeReport.tw
+++ b/src/uncategorized/arcadeReport.tw
@@ -98,9 +98,9 @@
 		<<elseif ($slaves[$i].lactation > 0) || ($slaves[$i].balls > 0)>>
 			<<set _oldCash = $cash>>
 			<<if $showEWD != 0>>
-				<br>&nbsp;&nbsp;&nbsp;&nbsp;$He <<include "SA get milked">>
+				<br>&nbsp;&nbsp;&nbsp;&nbsp;$He <<= saGetMilked($slaves[$i])>>
 			<<else>>
-				<<silently>><<include "SA get milked">><</silently>>
+				<<run saGetMilked($slaves[$i])>>
 			<</if>>
 			<<set _milkprofits += $cash-_oldCash>>
 			<<set _growth = 0>>
diff --git a/src/uncategorized/dairyReport.tw b/src/uncategorized/dairyReport.tw
index bd4e3d9f469..dd82da89af0 100644
--- a/src/uncategorized/dairyReport.tw
+++ b/src/uncategorized/dairyReport.tw
@@ -396,7 +396,7 @@
 		<<else>>
 			is serving as a cow in $dairyName.
 		<</if>>
-		<br>&nbsp;&nbsp;&nbsp;&nbsp;$He <<include "SA get milked">>
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;$He <<= saGetMilked($slaves[$i])>>
 		<br>&nbsp;&nbsp;&nbsp;
 		<<include "SA rules">>
 		<<include "SA diet">>
@@ -408,7 +408,7 @@
 	<<else>>
 		<<silently>>
 		<<include "SA chooses own job">>
-		<<include "SA get milked">>
+		<<run saGetMilked($slaves[$i])>>
 		<<include "SA rules">>
 		<<include "SA diet">>
 		<<include "SA long term effects">>
diff --git a/src/uncategorized/fullReport.tw b/src/uncategorized/fullReport.tw
index 70e785c7c39..3a7d29884a2 100644
--- a/src/uncategorized/fullReport.tw
+++ b/src/uncategorized/fullReport.tw
@@ -21,7 +21,7 @@
 	<<= saWorkAGloryHole($slaves[$i])>>
 <<case "get milked">>
 	<<set $servantMilkersMultiplier = 1>>
-	<<include "SA get milked">>
+	<<= saGetMilked($slaves[$i])>>
 <<case "take classes">>
 	<<= saTakeClasses($slaves[$i])>>
 <<case "please you">>
@@ -52,7 +52,7 @@
 		keeps $him busy, but $he <<if $slaves[$i].devotion > 20>><<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses<<elseif $slaves[$i].devotion >= -20>>is required to use<<else>>is forced to use<</if>> the penthouse milkers whenever $he can,
 		<<set $servantMilkersMultiplier = 0.25>>
 	<</if>>
-	<<silently>><<include "SA get milked">><</silently>>
+	<<run saGetMilked($slaves[$i])>>
 	<<set $servantMilkersMultiplier = 1>>
 	and $he gives $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 <</if>>
diff --git a/src/uncategorized/masterSuiteReport.tw b/src/uncategorized/masterSuiteReport.tw
index efe2babd177..02824322bdb 100644
--- a/src/uncategorized/masterSuiteReport.tw
+++ b/src/uncategorized/masterSuiteReport.tw
@@ -370,7 +370,7 @@
 			<<if $servantMilkers == 1 && $slaves[$i].lactation > 0 && $slaves[$i].fuckdoll == 0 && $slaves[$i].fetish != "mindbroken" && canWalk($slaves[$i]) && $slaves[$i].intelligence+$slaves[$i].intelligenceImplant >= -90>>
 				When $his breasts begin to feel full and you aren't around, $he avails $himself to the penthouse milkers and
 				<<set $servantMilkersMultiplier = 0.25>>
-				<<silently>><<include "SA get milked">><</silently>>
+				<<run saGetMilked($slaves[$i])>>
 				<<set $servantMilkersMultiplier = 1>>
 				gives $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 			<</if>>
@@ -389,7 +389,7 @@
 			<<include "SA please you">>
 			<<if $servantMilkers == 1 && $slaves[$i].lactation > 0 && $slaves[$i].fuckdoll == 0 && $slaves[$i].fetish != "mindbroken" && canWalk($slaves[$i]) && $slaves[$i].intelligence+$slaves[$i].intelligenceImplant >= -90>>
 				<<set $servantMilkersMultiplier = 0.25>>
-				<<silently>><<include "SA get milked">><</silently>>
+				<<run saGetMilked($slaves[$i])>>
 				<<set $servantMilkersMultiplier = 1>>
 			<</if>>
 			<<set _chosenClothes = saChoosesOwnClothes($slaves[$i])>>
diff --git a/src/uncategorized/saGetMilked.tw b/src/uncategorized/saGetMilked.tw
deleted file mode 100644
index 1606670832d..00000000000
--- a/src/uncategorized/saGetMilked.tw
+++ /dev/null
@@ -1,683 +0,0 @@
-:: SA get milked [nobr]
-
-<!-- Statistics gathering -->
-<<set _incomeStats = getSlaveStatisticData($slaves[$i], $slaves[$i].assignment === Job.DAIRY ? $facility.dairy : undefined)>>
-<<set _incomeStats.milk = 0; _incomeStats.cum = 0; _incomeStats.fluid = 0>>
-
-<<if ndef $slaves[$i].lactationAdaptation>>
-	<<set $slaves[$i].lactationAdaptation = 0>>
-<</if>>
-
-<<set $milk = 0, $cum = 0>>
-
-gets milked this week.
-<<if $dairy > 0 && $dairyRestraintsSetting < 2>>
-	<<if (($universalRulesFacilityWork == 1) && ($slaves[$i].assignment == "get milked") && ($dairySpots > 0)) || ($slaves[$i].assignment == "work in the dairy")>>
-		<<if ($slaves[$i].assignment == "get milked")>>
-			Since there's extra space in $dairyName, $he spends most of $his milkings there.
-			<<set $dairySpots -= 1>>
-		<</if>>
-		<<if ($Milkmaid != 0)>>
-			While there, $he gets the benefit of $Milkmaid.slaveName's <<if ($Milkmaid.physicalAge < 21)>>youthful energy<<else>>care<</if>><<if ($Milkmaid.skill.oral >= 100)>> and talented tongue<</if>>.
-			<<if ($slaves[$i].devotion < $milkmaidDevotionThreshold)>>
-				<<set $slaves[$i].devotion += $milkmaidDevotionBonus>>
-			<</if>>
-			<<if ($slaves[$i].trust < $milkmaidTrustThreshold)>>
-				<<set $slaves[$i].trust += $milkmaidTrustBonus>>
-			<</if>>
-			<<if ($slaves[$i].health < 100)>>
-				<<set $slaves[$i].health += $milkmaidHealthBonus>>
-			<</if>>
-		<</if>>
-	<</if>>
-<</if>>
-
-<<if $slaves[$i].lactation > 0>>
-
-	<<set $milk = milkAmount($slaves[$i])>>
-
-	$He produces from $his <<print either("boobs", "breasts", "mammaries", "tits", "udders")>>, which have a combined volume of <<print $slaves[$i].boobs*2>> CCs;
-	<<if ($slaves[$i].boobsImplant > 0)>>
-		<<set _implantEffect = $slaves[$i].boobsImplant/$slaves[$i].boobs>>
-	<</if>>
-	<<if ($slaves[$i].lactation == 1)>>
-		$he is lactating naturally and produces
-		<<if _implantEffect >= .90>>
-			a weak trickle of milk.
-		<<elseif _implantEffect >= .75>>
-			a weak stream of milk.
-		<<else>>
-			a healthy stream of milk.
-		<</if>>
-	<<elseif ($slaves[$i].lactation == 2)>>
-		$he is on lactation drugs and produces
-		<<if _implantEffect >= .90>>
-			a steady flow of milk.
-		<<elseif _implantEffect >= .75>>
-			strong bursts of milk.
-		<<else>>
-			a river of milk.
-		<</if>>
-		<<if $slaves[$i].lactationAdaptation < 100>>
-			$His udders are forced to adapt to this unnatural productivity.
-			<<set $slaves[$i].lactationAdaptation += 1>>
-		<</if>>
-		<<if $slaves[$i].curatives == 0 && $slaves[$i].inflationType != "curative">>
-			The stress of extreme milk production @@.red;damages $his health.@@
-			<<set $slaves[$i].health -= 3>>
-		<</if>>
-	<</if>>
-
-	<<if ($slaves[$i].boobsMilk > 0)>>
-		$He was in need of a good milking, too.
-	<</if>>
-
-	<<if ($slaves[$i].devotion > 50)>>
-		$He's such a happy cow that $his mental state has a positive impact on $his production.
-	<<elseif ($slaves[$i].devotion < -50)>>
-		$He's such an unhappy cow that $his mental state has a negative impact on $his production.
-	<</if>>
-
-	<<if ($slaves[$i].boobsImplant > 0)>>
-		However, $his
-		<<if _implantEffect >= .90>>
-			breast implants are ill-suited for
-		<<elseif _implantEffect >= .75>>
-			breasts are almost entirely implant, greatly restricting $his
-		<<elseif _implantEffect >= .60>>
-			breasts are mostly implant, restricting $his
-		<<elseif _implantEffect >= .45>>
-			implants make up a considerable amount of $his breasts and greatly impede
-		<<elseif _implantEffect >= .30>>
-			breast implants take up enough space to impede
-		<<elseif _implantEffect >= .10>>
-			breast implants slightly impede
-		<<else>>
-			breast implants cause a minor decrease in
-		<</if>>
-		milk production<<if _implantEffect >= .90>>, given the lack of actual breast flesh<</if>>.
-	<</if>>
-
-	<<set $hormones = $slaves[$i].hormoneBalance/100>>
-	<<if ($slaves[$i].balls != 0)>>
-		<<set $hormones -= 1>>
-	<</if>>
-	<<if (($slaves[$i].ovaries != 0) || ($slaves[$i].mpreg != 0))>>
-		<<set $hormones += 1>>
-	<</if>>
-	<<if ($hormones > 1)>>
-		$His internal chemistry is perfectly suited to milk production.
-	<<elseif ($hormones > 0)>>
-		$His hormonal balance favors milk production.
-	<<elseif ($hormones < 0)>>
-		$His hormonal balance impedes milk production.
-	<<elseif ($hormones < -1)>>
-		$His internal chemistry is poorly suited to milk production.
-	<</if>>
-
-	<<if $slaves[$i].lactationAdaptation < 100>>
-		<<if ($slaves[$i].assignment == "get milked") || ($slaves[$i].assignment == "work in the dairy")>>
-			Living as a cow helps $his body and mind adapt to producing milk.
-			<<set $slaves[$i].lactationAdaptation += 1>>
-		<</if>>
-	<</if>>
-
-	<<if ($slaves[$i].preg > $slaves[$i].pregData.normalBirth/8) && ($slaves[$i].pregKnown == 1)>>
-		$His pregnancy helps $his body produce more milk naturally<<if $slaves[$i].lactationAdaptation < 100>>, and also helps it adapt to milk production<<set $slaves[$i].lactationAdaptation += 1>><</if>>.
-	<</if>>
-
-	<<if ($slaves[$i].health > 50)>>
-		$His shining health helps $him really produce.
-	<<elseif ($slaves[$i].health < -50)>>
-		$His poor health impedes milk production.
-	<</if>>
-
-	<<if ($slaves[$i].weight > 10)>>
-		$His extra weight supports $his productivity.
-	<<elseif ($slaves[$i].weight < -10)>>
-		$His thinness hinders $his productivity.
-	<</if>>
-
-	<<if $slaves[$i].lactationAdaptation > 10>>
-		<<if $slaves[$i].lactationAdaptation > 50>>
-			$His body has adapted heavily to milk production, making $him extremely productive.
-		<<else>>
-			$His body has gotten used to producing milk, making $him very productive.
-		<</if>>
-	<</if>>
-
-	<<if $dairySlimMaintainUpgrade == 1>>
-		<<if $dairySlimMaintain == 1>>
-			<<if ($slaves[$i].boobs <= 700)>>
-				<<if ($arcologies[0].FSSlimnessEnthusiast > 80)>>
-					Your arcology's milkers are optimized to extract maximum output from small breasted slaves, which substantially increases $his otherwise modest productivity.
-					<<set $milk *= 1.5>>
-				<<elseif ($arcologies[0].FSSlimnessEnthusiast > 20)>>
-					Your arcology's milkers have been carefully modified to more readily accommodate slaves with tiny breasts, which slightly mitigates $his less than ideal physiology for milk production.
-					<<set $milk *= 1.1>>
-				<</if>>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	/* This is going to be where the dairy overhaul takes place (milk half) */
-	<<if ($slaves[$i].assignment == "work in the dairy")>>
-		<<if ($dairyFeedersUpgrade == 1)>>
-			<<if ($dairyFeedersSetting > 0)>>
-				<<set $milk += $milk*(0.1*($dairyFeedersUpgrade+$dairyRestraintsSetting+((50-$slaves[$i].physicalAge)/20)))>>
-				<<if ($slaves[$i].chem > 360)>>
-					<<set $milk *= 0.6>>
-				<<elseif ($slaves[$i].chem > 100)>>
-					<<set $milk *= ((600-$slaves[$i].chem)/600)>>
-				<</if>>
-			<</if>>
-		<</if>>
-	<<elseif ($slaves[$i].assignment == "be confined in the arcade")>>
-		<<set $milk *= 0.5>>
-	<</if>>
-
-	<<set $milk *= $servantMilkersMultiplier>>
-
-	<<set $milk = Math.trunc($milk)>>
-	<<if $milk < 1>>
-		<<set $milk = 1>>
-	<</if>>
-	<<set $slaves[$i].counter.milk += $milk>>
-	<<set $milkTotal += $milk>>
-
-	As a result, $he produces $milk liters of milk over the week.
-	<<set _incomeStats.milk = $milk>>
-
-	<<if ($arcologies[0].FSPastoralistLaw == 1)>>
-		<<set $milkSale = $milk*(8+Math.trunc($arcologies[0].FSPastoralist/30))>>
-		Since breast milk is $arcologies[0].name's only legal dairy product, $he can scarcely be milked fast enough, and $he makes @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
-	<<elseif ($arcologies[0].FSPastoralist != "unset")>>
-		<<set $milkSale = $milk*(6+Math.trunc($arcologies[0].FSPastoralist/30))>>
-		Since milk is fast becoming a major part of the $arcologies[0].name's dietary culture, $his milk is in demand, and $he makes @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
-	<<else>>
-		<<set $milkSale = $milk*6>>
-		$His milk is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
-	<</if>>
-	<<if $slaves[$i].assignment == "work in the dairy">>
-		<<run cashX($milkSale, "milkedDairy", $slaves[$i])>>
-	<<elseif $slaves[$i].assignment == "get milked">>
-		<<run cashX($milkSale, "milked", $slaves[$i])>>
-	<<else>>
-		<<run cashX($milkSale, "extraMilk", $slaves[$i])>>
-	<</if>>
-
-	<<set _incomeStats.income += $milkSale>>
-
-	<<if $slaves[$i].fetishKnown>>
-		<<if ($slaves[$i].fetish == "boobs") || ($slaves[$i].energy > 95)>>
-			Getting constantly milked is as good as sex, as far as $he's concerned. @@.hotpink;$He is happy@@ to have $his breasts receive so much attention.
-			<<set $slaves[$i].devotion += 1>>
-			<<if $slaves[$i].need>><<set $slaves[$i].need = 0>><</if>>
-		<</if>>
-	<</if>>
-
-	<<if $slaves[$i].career == "a dairy cow" && $slaves[$i].fetish != "mindbroken" && $slaves[$i].fuckdoll == 0>>
-		$He feels like @@.hotpink;$he was made to be milked,@@ @@.mediumaquamarine;not that $he'd complain about such a good feeling.@@
-		<<set $slaves[$i].devotion++, $slaves[$i].trust++>>
-		<<if $slaves[$i].need>><<set $slaves[$i].need = 0>><</if>>
-	<</if>>
-
-	<<if ($slaves[$i].nipples != "huge")>>
-		<<if ($slaves[$i].nipples == "inverted")>>
-			<<if ($slaves[$i].fetish == "masochist") && ($slaves[$i].fetishKnown == 1)>>
-				Having the milkers constantly haul $his inverted nipples out is @@.hotpink;extremely uncomfortable; $he loves it.@@
-				<<set $slaves[$i].devotion += 3>>
-			<<else>>
-				Having the milkers constantly haul $his inverted nipples out is @@.mediumorchid;extremely uncomfortable.@@
-				<<set $slaves[$i].devotion -= 3>>
-			<</if>>
-			<<if (random(1,100) > 50)>>
-				The constant suction @@.lime;permanently protrudes them,@@ and
-				<<if (random(1,2) == 1)>>
-					it turns out they're absolutely massive.
-					<<set $slaves[$i].nipples = "huge">>
-				<<else>>
-					it turns out they're nice and puffy.
-					<<set $slaves[$i].nipples = "puffy">>
-				<</if>>
-			<</if>>
-		<<elseif ($slaves[$i].nipples == "partially inverted")>>
-			<<if ($slaves[$i].fetish == "masochist") && ($slaves[$i].fetishKnown == 1)>>
-				Having the milkers constantly haul $his inverted nipples out is @@.hotpink;quite uncomfortable; $he loves it.@@
-				<<set $slaves[$i].devotion += 1>>
-			<<else>>
-				Having the milkers constantly haul $his inverted nipples out is @@.mediumorchid;quite uncomfortable.@@
-				<<set $slaves[$i].devotion -= 1>>
-			<</if>>
-			<<if (random(1,100) > 30)>>
-				The constant suction @@.lime;permanently protrudes them,@@ and
-				<<if (random(1,2) == 1)>>
-					it turns out they're pretty cute.
-					<<set $slaves[$i].nipples = "cute">>
-				<<else>>
-					it turns out they're nice and puffy.
-					<<set $slaves[$i].nipples = "puffy">>
-				<</if>>
-			<</if>>
-		<<elseif ($slaves[$i].nipples == "puffy") && (random(1,100) > 90)>>
-			Producing this river of milk @@.lime;enlarges $his nipples:@@ they're now enormous.
-			<<set $slaves[$i].nipples = "huge">>
-		<<elseif ($slaves[$i].nipples == "cute") && (random(1,100) > 80)>>
-			Producing this river of milk @@.lime;makes $his nipples nice and puffy.@@
-			<<set $slaves[$i].nipples = "puffy">>
-		<<elseif ($slaves[$i].nipples == "tiny")>>
-			Producing this river of milk @@.lime;makes $his nipples grow to a nice size.@@
-			<<set $slaves[$i].nipples = "cute">>
-		<<elseif ($slaves[$i].areolae < 4) && (random(1,100) > 30+($slaves[$i].areolae*20))>>
-			Producing this river of milk @@.lime;broadens $his areolae.@@
-			<<set $slaves[$i].areolae += 1>>
-		<</if>>
-	<</if>>
-	<<set $slaves[$i].lactationDuration = 2>>
-	<<if $slaves[$i].boobsMilk > 0>>
-		<<set $slaves[$i].boobs -= $slaves[$i].boobsMilk, $slaves[$i].boobsMilk = 0>>
-	<</if>>
-
-<</if>> /* CLOSES BREAST MILKING */
-
-<<if ["be confined in the arcade", "get milked", "work in the dairy"].includes($slaves[$i].assignment)>> /* prevents penthouse milkers from overstepping their boundaries */
-
-	<<if ($slaves[$i].balls > 0)>>
-
-		<<set $cumSlaves += 1>>
-		<<set $cum = cumAmount($slaves[$i])>>
-
-		<<if $slaves[$i].lactation > 0>>
-			$His
-		<<else>>
-			$slaves[$i].slaveName's
-		<</if>>
-
-		<<if $slaves[$i].dick > 0>>
-			<<if ($slaves[$i].dick > 6)>>
-				inhuman
-			<<elseif ($slaves[$i].dick > 5)>>
-				massive
-			<<elseif ($slaves[$i].dick > 4)>>
-				big
-			<<elseif ($slaves[$i].dick > 3)>>
-				sizable
-			<<elseif ($slaves[$i].dick > 2)>>
-				moderate
-			<<elseif ($slaves[$i].dick > 1)>>
-				little
-			<<else>>
-				tiny
-			<</if>>
-			prick is
-			<<if $slaves[$i].lactation > 0>>
-				also
-			<</if>>
-			machine-milked
-		<<else>>
-			butt is machine-fucked
-		<</if>>
-		to extract the cum from $his
-		<<if ($slaves[$i].scrotum == 0)>>
-			invisible
-		<<else>>
-			<<switch $slaves[$i].balls>>
-			<<case 10>>inhuman
-			<<case 9>>titanic
-			<<case 8>>gigantic
-			<<case 7>>monstrous
-			<<case 6>>huge
-			<<case 5>>pendulous
-			<<case 4>>swinging
-			<<case 3>>big
-			<<case 2>>average
-			<<case 1>>pathetic
-			<<default>>hypertrophied
-			<</switch>>
-		<</if>>
-		<<if $slaves[$i].drugs == "testicle enhancement">>
-			balls, relieving them of the excessive cum production caused by the testicle enhancement drugs.
-		<<elseif $slaves[$i].drugs == "hyper testicle enhancement">>
-			balls, relieving them of the excessive cum production caused by the hyper testicle enhancement drugs.
-		<<else>>
-			balls.
-		<</if>>
-
-		<<if $slaves[$i].diet == "cum production">>
-			$His diet is designed for cum production.
-		<</if>>
-
-		<<set $hormones = $slaves[$i].hormoneBalance/50>>
-		<<if $hormones < -1>>
-			$His internal chemistry is perfectly suited to cum production.
-		<<elseif $hormones < 0>>
-			$His hormonal balance favors cum production.
-		<<elseif $hormones > 0>>
-			$His hormonal balance impedes cum production.
-		<<elseif $hormones > 1>>
-			$His internal chemistry is poorly suited to cum production.
-		<</if>>
-
-		<<if $slaves[$i].scrotum == 0>>
-			$He does produce cum despite $his apparent ballslessness, but less than $he would if they weren't hidden inside $him.
-		<</if>>
-
-		<<if $slaves[$i].prostate>>
-			<<if $slaves[$i].prostate > 2>>
-				$His heavily altered prostate greatly increases the volume of $his ejaculations and promotes excessive, watery semen production. This dilute ejaculate @@.red;sells poorly@@ compared to normal cum.
-			<<elseif $slaves[$i].prostate > 1>>
-				$His hyperactive prostate increases the volume of $his ejaculations and promotes good semen production.
-			<</if>>
-		<<else>>
-			$His lack of a prostate reduces the health and volume of $his ejaculations.
-		<</if>>
-
-		<<if ($slaves[$i].devotion > 50)>>
-			$He's so happy that $his mental state has a positive impact on $his semen production.
-		<<elseif ($slaves[$i].devotion < -50)>>
-			$He's so unhappy that $his mental state has a negative impact on $his semen production.
-		<</if>>
-
-		<<if ($slaves[$i].health > 50)>>
-			$His shining health helps $him really produce.
-		<<elseif ($slaves[$i].health < -50)>>
-			$His poor health impedes semen production.
-		<</if>>
-
-		<<if $slaves[$i].vasectomy == 1>>
-			$His cum lacks the primary ingredient, sperm, thanks to $his vasectomy, @@.red;considerably lowering the value@@ of $his ejaculate.
-		<<elseif $slaves[$i].ballType == "sterile">>
-			$His cum lacks vigor entirely, thanks to $his chemical castration, @@.red;considerably lowering the value@@ of $his ejaculate.
-		<</if>>
-
-		/* Dairy rework cum half here */
-		<<if ($slaves[$i].assignment == "work in the dairy")>>
-			<<if ($dairyStimulatorsUpgrade == 1)>>
-				<<if ($dairyStimulatorsSetting > 0)>>
-					<<set $cum += $cum*(0.2*($dairyStimulatorsSetting+$dairyRestraintsSetting+Math.trunc((50-$slaves[$i].physicalAge)/20)))>>
-				<</if>>
-				<<if ($slaves[$i].chem > 360)>>
-					<<set $cum = Math.trunc($cum*0.6)>>
-				<<elseif ($slaves[$i].chem > 100)>>
-					<<set $cum = Math.trunc($cum*((600-$slaves[$i].chem)/600))>>
-				<</if>>
-			<<elseif ($Milkmaid != 0)>>
-				<<if ($Milkmaid.dick > 4) && canAchieveErection($Milkmaid)>>
-					$Milkmaid.slaveName sometimes stands in for the machines, which is a polite way of saying $he sometimes fucks $slaves[$i].slaveName's ass to help $him cum.
-					<<set $cum += $cum*0.2>>
-				<</if>>
-			<</if>>
-		<<elseif ($slaves[$i].assignment == "be confined in the arcade")>>
-			<<set $cum = $cum*0.5>>
-		<</if>>
-
-		<<set $cum = Math.trunc($cum)>>
-		<<if $cum < 1>>
-			<<set $cum = 1>>
-		<</if>>
-		<<set $slaves[$i].counter.cum += $cum>>
-		<<set $cumTotal += $cum>>
-		<<set _incomeStats.cum = $cum>>
-
-		<<if ($arcologies[0].FSPastoralist == "unset")>>
-			<<set _cumSale = ($cum*random(15,25))>>
-			<<if $slaves[$i].vasectomy == 1 || $slaves[$i].ballType == "sterile">><<set _cumSale *= 0.2>><<elseif $slaves[$i].prostate == 3>><<set _cumSale *= 0.5>><</if>>
-			$He produces <<print $cum>> deciliters of cum over the week; the fresh ejaculate is sold for @@.yellowgreen;<<print cashFormat(_cumSale)>>.@@
-		<<elseif $arcologies[0].FSPastoralistLaw == 1>>
-			<<set _cumSale = ($cum*(random(20,40)))>>
-			<<if $slaves[$i].vasectomy == 1 || $slaves[$i].ballType == "sterile">><<set _cumSale *= 0.2>><<elseif $slaves[$i].prostate == 3>><<set _cumSale *= 0.5>><</if>>
-			$He produces <<print $cum>> deciliters of cum over the week; the fresh ejaculate, which is in extremely high demand as one of $arcologies[0].name's few legal sources of animal protein, is sold for @@.yellowgreen;<<print cashFormat(_cumSale)>>.@@
-		<<else>>
-			<<set _cumSale = ($cum*(random(10,20)+Math.trunc($arcologies[0].FSPastoralist/10)))>>
-			<<if $slaves[$i].vasectomy == 1 || $slaves[$i].ballType == "sterile">><<set _cumSale *= 0.2>><<elseif $slaves[$i].prostate == 3>><<set _cumSale *= 0.5>><</if>>
-			$He produces <<print $cum>> deciliters of cum over the week; the fresh ejaculate, which is in high demand given the new cultural preference for slave products, is sold for @@.yellowgreen;<<print cashFormat(_cumSale)>>.@@
-		<</if>>
-		<<if $slaves[$i].assignment == "work in the dairy">>
-			<<run cashX(_cumSale, "milkedDairy", $slaves[$i])>>
-		<<elseif $slaves[$i].assignment == "get milked">>
-			<<run cashX(_cumSale, "milked", $slaves[$i])>>
-		<<else>>
-			<<run cashX(_cumSale, "extraMilk", $slaves[$i])>>
-		<</if>>
-		<<set _incomeStats.income += _cumSale>>
-
-		<<if ($slaves[$i].energy > 95)>>
-			Getting $his dick constantly milked is almost as good as getting constant blowjobs as far as $he's concerned. @@.hotpink;$He is happy@@ to have $his member receive so much attention.
-			<<set $slaves[$i].devotion += 1>>
-		<</if>>
-
-		<<if $slaves[$i].need>>
-			$His cock and balls are milked so thoroughly that $he's involuntarily sexually sated, regardless of $his feelings and tastes.
-			<<set $slaves[$i].need = 0>>
-		<</if>>
-
-		<<if !canAchieveErection($slaves[$i])>>
-			Since $he cannot maintain an erection, $he requires @@.gold;painful@@ and @@.mediumorchid;degrading@@ anal electrostimulation to produce.
-			<<set $slaves[$i].devotion -= 2>>
-			<<set $slaves[$i].trust -= 2>>
-			<<if ($slaves[$i].anus == 0)>>
-				The electrostimulator @@.lime;breaks in $his virgin asshole.@@
-				<<set $slaves[$i].anus = 1>>
-			<</if>>
-		<<elseif ($slaves[$i].devotion <= 20)>>
-			Since $he's unaroused by $his situation, $he requires @@.gold;painful@@ and @@.mediumorchid;degrading@@ anal electrostimulation to produce.
-			<<set $slaves[$i].devotion -= 2>>
-			<<set $slaves[$i].trust -= 2>>
-			<<if ($slaves[$i].anus == 0)>>
-				The electrostimulator @@.lime;breaks in $his virgin asshole.@@
-				<<set $slaves[$i].anus = 1>>
-			<</if>>
-		<</if>>
-
-		<<if ($slaves[$i].balls < 3) && $slaves[$i].ballType != "sterile">>
-			<<if ($slaves[$i].balls < 2)>>
-				<<if (random(1,100) > (70 + ($slaves[$i].geneMods.NCS * 15)))>>
-					Constant semen production and continual emptying and refilling @@.lime;increases the size of $his tiny testicles.@@
-					<<set $slaves[$i].balls += 1>>
-				<</if>>
-			<<elseif (random(1,100) > (90 + ($slaves[$i].geneMods.NCS * 5)))>>
-				Constant semen production and continual emptying and refilling @@.lime;increases the size of $his small testicles.@@
-				<<set $slaves[$i].balls += 1>>
-			<</if>>
-		<</if>>
-
-	<</if>> /* CLOSES COCK MILKING */
-
-	<<if $slaves[$i].genes == "XX" && $slaves[$i].prostate > 0 && $slaves[$i].balls == 0>>
-		$His female prostate fluid is considered an exotic delicacy.
-		<<set $fluid = $slaves[$i].prostate * $slaves[$i].energy/5 + 1>>
-		<<if $slaves[$i].energy > 10>>
-			<<if $slaves[$i].health > 50>>
-				<<if $slaves[$i].energy > 90>>
-					As a nympho, $he has no trouble orgasming almost constantly.
-				<</if>>
-				<<set $fluid = $fluid*$slaves[$i].health/50>>
-				$His shining health keeps $his juices flowing.
-			<<elseif $slaves[$i].health < -50>>
-				<<set $fluid = $fluid * (1 + $slaves[$i].health/50)>>
-				$He is so unwell, $he produces less than normal.
-			<</if>>
-		<<else>>
-			/* $slaves[$i].energy <= 10 */
-			Unfortunately, $he is frigid and rarely reaches orgasm in spite of the intense automatic stimulation.
-		<</if>>
-		<<set $fluid = Math.clamp(Math.trunc($fluid),1,1000)>>
-		<<set _incomeStats.fluid = $fluid>>
-		<<print $fluid >> deciliters of uncommon ejaculate is gathered during $his milkings.
-		<<set $fluidSale = $fluid*random(40,50)>>
-		<<if $arcologies[0].FSPastoralist != "unset" && $arcologies[0].FSPastoralist > 30>>
-			<<set $fluidSale = Math.trunc($fluidSale*(1 + ($arcologies[0].FSPastoralist-30)/140))>> /* fully accepted parsoralism gives +50% on the price*/
-			Because of your arcology's cultural preferences, it comes with extra value.
-		<</if>>
-		It is sold for @@.yellowgreen;<<print cashFormat($fluidSale)>>.@@
-		<<if $slaves[$i].assignment == "work in the dairy">>
-			<<run cashX($fluidSale, "milkedDairy", $slaves[$i])>>
-		<<elseif $slaves[$i].assignment == "get milked">>
-			<<run cashX($fluidSale, "milked", $slaves[$i])>>
-		<<else>>
-			<<run cashX($fluidSale, "extraMilk", $slaves[$i])>>
-		<</if>>
-		<<set _incomeStats.income += $fluidSale>>
-	<</if>> /* CLOSES FEMALE PROSTATE FLUID GATHERING */
-
-	<<if ($slaves[$i].behavioralQuirk == "fitness")>>
-		$slaves[$i].slaveName @@.hotpink;privately enjoys@@ the focus on $his health and fitness that comes with being a cow.
-		<<set $slaves[$i].devotion += 1>>
-	<</if>>
-
-	<<if ($showVignettes == 1 && ($slaves[$i].assignment == "get milked" || $slaves[$i].assignment == "work in the dairy"))>>
-		<<set _vignette = GetVignette($slaves[$i])>>
-		__This week__ _vignette.text
-		<<if (_vignette.type == "cash")>>
-			<<set $FResult = FResult($slaves[$i])>>
-			<<if (_vignette.effect > 0)>>
-				@@.yellowgreen;making you an extra <<print cashFormat(Math.trunc($FResult*_vignette.effect))>>.@@
-			<<elseif (_vignette.effect < 0)>>
-				@@.red;losing you <<print cashFormat(Math.abs(Math.trunc($FResult*_vignette.effect)))>>.@@
-			<<else>>
-				an incident without lasting effect.
-			<</if>>
-			<<if $slaves[$i].assignment == "work in the dairy">>
-				<<run cashX(Math.trunc($FResult*_vignette.effect), "milkedDairy", $slaves[$i])>>
-			<<elseif $slaves[$i].assignment == "get milked">>
-				<<run cashX(Math.trunc($FResult*_vignette.effect), "milked", $slaves[$i])>>
-			<<else>>
-				<<run cashX(Math.trunc($FResult*_vignette.effect), "extraMilk", $slaves[$i])>>
-			<</if>>
-			<<set _incomeStats.income += Math.trunc($FResult*_vignette.effect)>>
-		<<elseif (_vignette.type == "devotion")>>
-			<<if (_vignette.effect > 0)>>
-				<<if $slaves[$i].devotion > 50>>
-					@@.hotpink;increasing $his devotion to you.@@
-				<<elseif $slaves[$i].devotion >= -20>>
-					@@.hotpink;increasing $his acceptance of you.@@
-				<<elseif $slaves[$i].devotion > -10>>
-					@@.hotpink;reducing $his dislike of you.@@
-				<<else>>
-					@@.hotpink;reducing $his hatred of you.@@
-				<</if>>
-			<<elseif (_vignette.effect < 0)>>
-				<<if $slaves[$i].devotion > 50>>
-					@@.mediumorchid;reducing $his devotion to you.@@
-				<<elseif $slaves[$i].devotion >= -20>>
-					@@.mediumorchid;reducing $his acceptance of you.@@
-				<<elseif $slaves[$i].devotion > -10>>
-					@@.mediumorchid;increasing $his dislike of you.@@
-				<<else>>
-					@@.mediumorchid;increasing $his hatred of you.@@
-				<</if>>
-			<<else>>
-				an incident without lasting effect.
-			<</if>>
-			<<set $slaves[$i].devotion += 1*_vignette.effect>>
-		<<elseif (_vignette.type == "trust")>>
-			<<if (_vignette.effect > 0)>>
-				<<if $slaves[$i].trust > 20>>
-					@@.mediumaquamarine;increasing $his trust in you.@@
-				<<elseif $slaves[$i].trust > -10>>
-					@@.mediumaquamarine;reducing $his fear of you.@@
-				<<else>>
-					@@.mediumaquamarine;reducing $his terror of you.@@
-				<</if>>
-			<<elseif (_vignette.effect < 0)>>
-				<<if $slaves[$i].trust > 20>>
-					@@.gold;reducing $his trust in you.@@
-				<<elseif $slaves[$i].trust >= -20>>
-					@@.gold;increasing $his fear of you.@@
-				<<else>>
-					@@.gold;increasing $his terror of you.@@
-				<</if>>
-			<<else>>
-				an incident without lasting effect.
-			<</if>>
-			<<set $slaves[$i].trust += 1*_vignette.effect>>
-		<<elseif (_vignette.type == "health")>>
-			<<if (_vignette.effect > 0)>>
-				@@.green;improving $his health.@@
-			<<elseif (_vignette.effect < 0)>>
-				@@.red;affecting $his health.@@
-			<<else>>
-				an incident without lasting effect.
-			<</if>>
-			<<set $slaves[$i].health += 2*_vignette.effect>>
-		<<else>>
-			<<set $FResult = FResult($slaves[$i])>>
-			<<if (_vignette.effect > 0)>>
-				@@.green;gaining you a bit of reputation.@@
-			<<elseif (_vignette.effect < 0)>>
-				@@.red;losing you a bit of reputation.@@
-			<<else>>
-				an incident without lasting effect.
-			<</if>>
-			<<run repX( Math.trunc($FResult*_vignette.effect*0.1), "vignette", $slaves[$i])>>
-			<<set _incomeStats.rep += Math.trunc($FResult*_vignette.effect*0.1)>>
-		<</if>>
-	<</if>>
-
-	/* FACILITY DECORATION IMPACTS */
-
-	<<if $slaves[$i].assignment == "work in the dairy">>
-		<<if $dairyDecoration != "standard">>
-			<<set _fsGain = Math.min(0.0001*$FSSingleSlaveRep*($milk+5*$cum), 1)>>
-			<<switch $dairyDecoration>>
-			<<case "Roman Revivalist">>
-				<<set $arcologies[0].FSRomanRevivalist = Math.clamp($arcologies[0].FSRomanRevivalist += _fsGain,0,100)>>
-			<<case "Aztec Revivalist">>
-				<<set $arcologies[0].FSAztecRevivalist = Math.clamp($arcologies[0].FSAztecRevivalist += _fsGain,0,100)>>
-			<<case "Egyptian Revivalist">>
-				<<set $arcologies[0].FSEgyptianRevivalist = Math.clamp($arcologies[0].FSEgyptianRevivalist += _fsGain,0,100)>>
-			<<case "Edo Revivalist">>
-				<<set $arcologies[0].FSEdoRevivalist = Math.clamp($arcologies[0].FSEdoRevivalist += _fsGain,0,100)>>
-			<<case "Arabian Revivalist">>
-				<<set $arcologies[0].FSArabianRevivalist = Math.clamp($arcologies[0].FSArabianRevivalist += _fsGain,0,100)>>
-			<<case "Chinese Revivalist">>
-				<<set $arcologies[0].FSChineseRevivalist = Math.clamp($arcologies[0].FSChineseRevivalist += _fsGain,0,100)>>
-			<<case "Chattel Religionist">>
-				<<set $arcologies[0].FSChattelReligionist = Math.clamp($arcologies[0].FSChattelReligionist += _fsGain,0,100)>>
-			<<case "Degradationist">>
-				<<set $arcologies[0].FSDegradationist = Math.clamp($arcologies[0].FSDegradationist += _fsGain,0,100)>>
-			<<case "Repopulation Focus">>
-				<<set $arcologies[0].FSRepopulationFocus = Math.clamp($arcologies[0].FSRepopulationFocus += _fsGain,0,100)>>
-			<<case "Eugenics">>
-				<<set $arcologies[0].FSRestart = Math.clamp($arcologies[0].FSRestart += _fsGain,0,100)>>
-			<<case "Asset Expansionist">>
-				<<set $arcologies[0].FSAssetExpansionist = Math.clamp($arcologies[0].FSAssetExpansionist += _fsGain,0,100)>>
-			<<case "Transformation Fetishist">>
-				<<set $arcologies[0].FSTransformationFetishist = Math.clamp($arcologies[0].FSTransformationFetishist += _fsGain,0,100)>>
-			<<case "Gender Radicalist">>
-				<<set $arcologies[0].FSGenderRadicalist = Math.clamp($arcologies[0].FSGenderRadicalist += _fsGain,0,100)>>
-			<<case "Gender Fundamentalist">>
-				<<set $arcologies[0].FSGenderFundamentalist = Math.clamp($arcologies[0].FSGenderFundamentalist += _fsGain,0,100)>>
-			<<case "Physical Idealist">>
-				<<set $arcologies[0].FSPhysicalIdealist = Math.clamp($arcologies[0].FSPhysicalIdealist += _fsGain,0,100)>>
-			<<case "Hedonistic">>
-				<<set $arcologies[0].FSHedonisticDecadence = Math.clamp($arcologies[0].FSHedonisticDecadence += _fsGain,0,100)>>
-			<<case "Supremacist">>
-				<<set $arcologies[0].FSSupremacist = Math.clamp($arcologies[0].FSSupremacist += _fsGain,0,100)>>
-			<<case "Subjugationist">>
-				<<set $arcologies[0].FSSubjugationist = Math.clamp($arcologies[0].FSSubjugationist += _fsGain,0,100)>>
-			<<case "Paternalist">>
-				<<set $arcologies[0].FSPaternalist = Math.clamp($arcologies[0].FSPaternalist += _fsGain,0,100)>>
-			<<case "Pastoralist">>
-				<<set $arcologies[0].FSPastoralist = Math.clamp($arcologies[0].FSPastoralist += _fsGain,0,100)>>
-			<<case "Maturity Preferentialist">>
-				<<set $arcologies[0].FSMaturityPreferentialist = Math.clamp($arcologies[0].FSMaturityPreferentialist += _fsGain,0,100)>>
-			<<case "Youth Preferentialist">>
-				<<set $arcologies[0].FSYouthPreferentialist = Math.clamp($arcologies[0].FSYouthPreferentialist += _fsGain,0,100)>>
-			<<case "Body Purist">>
-				<<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>>
-
-<</if>>
diff --git a/src/uncategorized/saRules.tw b/src/uncategorized/saRules.tw
index 97e0168ca59..9a445f86b65 100644
--- a/src/uncategorized/saRules.tw
+++ b/src/uncategorized/saRules.tw
@@ -144,7 +144,7 @@
 				<<if $servantMilkers == 1>>
 					$His duties keep $him busy, but $he <<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses the penthouse milkers whenever $he can,
 					<<set $servantMilkersMultiplier = 0.25>>
-					<<silently>><<include "SA get milked">><</silently>>
+					<<run saGetMilked($slaves[$i])>>
 					<<set $servantMilkersMultiplier = 1>>
 					giving $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 				<<else>>
@@ -637,7 +637,7 @@
 				<<if $servantMilkers == 1>>
 					$His duties keep $him busy, but $he <<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses the penthouse milkers whenever $he can,
 					<<set $servantMilkersMultiplier = 0.25>>
-					<<silently>><<include "SA get milked">><</silently>>
+					<<run saGetMilked($slaves[$i])>>
 					<<set $servantMilkersMultiplier = 1>>
 					giving $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 				<<else>>
@@ -1111,7 +1111,7 @@
 				<<if $servantMilkers == 1>>
 					$His duties keep $him busy, but $he <<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses the penthouse milkers whenever $he can,
 					<<set $servantMilkersMultiplier = 0.25>>
-					<<silently>><<include "SA get milked">><</silently>>
+					<<run saGetMilked($slaves[$i])>>
 					<<set $servantMilkersMultiplier = 1>>
 					giving $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 				<<else>>
@@ -1482,7 +1482,7 @@
 				<<if $servantMilkers == 1>>
 					$His duties keep $him busy, but $he <<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses the penthouse milkers whenever $he can,
 					<<set $servantMilkersMultiplier = 0.25>>
-					<<silently>><<include "SA get milked">><</silently>>
+					<<run saGetMilked($slaves[$i])>>
 					<<set $servantMilkersMultiplier = 1>>
 					giving $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 				<<else>>
@@ -1788,7 +1788,7 @@
 				<<if $servantMilkers == 1>>
 					$His duties keep $him busy, but $he <<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses the penthouse milkers whenever $he can,
 					<<set $servantMilkersMultiplier = 0.25>>
-					<<silently>><<include "SA get milked">><</silently>>
+					<<run saGetMilked($slaves[$i])>>
 					<<set $servantMilkersMultiplier = 1>>
 					giving $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 				<<else>>
@@ -2293,7 +2293,7 @@
 				<<if $servantMilkers == 1>>
 					$His duties keep $him busy, but $he <<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses the penthouse milkers whenever $he can,
 					<<set $servantMilkersMultiplier = 0.25>>
-					<<silently>><<include "SA get milked">><</silently>>
+					<<run saGetMilked($slaves[$i])>>
 					<<set $servantMilkersMultiplier = 1>>
 					giving $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 				<<else>>
@@ -2814,7 +2814,7 @@
 				<<if $servantMilkers == 1>>
 					$His duties keep $him busy, but $he <<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses the penthouse milkers whenever $he can,
 					<<set $servantMilkersMultiplier = 0.25>>
-					<<silently>><<include "SA get milked">><</silently>>
+					<<run saGetMilked($slaves[$i])>>
 					<<set $servantMilkersMultiplier = 1>>
 					giving $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 				<<else>>
@@ -3311,7 +3311,7 @@
 				<<if $servantMilkers == 1>>
 					$His duties keep $him busy, but $he <<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses the penthouse milkers whenever $he can,
 					<<set $servantMilkersMultiplier = 0.25>>
-					<<silently>><<include "SA get milked">><</silently>>
+					<<run saGetMilked($slaves[$i])>>
 					<<set $servantMilkersMultiplier = 1>>
 					giving $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 				<<else>>
@@ -3809,7 +3809,7 @@
 			<<elseif $slaves[$i].rules.lactation == "maintain">>
 				$His duties keep $him busy, but $he <<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses milkers whenever $he can,
 				<<set $servantMilkersMultiplier = 0.75>>
-				<<silently>><<include "SA get milked">><</silently>>
+				<<run saGetMilked($slaves[$i])>>
 				<<set $servantMilkersMultiplier = 1>>
 				giving $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 			<</if>>
@@ -4363,7 +4363,7 @@
 				<<if $servantMilkers == 1>>
 					$His duties keep $him busy, but $he <<if $slaves[$i].fetish == "boobs">>eagerly <</if>>uses the penthouse milkers whenever $he can,
 					<<set $servantMilkersMultiplier = 0.25>>
-					<<silently>><<include "SA get milked">><</silently>>
+					<<run saGetMilked($slaves[$i])>>
 					<<set $servantMilkersMultiplier = 1>>
 					giving $milk liters of milk over the week, which is sold for @@.yellowgreen;<<print cashFormat($milkSale)>>.@@
 				<<else>>
diff --git a/src/uncategorized/servantsQuartersReport.tw b/src/uncategorized/servantsQuartersReport.tw
index ec010ee868b..853a50862a2 100644
--- a/src/uncategorized/servantsQuartersReport.tw
+++ b/src/uncategorized/servantsQuartersReport.tw
@@ -285,7 +285,7 @@
 		<</if>>
 		<br>&nbsp;&nbsp;&nbsp;&nbsp;_He2 <<= saServant($slaves[$i])>>
 		<<if ($servantMilkers == 1) && ($slaves[$i].lactation > 0)>>
-			<br>&nbsp;&nbsp;&nbsp;&nbsp;_He2 <<include "SA get milked">>
+			<br>&nbsp;&nbsp;&nbsp;&nbsp;_He2 <<= saGetMilked($slaves[$i])>>
 			<<set _SQMilk += $milk, _SQMilkSale += $milkSale>>
 		<</if>>
 		<br>&nbsp;&nbsp;&nbsp;
@@ -302,7 +302,7 @@
 		<<include "SA chooses own job">>
 		<<run saServant($slaves[$i])>>
 		<<if ($servantMilkers == 1) && ($slaves[$i].lactation > 0)>>
-			<<include "SA get milked">>
+			<<run saGetMilked($slaves[$i])>>
 			<<set _SQMilk += $milk, _SQMilkSale += $milkSale>>
 		<</if>>
 		<<run saChoosesOwnClothes($slaves[$i])>>
-- 
GitLab