code:
/**
 * @param {App.Entity.SlaveState} slave
 * @returns {string}
 */
window.saServant = function saServant(slave) {
	const V = State.variables;
	/* eslint-disable */
	const pronouns = getPronouns(slave);
	const he = pronouns.pronoun;
	const him = pronouns.object;
	const his = pronouns.possessive;
	const hers = pronouns.possessivePronoun;
	const himself = pronouns.objectReflexive;
	const boy = pronouns.noun;
	const He = capFirstChar(he);
	const His = capFirstChar(his);
	/* eslint-enable */

	let t = `works as a servant. ${He} performs the lowest jobs in your penthouse, cleaning up after your other slaves, bathing them, helping them dress, and giving them sexual relief.`;

	if (V.servantsQuarters > 0) {
		if ((V.universalRulesFacilityWork === 1 && slave.assignment === "be a servant" && V.servantsQuartersSpots > 0) || (slave.assignment === "work as a servant")) {
			if (slave.assignment === "be a servant") {
				t += ` Since there's extra space in the servants' quarters, ${V.assistantName} attaches ${him} to the cadre of maids there.`;
				V.servantsQuartersSpots--;
			}
			if (V.Stewardess !== 0) {
				t += ` This brings ${him} under ${V.Stewardess.slaveName}'s supervision. The Stewardess `;
				if (slave.devotion < -20) {
					t += `subjects ${him} to corrective rape when ${his} service is imperfect, when ${he} steps out of line, or when the Stewardess just feels like raping ${him}, forcing the poor slave to find refuge in work.`;
					slave.devotion += 2;
					slave.trust -= 2;
				} else if (slave.devotion <= 20) {
					t += `molests ${him}, encouraging the poor slave to <span class="hotpink">keep ${his} head down</span> and <span class="yellowgreen">work harder.</span>`;
					slave.devotion += 2;
				} else {
					t += `uses <span class="hotpink">sex as a reward,</span> getting ${him} off when ${he} <span class="yellowgreen">works harder.</span>`;
					slave.devotion++;
				}
				if (!(canHear(slave))) {
					t += ` However, ${his} inability to hear often leaves ${him} oblivious to ${V.Stewardess.slaveName}'s orders, limiting their meaningful interactions.`;
					cashX(V.stewardessBonus / 4, "houseServant", slave);
				} else if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs")) {
					t += ` However, ${he} often doesn't catch what ${V.Stewardess.slaveName} says, leading to frustration, confusion and less work done.`;
					cashX(V.stewardessBonus / 2, "houseServant", slave);
				} else {
					cashX(V.stewardessBonus, "houseServant", slave);
				}
			}
		}
	}

	t += ` ${He} is `;
	if (slave.trust < -20) {
		t += `frightened of punishment and works very hard, <span class="yellowgreen">reducing the upkeep</span> of your slaves.`;
	} else if (slave.devotion < -20) {
		if (slave.trust >= 20) {
			t += `uninterested in doing such work and barely lifts a finger to <span class="yellowgreen">reduce the upkeep</span> of your slaves.`;
		} else {
			t += `reluctant, requiring your other slaves to force ${his} services, and does not <span class="yellowgreen">reduce upkeep</span> of your slaves much.`;
		}
	} else if (slave.devotion <= 20) {
		t += `hesitant, requiring your other slaves to demand ${his} services, and only slightly <span class="yellowgreen">reduces upkeep</span> of your slaves.`;
	} else if (slave.devotion <= 50) {
		t += `obedient, offering your other slaves ${his} services, and moderately <span class="yellowgreen">reduces the upkeep</span> of your slaves.`;
	} else if (slave.devotion <= 95) {
		t += `devoted, happily giving your other slaves ${his} services, and <span class="yellowgreen">reduces the upkeep</span> of your slaves.`;
	} else {
		t += `so happy to serve your other slaves that ${he} often sees to their needs before they know they have them, and greatly <span class="yellowgreen">reduces the upkeep</span> of your slaves.`;
	}

	if (slave.releaseRules !== "chastity") {
		const _oral = jsRandom(5, 10);
		slave.counter.oral += _oral;
		V.oralTotal += _oral;
	}

	if (slave.relationship === -2) {
		t += ` ${He} does ${his} best to perfect your domesticity due to ${his} emotional bond to you.`;
	} else if (slave.relationship === -3 && slave.devotion > 50) {
		t += ` ${He} does ${his} very best to be the perfect housewife, making ${him} an outstanding servant.`;
	}

	if (setup.servantCareers.includes(slave.career)) {
		t += ` ${He} has experience with house keeping from ${his} life before ${he} was a slave, making ${him} more effective.`;
	} else if (slave.skill.servant >= V.masteredXP) {
		t += ` ${He} has experience with house keeping from working for you, making ${him} more effective.`;
	} else {
		slave.skill.servant += jsRandom(1, Math.ceil((slave.intelligence + slave.intelligenceImplant) / 15) + 8);
	}

	if (slave.fetishStrength > 60) {
		if (slave.fetish === "submissive" && slave.fetishKnown === 1) {
			t += ` ${His} natural affinity for submission increases ${his} effectiveness.`;
		} else if (slave.fetishKnown === 1 && slave.fetish === "dom") {
			t += ` ${His} sexual appetite for domination reduces ${his} effectiveness.`;
		}
	}

	if (slave.energy < 20) {
		t += ` ${His} frigidity allows ${him} to ignore the intercourse all around ${him}, making ${him} very efficient.`;
	} else if (slave.energy < 40) {
		t += ` ${His} low sex drive keeps ${him} from becoming too distracted by the intercourse all around ${him}, making ${him} more efficient.`;
	}

	if ((slave.eyes <= -1 && slave.eyewear !== "corrective glasses" && slave.eyewear !== "corrective contacts") || (slave.eyewear === "blurring glasses") || (slave.eyewear === "blurring contacts")) {
		t += ` ${His} bad vision makes ${him} a worse servant.`;
	}

	if (slave.lactation > 0) {
		t += ` Since ${he} is lactating, `;
		if (slave.devotion > 20 || slave.trust < -20) {
			t += ` ${he} serves `;
		} else {
			t += `and disobedient, ${he} is restrained to serve `;
		}
		t += `as a drink dispenser at mealtimes, and makes a meaningful contribution to ${his} fellow slaves' nutrition in concert with the feeding systems.`;
		slave.lactationDuration = 2;
		if (slave.boobsMilk > 0) {
			slave.boobs -= slave.boobsMilk;
			slave.boobsMilk = 0;
		}
	}

	if (V.showVignettes === 1 && (slave.assignment === Job.SERVANT || slave.assignment === Job.SERVER)) {
		const _vignette = GetVignette(slave);
		t += ` __This week__ ${_vignette.text} `;
		if (_vignette.type === "cash") {
			if (_vignette.effect > 0) {
				t += `<span class="yellowgreen">making you an extra ${cashFormat(Math.trunc(V.FResult*_vignette.effect))}.</span>`;
			} else if (_vignette.effect < 0) {
				t += `<span class="red">losing you ${cashFormat(Math.abs(Math.trunc(V.FResult*_vignette.effect)))}.</span>`;
			} else {
				t += `an incident without lasting effect.`;
			}
			cashX(Math.trunc(V.FResult * _vignette.effect), "houseServant", slave);
		} else if (_vignette.type === "devotion") {
			if (_vignette.effect > 0) {
				if (slave.devotion > 50) {
					t += `<span class="hotpink">increasing ${his} devotion to you.</span>`;
				} else if (slave.devotion >= -20) {
					t += `<span class="hotpink">increasing ${his} acceptance of you.</span>`;
				} else if (slave.devotion > -10) {
					t += `<span class="hotpink">reducing ${his} dislike of you.</span>`;
				} else {
					t += `<span class="hotpink">reducing ${his} hatred of you.</span>`;
				}
			} else if (_vignette.effect < 0) {
				if (slave.devotion > 50) {
					t += `<span class="mediumorchid">reducing ${his} devotion to you.</span>`;
				} else if (slave.devotion >= -20) {
					t += `<span class="mediumorchid">reducing ${his} acceptance of you.</span>`;
				} else if (slave.devotion > -10) {
					t += `<span class="mediumorchid">increasing ${his} dislike of you.</span>`;
				} else {
					t += `<span class="mediumorchid">increasing ${his} hatred of you.</span>`;
				}
			} else {
				t += `an incident without lasting effect.`;
			}
			slave.devotion += (1 * _vignette.effect);
		} else if (_vignette.type === "trust") {
			if (_vignette.effect > 0) {
				if (slave.trust > 20) {
					t += `<span class="mediumaquamarine">increasing ${his} trust in you.</span>`;
				} else if (slave.trust > -10) {
					t += `<span class="mediumaquamarine">reducing ${his} fear of you.</span>`;
				} else {
					t += `<span class="mediumaquamarine">reducing ${his} terror of you.</span>`;
				}
			} else if (_vignette.effect < 0) {
				if (slave.trust > 20) {
					t += `<span class="gold">reducing ${his} trust in you.</span>`;
				} else if (slave.trust >= -20) {
					t += `<span class="gold">increasing ${his} fear of you.</span>`;
				} else {
					t += `<span class="gold">increasing ${his} terror of you.</span>`;
				}
			} else {
				t += `an incident without lasting effect.`;
			}
			slave.trust += (1 * _vignette.effect);
		} else if (_vignette.type === "health") {
			if (_vignette.effect > 0) {
				t += `<span class="green">improving ${his} health.</span>`;
			} else if (_vignette.effect < 0) {
				t += `<span class="red">affecting ${his} health.</span>`;
			} else {
				t += `an incident without lasting effect.`;
			}
			slave.health += (2 * _vignette.effect);
		} else {
			if (_vignette.effect > 0) {
				t += `<span class="green">gaining you a bit of reputation.</span>`;
			} else if (_vignette.effect < 0) {
				t += `<span class="red">losing you a bit of reputation.</span>`;
			} else {
				t += `an incident without lasting effect.`;
			}
			repX((V.FResult * _vignette.effect * 0.1), "vignette", slave);
		}
	}

	return t;
};


code:
window.saServeThePublic = (function saServeThePublic() {
	"use strict";
	let V;
	let T;
	let r;
	let arcology;

	let cervixPump;
	let pronouns;
	let he, him, his, hers, himself, girl, loli, He, His;

	// if the following are set outside this file, they must be set in it too!
	let oralUse;
	let analUse;
	let vaginalUse;
	let mammaryUse;
	let penetrativeUse;

	return saServeThePublic;

	/**
	 * @param {App.Entity.SlaveState} slave
	 * @returns {string}
	 */
	function saServeThePublic(slave) {
		V = State.variables;
		T = State.temporary;
		arcology = V.arcologies[0];
		r = ` `;
		pronouns = getPronouns(slave);
		he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, girl = pronouns.noun;
		He = capFirstChar(he), His = capFirstChar(his);
		girl === "girl" ? loli = "loli" : loli = "shota";

		gatherStatistics(slave);
		if (slave.assignment === "serve in the club") {
			// By being at the end, every slave after the first will get a bonus. By moving it up, the first can enjoy it too. slaveJobValues() checks Edo Revivalist, so here we are.
			applyFSDecoration(slave);
		}
		addRep(slave);
		sexCounts(slave);
		jobPreface(slave);
		bonusMultiplierText(slave);
		usageCountDescriptions(slave);
		if (V.seeAge === 1) {
			comingOfAge(slave);
		}
		mentalEffects(slave);
		physicalEffects(slave);
		slaveSkills(slave);
		if (V.showEWM === 1) {
			publicReactions(slave);
		}
		if (slave.sexualFlaw === "none") {
			addFlaw(slave);
		}
		sexualSatiation(slave);
		if (V.showVignettes === 1) {
			assignmentVignette(slave);
		}

		return r;
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function gatherStatistics(slave) {
		/* Statistics gathering */
		const facility = slave.assignment === Job.CLUB ? V.facility.club : undefined;
		T.incomeStats = getSlaveStatisticData(slave, facility);
		T.incomeStats.customers = slave.sexAmount;
		V.publicServants++;
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function jobPreface(slave) {
		if (slave.devotion > 95 || slave.energy > 95) {
			r += `enthusiastically serves`;
		} else if (slave.devotion > 50) {
			r += `willingly serves`;
		} else if (slave.devotion > 20) {
			r += `obediently serves`;
		} else if (slave.trust < -20) {
			r += `reluctantly serves`;
		} else {
			r += `is forced to serve`;
		}
		r += ` the public.`;
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function bonusMultiplierText(slave) {
		if (V.club > 0) {
			if ((V.universalRulesFacilityWork === 1 && slave.assignment === "serve the public" && V.clubSpots > 0) || (slave.assignment === "serve in the club")) {
				if (slave.assignment === "serve the public") {
					r += ` Since there's extra space in $clubName, ${he}'s promiscuous there.`;
				}
				// ads
				if (V.clubAdsSpending !== 0) {
					if (V.clubAdsStacked === 1) {
						if (isStacked(slave)) {
							r += ` ${His} stacked body fits ${V.clubName}'s ad campaign, getting ${him} more attention.`;
						}
					} else if (V.clubAdsStacked === -1) {
						if (isSlim(slave)) {
							r += ` ${His} slim body fits ${V.clubName}'s ad campaign, getting ${him} more attention.`;
						}
					}
					if (V.clubAdsPreg === 1) {
						if (slave.bellyPreg >= 5000 || slave.bellyImplant >= 5000) {
							r += ` ${His} gravid body fits ${V.clubName}'s ad campaign, getting ${him} more attention.`;
						}
					} else if (V.clubAdsPreg === -1) {
						if (slave.belly < 100 && slave.weight < 30 && !setup.fakeBellies.includes(slave.bellyAccessory) && slave.bellyImplant <= 0) {
							r += ` ${His} flat belly fits ${V.clubName}'s ad campaign, getting ${him} more attention.`;
						}
					}
					if (V.clubAdsModded === 1) {
						if ((V.modScore > 15) || (V.piercingScore > 8 && V.tatScore > 5)) {
							r += ` Body art like ${hers} is a major draw.`;
						}
					} else if (V.clubAdsModded === -1) {
						if (slave.corsetPiercing === 0 && V.piercingScore < 3 && V.tatScore < 2) {
							r += ` Very clean bodies like ${hers} are a major draw.`;
						}
					}
					if (V.clubAdsImplanted === 1) {
						if (slave.boobsImplant > 0 && slave.buttImplant > 0 && slave.waist < -10 && slave.lipsImplant > 0) {
							r += ` Many citizens come to ${V.clubName} looking to fuck a plastic slut like ${him}.`;
						}
					} else if (V.clubAdsImplanted === -1) {
						if (slave.boobsImplant === 0 && slave.buttImplant === 0 && slave.waist >= -95 && slave.lipsImplant === 0 && slave.bellyImplant === -1 && slave.faceImplant < 30) {
							r += ` Many citizens come to ${V.clubName} looking to get with a natural ${girl} like ${him}.`;
						}
					}
					if (V.clubAdsOld === 1) {
						if (slave.physicalAge >= 30) {
							r += ` ${He}'s perfect for ${V.clubName}, which practically exists to match citizens up with mature slaves.`;
						}
					} else if (V.clubAdsOld === -1) {
						if (slave.physical < 30 && slave.physical >= 18) {
							r += ` ${He}'s perfect for ${V.clubName}, which practically exists to match citizens up with young slaves.`;
						}
					} else if (V.clubAdsOld === -2) {
						if (slave.physical <= 18 && slave.physical >= 13) {
							r += ` ${He}'s perfect for ${V.clubName}, which practically exists to match citizens up with teenage slaves.`;
						}
					} else if (V.clubAdsOld === -3) {
						if (slave.physical < 13) {
							r += ` ${He}'s perfect for ${V.clubName}, which practically exists to match citizens up with ${loli} slaves.`;
						}
					}
					if (V.clubAdsXX === 1) {
						if (slave.dick === 0 && slave.scrotum === 0) {
							r += ` Almost everyone who comes to ${V.clubName} is looking to fuck a ${girl} like ${him}.`;
						}
					} else if (V.clubAdsXX === -1) {
						if (slave.dick > 0) {
							r += ` Almost everyone who comes to ${V.clubName} is looking to poke a ${girl} who cums when buttfucked.`;
						}
					}
				}
				if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs") || (slave.hears === -2)) {
					r += ` ${His} inability to move to the rhythm of the music is very off putting to those looking to party.`;
				}
				if (V.DJ !== 0) {
					const DJpronouns = getPronouns(V.DJ);
					if (V.DJRepBonus > 0) {
						if (slave.assignment === "serve the public") {
							r += ` Working`;
						} else {
							r += ` Living and working`;
						}
						r += ` out of the club, ${he} comes under ${SlaveFullName(V.DJ)}'s `;
						if (V.DJRepBonus < 0.1) {
							r += `completely inept`;
						} else if (V.DJRepBonus < 0.2) {
							r += `unskilled`;
						} else if (V.DJRepBonus < 0.3) {
							r += `skillful`;
						} else {
							r += `masterful`;
						}
						r += ` leadership.`;
						if (V.DJ.face > 40 && (V.DJ.intelligence + V.DJ.intelligenceImplant > 50)) {
							if (slave.devotion > 20) {
								r += ` The DJ is such a gorgeous diva that ${he}'s swept along by ${DJpronouns.possessive} charisma, and does ${his} best to be a worthy part of ${DJpronouns.possessive} entourage.`;
							}
						}
						if (V.DJignoresFlaws !== 1) {
							if (!["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw) && jsRandom(1, 100) > 90) {
								r += ` ${SlaveFullName(V.DJ)} manages to <span class="green">break</span> ${slave.slaveName} of ${his} sexual flaws.`;
								slave.sexualFlaw = "none";
							} else if (slave.behavioralFlaw !== "none" && jsRandom(1, 100) > 90) {
								r += ` ${SlaveFullName(V.DJ)} manages to <span class="green">break</span> ${slave.slaveName} of ${his} flaws.`;
								slave.behavioralFlaw = "none";
							}
						}
					}
				}
			}
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function usageCountDescriptions(slave) {
		r += ` ${His} appearance attracted ${slave.sexAmount} members of the public (${Math.trunc(slave.sexAmount / 7)} a day)`;
		if (slave.sexAmount > 160) {
			r += `, so many that `;
			if (canDoVaginal(slave) && canDoAnal(slave)) {
				r += `each of ${his} holes was`;
			} else if (canDoVaginal(slave) || canDoAnal(slave)) {
				r += `each of ${his} available holes was`;
			} else {
				r += `${his} mouth and anywhere else a dick could fit was`;
			}
			r += ` often filled by more than one cock`;
		} else if (slave.sexAmount > 140) {
			r += `, so many that ${he} spent much of ${his} time getting gangbanged`;
		} else if (slave.sexAmount > 120) {
			r += `, so many that citizens often `;
			if (canDoAnal(slave) || canDoVaginal(slave)) {
				r += `spitroasted`;
			} else {
				r += `double-teamed`;
			}
			r += ` the slut`;
		} else if (slave.sexAmount > 100) {
			r += `, so many that ${he} frequently had sex with multiple citizens at once`;
		} else if (slave.sexAmount > 70) {
			r += `, so many that ${he} occasionally had sex with multiple citizens at once`;
		}
		r += `. Most of them `;
		if (slave.sexQuality > 15) {
			r += `were putty in ${his} hands.`;
		} else if (slave.sexQuality > 10) {
			r += `greatly enjoyed ${his} services.`;
		} else if (slave.sexQuality > 5) {
			r += `enjoyed ${his} body.`;
		} else {
			r += `liked using ${him}.`;
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function comingOfAge(slave) {
		if (slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset") && arcology.FSRestart === "unset") {
			if (slave.birthWeek === 0) {
				r += ` ${He} just turned ${V.minimumSlaveAge} this week, giving ${him} an immense boost to both popularity and appeal. ${He} is also expected to become fertile soon, giving ${him} an additional boost as citizens clamor to claim ${his} fresh womb.`;
			} else if (slave.birthWeek < 4) {
				r += ` This is still the first month in which it's legal to pay to fuck ${him}, giving ${him} a boost to both popularity and appeal. ${He} was also anticipated to become fertile this month, and ${his} womb is still unoccupied, giving ${him} an additional boost.`;
			}
		} else if (slave.physicalAge === V.minimumSlaveAge) {
			if (slave.birthWeek === 0) {
				r += ` ${He} just turned ${V.minimumSlaveAge} this week, giving ${him} an immense boost to both popularity and appeal.`;
			} else if (slave.birthWeek < 4) {
				r += ` This is still the first month in which it's legal to pay to fuck ${him}, giving ${him} a boost to both popularity and appeal.`;
			}
		} else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset")) {
			if (slave.birthWeek === 0) {
				r += ` ${He} is expected to become fertile soon, giving ${him} an immense boost to both popularity and appeal as citizens clamor to claim ${his} fresh womb.`;
			} else if (slave.birthWeek < 4) {
				r += ` This is still the first month in which ${he} was anticipated to become fertile, and ${his} womb is still unoccupied, giving ${him} a boost to both popularity and appeal.`;
			}
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function mentalEffects(slave) {
		if (slave.behavioralQuirk === "advocate") {
			r += ` ${slave.slaveName} <span class="hotpink">really enjoys</span> being able to share ${his} convert's enthusiasm about slavery with new people.`;
			slave.devotion += 1;
		} else if (slave.behavioralQuirk === "funny") {
			r += ` ${slave.slaveName} <span class="hotpink">really enjoys</span> making so many people laugh.`;
			slave.devotion += 1;
		}
		if (slave.sexualQuirk === "tease") {
			r += ` ${slave.slaveName} <span class="mediumaquamarine">trusts your judgment</span> in assigning ${him} a job that affords ${him} a chance to tease and flirt.`;
			slave.trust += 1;
		}
		if (slave.assignment === "serve in the club" && slave.devotion > 50) {
			r += ` Being so far from your presence <span class="mediumorchid">weakens ${his} intense devotion to you.</span>`;
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function physicalEffects(slave) {
		let injury = 0;
		if (slave.assignment !== "serve in the club") {
			if (slave.curatives > 0 || slave.inflationType === "curative") {
				r += ` The drugs `;
				if (slave.inflationType === "curative") {
					r += `${he} holds within ${his} gut`;
				} else {
					r += `${he}'s on`;
				}
				r += ` protect ${him} from the wear of being a slut.`;
			} else if (slave.health < -50) {
				r += ` The stress of being a slut while ill is <span class="red">very hard on ${him}.</span>`;
				slave.health -= 10;
				injury = 1;
			} else if (slave.health < -20 && jsRandom(1, 100) > 50) {
				r += ` The stress of being a slut while ill is <span class="red">hard on ${him}.</span>`;
				slave.health -= 7;
				injury = 1;
			} else if (slave.vagina < 0) {
				if ((slave.skill.anal + slave.skill.oral) >= 200) {
					r += ` ${He}'s such an expert public servant that ${he} copes with the stress of being a ${SlaveTitle(slave)} slut.`;
				} else if (jsRandom(1, 100) > (40 + (10 * (slave.skill.anal + slave.skill.oral)))) {
					r += ` The stress of being a ${SlaveTitle(slave)} slut is <span class="red">hard on ${him}.</span>`;
					slave.health -= 7;
					injury = 1;
				}
			} else if (slave.vagina > 0 && !canDoVaginal(slave)) {
				if (canDoAnal(slave)) {
					if ((slave.skill.anal + slave.skill.oral) >= 200) {
						r += ` ${He}'s such an expert slut that ${he} copes with the stress of being limited to buttsex and oral.`;
					} else if (jsRandom(1, 100) > (40 + (10 * (slave.skill.anal + slave.skill.oral)))) {
						r += ` The stress of being limited to buttsex and oral is <span class="red">hard on ${him}.</span>`;
						slave.health -= 7;
						injury = 1;
					}
				} else {
					if (slave.skill.oral >= 100) {
						r += ` ${He}'s such an expert slut that ${he} copes with the stress of being limited to oral.`;
					} else if (jsRandom(1, 100) > (40 + (10 * slave.skill.oral))) {
						r += ` The stress of being limited to oral sex is <span class="red">hard on ${him}.</span>`;
						slave.health -= 7;
						injury = 1;
					}
				}
			} else if ((slave.skill.anal + slave.skill.oral + slave.skill.vaginal) < 300) {
				if (jsRandom(1, 100) > (10 + ((slave.skill.anal + slave.skill.oral + slave.skill.vaginal) / 10))) {
					injury = 1;
				}
			}
		}
		if (injury === 1) {
			slave.health -= 3;
			let injuryChance;
			if (canDoAnal(slave)) {
				injuryChance = jsRandom(1, 100);
			} else {
				injuryChance = jsRandom(1, 80);
			}
			if (injuryChance > 80) {
				slave.minorInjury = "sore ass";
				r += ` Rough anal with a careless citizen left ${him} with a <span class="red">${slave.minorInjury}.</span>`;
				r += minorInjuryResponse(slave);
			} else if (injuryChance > 60) {
				slave.minorInjury = "black eye";
				r += ` A violent citizen left ${him} with a <span class="red">${slave.minorInjury}.</span>`;
				r += minorInjuryResponse(slave);
			} else if (injuryChance > 40) {
				slave.minorInjury = "split lip";
				r += ` An abusive citizen left ${him} with a <span class="red">${slave.minorInjury}.</span>`;
				r += minorInjuryResponse(slave);
			} else if (injuryChance > 20) {
				slave.minorInjury = "bad bruise";
				r += ` A rough citizen left ${him} with a <span class="red">${slave.minorInjury}.</span>`;
				r += minorInjuryResponse(slave);
			} else {
				slave.minorInjury = "sore muscle";
				r += ` The hard labor of constant sex left ${him} with a <span class="red">${slave.minorInjury}.</span>`;
			}
		}

		if (canDoVaginal(slave)) {
			if (slave.vagina === 0) {
				if (slave.aphrodisiacs > 1 || slave.inflationType === "aphrodisiac") {
					r += ` ${His} virginity goes to the citizen who most deserves the gift of a slave's cherry. ${He}'s so full of aphrodisiacs that ${he} enjoys the experience. ${His} pussy is now broken in.`;
					slave.devotion += 4;
					slave.vagina = 1;
				} else if (slave.devotion > 20) {
					r += ` ${His} virginity goes to the citizen who most deserves the gift of a slave's cherry. Losing ${his} virginity in this way confirms ${his} submission to you. ${His} pussy is now broken in.`;
					slave.devotion += 4;
					slave.vagina = 1;
				} else {
					r += ` ${His} virginity goes to the citizen who most deserves the gift of a slave's cherry. ${He} tries to resist, and losing ${his} virginity to a rape makes ${him} hate and fear you a great deal. ${His} pussy is now broken in.`;
					slave.devotion -= 10;
					slave.trust -= 10;
					slave.vagina = 1;
				}
			} else if (slave.vagina < 3) {
				if (jsRandom(1, 100) > ((170 - slave.sexAmount) + (slave.vagina * 10) + (slave.skill.vaginal / 3))) {
					r += ` <span class="lime">${His} pussy gets loosened by the intense use.</span>`;
					slave.vagina += 1;
				}
			}
		}

		if (canDoAnal(slave)) {
			if (slave.anus === 0) {
				if (slave.aphrodisiacs > 1 || slave.inflationType === "aphrodisiac") {
					r += ` ${His} tight little anus goes to the most prominent citizen to show an interest in an anal virgin. ${He}'s so full of aphrodisiacs that ${he} enjoys the experience. ${His} fresh asshole is fucked all week, and by the end of it ${he} won't sit down.`;
					slave.devotion += 4;
					slave.anus = 2;
				} else if (slave.devotion > 20) {
					r += ` ${His} tight little anus goes to the most prominent citizen to show an interest in an anal virgin. The pain and humiliation confirm ${his} submission to you. ${His} fresh asshole is fucked all week, and by the end of it ${he} won't sit down.`;
					slave.devotion += 4;
					slave.anus = 2;
				} else {
					r += ` ${His} tight little anus goes to the most prominent citizen to show an interest in an anal virgin. The pain and humiliation increases ${his} hatred and fear for you. ${His} fresh asshole is fucked all week, and by the end of it ${he} won't sit down.`;
					slave.devotion -= 5;
					slave.trust -= 5;
					slave.anus = 2;
				}
			} else if (slave.anus < 3) {
				if (slave.vagina < 0) {
					if (jsRandom(1, 100) > ((150 - slave.sexAmount) + (slave.anus * 10) + (slave.skill.anal / 6))) {
						r += ` <span class="lime">${His} asshole sees constant use in place of a pussy and loosens.</span>`;
						slave.anus += 1;
					}
				} else if (!canDoVaginal(slave)) {
					if (jsRandom(1, 100) > ((150 - slave.sexAmount) + (slave.anus * 10) + (slave.skill.anal / 6))) {
						r += ` <span class="lime">${His} asshole sees constant use in place of ${his} protected pussy and loosens.</span>`;
						slave.anus += 1;
					}
				} else {
					if (jsRandom(1, 100) > ((160 - slave.sexAmount) + (slave.anus * 10) + (slave.skill.anal / 6))) {
						r += ` <span class="lime">${His} asshole loosens with constant use.</span>`;
						slave.anus += 1;
					}
				}
			}
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function slaveSkills(slave) {
		let skillIncrease;
		if (!setup.entertainmentCareers.includes(slave.career) && slave.skill.entertainer < V.masteredXP) {
			slave.skill.entertainer += jsRandom(1, Math.ceil((slave.intelligence + slave.intelligenceImplant) / 15) + 8);
		}
		if (setup.entertainmentCareers.includes(slave.career)) {
			r += ` ${He} has experience with entertainment from ${his} life before ${he} was a slave, making ${him} more effective.`;
		} else if (slave.skill.entertainer >= V.masteredXP) {
			r += ` ${He} has learned to be entertaining from working for you, making ${him} more effective.`;
		}

		if (slave.devotion > 20) {
			if (!canWalk(slave)) {
				r += ` Since ${he} can't walk, never mind dance, ${he} sits on a stool near the floor to flirt until a citizen feels like helping ${him} back to a private room.`;
			} else if (slave.skill.entertainment <= 30) {
				r += ` ${He} attracts some attention by stripping, come-ons, and simple dancing.`;
			} else if (slave.skill.entertainment <= 60) {
				r += ` ${He} attracts more attention with striptease, flirting, and erotic dancing.`;
			} else if (slave.skill.entertainment < 100) {
				r += ` ${He} attracts much attention with arousing innuendo and lusty striptease.`;
			} else {
				r += ` ${He} attracts popular attention with clever flirting and world-class erotic dancing.`;
			}
		}

		if (slave.aphrodisiacs > 1 || slave.inflationType === "aphrodisiac") {
			r += ` The aphrodisiac cocktail has ${him} so desperately horny that regardless of ${his} personal feelings, ${he} gets off with the public all week. In ${his} drug-addled state ${he} doesn't remember enough to learn sexual skills.`;
			slave.devotion += 4;
		} else if (slave.devotion <= 20 && slave.energy <= 95) {
			if (slave.trust >= -20) {
				r += ` ${He} tries to refuse being treated as an open slut, so ${he} is restrained for public use. ${He} loses a bit of ${himself} to a week of rape, but remembers enough to know you're responsible, and can force ${him} if necessary.`;
				slave.devotion -= 5;
				slave.trust -= 5;
			} else {
				r += ` ${He} doesn't show much enthusiasm, but the habit of sexual slavery <span class="hotpink">wears away at ${his} will.</span>`;
				slave.devotion += 4;
			}
		} else {
			if ((slave.skill.oral + slave.skill.anal >= 200) && ((slave.skill.vaginal >= 100) || !canDoVaginal(slave))) {
				r += ` ${He}'s a <span class="aquamarine">sexual master</span> `;
				if (canDoVaginal(slave)) {
					r += `whose`;
				} else {
					r += `and despite `;
					if (slave.vagina < 0) {
						r += `${his} lack of a`;
					} else {
						r += `the inaccessibility of ${his}`;
					}
					r += ` front hole, ${his}`;
				}
				r += ` charms are only for the <span class="green">most prominent citizens.</span> When ${he}'s not `;
				if (canDoVaginal(slave) && jsRandom(1, 4) === 1) {
					r += `pleasing high society with ${his} `;
					if (slave.prestige > 1 || slave.pornPrestige > 2) {
						r += `prestigious`;
					} else {
						r += `popular`;
					}
					r += ` pussy,`;
				} else if (slave.sexAmount > 70 && jsRandom(1, 3) === 1) {
					r += `getting gangbanged,`;
				} else if (jsRandom(1, 2) === 1) {
					r += `giving away one of ${his} `;
					if (slave.prestige > 1 || slave.pornPrestige > 2) {
						r += `famous`;
					} else {
						r += `top-tier`;
					}
					r += ` blowjobs,`;
				} else {
					r += `providing free access to ${his} `;
					if (slave.prestige > 1 || slave.pornPrestige > 2) {
						r += `legendary`;
					} else {
						r += `notorious`;
					}
					r += ` anus,`;
				}
				r += ` ${he} offers personal training and sexual therapy.`;
			} else {
				r += ` ${He} shows diligence, and ${his} <span class="green">sexual skills improve,</span> according to what the citizens demand`;
				if (!canDoVaginal(slave)) {
					r += ` and what's possible for ${him}`;
				}
				r += `.`;
				skillIncrease = (5 + Math.floor((slave.intelligence + slave.intelligenceImplant) / 32) + V.oralUseWeight);
				r += ` ${SkillIncrease.Oral(slave, skillIncrease)}`;
				if (canDoVaginal(slave)) {
					skillIncrease = (5 + Math.floor((slave.intelligence + slave.intelligenceImplant) / 32) + V.vaginalUseWeight);
					r += ` ${SkillIncrease.Vaginal(slave, skillIncrease)}`;
				}
				if (canDoAnal(slave)) {
					skillIncrease = (5 + Math.floor((slave.intelligence + slave.intelligenceImplant) / 32) + V.analUseWeight);
					r += ` ${SkillIncrease.Anal(slave, skillIncrease)}`;
				}
			}
			if (slave.amp !== 1) {
				if (slave.skill.entertainment < 100) {
					r += ` ${He} gains experience as a public slut.`;
					skillIncrease = (10 + Math.floor((slave.intelligence + slave.intelligenceImplant) / 32));
					r += ` ${SkillIncrease.Entertain(slave, skillIncrease)}`;
				}
			}
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function publicReactions(slave) {
		let sstp;

		if ((slave.releaseRules === "restrictive" || slave.releaseRules === "chastity") && slave.standardReward !== "orgasm") {
			r += ` ${He}'s a better slut because public service is ${his} main sexual outlet.`;
		}

		// Someone double check this block
		if (V.familyTesting === 1) {
			if (totalRelatives(slave) > 0) {
				let children = [];
				children = V.slaves.filter(
					function(s) {
						return ((slave.ID === s.father || slave.ID === s.mother || s.ID === slave.father || s.ID === slave.mother || areSisters(slave, s) > 0) && (s.assignment === slave.assignment));
					}
				);
				if (children.length > 2) {
					r += ` Since ${his} relatives,`;
					sstp = 0;
					for (; sstp < children.length; sstp++) {
						if (sstp < children.length - 1) {
							r += ` ${children[sstp].slaveName},`;
						} else {
							r += ` and ${children[sstp].slaveName},`;
						}
					}
					r += ` are public sluts too, ${he} earns extra attention.`;
					if (arcology.FSEgyptianRevivalist > 20) {
						r += ` Citizens are very excited about being able to participate in incestuous sex like the ancient Egyptians.`;
					} else if (arcology.FSEgyptianRevivalistIncestPolicy === 1) {
						r += ` Citizens are very excited about being able to participate in incestuous sex.`;
					}
				} else if (children.length > 1) {
					r += ` Since ${his} relatives, ${children[0].slaveName} and ${children[1].slaveName}, are public sluts too, ${he} earns extra attention.`;
					if (arcology.FSEgyptianRevivalist > 20) {
						r += ` Citizens are very excited about being able to participate in incestuous sex like the ancient Egyptians.`;
					} else if (arcology.FSEgyptianRevivalistIncestPolicy === 1) {
						r += ` Citizens are very excited about being able to participate in incestuous sex.`;
					}
				} else if (children.length > 0) {
					r += ` Since ${his} relative, ${children[0].slaveName}, is a public slut too, ${he} earns extra attention.`;
					if (arcology.FSEgyptianRevivalist > 20) {
						r += ` Citizens are very excited about being able to participate in incestuous sex like the ancient Egyptians.`;
					} else if (arcology.FSEgyptianRevivalistIncestPolicy === 1) {
						r += ` Citizens are very excited about being able to participate in incestuous sex.`;
					}
				}
			}
		} else {
			if (slave.relation !== 0) {
				sstp = V.slaveIndices[slave.relationTarget];
				if (sstp !== undefined && slave.assignment === V.slaves[sstp].assignment) {
					r += ` Since ${his} ${V.slaves[sstp].relation} ${V.slaves[sstp].slaveName} is a public slut too, ${he} earns extra attention.`;
					if (arcology.FSEgyptianRevivalist > 20) {
						r += ` Citizens are very excited about being able to participate in incestuous sex like the ancient Egyptians.`;
					} else if (arcology.FSEgyptianRevivalistIncestPolicy === 1) {
						r += ` Citizens are very excited about being able to participate in incestuous sex.`;
					}
				}
			}
		}
		if (slave.relationship > 0) {
			sstp = V.slaveIndices[slave.relationshipTarget];
			if (sstp !== undefined && slave.assignment === V.slaves[sstp].assignment) {
				r += ` ${His} ${relationshipTerm(slave)} ${V.slaves[sstp].slaveName} is also serving the public and they work well together.`;
			}
		} else if (slave.relationship === -1) {
			r += ` ${He} relies on citizens' desire to fuck ${him} for emotional support, making ${him} an excellent, if occasionally disturbing, slut.`;
		}
		if (slave.rivalry !== 0) {
			sstp = V.slaveIndices[slave.rivalryTarget];
			if (sstp !== undefined && slave.assignment === V.slaves[sstp].assignment) {
				r += ` ${He}'s a little less effective due to ${his} mutual dislike with ${V.slaves[sstp].slaveName}.`;
			}
		}

		if (slave.minorInjury !== 0) {
			r += ` ${He} attracts fewer people due to ${his} minor injury.`;
		}

		if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs") || (slave.hears === -2)) {
			r += ` ${His} trouble hearing causes ${him} to miss potential partners.`;
		}

		if (canTalk(slave)) {
			if (slave.voice > 2) {
				if (slave.voiceImplant > 0) {
					r += ` ${His} high-pitched bimbo voice improves ${his} come-ons.`;
				} else {
					r += ` ${His} high, girly voice improves ${his} come-ons.`;
				}
			} else if (slave.voice === 1) {
				r += ` Most citizens find ${his} deep voice unattractive, making it harder for ${him} to flirt successfully.`;
			}
		}

		if (arcology.FSTransformationFetishist > 20 || arcology.FSDegradationist > 20) {
			if ((V.modScore > 15) || (V.piercingScore > 8 && V.tatScore > 5)) {
				r += ` The public fetishizes body mods and considers ${hers} fascinating.`;
			} else if (V.modScore > 7) {
				r += ` The public fetishizes body mods and considers ${hers} interesting.`;
			}
		} else if (arcology.FSBodyPurist > 20 || arcology.FSPaternalist > 20) {
			if (V.modScore <= 7) {
				r += ` The public disapproves of body mods and is pleased that ${he}'s unspoiled in that regard.`;
			} else {
				r += ` The public disapproves of body mods and considers ${hers} unappealing.`;
			}
		} else {
			if ((V.modScore > 15) || (V.piercingScore > 8 && V.tatScore > 5)) {
				r += ` ${He} has so much body art that most potential patrons don't think ${he} needs any more.`;
			} else if (slave.corsetPiercing !== 0 || V.piercingScore >= 3 || V.tatScore >= 2) {
				r += ` ${His} body art helps attract patrons to use $him freely.`;
			}
		}

		if (slave.aphrodisiacs > 1 || (slave.inflationType === "aphrodisiac" && slave.inflation > 1)) {
			r += ` On such a heavy aphrodisiac dose, ${he} can't wait for each citizen to fuck ${him}.`;
			if (slave.inflationType === "aphrodisiac" && canDoAnal(slave)) {
				r += ` Which is practically nonstop, as anyone that fucks ${his} ass gets a hit of the aphrodisiacs within ${his} belly.`;
			}
		} else if (slave.aphrodisiacs > 0 || (slave.inflationType === "aphrodisiac")) {
			r += ` On aphrodisiacs, ${he} climaxes with every citizen.`;
			if (slave.inflationType === "aphrodisiac" && canDoAnal(slave)) {
				r += ` Which happens often, as anyone that fucks ${his} ass gets a tiny hit of the aphrodisiacs within ${his} belly.`;
			}
		} else if (slave.devotion > 95) {
			r += ` ${He}'s so devoted that ${he} does ${his} best and pleases every citizen.`;
		} else if (slave.devotion > 50) {
			r += ` ${He}'s so devoted that ${he} works hard to please citizens.`;
		} else if (slave.trust < -20) {
			r += ` ${He}'s afraid of you, so ${he} works hard to please citizens.`;
		} else {
			r += ` ${He} neither loves nor fears you enough to work hard, and makes a poor slut.`;
		}

		if (isStacked(slave)) {
			if (arcology.FSAssetExpansionist !== "unset") {
				r += ` ${His} huge, fashionable assets are immensely popular.`;
				if (canTalk(slave)) {
					if (slave.voice > 2) {
						r += ` ${His} high voice contributes to ${his} bimbo image, so ${he} does even better.`;
					}
				}
			} else if (arcology.FSSlimnessEnthusiast >= 20) {
				r += ` ${He} receives little attention for ${his} large assets since many citizens consider them disgusting.`;
			} else {
				r += ` The public enjoys ${his} huge assets.`;
			}
			if (arcology.FSGenderRadicalist !== "unset") {
				if (slave.dick > 0) {
					r += ` The new appetite for stacked sluts with dicks makes ${him} especially successful.`;
				}
			}
		}

		if (slave.visualAge >= 30) {
			if (arcology.FSMaturityPreferentialist !== "unset") {
				r += ` ${His} mature body is very fashionable.`;
			} else if (arcology.FSYouthPreferentialist !== "unset") {
				r += ` ${His} old body is badly out of fashion.`;
			}
		} else {
			if (arcology.FSYouthPreferentialist !== "unset") {
				r += ` ${His} youthful body is very fashionable.`;
			} else if (arcology.FSMaturityPreferentialist !== "unset") {
				r += ` ${His} young body is out of fashion.`;
			}
		}

		if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty > 0) {
			if (V.genderLawPass === 1) {
				if (arcology.FSAssetExpansionist !== "unset") {
					r += ` The public enjoys ${his} fashionably feminine body.`;
				} else {
					r += ` The public enjoys ${his} sleek, girlish figure.`;
				}
				if (canTalk(slave) && slave.voice > 2) {
					r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`;
				}
			}
		} else if (arcology.FSSlimnessEnthusiastLaw === 1) {
			if (slimPass(slave) === 1) {
				r += ` The public enjoys ${his} fashionably sleek little body.`;
				if (canTalk(slave) && slave.voice > 2) {
					r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`;
				}
			}
		} else if (arcology.FSHedonisticDecadenceLaw2 === 1) {
			if (slave.boobs >= 2000 && slave.butt >= 5 && slave.weight > 95) {
				r += ` The public enjoys ${his} fashionably plump body.`;
				if (canTalk(slave) && slave.voice > 2) {
					r += ` ${His} high voice contributes to ${his} feminine image, so ${he} does even better.`;
				}
			}
		} else {
			if (slave.boobs < 500 && slave.butt < 3) {
				if (slave.muscles <= 30 && arcology.FSPhysicalIdealist === "unset" && slave.weight <= 10 && arcology.FSHedonisticDecadence === "unset") {
					if (arcology.FSSlimnessEnthusiast > 20) {
						r += ` The public enjoys ${his} fashionably sleek little body.`;
					} else {
						r += ` The public enjoys ${his} sleek, girlish figure.`;
					}
					if (canTalk(slave) && slave.voice > 2) {
						r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`;
					}
				} else if (arcology.FSPhysicalIdealist !== "unset") { // no muscle malus for muscle loving societies
					if (arcology.FSPhysicalIdealistStrongFat === 1 && slave.weight <= 30) { // reduced weight malus for fat loving societies
						if (arcology.FSSlimnessEnthusiast > 20) {
							r += ` The public enjoys ${his} fashionably sleek little body.`;
						} else {
							r += ` The public enjoys ${his} sleek, girlish figure.`;
						}
						if (canTalk(slave) && slave.voice > 2) {
							r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`;
						}
					} else if (slave.weight <= 10) {
						if (arcology.FSSlimnessEnthusiast > 20) {
							r += ` The public enjoys ${his} fashionably sleek little body.`;
						} else {
							r += ` The public enjoys ${his} sleek, girlish figure.`;
						}
						if (canTalk(slave) && slave.voice > 2) {
							r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`;
						}
					}
				} else if (arcology.FSHedonisticDecadence !== "unset" && slave.weight <= 30) { // reduced weight malus for fat loving societies
					if (arcology.FSHedonisticDecadenceStrongFat === 1) { // no muscle malus for muscle loving societies
						if (arcology.FSSlimnessEnthusiast > 20) {
							r += ` The public enjoys ${his} fashionably sleek little body.`;
						} else {
							r += ` The public enjoys ${his} sleek, girlish figure.`;
						}
						if (canTalk(slave) && slave.voice > 2) {
							r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`;
						}
					} else if (slave.muscles <= 30) {
						if (arcology.FSSlimnessEnthusiast > 20) {
							r += ` The public enjoys ${his} fashionably sleek little body.`;
						} else {
							r += ` The public enjoys ${his} sleek, girlish figure.`;
						}
						if (canTalk(slave) && slave.voice > 2) {
							r += ` ${His} high voice contributes to ${his} girlish image, so ${he} does even better.`;
						}
					}
				}
			}
		}

		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.`;
			} else if (arcology.FSTransformationFetishist >= 20) {
				r += ` The public is disappointed by ${his} all-natural, implant free appearance.`;
			} else {
				r += ` Some discerning people appreciate ${his} all-natural, implant free appearance.`;
			}
		} else {
			if (arcology.FSTransformationFetishist !== "unset") {
				r += ` The public appreciates ${his} augmented body.`;
			}
		}

		if (slave.nipples === "fuckable") {
			if (arcology.FSTransformationFetishist !== "unset") {
				r += ` ${His} fuckable nipples give ${him} an edge over those without such body modifications.`;
			} else {
				r += ` ${His} fuckable nipples entice some of the more curious citizens.`;
			}
		}

		if (slave.teeth === "removable") {
			r += ` The extra attention ${he} receives from ${his} ability to give toothless sucks is about balanced out by the citizens who are disgusted by it.`;
		} else if (slave.teeth === "pointy") {
			r += ` The extra attention ${he} receives due to ${his} sharp teeth is balanced by the citizens who are scared off by them.`;
		}

		if (slave.dick !== 0) {
			if (arcology.FSGenderRadicalist === "unset") {
				r += ` ${He}'s less popular because many citizens prefer sluts without cocks.`;
			} else if (arcology.FSGenderRadicalist < 50) {
				r += ` ${His} cock entices some citizens and disappoints others; it has little effect on ${his} popularity.`;
			} else {
				r += ` The overwhelming majority of citizens consider ${his} cock an attraction.`;
			}
		}

		if (slave.muscles > 95) {
			if (arcology.FSPhysicalIdealist !== "unset") {
				r += ` In the new culture of ${arcology.name} ${his} muscles are cause for great admiration.`;
			} else {
				r += ` ${His} muscles scare off many, but some will do anything to enjoy a muscular slave.`;
			}
		}

		if (slave.amp === 1) {
			r += ` Many prefer to fuck someone with limbs, but some greatly enjoy fucking a helpless amputee.`;
		}

		if (slave.lactation > 0) {
			r += ` ${He} appeals to citizens who like lactation play, or just like sluts they can drink milk from.`;
			slave.lactationDuration = 2;
			slave.boobs -= slave.boobsMilk;
			slave.boobsMilk = 0;
		}

		if (slave.bellyPreg >= 1500 || setup.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) {
			if (arcology.FSRepopulationFocus !== "unset") {
				r += ` In the new culture of ${arcology.name}, ${his}`;
				if (setup.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) {
					r += ` apparent`;
				}
				r += ` pregnancy gets ${him} lots of attention.`;
			} else if (slave.bellyAccessory.FSRepopulationFocusPregPolicy === 1 && slave.bellyPreg >= 1500) {
				r += ` It's currently trendy to be ripe with child, so ${his} pregnancy gets ${him} lots of attention.`;
			} else if (arcology.FSRestart !== "unset") {
				r += ` In the new culture of ${arcology.name}, ${his}`;
				if (setup.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) {
					r += ` apparent`;
				}
				r += ` pregnancy is a massive turn off to citizens.`;
			} else if (arcology.FSGenderFundamentalist !== "unset") {
				r += ` The new respect for slave fertility ensures that ${he} gets just as much love as slaves without pregnant bellies`;
				if (setup.fakeBellies.includes(slave.bellyAccessory) || slave.bellyImplant >= 1500) {
					r += `, even if ${his} bump isn't real`;
				}
				r += `.`;
			} else {
				r += ` Many citizens avoid visibly pregnant slaves.`;
			}
		}

		if (arcology.FSRepopulationFocusMilfPolicy === 1 && slave.counter.birthsTotal > 0) {
			r += ` Slaves that have had children are hot right now making ${him} quite the appealing MILF.`;
		}

		if (V.seeRace === 1) {
			if (slave.race === "white") {
				r += ` The public tastes favor white ${girl}s like ${slave.slaveName}.`;
			}
		}
		if (arcology.FSSupremacist !== "unset") {
			if (slave.race !== arcology.FSSupremacistRace) {
				r += ` Some citizens fetishize ${girl}s of the servile races.`;
			}
		}
		if (arcology.FSSubjugationist !== "unset") {
			if (slave.race === arcology.FSSubjugationistRace) {
				r += ` Many prefer to use and abuse sluts of the proper slave race.`;
			}
		}
		if (arcology.FSEdoRevivalist !== "unset") {
			if (slave.nationality === "Japanese" || slave.nationality === "Edo Revivalist") {
				r += ` As a proper Japanese ${girl}, ${he} is considered extremely desirable.`;
			}
		} else if (arcology.FSChineseRevivalist !== "unset") {
			if (slave.nationality === "Chinese" || slave.nationality === "Chinese Revivalist") {
				r += ` As a proper Chinese ${girl}, ${he} is considered extremely desirable.`;
			}
		}

		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.`;
		}

		if (slave.prestige > 0) {
			r += ` ${He} attracts more attention because it's prestigious to be seen with ${him}.`;
		}

		if (slave.pornPrestige > 2) {
			r += ` Patrons line up for the chance to spend time with the face of ${slave.porn.fameType} porn.`;
		} else if (slave.pornPrestige > 1) {
			r += ` ${He} has a sizable fanbase, one that is eager to spend time with ${him}.`;
		} else if (slave.pornPrestige > 0) {
			r += ` A few of ${his} fans recognize ${him} and eagerly make use of ${him}.`;
		}

		if (slave.clitPiercing === 3 && slave.devotion >= -20) {
			r += ` Almost everyone loves ${his} orgasms encouraged by ${his} smart piercing.`;
		} else if (slave.clitPiercing === 3) {
			r += ` Almost everyone appreciates ${his} reduced reluctance caused by ${his} smart piercing.`;
		}

		if (slave.fetishKnown === 1 && slave.fetishStrength > 60) {
			switch (slave.fetish) {
				case "submissive":
					r += ` ${He} receives extra attention for ${his} eagerness to submit.`;
					break;
				case "cumslut":
					r += ` ${He} receives extra attention for ${his} enjoyment of cum.`;
					break;
				case "humiliation":
					r += ` ${He} receives extra attention for ${his} eagerness to be humiliated by citizens.`;
					break;
				case "buttslut":
					if (canDoAnal(slave)) {
						r += ` ${He} receives extra attention for ${his} obvious enjoyment of buttsex.`;
					}
					break;
				case "dom":
					r += ` ${He} receives some extra attention for ${his} enthusiasm dominating other slaves in group sex.`;
					break;
				case "masochist":
					r += ` ${He} receives extra attention for ${his} obvious enjoyment of pain.`;
					break;
				case "boobs":
					r += ` ${He} receives extra attention for ${his} obvious enjoyment of a solid chest groping.`;
					break;
				case "sadist":
					r += ` ${He} receives some extra attention for ${his} willingness to abuse other slaves.`;
					break;
				case "pregnancy":
					if (slave.mpreg === 0) {
						if (slave.vagina > 0 && canDoVaginal(slave)) {
							r += ` As an impregnation fetishist ${he}'s very enthusiastic about vaginal sex.`;
						}
					} else {
						if (slave.anus > 0 && canDoAnal(slave)) {
							r += ` As an impregnation fetishist ${he}'s very enthusiastic about anal sex.`;
						}
					}
					break;
				case "mindbroken":
					r += ` ${He} receives less attention because ${he} just lies there, totally unresponsive.`;
					break;
			}
		}

		if (slave.attrKnown === 1) {
			if (slave.energy > 95) {
				r += ` As a nymphomaniac ${he} gets sexual release from every sex act and is a crowd favorite.`;
				slave.need -= slave.sexAmount;
			} else if (slave.energy > 80) {
				r += ` With ${his} powerful sex drive ${he} rarely has to fake an orgasm.`;
				slave.need -= (slave.sexAmount * 0.9);
			} else if (slave.aphrodisiacs > 0 || slave.inflationType === "aphrodisiac") {
				r += ` With ${his} aphrodisiac boosted libido, it's barely possible to discern ${him} from a natural nymphomaniac.`;
				slave.need -= (slave.sexAmount * 0.9);
			} else if (slave.energy > 60) {
				r += ` With ${his} good sex drive ${he} often orgasms with citizens.`;
				slave.need -= (slave.sexAmount * 0.8);
			} else if (slave.energy > 40) {
				r += ` With ${his} average sex drive ${he} occasionally orgasms with citizens.`;
				slave.need -= (slave.sexAmount * 0.5);
			} else if (slave.energy > 20) {
				r += ` With ${his} poor sex drive ${he} almost never orgasms with citizens.`;
				slave.need -= (slave.sexAmount * 0.1);
			} else {
				r += ` Since ${he}'s frigid, ${he} rarely experiences authentic arousal with citizens.`;
			}
			if (slave.attrXY <= 15) {
				if (slave.attrXX <= 15) {
					r += ` ${His} general disgust with sex makes ${him} a very poor slut.`;
				} else if (slave.attrXX <= 85) {
					r += ` ${His} sexual disgust with men makes ${him} a poor slut.`;
				} else if (slave.attrXX <= 95) {
					r += ` ${His} sexual disgust with men hinders ${him}, though ${he} is more enthusiastic with female citizens.`;
				} else {
					r += ` ${His} sexual disgust with men hinders ${him}, though ${he} makes up for it with female citizens.`;
				}
			} else if (slave.attrXY <= 85) {
				if (slave.attrXX <= 15) {
					r += ` ${His} sexual disgust with men makes ${him} a poor slut.`;
				} else if (slave.attrXX <= 85) {
					r += ` ${His} indifference to men and women makes ${him} a poor slut.`;
				} else if (slave.attrXX <= 95) {
					r += ` ${His} sexual indifference to men hinders ${him}, though ${he} is more enthusiastic with female citizens.`;
				} else {
					r += ` ${His} sexual indifference to men hinders ${him}, though $he makes up for it with female citizens.`;
				}
			} else if (slave.attrXY <= 95) {
				if (slave.attrXX <= 15) {
					r += ` ${His} sexual disgust with women hinders ${him}, though ${he} makes up for it with male citizens.`;
				} else if (slave.attrXX <= 85) {
					r += ` ${His} sexual indifference to women hinders ${him}, though $he makes up for it with male citizens.`;
				} else if (slave.attrXX <= 95) {
					r += ` ${He} has the advantage of sexual sincerity with both men and women.`;
				} else {
					r += ` ${He}'s a good slut with male citizens, and truly enthusiastic with women.`;
				}
			} else {
				if (slave.attrXX <= 15) {
					r += ` ${His} sexual disgust with women hinders ${him}, though ${he} is enthusiastic with male citizens.`;
				} else if (slave.attrXX <= 85) {
					r += ` ${His} sexual indifference to women hinders ${him}, though ${he} is enthusiastic with male citizens.`;
				} else if (slave.attrXX <= 95) {
					r += ` ${He}'s a good slut with female citizens, and truly enthusiastic with men.`;
				} else {
					r += ` ${He}'s openly lustful towards all citizens, men and women.`;
				}
			}
		}

		switch (slave.behavioralQuirk) {
			case "confident":
				r += ` ${He}'s better at ${his} job because ${he}'s so confident in the club.`;
				break;
			case "cutting":
				r += ` ${He} gets a lot of attention for ${his} ability to joke at a patron's expense.`;
				break;
			case "funny":
				r += ` ${He} frequently has ${his} corner of the club doubled over with laughter at ${his} antics.`;
				break;
			case "adores women":
				r += ` ${He} singles out the prettiest ladies in the club for special personal attention.`;
				break;
			case "adores men":
				r += ` ${He} singles out the hottest hunks in the club for special personal attention.`;
				break;
			case "fitness":
				r += ` ${He} approaches life in the club as a good workout, to the delight of ${his} exhausted partners.`;
				break;
			case "insecure":
				r += ` ${He}'s very willing to be promiscuous, since ${he} values ${himself} mainly as a sex object.`;
				break;
			case "sinful":
				r += ` ${He}'s explicitly sacrilegious in the club, happily transgressing against cultural boundaries.`;
				break;
			case "advocate":
				r += ` ${He} believes that the club represents ${arcology.name} well, and does ${his} best to contribute.`;
				break;
		}
		switch (slave.sexualQuirk) {
			case "gagfuck queen":
				r += ` ${He}'s a popular target for oral gangbangs in the club, late at night.`;
				break;
			case "painal queen":
				if (canDoAnal(slave)) {
					r += ` ${He}'s a popular target for anal gangbangs in the club, late at night.`;
				}
				break;
			case "strugglefuck queen":
				r += ` ${He}'s a popular target for gangbangs in the club, late at night.`;
				break;
			case "tease":
				r += ` Despite being a club slut, ${he} somehow retains the ability to blush enticingly at nudity.`;
				break;
			case "romantic":
				r += ` Despite being a club slut, ${he} somehow retains the ability to make ${his} citizens feel special.`;
				break;
			case "perverted":
				r += ` ${He}'s comfortable with the most perverted citizens' desires.`;
				break;
			case "unflinching":
				r += ` ${He}'s impossible to disgust or surprise, pleasing citizens with odd tastes.`;
				break;
			case "size queen":
				r += ` ${He}'s very eager to spend quality time with big cocks, making ${him} a favorite among the well-endowed.`;
				break;
			case "caring":
				r += ` ${He} really cares for everyone ${he} meets in the club, and will provide a sympathetic ear for anyone who just feels like talking.`;
				break;
		}

		switch (slave.behavioralFlaw) {
			case "arrogant":
				r += ` ${He} receives less gratitude because ${he} treats clients like they are beneath ${his} dignity.`;
				break;
			case "bitchy":
				r += ` ${He} receives less gratitude because ${he} makes cutting remarks to clients.`;
				break;
			case "odd":
				r += ` ${He} receives less gratitude because clients are annoyed by ${his} odd behavior.`;
				break;
			case "hates men":
				r += ` ${He} receives less gratitude because ${he} can't conceal ${his} distaste for the company of men.`;
				break;
			case "hates women":
				r += ` ${He} receives less gratitude because ${he} can't conceal ${his} distaste for the company of women.`;
				break;
			case "devout":
				r += ` ${He} receives less gratitude because people are annoyed by ${his} habit of praying for forgiveness during sex.`;
				break;
			case "liberated":
				r += ` ${He} receives less gratitude because people are annoyed by ${his} obvious belief that being forced to serve them is wrong.`;
				break;
		}
		switch (slave.sexualFlaw) {
			case "hates oral":
				r += ` ${He} receives less gratitude because ${he} tries to avoid sucking cock.`;
				break;
			case "hates anal":
				if (canDoAnal(slave)) {
					r += ` ${He} receives less gratitude because ${he} tries to avoid taking it up the ass.`;
				}
				break;
			case "hates penetration":
				r += ` ${He} receives less gratitude because ${he} tries to avoid getting fucked.`;
				break;
			case "repressed":
				r += ` ${He} receives less gratitude because citizens who don't feel like forcing ${him} sometimes have to cajole ${him} past ${his} repressed sexuality.`;
				break;
			case "idealistic":
				r += ` ${He} receives less gratitude because citizens who don't feel like forcing ${him} sometimes have to convince ${him} to have sex with them.`;
				break;
			case "apathetic":
				r += ` ${He} receives less gratitude because ${he} often just lies there taking dick.`;
				break;
			case "crude":
				r += ` ${He} receives less gratitude because ${he} isn't exactly the most elegant sexual partner.`;
				break;
			case "judgemental":
				r += ` ${He} receives less gratitude because ${he} openly disdains unattractive citizens.`;
				break;
			case "shamefast":
				r += ` ${He} receives less gratitude because ${he} sometimes hesitates to take ${his} clothes off and get to work.`;
				break;
			case "cum addict":
				r += ` ${His} abject begging for cum annoys citizens who aren't looking for oral, but this is more than outweighed by how much it delights those who are.`;
				break;
			case "anal addict":
				r += ` ${His} abject begging for buttsex annoys citizens who aren't interested in fucking ${his} ass, but this is more than outweighed by how much it delights those who are.`;
				break;
			case "attention whore":
				r += ` As an attention whore, public service is ${his} forte, and ${he} delights citizens with ${his} eager willingness to try anything in the open.`;
				break;
			case "breast growth":
				r += ` ${His} excessive obsession with ${his} own breasts, to the detriment of most sexual intercourse, annoys citizens.`;
				break;
			case "abusive":
				r += ` ${He} annoys citizens whenever ${his} sexual abusiveness becomes apparent.`;
				break;
			case "malicious":
				r += ` ${He} annoys citizens whenever ${his} sexual maliciousness becomes apparent.`;
				break;
			case "self hating":
				r += ` ${He} annoys citizens during the crying jags brought on by ${his} self hatred.`;
				break;
			case "neglectful":
				r += ` ${He} annoys those discerning citizens who can tell that ${he} neglects to orgasm with them.`;
				break;
			case "breeder":
				r += ` ${His} obsession with pregnancy annoys citizens who aren't interested in that.`;
				break;
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function addFlaw(slave) {
		if (slave.devotion < 10) {
			if (jsRandom(1, 100) > 70) {
				if (slave.skill.vaginal <= 30 && canDoVaginal(slave)) {
					r += ` After being fucked too hard too often, ${he} now <span class="red">dislikes being penetrated.</span>`;
					slave.sexualFlaw = "hates penetration";
				} else if (slave.skill.anal <= 30 && canDoAnal(slave)) {
					r += ` After so much anal pain, ${he} now <span class="red">dislikes being buttfucked.</span>`;
					slave.sexualFlaw = "hates anal";
				} else if (slave.skill.oral <= 30) {
					r += ` After one too many facials, ${he} now <span class="red">dislikes sucking cock.</span>`;
					slave.sexualFlaw = "hates oral";
				}
			}
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function addRep(slave) {
		if (slave.assignment !== "recruit girls") {
			if (slave.assignment === "serve in the club" || slave.assignment === "be the DJ") {
				repX(Math.trunc((slave.sexAmount * slave.sexQuality) * (1 + (0.003 * slave.skill.entertainment)) * 0.15), "publicServantClub", slave);
			} else if (slave.assignment === "serve the public") {
				repX(Math.trunc((slave.sexAmount * slave.sexQuality) * (1 + (0.003 * slave.skill.entertainment)) * 0.15), "publicServant", slave);
			} else {
				repX(Math.trunc((slave.sexAmount * slave.sexQuality) * (1 + (0.003 * slave.skill.entertainment)) * 0.15), "serving the public in an unregistered building", slave);
			}
		}
		T.incomeStats.income += Math.trunc((slave.sexAmount * slave.sexQuality) * (1 + (0.003 * slave.skill.entertainment)) * 0.15);
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function applyFSDecoration(slave) {
		/* FACILITY DECORATION IMPACTS */
		const fsBeauty = (0.0005 * V.FSSingleSlaveRep * slave.sexAmount);
		switch (V.clubDecoration) {
			case "Roman Revivalist":
				arcology.FSRomanRevivalist += fsBeauty;
				break;
			case "Aztec Revivalist":
				arcology.FSAztecRevivalist += fsBeauty;
				break;
			case "Egyptian Revivalist":
				arcology.FSEgyptianRevivalist += fsBeauty;
				break;
			case "Edo Revivalist":
				arcology.FSEdoRevivalist += fsBeauty;
				break;
			case "Arabian Revivalist":
				arcology.FSArabianRevivalist += fsBeauty;
				break;
			case "Chinese Revivalist":
				arcology.FSChineseRevivalist += fsBeauty;
				break;
			case "Chattel Religionist":
				arcology.FSChattelReligionist += fsBeauty;
				break;
			case "Degradationist":
				arcology.FSDegradationist += fsBeauty;
				break;
			case "Asset Expansionist":
				arcology.FSAssetExpansionist += fsBeauty;
				break;
			case "Transformation Fetishist":
				arcology.FSTransformationFetishist += fsBeauty;
				break;
			case "Gender Radicalist":
				arcology.FSGenderRadicalist += fsBeauty;
				break;
			case "Repopulation Focus":
				arcology.FSRepopulationFocus += fsBeauty;
				break;
			case "Eugenics":
				arcology.FSRestart += fsBeauty;
				break;
			case "Gender Fundamentalist":
				arcology.FSGenderFundamentalist += fsBeauty;
				break;
			case "Physical Idealist":
				arcology.FSPhysicalIdealist += fsBeauty;
				break;
			case "Hedonistic":
				arcology.FSHedonisticDecadence += fsBeauty;
				break;
			case "Supremacist":
				arcology.FSSupremacist += fsBeauty;
				break;
			case "Subjugationist":
				arcology.FSSubjugationist += fsBeauty;
				break;
			case "Paternalist":
				arcology.FSPaternalist += fsBeauty;
				break;
			case "Pastoralist":
				arcology.FSPastoralist += fsBeauty;
				break;
			case "Maturity Preferentialist":
				arcology.FSMaturityPreferentialist += fsBeauty;
				break;
			case "Youth Preferentialist":
				arcology.FSYouthPreferentialist += fsBeauty;
				break;
			case "Body Purist":
				arcology.FSBodyPurist += fsBeauty;
				break;
			case "Slimness Enthusiast":
				arcology.FSSlimnessEnthusiast += fsBeauty;
				break;
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function sexCounts(slave) {
		/* SEX ACT COUNTS AND SEXUAL SATISFACTION */

		oralUse = (V.oralUseWeight + (slave.skill.oral / 30) + (slave.lips / 20));
		analUse = 0;
		if (canDoAnal(slave)) {
			analUse = (V.analUseWeight + (slave.skill.anal / 30) - slave.anus);
			if (analUse < 0) {
				analUse = 0;
			}
		}
		vaginalUse = 0;
		if (canDoVaginal(slave)) {
			vaginalUse = (V.vaginalUseWeight + (slave.skill.vaginal / 30) - slave.vagina);
			if (vaginalUse < 0) {
				vaginalUse = 0;
			}
		}
		mammaryUse = 0;
		// perhaps boost this for truly massive breasts
		if (slave.boobs > 10000) {
			mammaryUse = (5 + V.mammaryUseWeight);
		} else if (slave.boobs > 2000) {
			mammaryUse = (V.mammaryUseWeight + (slave.boobs / 2000));
		}
		if (slave.nipples === "fuckable") {
			mammaryUse *= 2;
		}
		let penetrativeUse = 0;
		if (canDoVaginal(slave) && slave.clit > 1) {
			penetrativeUse += (V.penetrativeUseWeight + (slave.skill.vaginal / 30) + slave.clit);
		}
		if (slave.dick && slave.chastityPenis !== 1) {
			if (canPenetrate(slave)) {
				penetrativeUse += (V.penetrativeUseWeight + slave.dick + Math.min(slave.balls, 10) / 4);
				if (slave.drugs === "hyper testicle enhancement") {
					penetrativeUse += Math.min(slave.balls, 5);
				}
			} else {
				penetrativeUse += (V.penetrativeUseWeight + Math.min(slave.balls, 15) + Math.min(slave.balls, 10) / 8);
				if (slave.drugs === "hyper testicle enhancement") {
					penetrativeUse += Math.min(slave.balls, 5);
				}
			}
		}

		const demand = (oralUse + analUse + vaginalUse + mammaryUse + penetrativeUse);
		oralUse = Math.trunc((oralUse / demand) * slave.sexAmount);
		analUse = Math.trunc((analUse / demand) * slave.sexAmount);
		vaginalUse = Math.trunc((vaginalUse / demand) * slave.sexAmount);
		mammaryUse = Math.trunc((mammaryUse / demand) * slave.sexAmount);
		penetrativeUse = Math.trunc((penetrativeUse / demand) * slave.sexAmount);

		slave.counter.oral += oralUse;
		slave.counter.publicUse += oralUse;
		V.oralTotal += oralUse;
		slave.counter.anal += analUse;
		slave.counter.publicUse += analUse;
		V.analTotal += analUse;
		slave.counter.vaginal += vaginalUse;
		slave.counter.publicUse += vaginalUse;
		V.vaginalTotal += vaginalUse;
		slave.counter.mammary += mammaryUse;
		slave.counter.publicUse += mammaryUse;
		V.mammaryTotal += mammaryUse;
		slave.counter.penetrative += penetrativeUse;
		slave.counter.publicUse += penetrativeUse;
		V.penetrativeTotal += penetrativeUse;

		cervixPump = 0;
		if (slave.cervixImplant === 1 || slave.cervixImplant === 3) {
			cervixPump += (20 * vaginalUse);
		}
		if (slave.cervixImplant === 2 || slave.cervixImplant === 3) {
			cervixPump += (20 * analUse);
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function sexualSatiation(slave) {
		if (slave.need) {
			if (slave.fetishKnown) {
				switch (slave.fetish) {
					case "submissive":
					case "masochist":
						if (analUse + vaginalUse > 0) {
							r += ` ${He} enjoys being fucked, and got sexual satisfaction from the ${num(analUse + vaginalUse)} dicks stuck inside ${him} this week.`;
							slave.need -= (analUse + vaginalUse);
						}
						break;
					case "dom":
					case "sadist":
						if (penetrativeUse > 0) {
							r += ` ${He} enjoys being on top, and got special sexual satisfaction from the ${num(penetrativeUse)} times ${he} got to fuck someone this week.`;
							slave.need -= 2 * penetrativeUse;
						}
						break;
					case "cumslut":
						if (oralUse > 0) {
							r += ` ${He} enjoys sucking, and got sexual satisfaction from the ${num(oralUse)} blowjobs ${he} gave this week.`;
							slave.need -= oralUse;
						}
						break;
					case "buttslut":
						if (analUse > 0) {
							r += ` ${He} enjoys getting buttfucked, and got sexual satisfaction from the ${num(analUse)} times ${he} was sodomized this week.`;
							slave.need -= analUse;
						}
						break;
					case "boobs":
						if (mammaryUse > 0) {
							r += ` ${He} enjoys `;
							if (slave.nipples === "fuckable") {
								r += `having ${his} tits fucked,`;
							} else {
								r += `giving a good titfuck,`;
							}
							r += ` and got sexual satisfaction from the ${num(mammaryUse)} times they were used this week.`;
							slave.need -= mammaryUse;
						}
						break;
					case "pregnancy":
						if (slave.mpreg === 0) {
							if (vaginalUse > 0) {
								r += ` ${He} enjoys having ${his} pussy fucked, and got sexual satisfaction from the ${num(vaginalUse)} times ${he} got dick this week.`;
								slave.need -= vaginalUse;
							}
						} else {
							if (analUse > 0) {
								r += ` ${He} enjoys having ${his} ass fucked, and got sexual satisfaction from the ${num(analUse)} times ${he} got dick this week.`;
								slave.need -= analUse;
							}
						}
						break;
					case "humiliation":
						r += ` ${He} enjoys the humiliation of being a public slut, and got a bit of sexual satisfaction from every sex act ${he} performed this week.`;
						slave.need -= slave.sexAmount;
				}
			}
		}

		if (slave.energy > 40 && slave.energy < 95) {
			r += ` Being used sexually all week <span class="lime">increases ${his} sex drive.</span>`;
			slave.energy += 1;
		}

		if (cervixPump > 0) {
			r += ` ${He} notices ${his} <span class="lime">belly has swollen</span> from all the `;
			if (slave.cervixImplant === 1) {
				r += `vaginal`;
			} else if (slave.cervixImplant === 2) {
				r += `anal`;
			}
			r += ` sex ${he} had throughout the week.`;
			slave.bellyImplant += cervixPump;
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function assignmentVignette(slave) {
		let vignette;
		if (slave.assignment !== "recruit girls") {
			vignette = GetVignette(slave);
			// I forgot what to do with __X__
			r += ` __This week__ ${vignette.text} `;
			if (vignette.type === "cash") {
				if (vignette.effect > 0) {
					r += `<span class="yellowgreen">making you an extra ${cashFormat(Math.trunc(slave.sexQuality * vignette.effect))}.</span>`;
				} else if (vignette.effect < 0) {
					r += `<span class="red">losing you ${cashFormat(Math.abs(Math.trunc(slave.sexQuality * vignette.effect)))}.</span>`;
				} else {
					r += `an incident without lasting effect.`;
				}
				cashX(Math.trunc(slave.sexQuality * vignette.effect), "publicServant", slave);
				T.incomeStats.rep += Math.trunc(slave.sexQuality * vignette.effect);
			} 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(slave.sexQuality * vignette.effect * 0.1), "vignette", slave);
				T.incomeStats.income += Math.trunc(slave.sexQuality * vignette.effect * 0.1);
			}
		}
	}
})();

repo_name: KelioSteel/fc


code:
/**
 * @param {App.Entity.SlaveState} slave
 * @returns {string}
 */
window.saStayConfined = function saStayConfined(slave) {
	const V = State.variables;
	/* eslint-disable */
	const pronouns = getPronouns(slave);
	const he = pronouns.pronoun;
	const him = pronouns.object;
	const his = pronouns.possessive;
	const hers = pronouns.possessivePronoun;
	const himself = pronouns.objectReflexive;
	const boy = pronouns.noun;
	const He = capFirstChar(he);
	const His = capFirstChar(his);
	/* eslint-enable */

	let t = "";

	if (slave.fetish !== "mindbroken") {
		if (slave.devotion < -50) {
			t += `is kept in solitary confinement whenever ${he} is not being forced to do something else. ${He} still hates ${his} place in the world, but being forced to rely on slave life as ${his} only human contact grinds down ${his} resistance.`;
			slave.devotion += 2;
		} else if (slave.devotion <= 20) {
			t += `is kept in solitary confinement whenever ${he} is not being forced to do something else. With nothing to do but look forward to the next time ${he}'s let out to serve, ${he} begins to rely on servitude.`;
			slave.devotion += 1;
		} else if (slave.devotion <= 50) {
			t += `accepts solitary confinement whenever ${he} is not being forced to do something else. Since ${he} is obedient, the mental torture neither breaks ${him} further nor causes ${him} to hate you.`;
		} else {
			t += `accepts solitary confinement whenever ${he} is not being forced to do something else. ${He} spends ${his} time wondering hopelessly how ${he} has failed you, damaging ${his} devotion to you.`;
			slave.devotion -= 2;
		}

		if (slave.trust < -50) {
			t += ` ${He} is so terrified of you that this confinement does not make ${him} fear you any more.`;
		} else if (slave.trust < -20) {
			t += ` ${He} is already afraid of you, but this confinement makes ${him} <span class="gold">fear you even more.</span>`;
			slave.trust -= 2;
		} else if (slave.trust <= 20) {
			t += ` This confinement makes ${him} <span class="gold">fear your power</span> over ${him}.`;
			slave.trust -= 4;
		} else {
			t += ` This confinement makes ${him} <span class="gold">trust you less,</span> and fear you more.`;
			slave.trust -= 5;
		}

		if (slave.assignment === "be confined in the cellblock") {
			if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs") || (slave.hears === -2)) {
				t += ` ${His} hearing impairment spares ${him} the sounds of ${his} peers getting punished, lightening the impact of ${his} imprisonment.`;
			}
		}

		t += ` The stress of confinement <span class="red">damages ${his} health.</span>`;
		slave.health -= 10;
	} else {
		t += `is oblivious to ${his} confinement.`;
	}

	if (V.Wardeness !== 0 && (V.Wardeness.sexualFlaw === "malicious" || V.Wardeness.sexualFlaw === "abusive" || V.Wardeness.sexualFlaw === "breast growth") && slave.lactation === 1 && slave.lactationDuration === 0) {
		t += ` ${V.Wardeness.slaveName} `;
		if (V.Wardeness.sexualFlaw === "malicious") {
			t += `savors the torment brought about by ${his} milk-bloated chest and makes sure to milk ${him} thoroughly every other week to maximize ${his} suffering.`;
		} else if (V.Wardeness.sexualFlaw === "abusive") {
			t += `enjoys neglecting ${his} milk-bloated chest until it gets big and painfully swollen; only then does the abusive jail-keeper roughly drain ${his} sensitive mounds.`;
		} else if (V.Wardeness.sexualFlaw === "breast growth") {
			t += `loves watching ${his} breasts steadily swell with pent-up milk and only milks ${him} in order to reset the process.`;
		}
	}

	if (slave.sentence !== 0) {
		t += ` ${He} has ${slave.sentence}`;
		if (slave.sentence === 1) {
			t += ` week remaining.`;
		} else {
			t += ` weeks remaining.`;
		}
	} else if (slave.devotion > 20 || (slave.devotion >= -20 && slave.trust < -20) || (slave.devotion >= -50 && slave.trust < -50) || slave.fetish === "mindbroken") {
		if (slave.fetish === "mindbroken") {
			t += ` ${His} broken mind hinges entirely on other's guidance,`;
		} else {
			t += ` ${He} is now willing to <span class="hotpink">do as ${he}'s told,</span>`;
		}
		t += ` so <span class="yellow">${his} assignment has defaulted to rest.</span>`;
		if (slave.assignment === "be confined in the cellblock") {
			State.temporary.brokenSlaves++;
			State.temporary.DL--;
			State.temporary.dI--;
		}
		removeJob(slave, slave.assignment);
	}

	return t;
};