code:
/**
 * @param {App.Entity.SlaveState} slave
 * @returns {string}
 */

// TODO: redo this
App.SlaveAssignment.nanny = function(slave) {
	const {he, him, his, He, His} = getPronouns(slave);
	const child = `child${V.nurseryChildren > 0 ? `ren` : ``}`;

	let t = `works as a nanny. ${He} ${V.nurseryChildren ?
		`looks after the ${child} in ${V.nurseryName}, ensuring their needs are met and that they are being raised as ${V.nurseryChildren === 1 ?
			`a good future slave` :
			`good future slaves`}` :
		`keeps ${V.nurseryName} neat and tidy for the children it will one day support`}. `;

	t += nannyEffort(slave);
	t += nannyRelationship(slave);
	t += nannyCareer(slave);
	t += nannyFetish(slave);
	t += nannyEnergy(slave);
	t += nannyVision(slave);
	t += nannyVignettes(slave);
	t += matronEffects(slave);

	return t;

	function nannyEffort(slave) {
		let t = '';

		t += ` ${He} is `;
		if (slave.trust < -20) {
			t += `frightened of punishment and works very hard, <span class="cash inc">reducing the upkeep</span> of ${V.nurseryName}${V.nurseryChildren ? ` and the children within` : ``}.`;
		} else if (slave.devotion <= 20) {
			t += `hesitant, requiring your other slaves to demand ${his} services, and only slightly <span class="cash inc">reduces upkeep</span> of your slaves.`;
		} else if (slave.devotion <= 50) {
			t += `obedient, offering your other slaves ${his} services, and moderately <span class="cash inc">reduces the upkeep</span> of your slaves.`;
		} else if (slave.devotion <= 95) {
			t += `devoted, happily giving your other slaves ${his} services, and <span class="cash inc">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="cash inc">reduces the upkeep</span> of your slaves.`;
		}

		return t;
	}

	function nannyRelationship(slave) {
		let t = '';

		// TODO:
		if (slave.relationship === -2) {
			t += ` ${He} does ${his} best to look after the ${child} in ${his} care 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 caretaker, making ${him} an outstanding nanny.`;
		}

		return t;
	}

	function nannyCareer(slave) {
		let t = '';

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

		return t;
	}

	function nannyFetish(slave) {
		let t = '';

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

		return t;
	}

	function nannyEnergy(slave) {
		let t = '';

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

		return t;
	}

	function nannyVision(slave) {
		let t = '';

		// TODO:
		if (!canSeePerfectly(slave)) {
			t += ` ${His} bad vision makes ${him} a worse nanny.`;
		}

		return t;
	}

	function nannyVignettes(slave) {
		let t = '';

		if (V.showVignettes === 1 && (slave.assignment === window.Job.NURSERY)) {
			const vignette = GetVignette(slave);
			t += ` <u>This week</u> ${vignette.text} `;

			vignetteCash(slave);
			vignetteDevotion(slave);
			vignetteTrust(slave);
			vignetteHealth(slave);
			vignetteRep(slave);
		}

		return t;
	}

	function vignetteCash(slave) {
		const vignette = GetVignette(slave);
		let t = '';

		if (vignette.type === "cash") {
			let modifier = FResult(slave);
			if (vignette.effect > 0) {
				t += `<span class="cash inc">making you an extra ${cashFormat(Math.trunc(modifier * vignette.effect))}.</span>`;
				cashX(Math.trunc(modifier * vignette.effect), "slaveAssignmentNurseryVign", slave);
			} else if (vignette.effect < 0) {
				t += `<span class="cash dec">losing you ${cashFormat(Math.abs(Math.trunc(modifier * vignette.effect)))}.</span>`;
				cashX(forceNeg(Math.trunc(modifier * vignette.effect)), "slaveAssignmentNurseryVign", slave);
			} else {
				t += `an incident without lasting effect.`;
			}
		}

		return t;
	}

	function vignetteDevotion(slave) {
		const vignette = GetVignette(slave);
		let t = '';

		if (vignette.type === "devotion") {
			if (vignette.effect > 0) {
				if (slave.devotion > 50) {
					t += `<span class="devotion inc">increasing ${his} devotion to you.</span>`;
				} else if (slave.devotion >= -20) {
					t += `<span class="devotion inc">increasing ${his} acceptance of you.</span>`;
				} else if (slave.devotion > -10) {
					t += `<span class="devotion inc">reducing ${his} dislike of you.</span>`;
				} else {
					t += `<span class="devotion inc">reducing ${his} hatred of you.</span>`;
				}
			} else if (vignette.effect < 0) {
				if (slave.devotion > 50) {
					t += `<span class="devotion dec">reducing ${his} devotion to you.</span>`;
				} else if (slave.devotion >= -20) {
					t += `<span class="devotion dec">reducing ${his} acceptance of you.</span>`;
				} else if (slave.devotion > -10) {
					t += `<span class="devotion dec">increasing ${his} dislike of you.</span>`;
				} else {
					t += `<span class="devotion dec">increasing ${his} hatred of you.</span>`;
				}
			} else {
				t += `an incident without lasting effect.`;
			}
			slave.devotion += (1 * vignette.effect);
		}

		return t;
	}

	function vignetteTrust(slave) {
		const vignette = GetVignette(slave);
		let t = '';

		if (vignette.type === "trust") {
			if (vignette.effect > 0) {
				if (slave.trust > 20) {
					t += `<span class="trust inc">increasing ${his} trust in you.</span>`;
				} else if (slave.trust > -10) {
					t += `<span class="trust inc">reducing ${his} fear of you.</span>`;
				} else {
					t += `<span class="trust inc">reducing ${his} terror of you.</span>`;
				}
			} else if (vignette.effect < 0) {
				if (slave.trust > 20) {
					t += `<span class="trust dec">reducing ${his} trust in you.</span>`;
				} else if (slave.trust >= -20) {
					t += `<span class="trust dec">increasing ${his} fear of you.</span>`;
				} else {
					t += `<span class="trust dec">increasing ${his} terror of you.</span>`;
				}
			} else {
				t += `an incident without lasting effect.`;
			}
			slave.trust += (1 * vignette.effect);
		}

		return t;
	}

	function vignetteHealth(slave) {
		const vignette = GetVignette(slave);
		let t = '';

		if (vignette.type === "health") {
			if (vignette.effect > 0) {
				t += `<span class="health inc">improving ${his} health.</span>`;
			} else if (vignette.effect < 0) {
				t += `<span class="health dec">affecting ${his} health.</span>`;
			} else {
				t += `an incident without lasting effect.`;
			}
			improveCondition(slave, 2 * vignette.effect);
		}

		return t;
	}

	function vignetteRep(slave) {
		const vignette = GetVignette(slave);
		let t = '';

		if (vignette.type === "rep") {
			let modifier = FResult(slave);
			if (vignette.effect > 0) {
				t += `<span class="reputation inc">gaining you a bit of reputation.</span>`;
			} else if (vignette.effect < 0) {
				t += `<span class="reputation dec">losing you a bit of reputation.</span>`;
			} else {
				t += `an incident without lasting effect.`;
			}
			repX((modifier * vignette.effect * 0.1), "vignette", slave);
		}

		return t;
	}

	function matronEffects(slave) {
		let t = '';

		if (V.MatronID) {
			t += `While there, ${he} benefits from ${S.Matron.slaveName}'s `;
			if (S.Matron.physicalAge < 21) {
				t += `youthful energy`;
			} else {
				t += `care`;
			}
			if (S.Matron.skill.oral) { // TODO: keep this? replace with something else?
				t += ` and talented tongue`;
			}
			t += `. `;
		}

		return t;
	}
};


code:
App.SlaveAssignment.pleaseYou = (function() {
	"use strict";

	let r;

	let he;
	let him;
	let his;
	let himself;
	let girl;
	let He;
	let His;
	let wife;
	let playerPronouns;

	let fetishChange;
	let arcology;
	let trainingEfficiency;

	let oralUse;
	let analUse;
	let vaginalUse;
	let mammaryUse;
	let penetrativeUse;
	let cervixPump;
	let acts;
	let demand;

	let fuckSlavesCount;

	return saPleaseYou;

	/**
	 * @param {FC.ReportSlave} slave
	 * @returns {string}
	 */
	function saPleaseYou(slave) {
		r = [];
		fetishChange = fetishChangeChance(slave);
		arcology = V.arcologies[0];
		fuckSlavesCount = fuckSlavesLength();

		oralUse = 0;
		analUse = 0;
		vaginalUse = 0;
		mammaryUse = 0;
		penetrativeUse = 0;
		cervixPump = 0;
		acts = 0;

		trainingEfficiency = 5 + Math.trunc(slave.devotion / 30) + ((slave.intelligence+slave.intelligenceImplant) / 32);

		({
			he, him, his, himself, girl, He, His, wife
		} = getPronouns(slave));
		playerPronouns = getPronouns(V.PC);

		jobPreface(slave);
		checkHoleAvailability(slave);
		switch (slave.toyHole) {
			case "pussy":
				useVagina(slave);
				break;
			case "ass":
				useAnus(slave);
				break;
			case "mouth":
				useMouth(slave);
				break;
			case "boobs":
				useBoobs(slave);
				break;
			case "dick":
				useDick(slave);
				break;
			default:
				useAllHoles(slave);
		}
		physicalEffects(slave);
		const familyMult = familyBonus(slave);
		addRep(slave, familyMult);
		if (slave.fuckdoll === 0 && slave.fetish !== "mindbroken") {
			mentalEffects(slave);
		}

		return r.join(" ");
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function jobPreface(slave) {
		r.push(`serves you this week.`);
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function checkHoleAvailability(slave) {
		if (slave.toyHole === "pussy") {
			if (!canDoVaginal(slave)) {
				slave.toyHole = "all her holes";
			}
		} else if (slave.toyHole === "ass") {
			if (!canDoAnal(slave)) {
				slave.toyHole = "all her holes";
			}
		} else if (slave.toyHole === "dick") {
			if (!canPenetrate(slave)) {
				slave.toyHole = "all her holes";
			}
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function useVagina(slave) {
		if (fuckSlavesCount <= V.PC.sexualEnergy / 2) {
			vaginalUse = jsRandom(21, 40);
		} else if (fuckSlavesCount <= V.PC.sexualEnergy) {
			vaginalUse = jsRandom(7, 14);
		} else {
			vaginalUse = jsRandom(3, 7);
		}
		if (slave.assignment === Job.FUCKTOY) {
			vaginalUse = Math.ceil(vaginalUse * restEffects(slave, 11));
		} else {
			vaginalUse = Math.ceil(vaginalUse * healthPenalty(slave));
		}
		if (slave.fuckdoll === 0) {
			r.push(`${He} spends the week`);
			if (slave.fetish === "mindbroken") {
				r.push(`unaware of your intent to use ${his} pussy.`);
			} else if (slave.trust < -20) {
				r.push(`in terrified compliance with your use of ${his} pussy.`);
			} else if (slave.devotion < -20) {
				r.push(`alternately struggling and lying corpse-like as you use ${his} pussy.`);
			} else if (slave.devotion <= 20) {
				r.push(`reluctantly accepting your use of ${his} pussy.`);
			} else if (slave.fetishKnown === 1 && slave.fetish === "submissive") {
				r.push(`as your adoring submissive, seeing to your pleasure with ${his} womanhood.`);
			} else if (slave.devotion <= 50) {
				r.push(`obediently serving you in the classical way, taking you into ${his} womanhood.`);
			} else {
				r.push(`serving you in the classical way, warming your bed and lovingly taking you into ${his} womanhood.`);
			}
			r.push(`You have the sexual energy to fuck ${him}`);
			if (slave.fetish === "mindbroken") {
				if (vaginalUse >= 14) {
					r.push(`several times a day.`);
					slave.devotion -= 5;
					slave.trust -= 15;
				} else if (vaginalUse >= 7) {
					r.push(`at least once a day.`);
					slave.devotion -= 3;
					slave.trust -= 9;
				} else {
					r.push(`on occasion.`);
					slave.devotion -= 3;
					slave.trust -= 3;
				}
				r.push(`${He} doesn't react, even if ${his} body does.`);
			} else if (slave.trust >= -20 && slave.devotion <= 20) {
				if (vaginalUse >= 14) {
					r.push(`several times a day; the constant`);
					slave.devotion -= 5;
					slave.trust -= 15;
				} else if (vaginalUse >= 7) {
					r.push(`at least once a day; the regular`);
					slave.devotion -= 3;
					slave.trust -= 9;
				} else {
					r.push(`on occasion; the threat of`);
					slave.devotion -= 3;
					slave.trust -= 3;
				}
				r.push(`rape fills ${him} with <span class="mediumorchid">revulsion</span> and <span class="gold">fear.</span>`);
			} else if (slave.devotion <= 20) {
				if (vaginalUse >= 14) {
					r.push(`several times a day; submitting to your constant`);
					slave.devotion += 3;
				} else if (vaginalUse >= 7) {
					r.push(`at least once a day; submitting to your regular`);
					slave.devotion += 2;
				} else {
					r.push(`on occasion; submitting to your`);
					slave.devotion += 1;
				}
				r.push(`use <span class="hotpink">habituates ${him}</span> to being your sex slave.`);
			} else {
				if (vaginalUse >= 14) {
					r.push(`several times a day; constant,`);
					slave.devotion += 3;
					slave.trust += 3;
				} else if (vaginalUse >= 7) {
					r.push(`several times a day; regular,`);
					slave.devotion += 2;
					slave.trust += 2;
				} else {
					r.push(`on occasion;`);
					slave.devotion += 1;
					slave.trust += 1;
				}
				r.push(`enjoyable sex with you draws ${him} <span class="hotpink">closer to you</span> and encourages ${him} to <span class="mediumaquamarine">trust you.</span>`);
			}
			if (slave.fetish !== "mindbroken") {
				if (slave.sexualFlaw === "hates penetration" && slave.devotion > 50) {
					r.push(`The emotional closeness <span class="green">resolves ${his} hatred of penetration.</span>`);
					slave.sexualFlaw = "none";
				}
				if (slave.skill.vaginal < 100) {
					r.push(`After a lot of time spent having vanilla sex, ${his} <span class="green">vaginal skill improves.</span>`);
					r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency));
				}
			}
			if (V.PC.dick !== 0) {
				if (slave.fetish !== "mindbroken") {
					if (slave.fetish === "submissive") {
						r.push(`${He} frequently climaxes with your`);
						if (V.PC.title === 1) {
							r.push(`strong`);
						} else {
							r.push(`soft`);
						}
						r.push(`hands holding ${him} and your cock spreading heat through ${his} core,`);
						if (slave.fetishKnown === 1) {
							r.push(`<span class="hotpink">fulfilling ${his} life's role completely.</span>`);
						} else {
							r.push(`${he} <span class="hotpink">seems to enjoy</span> being your fucktoy.`);
						}
						slave.devotion += 2;
					} else if (fetishChange > jsRandom(0, 100)) {
						slave.fetish = "submissive";
						slave.fetishKnown = 1;
						slave.fetishStrength = 10;
						r.push(`${He} frequently climaxes with your`);
						if (V.PC.title === 1) {
							r.push(`strong`);
						} else {
							r.push(`soft`);
						}
						r.push(`hands holding ${him} and your cock spreading heat through ${his} core, teaching ${him} that <span class="lightcoral">a ${girl}'s role is to please a ${playerPronouns.woman}.</span>`);
					}
				}
			}
		} else {
			r.push(`You keep ${him} with you all week, using ${him} as your personal sex toy`);
			if (vaginalUse >= 14) {
				r.push(`several times a day.`);
			} else if (vaginalUse >= 7) {
				r.push(`at least once a day.`);
			} else {
				r.push(`on occasion.`);
			}
			r.push(`When you're not using ${him}, ${he}`);
			if (!hasAnyLegs(slave)) {
				r.push(`rests`);
			} else {
				r.push(`stands`);
			}
			r.push(`nearby, waiting silently for your order to present ${his} pussy.`);
		}
		if (V.PC.dick !== 0) {
			if (canImpreg(slave, V.PC)) {
				knockMeUp(slave, vaginalUse, 0, -1);
			}
		}
		slave.counter.vaginal += vaginalUse;
		V.vaginalTotal += vaginalUse;
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function useAnus(slave) {
		if (fuckSlavesCount <= V.PC.sexualEnergy / 2) {
			analUse = jsRandom(21, 40);
		} else if (fuckSlavesCount <= V.PC.sexualEnergy) {
			analUse = jsRandom(7, 14);
		} else {
			analUse = jsRandom(3, 7);
		}
		if (slave.assignment === Job.FUCKTOY) {
			analUse = Math.ceil(analUse * restEffects(slave, 11));
		} else {
			analUse = Math.ceil(analUse * healthPenalty(slave));
		}
		if (slave.fuckdoll === 0) {
			r.push(`${He} spends the week`);
			if (slave.fetish === "mindbroken") {
				r.push(`unaware of your intent to use ${his} anus.`);
			} else if (slave.trust < -20) {
				r.push(`in terrified compliance with your use of ${his} anus.`);
			} else if (slave.devotion < -20) {
				r.push(`struggling and screaming as you sodomize ${him}.`);
			} else if (slave.devotion <= 20) {
				r.push(`writhing in pain as you sodomize ${him}.`);
			} else if (slave.devotion <= 50) {
				r.push(`obediently submitting to your use of ${his} butthole.`);
			} else if (slave.fetishKnown === 1 && slave.fetish === "buttslut") {
				r.push(`as your adoring anal slave, orgasming to the feel of`);
				if (V.PC.dick !== 0) {
					r.push(`you shooting your seed`);
				} else {
					r.push(`your favorite strap-on`);
				}
				r.push(`up ${his} ass.`);
			} else {
				r.push(`warming your bed and devotedly serving your sexual needs with ${his} anus.`);
			}
			r.push(`You have the sexual energy to fuck ${his} butt`);
			if (slave.fetish === "mindbroken") {
				if (analUse >= 14) {
					r.push(`several times a day.`);
					slave.devotion -= 5;
					slave.trust -= 15;
				} else if (analUse >= 7) {
					r.push(`at least once a day.`);
					slave.devotion -= 3;
					slave.trust -= 9;
				} else {
					r.push(`on occasion.`);
					slave.devotion -= 3;
					slave.trust -= 3;
				}
				r.push(`${He} doesn't react, even if ${his} body does.`);
			} else if (slave.trust >= -20 && slave.devotion <= 20) {
				if (analUse >= 14) {
					r.push(`several times a day; the constant`);
					slave.devotion -= 5;
					slave.trust -= 15;
				} else if (analUse >= 7) {
					r.push(`at least once a day; the regular`);
					slave.devotion -= 3;
					slave.trust -= 9;
				} else {
					r.push(`on occasion; the threat of`);
					slave.devotion -= 3;
					slave.trust -= 3;
				}
				r.push(`anal rape fills ${him} with <span class="mediumorchid">revulsion</span> and <span class="gold">fear.</span>`);
			} else if (slave.devotion <= 20) {
				if (analUse >= 14) {
					r.push(`several times a day; constantly`);
					slave.devotion += 3;
				} else if (analUse >= 7) {
					r.push(`at least once a day; regularly`);
					slave.devotion += 2;
				} else {
					r.push(`on occasion;`);
					slave.devotion += 1;
				}
				r.push(`allowing you to penetrate ${his} rear <span class="hotpink">habituates ${him}</span> to being your sex slave.`);
			} else {
				if (analUse >= 14) {
					r.push(`several times a day; constantly`);
					slave.devotion += 3;
					slave.trust += 3;
				} else if (analUse >= 7) {
					r.push(`at least once a day; regularly`);
					slave.devotion += 2;
					slave.trust += 2;
				} else {
					r.push(`on occasion;`);
					slave.devotion += 1;
					slave.trust += 1;
				}
				r.push(`climaxing to your penetration of ${his} rear brings ${him} <span class="hotpink">closer to you</span> and encourages ${him} to <span class="mediumaquamarine">trust you.</span>`);
			}
			if (slave.fetish !== "mindbroken") {
				if (slave.sexualFlaw === "hates anal" && slave.devotion > 50) {
					r.push(`${He}'s devoted enough to derive emotional closeness from buttsex, which <span class="green">resolves ${his} hatred of the act.</span>`);
					slave.sexualFlaw = "none";
				}
				if (slave.skill.anal < 100) {
					r.push(`After a lot of time spent getting buttfucked, ${his} <span class="green">anal skill improves.</span>`);
					r.push(slaveSkillIncrease('anal', slave, trainingEfficiency));
				}
				if (slave.fetish === "buttslut") {
					if (slave.fetishKnown === 1) {
						r.push(`${He} <span class="hotpink">takes great pleasure</span> in ${his} rear being used as your personal`);
						if (V.PC.dick !== 0) {
							r.push(`cock holster.`);
						} else {
							r.push(`plaything.`);
						}
					} else {
						r.push(`${He} <span class="hotpink">seems to enjoy</span> anal sex more than the usual slave.`);
					}
					slave.devotion += 2;
				} else if (fetishChange > jsRandom(0, 100)) {
					slave.fetishKnown = 1;
					slave.fetishStrength = 10;
					slave.fetish = "buttslut";
					r.push(`After repeated anal orgasms, <span class="lightcoral">${he} begins to crave ${his} next buttfuck.</span>`);
				}
			}
		} else {
			r.push(`You keep ${him} with you all week, using ${him} as your personal sex toy`);
			if (analUse >= 14) {
				r.push(`several times a day.`);
			} else if (analUse >= 7) {
				r.push(`at least once a day.`);
			} else {
				r.push(`on occasion.`);
			}
			r.push(`When you're not using ${him}, ${he}`);
			if (!hasAnyLegs(slave)) {
				r.push(`rests`);
			} else {
				r.push(`stands`);
			}
			r.push(`nearby, waiting silently for your order to present ${his} asshole.`);
		}
		if (V.PC.dick !== 0) {
			if (canImpreg(slave, V.PC)) {
				knockMeUp(slave, analUse, 1, -1);
			}
		}
		slave.counter.anal += analUse;
		V.analTotal += analUse;
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function useMouth(slave) {
		if (fuckSlavesCount <= V.PC.sexualEnergy / 2) {
			oralUse = jsRandom(21, 40);
		} else if (fuckSlavesCount <= V.PC.sexualEnergy) {
			oralUse = jsRandom(7, 14);
		} else {
			oralUse = jsRandom(3, 7);
		}
		if (slave.assignment === Job.FUCKTOY) {
			oralUse = Math.ceil(oralUse * restEffects(slave, 11));
		} else {
			oralUse = Math.ceil(oralUse * healthPenalty(slave));
		}
		if (slave.fuckdoll === 0) {
			r.push(`${He} spends the week`);
			if (slave.fetish === "mindbroken") {
				r.push(`unaware of your intent to use ${his} mouth.`);
			} else if (slave.trust < -20) {
				r.push(`in terrified compliance with your use of ${his}`);
				if (V.PC.dick !== 0) {
					r.push(`throat.`);
				} else {
					r.push(`mouth.`);
				}
			} else if (slave.devotion < -20) {
				r.push(`struggling and gagging as you`);
				if (V.PC.dick !== 0) {
					r.push(`throatfuck ${him}.`);
				} else {
					r.push(`ride ${his} face.`);
				}
			} else if (slave.devotion <= 20) {
				r.push(`reluctantly`);
				if (V.PC.dick !== 0) {
					r.push(`servicing your cock with ${his} mouth.`);
				} else {
					r.push(`licking your pussy.`);
				}
			} else if (slave.devotion <= 50) {
				r.push(`obediently`);
				if (V.PC.dick !== 0) {
					r.push(`sucking your cock.`);
				} else {
					r.push(`eating you out.`);
				}
			} else if (slave.fetishKnown === 1 && slave.fetish === "cumslut") {
				r.push(`as your adoring oral slave, orgasming when you leave ${him} with a`);
				if (V.PC.dick !== 0) {
					r.push(`mouth full of`);
					if (V.PC.vagina !== -1) {
						r.push(`cum or a`);
					} else {
						r.push(`cum.`);
					}
				}
				if (V.PC.vagina !== -1) {
					r.push(`face covered in your pussy juice.`);
				}
				if (V.PC.dick !== 0 && (fuckSlavesCount <= (V.PC.sexualEnergy / 2 + (V.PC.balls - 3)))) {
					r.push(`Your balls produce so much cum for ${him} that ${he} has replaced half ${his} diet with your cum, and you often leave ${him} dizzy with a face and chest covered in your sticky pearly semen.`);
				} else if (V.PC.dick !== 0 && (fuckSlavesCount <= (V.PC.sexualEnergy + (V.PC.balls - 3)))) {
					r.push(`Your balls produce enough cum that ${he} usually gets facials after a mouthful of semen, and ${he} loves you for it.`);
				} else {
					r.push(`${He} usually has to fight for ${his} share of cum, making sure to milk cum from your`);
					if (fuckSlavesCount > 1) {
						r.push(`urethra or suck it out of a pussy.`);
					} else {
						r.push(`urethra.`);
					}
				}
			} else {
				r.push(`warming your bed and lavishing devoted attention on your`);
				if (V.PC.dick !== 0) {
					r.push(`cock`);
					if (V.PC.vagina !== -1) {
						r.push(`and`);
					}
				}
				if (V.PC.vagina !== -1) {
					r.push(`pussy`);
				}
				r.push(`with ${his} loving mouth.`);
			}
			r.push(`You have the sexual energy to`);
			if (slave.fetish === "mindbroken") {
				if (V.PC.dick !== 0) {
					r.push(`use ${his} mouth`);
				} else {
					r.push(`make ${him} eat you out`);
				}
				if (oralUse >= 14) {
					r.push(`several times a day.`);
					slave.devotion -= 5;
					slave.trust -= 15;
				} else if (oralUse >= 7) {
					r.push(`at least once a day.`);
					slave.devotion -= 3;
					slave.trust -= 9;
				} else {
					r.push(`on occasion.`);
					slave.devotion -= 3;
					slave.trust -= 3;
				}
				r.push(`${He} absentmindedly follows your lead.`);
			} else if (slave.trust >= -20 && slave.devotion <= 20) {
				if (V.PC.dick !== 0) {
					r.push(`rape ${his} face`);
				} else {
					r.push(`force ${him} to eat you out`);
				}
				r.push(`${him}`);
				if (oralUse >= 14) {
					r.push(`several times a day; the constant`);
					slave.devotion -= 5;
					slave.trust -= 15;
				} else if (oralUse >= 7) {
					r.push(`at least once a day; the regular`);
					slave.devotion -= 3;
					slave.trust -= 9;
				} else {
					r.push(`on occasion; the threat of`);
					slave.devotion -= 3;
					slave.trust -= 3;
				}
				r.push(`sexual abuse fills ${him} with <span class="mediumorchid">revulsion</span> and <span class="gold">fear.</span>`);
			} else if (slave.devotion <= 20) {
				if (V.PC.dick !== 0) {
					r.push(`use ${his} mouth`);
				} else {
					r.push(`make ${him} eat you out`);
				}
				if (oralUse >= 14) {
					r.push(`several times a day; constantly`);
					slave.devotion += 3;
				} else if (oralUse >= 7) {
					r.push(`at least once a day; regularly`);
					slave.devotion += 2;
				} else {
					r.push(`on occasion;`);
					slave.devotion += 1;
				}
				r.push(`performing oral on you <span class="hotpink">habituates ${him}</span> to being your sex slave.`);
			} else {
				if (V.PC.dick !== 0) {
					r.push(`get a blowjob`);
					if (V.PC.vagina !== -1) {
						r.push(`and some pussy licking`);
					}
					r.push(`from ${him}`);
				} else {
					r.push(`${him} eat you out`);
				}
				if (oralUse >= 14) {
					r.push(`several times a day; constantly`);
					slave.devotion += 3;
					slave.trust += 3;
				} else if (oralUse >= 7) {
					r.push(`several times a day; regularly`);
					slave.devotion += 2;
					slave.trust += 2;
				} else {
					r.push(`on occasion;`);
					slave.devotion += 1;
					slave.trust += 1;
				}
				r.push(`giving you pleasure brings ${him} <span class="hotpink">closer to you</span> and encourages ${him} to <span class="mediumaquamarine">trust you.</span>`);
			}
			if (slave.fetish !== "mindbroken") {
				if (slave.sexualFlaw === "hates oral" && slave.devotion > 50) {
					r.push(`${He}'s devoted enough to derive emotional closeness from giving you oral, which <span class="green">resolves ${his} hatred of the act.</span>`);
					slave.sexualFlaw = "none";
				}
				if (slave.behavioralFlaw === "hates men" && V.PC.dick !== 0 && slave.devotion > 20) {
					r.push(`Spending so much time in close proximity to your dick <span class="green">reconciles ${him} to serving cocks.</span>`);
					slave.behavioralFlaw = "none";
				} else if (slave.behavioralFlaw === "hates women" && V.PC.vagina !== -1 && slave.devotion > 20) {
					r.push(`Spending so much time in close proximity to your womanhood <span class="green">reconciles ${him} to serving a pussy.</span>`);
					slave.behavioralFlaw = "none";
				}
				if (slave.skill.oral < 100) {
					r.push(`After a lot of time spent`);
					if (V.PC.dick !== 0) {
						r.push(`sucking you`);
						if (V.PC.vagina !== -1) {
							r.push(`off and eating you out,`);
						} else {
							r.push(`off,`);
						}
					} else {
						r.push(`eating you out,`);
					}
					r.push(`${his} <span class="green">oral skill improves.</span>`);
					r.push(slaveSkillIncrease('oral', slave, trainingEfficiency));
				}
				if (slave.fetish === "cumslut") {
					if (slave.fetishKnown === 1) {
						r.push(`${He} <span class="hotpink">quivers with ecstasy</span> just from the`);
						if (canTaste(slave)) {
							r.push(`taste`);
						} else {
							r.push(`feeling`);
						}
						r.push(`of your`);
						if (V.PC.dick === 0) {
							r.push(`girl`);
						}
						r.push(`cum on ${his} tongue.`);
					} else {
						r.push(`${He} <span class="hotpink">seems to enjoy</span> ${his} role as a cum receptacle more than you'd expect.`);
					}
					slave.devotion += 2;
				} else if (fetishChange > jsRandom(0, 100)) {
					slave.fetishKnown = 1;
					slave.fetishStrength = 10;
					slave.fetish = "cumslut";
					r.push(`${He} frequently climaxes with`);
					if (V.PC.dick !== 0) {
						r.push(`your dick in ${his} mouth,`);
					} else {
						r.push(`${his} mouth on your cunt,`);
					}
					r.push(`learning that giving <span class="lightcoral">blowjobs is a lot of fun.</span>`);
				}
			}
			slave.counter.oral += oralUse;
			V.oralTotal += oralUse;
		} else {
			r.push(`You keep ${him} with you all week, using ${him} as your personal sex toy`);
			if (oralUse >= 14) {
				r.push(`several times a day.`);
			} else if (oralUse >= 7) {
				r.push(`at least once a day.`);
			} else {
				r.push(`on occasion.`);
			}
			r.push(`When you're not using ${him}, ${he}`);
			if (!hasAnyLegs(slave)) {
				r.push(`rests`);
			} else {
				r.push(`stands`);
			}
			r.push(`nearby, waiting silently for your order to open ${his} mouth.`);
			slave.counter.oral += oralUse;
			V.oralTotal += oralUse;
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function useBoobs(slave) {
		if (fuckSlavesCount <= V.PC.sexualEnergy / 2) {
			mammaryUse = jsRandom(21, 40);
		} else if (fuckSlavesCount <= V.PC.sexualEnergy) {
			mammaryUse = jsRandom(7, 14);
		} else {
			mammaryUse = jsRandom(3, 7);
		}
		if (slave.assignment === Job.FUCKTOY) {
			mammaryUse = Math.ceil(mammaryUse * restEffects(slave, 11));
		} else {
			mammaryUse = Math.ceil(mammaryUse * healthPenalty(slave));
		}
		if (slave.fuckdoll === 0) {
			r.push(`${He} spends the week`);
			if (slave.fetish === "mindbroken") {
				r.push(`unaware of your intent to use ${his} breasts.`);
			} else if (slave.trust < -20) {
				r.push(`in terrified compliance with your use of ${his} breasts.`);
			} else if (slave.devotion < -20) {
				r.push(`trying to keep ${his} tits away from your grasping hands.`);
			} else if (slave.devotion <= 20) {
				r.push(`reluctantly presenting ${his} tits for your use.`);
			} else if (slave.devotion <= 50) {
				r.push(`obediently offering ${his} tits for your use.`);
			} else if (slave.fetishKnown === 1 && slave.fetish === "boobs") {
				r.push(`moaning and shivering as you give it to ${him} where ${he} likes it best: ${his} tits.`);
			} else {
				r.push(`keeping ${his} tits in constant contact with you, giving you titjobs,`);
				if (slave.nipples === "fuckable") {
					r.push(`savoring your enjoyment of ${his} nipplecunts,`);
				}
				r.push(`resting them against you as you work, and serving as a comfortable pillow at bedtime.`);
			}
			r.push(`You have the sexual energy to`);
			if (slave.fetish === "mindbroken") {
				if (V.PC.dick !== 0) {
					if (slave.nipples === "fuckable") {
						r.push(`fuck ${his} boobs`);
					} else {
						r.push(`cum on ${his} boobs`);
					}
				} else {
					r.push(`thoroughly grope ${his} boobs`);
				}
				if (mammaryUse >= 14) {
					r.push(`several times a day.`);
					slave.devotion -= 5;
					slave.trust -= 15;
				} else if (mammaryUse >= 7) {
					r.push(`at least once a day.`);
					slave.devotion -= 3;
					slave.trust -= 9;
				} else {
					r.push(`on occasion.`);
					slave.devotion -= 3;
					slave.trust -= 3;
				}
				r.push(`${He} absentmindedly follows your lead.`);
			} else if (slave.trust >= -20 && slave.devotion <= 20) {
				if (mammaryUse >= 14) {
					if (V.PC.dick !== 0) {
						if (slave.nipples === "fuckable") {
							r.push(`fuck ${his} boobs`);
						} else {
							r.push(`cum on ${his} boobs`);
						}
					} else {
						r.push(`thoroughly grope ${his} boobs`);
					}
					r.push(`several times a day; the constant`);
					slave.devotion -= 5;
					slave.trust -= 15;
				} else if (mammaryUse >= 7) {
					if (V.PC.dick !== 0) {
						if (slave.nipples === "fuckable") {
							r.push(`fuck ${his} boobs`);
						} else {
							r.push(`cum on ${his} boobs`);
						}
					} else {
						r.push(`thoroughly grope ${his} boobs`);
					}
					r.push(`at least once a day; the regular`);
					slave.devotion -= 3;
					slave.trust -= 9;
				} else {
					if (V.PC.dick !== 0) {
						if (slave.nipples === "fuckable") {
							r.push(`fuck ${his} boobs`);
						} else {
							r.push(`cum on ${his} boobs`);
						}
					} else {
						r.push(`thoroughly grope ${his} boobs`);
					}
					r.push(`on occasion; the threat of`);
					slave.devotion -= 3;
					slave.trust -= 3;
				}
				r.push(`sexual abuse fills ${him} with <span class="mediumorchid">revulsion</span> and <span class="gold">fear.</span>`);
			} else if (slave.devotion <= 20) {
				r.push(`play with ${his} tits`);
				if (mammaryUse >= 14) {
					r.push(`several times a day; constantly`);
					slave.devotion += 3;
				} else if (mammaryUse >= 7) {
					r.push(`at least once a day; regularly`);
					slave.devotion += 2;
				} else {
					r.push(`on occasion;`);
					slave.devotion += 1;
				}
				r.push(`submitting to your games <span class="hotpink">habituates ${him}</span> to being your sex slave.`);
			} else {
				if (V.PC.boobs >= 300) {
					r.push(`have mutual mammary intercourse until you both orgasm to nipple stimulation`);
				} else {
					r.push(`have mammary intercourse with ${him}`);
				}
				if (mammaryUse >= 14) {
					r.push(`several times a day; constantly`);
					slave.devotion += 3;
					slave.trust += 3;
				} else if (mammaryUse >= 7) {
					r.push(`at least once a day; regularly`);
					slave.devotion += 2;
					slave.trust += 2;
				} else {
					r.push(`on occasion;`);
					slave.devotion += 1;
					slave.trust += 1;
				}
				r.push(`giving you pleasure brings ${him} <span class="hotpink">closer to you</span> and encourages ${him} to <span class="mediumaquamarine">trust you.</span>`);
			}
			if (slave.fetish !== "mindbroken") {
				if (slave.sexualFlaw === "hates oral" && slave.devotion > 50) {
					r.push(`${He}'s devoted enough to derive emotional closeness from giving you oral, which <span class="green">resolves ${his} hatred of the act.</span>`);
					slave.sexualFlaw = "none";
				}
				if (slave.behavioralFlaw === "hates men" && slave.devotion > 20 && V.PC.title === 1) {
					r.push(`Spending so much time in close proximity to your masculinity <span class="green">reconciles ${him} to serving the male gender.</span>`);
					slave.behavioralFlaw = "none";
				} else if (slave.behavioralFlaw === "hates women" && V.PC.title === 0 && slave.devotion > 20) {
					r.push(`Spending so much time in close proximity to your femininity <span class="green">reconciles ${him} to serving the female gender.</span>`);
					slave.behavioralFlaw = "none";
				}
				if (slave.fetish === "boobs") {
					if (slave.fetishKnown === 1) {
						r.push(`${He} <span class="hotpink">quivers with ecstasy</span> just from the touch of your`);
						if (V.PC.title === 1) {
							r.push(`strong`);
						} else {
							r.push(`soft`);
						}
						r.push(`hands against ${his}`);
						if (slave.boobs >= 300) {
							r.push(`breasts.`);
						} else {
							r.push(`flat chest.`);
						}
					} else {
						r.push(`${He} <span class="hotpink">seems to enjoy</span> having ${his}`);
						if (slave.boobs >= 300) {
							r.push(`breasts`);
						} else {
							r.push(`chest`);
						}
						r.push(`fondled more than the average ${girl}.`);
					}
					slave.devotion += 2;
				} else if (fetishChange > jsRandom(0, 100)) {
					slave.fetishKnown = 1;
					slave.fetishStrength = 10;
					slave.fetish = "boobs";
					r.push(`${He} climaxes to nipple stimulation alone, and starts acting as though`);
					if (slave.clit > 0 && slave.nipples !== "fuckable") {
						r.push(`${he} has <span class="lightcoral">three pleasure buttons</span> rather than just one.`);
					} else if (slave.vagina > -1 && slave.nipples === "fuckable") {
						r.push(`${he} has <span class="lightcoral">a trio of pussies</span> rather than just one.`);
					} else {
						r.push(`${his} tits are ${his} <span class="lightcoral">primary erogenous zone.</span>`);
					}
				}
			}
		} else {
			r.push(`You keep ${him} with you all week, using ${him} as your personal sex toy`);
			if (mammaryUse >= 14) {
				r.push(`several times a day.`);
			} else if (mammaryUse >= 7) {
				r.push(`at least once a day.`);
			} else {
				r.push(`on occasion.`);
			}
			r.push(`When you're not using ${him}, ${he}`);
			if (!hasAnyLegs(slave)) {
				r.push(`rests`);
			} else {
				r.push(`stands`);
			}
			r.push(`nearby, waiting silently for your order to present ${his} chest.`);
		}
		if (slave.lactation > 0) {
			slave.lactationDuration = 2;
			if (slave.boobsMilk > 0) {
				slave.boobs -= slave.boobsMilk;
				slave.boobsMilk = 0;
			}
		} else {
			r.push(induceLactation(slave, 2));
		}
		slave.counter.mammary += mammaryUse;
		V.mammaryTotal += mammaryUse;
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function useDick(slave) {
		if (fuckSlavesCount <= V.PC.sexualEnergy / 2) {
			penetrativeUse = jsRandom(21, 40);
		} else if (fuckSlavesCount <= V.PC.sexualEnergy) {
			penetrativeUse = jsRandom(7, 14);
		} else {
			penetrativeUse = jsRandom(3, 7);
		}
		if (slave.assignment === Job.FUCKTOY) {
			penetrativeUse = Math.ceil(penetrativeUse * restEffects(slave, 11));
		} else {
			penetrativeUse = Math.ceil(penetrativeUse * healthPenalty(slave));
		}
		if (slave.fuckdoll > 0) {
			r.push(`All it takes is a simple command to force ${his} dick to attention. You have the sexual energy to ride ${him}`);
			if (penetrativeUse >= 14) {
				r.push(`several times a day.`);
			} else if (penetrativeUse >= 7) {
				r.push(`at least once a day.`);
			} else {
				r.push(`on occasion.`);
			}
			r.push(`You have to do all the work, unfortunately.`);
		} else if (slave.fetish === "mindbroken") {
			if (slave.career === "a breeding bull") {
				if (canGetPregnant(V.PC)) {
					r.push(`${He} spends the week eagerly trying to breed you. You have the sexual energy to take ${him}`);
					if (penetrativeUse >= 14) {
						r.push(`several times a day.`);
					} else if (penetrativeUse >= 7) {
						r.push(`at least once a day.`);
					} else {
						r.push(`on occasion.`);
					}
					r.push(`${He} happily mounts you and humps away, but ${he} has no sense of what's pleasurable to you and just excitedly thrusts until ${he} cums inside you.`);
				} else {
					r.push(`You spend the week getting humped by ${him} after you've managed to encourage ${him} to mount you. You have the sexual energy to use ${his} dick`);
					if (penetrativeUse >= 14) {
						r.push(`several times a day.`);
					} else if (penetrativeUse >= 7) {
						r.push(`at least once a day.`);
					} else {
						r.push(`on occasion.`);
					}
					r.push(`${His} conditioning tells ${him} to impregnate others, and since ${he} sees you as already pregnant, just cums inside you for ${his} own pleasure.`);
				}
			} else {
				r.push(`You spend the week using ${his} dick after you've stimulated ${him} enough to get ${him} hard. You have the sexual energy to ride ${him}`);
				if (penetrativeUse >= 14) {
					r.push(`several times a day.`);
				} else if (penetrativeUse >= 7) {
					r.push(`at least once a day.`);
				} else {
					r.push(`on occasion.`);
				}
				r.push(`${He} sometimes thrusts out of instinct, but most of the work in the endeavor falls to you.`);
			}
		} else if (V.PC.preg >= 24 && V.PC.pregMood === 1) {
			r.push(`${He} spends the week`);
			if (slave.trust < -20) {
				r.push(`cautiously fucking you in the missionary position. It takes a gentle touch to ${him} know it safe to get hard, but after that ${he} knows what to do.`);
			} else if (slave.devotion < -20) {
				r.push(`aggressively fucking your pussy with little regard for you or your child${V.PC.pregType > 1 ? 'ren' : ''}.`);
			} else if (slave.devotion <= 20) {
				r.push(`obediently fucking you in the missionary position while putting up with your attempts to breast feed ${him}.`);
			} else if (slave.fetishKnown === 1 && slave.fetish === "dom") {
				r.push(`as your adoring dom, giving you exactly what you need and treating you like a woman.`);
			} else if (slave.career === "a breeding bull" || (slave.fetishKnown === 1 && slave.fetish === "pregnancy")) {
				r.push(`eagerly driving ${his} cock into your pussy, and shooting cum as deep as ${him} can.`);
			} else if (slave.devotion <= 50) {
				r.push(`obediently driving ${his} shaft into your womanhood as you knead your aching breasts.`);
			} else {
				r.push(`eagerly driving ${his} shaft into your womanhood as you knead your aching breasts.`);
			}
			r.push(`You have the sexual energy to desire ${his} dick in you`);
			if (slave.trust >= -20 && slave.devotion <= 20) {
				if (penetrativeUse >= 14) {
					r.push(`several times a day;`);
					slave.devotion -= 15;
					slave.trust += 7;
				} else if (penetrativeUse >= 7) {
					r.push(`at least once a day;`);
					slave.devotion -= 10;
					slave.trust += 7;
				} else {
					r.push(`on occasion;`);
					slave.devotion -= 5;
					slave.trust += 7;
				}
				r.push(`getting to dominantly fuck ${his} '${getWrittenTitle(slave)}' <span class="mediumorchid">builds ${his} self-confidence</span> and <span class="mediumaquamarine">lessens ${his} fear</span> of you.`);
			} else if (slave.devotion <= 20) {
				if (penetrativeUse >= 14) {
					r.push(`several times a day;`);
					slave.devotion -= 5;
					slave.trust += 5;
				} else if (penetrativeUse >= 7) {
					r.push(`at least once a day;`);
					slave.devotion -= 4;
					slave.trust += 4;
				} else {
					r.push(`on occasion;`);
					slave.devotion -= 3;
					slave.trust += 3;
				}
				r.push(`getting to dominantly fuck ${his} '${getWrittenTitle(slave)}' <span class="mediumorchid">builds ${his} self-confidence,</span> yet <span class="mediumaquamarine">makes ${him} more trusting</span> of you.`);
			} else {
				if (penetrativeUse >= 14) {
					r.push(`several times a day; constant, enjoyable`);
					slave.devotion += 3;
					slave.trust += 3;
				} else if (penetrativeUse >= 7) {
					r.push(`at least once a day; regular, enjoyable`);
					slave.devotion += 2;
					slave.trust += 2;
				} else {
					r.push(`on occasion; enjoyable`);
					slave.devotion++;
					slave.trust++;
				}
				r.push(`sex with you draws ${him} <span class="hotpink">closer to you</span> and encourages ${him} to <span class="mediumaquamarine">trust you.</span>`);
			}
		} else if (V.PC.preg >= 24 && V.PC.pregMood === 2) {
			r.push(`${He} spends the week`);
			if (slave.trust < -20) {
				r.push(`in fear under your gravid bulk as you forcibly ride ${his} dick in a futile attempt to cool your raging hormones.`);
			} else if (slave.devotion < -20) {
				r.push(`alternately struggling or lying corpse-like under your gravid bulk as you forcibly ride ${his} dick in a futile attempt to cool your raging hormones.`);
			} else if (slave.devotion <= 20) {
				r.push(`reluctantly trying to avoid having to take all of your pregnancy weight while not pissing you off whenever you ride ${his} dick in a futile attempt to cool your raging hormones.`);
			} else if (slave.fetishKnown === 1 && slave.fetish === "submissive") {
				r.push(`doing ${his} best to be a good belly support as ${he} submissively gives you what you want.`);
			} else if (slave.devotion <= 50) {
				r.push(`obediently bearing your weight as you aggressively ride ${his} dick in a futile attempt to cool your raging hormones.`);
			} else {
				r.push(`happily pampering and supporting your gravid bulk as you ride ${his} dick in a futile attempt to cool your raging hormones.`);
			}
			r.push(`You have the sexual energy to aggressively mount ${him}`);
			if (slave.trust >= -20 && slave.devotion <= 20) {
				if (penetrativeUse >= 14) {
					r.push(`several times a day; the constant,`);
					slave.devotion -= 10;
					slave.trust -= 25;
				} else if (penetrativeUse >= 7) {
					r.push(`at least once a day; the regular,`);
					slave.devotion -= 5;
					slave.trust -= 15;
				} else {
					r.push(`on occasion; the threat of`);
					slave.devotion -= 3;
					slave.trust -= 5;
				}
				r.push(`violent rape fills ${him} with <span class="mediumorchid">revulsion</span> and <span class="gold">fear.</span>`);
			} else if (slave.devotion <= 20) {
				if (penetrativeUse >= 14) {
					r.push(`several times a day; submitting to your constant,`);
					slave.devotion += 3;
					slave.trust -= 5;
				} else if (penetrativeUse >= 7) {
					r.push(`at least once a day; submitting to your regular,`);
					slave.devotion += 2;
					slave.trust -= 4;
				} else {
					r.push(`on occasion; submitting to your rather`);
					slave.devotion++;
					slave.trust -= 3;
				}
				r.push(`forceful use <span class="hotpink">habituates ${him}</span> to being a sex slave, though ${he} learns to <span class="gold">fear</span> your bottomless lust.`);
			} else {
				if (penetrativeUse >= 14) {
					r.push(`several times a day; constant,`);
					slave.devotion += 3;
				} else if (penetrativeUse >= 7) {
					r.push(`at least once a day; regular,`);
					slave.devotion += 2;
				} else {
					r.push(`on occasion;`);
					slave.devotion++;
				}
				r.push(`rough sex with you teaches ${him} that <span class="hotpink">${his} place is under your stomach.</span>`);
			}
		} else {
			r.push(`${He} spends the week`);
			if (slave.trust < -20) {
				r.push(`in terrified compliance with your use of ${his} dick.`);
			} else if (slave.devotion < -20) {
				r.push(`alternately struggling or lying corpse-like as you ride ${his} dick.`);
			} else if (slave.devotion <= 20) {
				r.push(`reluctantly accepting your use of ${his} dick.`);
			} else if (slave.fetishKnown === 1 && slave.fetish === "submissive") {
				r.push(`as your adoring submissive, seeing to your pleasure with ${his} shaft.`);
			} else if (slave.devotion <= 50 && V.PC.vagina !== -1) {
				r.push(`obediently serving you in the classical way, driving into your womanhood.`);
			} else if (slave.devotion <= 50) {
				r.push(`week obediently serving you by driving into your backdoor.`);
			} else if (V.PC.vagina !== -1 && (slave.career === "a breeding bull" || (slave.fetishKnown === 1) && (slave.fetish === "pregnancy"))) {
				r.push(`eagerly driving ${his} cock into your pussy, thoroughly enjoying fucking pussy bareback and cumming deep inside.`);
			} else if (V.PC.vagina !== -1) {
				r.push(`serving you in the classical way, warming your bed and lovingly driving ${his} shaft into your womanhood.`);
			} else {
				r.push(`serving you in the classical way, warming your bed and lovingly driving ${his} shaft into your backdoor.`);
			}
			if (slave.trust >= -20 && slave.devotion <= 20) {
				r.push(`You have the sexual energy to ride ${him}`);
				if (penetrativeUse >= 14) {
					r.push(`several times a day; the constant`);
					slave.devotion -= 5;
					slave.trust -= 15;
				} else if (penetrativeUse >= 7) {
					r.push(`at least once a day; the regular`);
					slave.devotion -= 3;
					slave.trust -= 9;
				} else {
					r.push(`on occasion; the threat of`);
					slave.devotion -= 3;
					slave.trust -= 3;
				}
				r.push(`rape fills ${him} with <span class="mediumorchid">revulsion</span> and <span class="gold">fear.</span>`);
			} else if (slave.devotion <= 20) {
				r.push(`You have the sexual energy to ride ${him}`);
				if (penetrativeUse >= 14) {
					r.push(`several times a day; submitting to your constant`);
					slave.devotion += 3;
				} else if (penetrativeUse >= 7) {
					r.push(`at least once a day; submitting to your regular`);
					slave.devotion += 2;
				} else {
					r.push(`on occasion; submitting to your`);
					slave.devotion++;
				}
				r.push(`use <span class="hotpink">habituates ${him}</span> to being your sex slave.`);
			} else {
				r.push(`You have the sexual energy to get fucked by ${him}`);
				if (penetrativeUse >= 14) {
					r.push(`several times a day; constant,`);
					slave.devotion += 3;
					slave.trust += 3;
				} else if (penetrativeUse >= 7) {
					r.push(`at least once a day; regular,`);
					slave.devotion += 2;
					slave.trust += 2;
				} else {
					r.push(`on occasion;`);
					slave.devotion++;
					slave.trust++;
				}
				r.push(`enjoyable sex with you draws ${him} <span class="hotpink">closer to you</span> and encourages ${him} to <span class="mediumaquamarine">trust you.</span>`);
			}
		}
		if (slave.fetish !== "mindbroken") {
			if (slave.behavioralFlaw === "hates women" && V.PC.title === 0 && V.PC.vagina !== -1 && V.PC.dick === 0 && slave.devotion > 20) {
				r.push(`Spending so much intimate time with an attractive woman <span class="green">reconciles ${him} to serving the fairer sex.</span>`);
				slave.behavioralFlaw = "none";
			}
		}
		slave.counter.penetrative += penetrativeUse;
		V.penetrativeTotal += penetrativeUse;
		if (canImpreg(V.PC, slave)) {
			r.push(knockMeUp(V.PC, penetrativeUse, 0, slave.ID));
		}
		if (V.policies.sexualOpenness === 0) {
			r.push(`Rumors spread that you <span class="red">enjoy taking it from slaves.</span>`);
			V.PC.degeneracy += 2;
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function useAllHoles(slave) {
		if (slave.fuckdoll > 0) {
			r.push(`You keep ${him} with you all week, using ${him} as your personal sex toy. When you're not using ${him}, ${he}`);
			if (!hasAnyLegs(slave)) {
				r.push(`rests`);
			} else {
				r.push(`stands`);
			}
			r.push(`nearby, waiting silently.`);
			slave.trust += 4;
		} else if (slave.anus === 0 && slave.vagina === 0) {
			r.push(`Since you haven't yet decided to sell or take ${his} virginity or ${his} tight little anus, you let ${him} please you with ${his}`);
			if (slave.nipples === "fuckable" && V.PC.dick !== 0) {
				r.push(`mouth and tits.`);
			} else {
				r.push(`mouth.`);
			}
			r.push(`${He} is <span class="mediumaquamarine">duly grateful</span> you let ${him} keep ${his} innocence for another week, though ${his}`);
			if (slave.nipples === "fuckable" && V.PC.dick !== 0) {
				r.push(`throat and breasts get a little sore picking up the slack.`);
			} else {
				r.push(`throat gets a little sore doing the work of three holes.`);
			}
			slave.trust += 1;
		} else if (slave.vagina === 0) {
			r.push(`Since you haven't yet decided to sell or take ${his} virginity, you let ${him} confine ${his} efforts to ${his}`);
			if (canDoAnal(slave) && slave.nipples === "fuckable" && V.PC.dick !== 0) {
				r.push(`anus, nipples and mouth. ${He} is <span class="mediumaquamarine">duly grateful</span> you let ${him} keep ${his} innocence for another week, though ${his} butt, boobs and throat get a little sore.`);
			} else if (canDoAnal(slave)) {
				r.push(`anus and mouth. ${He} is <span class="mediumaquamarine">duly grateful</span> you let ${him} keep ${his} innocence for another week, though ${his} butt and throat get a little sore.`);
			} else if (slave.nipples === "fuckable" && V.PC.dick !== 0) {
				r.push(`nipples and mouth. ${He} is <span class="mediumaquamarine">duly grateful</span> you let ${him} keep ${his} innocence for another week, though ${his} boobs and throat get a little sore.`);
			} else {
				r.push(`mouth. ${He} is <span class="mediumaquamarine">duly grateful</span> you ${his} keep let ${him} innocence for another week, though ${his} throat gets a little sore.`);
			}
			slave.trust += 1;
		} else if (slave.anus === 0) {
			r.push(`Since you haven't yet decided to sell or take ${his} tight little anus, you let ${him} confine ${his} efforts to ${his}`);
			if (canDoVaginal(slave) && slave.nipples === "fuckable" && V.PC.dick !== 0) {
				r.push(`pussy, nipples and mouth. ${He} is <span class="mediumaquamarine">duly grateful</span> you let ${him} put off taking it up the butt another week, though ${his} boobs and throat get a little sore.`);
			} else if (canDoVaginal(slave)) {
				r.push(`pussy and mouth. ${He} is <span class="mediumaquamarine">duly grateful</span> you let ${him} put off taking it up the butt another week, though ${his} throat gets a little sore.`);
			} else if (slave.nipples === "fuckable" && V.PC.dick !== 0) {
				r.push(`nipples and mouth. ${He} is <span class="mediumaquamarine">duly grateful</span> you let ${him} put off taking it up the butt another week, though ${his} boobs and throat get a little sore.`);
			} else {
				r.push(`mouth. ${He} is <span class="mediumaquamarine">duly grateful</span> you let ${him} put off taking it up the butt another week, though ${his} throat gets a little sore.`);
			}
			slave.trust += 1;
		} else if (!canWalk(slave)) {
			r.push(`You keep ${him} around you all week, using ${him} as your personal sex toy and bedwarmer.`);
			if (isAmputee(slave)) {
				r.push(`Without arms and legs,`);
			} else if (!hasAnyLegs(slave)) {
				r.push(`Without legs,`);
			} else if (!hasBothLegs(slave)) {
				r.push(`With just one leg,`);
			} else if (tooFatSlave(slave)) {
				r.push(`Immobilized by ${his} own weight,`);
			} else if (!canMove(slave)) {
				r.push(`Immobilized by ${his} own swollen body,`);
			} else if (tooBigBreasts(slave)) {
				r.push(`Restricted by ${his} own tits,`);
			} else if (tooBigBelly(slave)) {
				r.push(`Restricted by ${his} own swollen orb of a midsection,`);
			} else if (tooBigBalls(slave)) {
				r.push(`Restricted by ${his} own oversized testicles,`);
			} else if (tooBigDick(slave)) {
				r.push(`Restricted by ${his} own oversized cock,`);
			} else if (tooBigButt(slave)) {
				r.push(`Restricted by ${his} own massive ass,`);
			} else {
				r.push(`With ${his} clipped heels,`);
			}
			r.push(`${he} is your <span class="hotpink">helpless sexual appliance</span> and is <span class="mediumaquamarine">forced to trust you.</span>`);
			slave.trust += 4;
		} else if (slave.devotion > 50) {
			r.push(`${He} devotedly accompanies you all week, keeping ${his}`);
			if (canDoAnal(slave) && canDoVaginal(slave)) {
				r.push(`mouth,`);
				if (V.PC.dick !== 0 && slave.nipples === "fuckable") {
					r.push(`vagina, nipples`);
				} else {
					r.push(`vagina`);
				}
				r.push(`and asshole`);
			} else if (!canDoVaginal(slave) && canDoAnal(slave)) {
				if (V.PC.dick !== 0 && slave.nipples === "fuckable") {
					r.push(`mouth, nipples`);
				} else {
					r.push(`mouth`);
				}
				r.push(`and`);
				if (slave.chastityVagina > 0) {
					r.push(r.pop() + ",");
					r.push(`since ${his} pussy is covered by ${his} chastity belt,`);
				}
				r.push(`asshole`);
			} else if (canDoVaginal(slave) && !canDoAnal(slave)) {
				if (V.PC.dick !== 0 && slave.nipples === "fuckable") {
					r.push(`mouth, nipples`);
				} else {
					r.push(`mouth`);
				}
				r.push(`and vagina`);
			} else {
				r.push(`mouth`);
				if (V.PC.dick !== 0 && slave.nipples === "fuckable") {
					r.push(`and nipples`);
				}
			}
			r.push(`available for you at all times.`);
			if (canAchieveErection(slave) && !slave.chastityPenis) {
				r.push(`Every time ${his} beloved ${getWrittenTitle(slave)} fucks ${him}, ${he} gets a hard-on.`);
			} else if (slave.dick !== 0 && slave.prostate > 0 && canDoVaginal(slave)) {
				r.push(`${He} doesn't get a hard-on as you use ${him}, but ${he} comes from the prostate stimulation when ${his} beloved ${getWrittenTitle(slave)} uses ${his} pussy.`);
			} else if (slave.dick !== 0 && slave.prostate > 0 && canDoAnal(slave)) {
				r.push(`${He} doesn't get a hard-on as you use ${him}, but ${he} comes from the prostate stimulation when ${his} beloved ${getWrittenTitle(slave)} uses ${his} butt.`);
			} else {
				r.push(`${He} comes indecently hard whenever ${his} beloved ${getWrittenTitle(slave)} uses ${his} body.`);
			}
			r.push(`You have the sexual energy to fuck ${him}`);
			if (fuckSlavesCount <= V.PC.sexualEnergy / 2) {
				r.push(`several times a day; constant,`);
				slave.devotion += 3;
				slave.trust += 3;
			} else if (fuckSlavesCount <= V.PC.sexualEnergy) {
				r.push(`at least once a day; regular,`);
				slave.devotion += 2;
				slave.trust += 2;
			} else {
				r.push(`on occasion;`);
				slave.devotion += 1;
				slave.trust += 1;
			}
			r.push(`loving sex with you draws ${him} <span class="hotpink">closer to you</span> and encourages ${him} to <span class="mediumaquamarine">trust you.</span>`);
		} else if (slave.devotion > 20) {
			r.push(`Whenever you feel the need, you use whichever of ${his} available holes that appears most appealing at the moment, since ${he}'s up for anything.`);
			if (slave.dick !== 0 && canAchieveErection(slave) && !slave.chastityPenis) {
				r.push(`By the end of the week ${he} gets a hard-on when you use ${him}.`);
			}
			r.push(`You have the sexual energy to fuck ${him}`);
			if (fuckSlavesCount <= V.PC.sexualEnergy / 2) {
				r.push(`several times a day; constant,`);
				slave.devotion += 3;
				slave.trust += 3;
			} else if (fuckSlavesCount <= V.PC.sexualEnergy) {
				r.push(`at least once a day; regular,`);
				slave.devotion += 2;
				slave.trust += 2;
			} else {
				r.push(`on occasion;`);
				slave.devotion += 1;
				slave.trust += 1;
			}
			r.push(`enjoyable sex with you draws ${him} <span class="hotpink">closer to you</span> and encourages ${him} to <span class="mediumaquamarine">trust you.</span>`);
		} else if (slave.trust < -20) {
			r.push(`${He} is afraid of you and does ${his} best to offer you ${his}`);
			if (canDoAnal(slave) && canDoVaginal(slave)) {
				r.push(`mouth,`);
				if (V.PC.dick !== 0 && slave.nipples === "fuckable") {
					r.push(`vagina, nipples`);
				} else {
					r.push(`vagina`);
				}
				r.push(`and asshole`);
			} else if (slave.vagina === -1 && canDoAnal(slave)) {
				if (V.PC.dick !== 0 && slave.nipples === "fuckable") {
					r.push(`mouth, nipples`);
				} else {
					r.push(`mouth`);
				}
				r.push(`and asshole`);
			} else if (slave.vagina > -1 && !canDoVaginal(slave) && canDoAnal(slave)) {
				if (V.PC.dick !== 0 && slave.nipples === "fuckable") {
					r.push(`mouth, nipples`);
				} else {
					r.push(`mouth`);
				}
				r.push(`and, since ${his} pussy is covered by ${his} chastity belt, asshole`);
			} else {
				r.push(`mouth`);
				if (V.PC.dick !== 0 && slave.nipples === "fuckable") {
					r.push(`and nipples`);
				}
			}
			r.push(`to save ${himself} from worse treatment than mere rape.`);
			if (slave.dick !== 0 && canAchieveErection(slave) && !slave.chastityPenis) {
				r.push(`By the end of the week ${he} gets a hard-on when you use ${him}.`);
			}
			r.push(`You have the sexual energy to fuck ${him}`);
			if (fuckSlavesCount <= V.PC.sexualEnergy / 2) {
				r.push(`several times a day; submitting to your constant`);
				slave.devotion += 3;
			} else if (fuckSlavesCount <= V.PC.sexualEnergy) {
				r.push(`at least once a day; submitting to your regular`);
				slave.devotion += 2;
			} else {
				r.push(`on occasion; submitting to your`);
				slave.devotion += 1;
			}
			r.push(`use <span class="hotpink">habituates ${him}</span> to being your sex slave.`);
		} else {
			r.push(`Whenever you feel the need, you grab ${him} and use whichever of ${his} available holes that appears most appealing at the moment.`);
			if (slave.dick !== 0 && canAchieveErection(slave)) {
				r.push(`${His} dick stays limp as you rape ${him}.`);
			}
			r.push(`You have the sexual energy to fuck ${him}`);
			if (fuckSlavesCount <= V.PC.sexualEnergy / 2) {
				r.push(`several times a day; the constant`);
				slave.devotion -= 5;
				slave.trust -= 15;
			} else if (fuckSlavesCount <= V.PC.sexualEnergy) {
				r.push(`at least once a day; the regular`);
				slave.devotion -= 3;
				slave.trust -= 9;
			} else {
				r.push(`on occasion; the threat of`);
				slave.devotion -= 3;
				slave.trust -= 3;
			}
			r.push(`rape fills ${him} with <span class="mediumorchid">revulsion</span> and <span class="gold">fear.</span>`);
		}

		if (fuckSlavesCount <= V.PC.sexualEnergy / 2) {
			acts = jsRandom(21, 40);
		} else if (fuckSlavesCount <= V.PC.sexualEnergy) {
			acts = jsRandom(7, 14);
		} else {
			acts = jsRandom(3, 7);
		}
		if (slave.assignment === Job.FUCKTOY) {
			acts = Math.ceil(acts * restEffects(slave, 11));
		} else {
			acts = Math.ceil(acts * healthPenalty(slave));
		}
		oralUse = 1;
		if (canDoAnal(slave) && slave.anus > 0) {
			analUse = 1;
		}
		if (canDoVaginal(slave) && slave.vagina > 0) {
			vaginalUse = 1;
		}
		mammaryUse = jsRandom(0, 1);
		if (slave.nipples === "fuckable") {
			mammaryUse = 1;
		}
		demand = oralUse + analUse + vaginalUse + mammaryUse;
		oralUse = Math.trunc((oralUse / demand) * acts);
		analUse = Math.trunc((analUse / demand) * acts);
		vaginalUse = Math.trunc((vaginalUse / demand) * acts);
		mammaryUse = Math.trunc((mammaryUse / demand) * acts);
		slave.counter.oral += oralUse;
		V.oralTotal += oralUse;
		slave.counter.anal += analUse;
		V.analTotal += analUse;
		slave.counter.vaginal += vaginalUse;
		V.vaginalTotal += vaginalUse;
		slave.counter.mammary += mammaryUse;
		V.mammaryTotal += mammaryUse;

		if (slave.fuckdoll === 0) {
			if (slave.fetish !== "mindbroken") {
				if (slave.skill.oral < 100) {
					r.push(`After a lot of time spent with`);
					if (V.PC.dick !== 0) {
						r.push(`your dick in ${his} mouth,`);
					} else {
						r.push(`${his} mouth on your cunt,`);
					}
					r.push(`${his} <span class="green">oral skill improves.</span>`);
					r.push(slaveSkillIncrease('oral', slave, trainingEfficiency));
				} else if (slave.skill.vaginal < 100 && slave.vagina > 0 && canDoVaginal(slave)) {
					r.push(`After a lot of time spent getting fucked, ${his} <span class="green">vaginal skill improves.</span>`);
					r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency));
				} else if (slave.skill.anal < 100 && slave.anus !== 0 && canDoAnal(slave)) {
					r.push(`After a lot of time spent taking it up the ass, ${his} <span class="green">anal skill improves.</span>`);
					r.push(slaveSkillIncrease('anal', slave, trainingEfficiency));
				}
			}
		}

		if (slave.lactation > 0 && mammaryUse > 0) {
			slave.lactationDuration = 2;
			if (slave.boobsMilk > 0) {
				slave.boobs -= slave.boobsMilk;
				slave.boobsMilk = 0;
			}
		}
	}

	/**
	 * @param {FC.ReportSlave} slave
	 *
	 */
	function physicalEffects(slave) {
		if (slave.health.illness > 0 || slave.health.tired > 60) {
			r.push(`${He} is<span class="health dec">`);
			if (slave.health.tired > 60) {
				if (slave.health.illness === 1) {
					r.push(`feeling under the weather and`);
				} else if (slave.health.illness === 2) {
					r.push(`somewhat ill and`);
				} else if (slave.health.illness === 3) {
					r.push(`sick and`);
				} else if (slave.health.illness === 4) {
					r.push(`very sick and`);
				} else if (slave.health.illness === 5) {
					r.push(`terribly ill and`);
				}
			} else {
				if (slave.health.illness === 1) {
					r.push(`feeling under the weather,`);
				} else if (slave.health.illness === 2) {
					r.push(`somewhat ill,`);
				} else if (slave.health.illness === 3) {
					r.push(`sick,`);
				} else if (slave.health.illness === 4) {
					r.push(`very sick,`);
				} else if (slave.health.illness === 5) {
					r.push(`terribly ill,`);
				}
			}
			if (slave.health.tired > 90) {
				r.push(`exhausted,`);
			} else if (slave.health.tired > 60) {
				r.push(`fatigued,`);
			}
			if (slave.health.illness !== 0) {
				r.push(`</span> making ${him} rather unappealing to use.`);
			} else {
				r.push(`</span> making ${him} less enjoyable to fuck.`);
			}
		}
		if (slave.health.condition < 0 && jsRandom(1, 100) > 50) {
			r.push(`Under your personal supervision, <span class="health inc">${his} health improves.</span>`);
			improveCondition(slave, 10);
		}
		if (slave.assignment === Job.MASTERSUITE) {
			r.push(`${He} has plenty of time to rest during the day to recover from your physically demanding visits, even though ${he} sometimes has to work long nights.`);
			tired(slave);
		} else if (slave.assignment === Job.FUCKTOY) {
			if (slaveResting(slave)) {
				r.push(`${He} spends reduced hours serving you in order to <span class="health inc">offset ${his} lack of rest.</span>`);
			} else if (slave.health.tired + 11 >= 90 && !willWorkToDeath(slave)) {
				r.push(`${He} attempts to rebuke your advances due to ${his} exhaustion, but can do little to avoid them or the resulting <span class="trust dec">severe punishment.</span> It still feels like <span class="devotion dec">fucking a dead fish,</span> since it's obvious that ${he} has chosen ${his} overall well-being over angering you.`);
				slave.devotion -= 10;
				slave.trust -= 5;
			} else {
				r.push(`${He} spends a considerable portion of ${his} shift`);
				if (hasAnyLegs(slave)) {
					r.push(`off ${his} feet,`);
				} else {
					r.push(`lying down,`);
				}
				if (slave.devotion > 20) {
					r.push(`so despite ending ${his} days out of breath and soaked with sweat, ${he} doesn't find ${himself} that tired in the morning.`);
				} else {
					r.push(`but just doesn't understand that <span class="health dec">${he}'d be less tired</span> if ${he} simply gave you what you want.`);
				}
			}
			tired(slave);
		}

		if (V.PC.dick !== 0) {
			if (slave.cervixImplant === 1 || slave.cervixImplant === 3) {
				cervixPump += 10 * (V.PC.balls - 2) * vaginalUse;
			}
			if (slave.cervixImplant === 2 || slave.cervixImplant === 3) {
				cervixPump += 10 * (V.PC.balls - 2) * analUse;
			}
		}
		if (cervixPump > 0) {
			if (slave.fuckdoll === 0) {
				if (slave.fetish === "mindbroken") {
					r.push(`${He} is completely oblivious to ${his} <span class="lime">increasingly swollen belly</span> and stands no chance of linking it to`);
				} else {
					r.push(`${He} notices ${his} <span class="lime">belly has swollen</span> after`);
				}
				r.push(`all the`);
				if (slave.cervixImplant === 1) {
					r.push(`vaginal`);
				} else if (slave.cervixImplant === 2) {
					r.push(`anal`);
				}
				r.push(`sex ${he}'s had with you.`);
				slave.bellyImplant += cervixPump;
			} else {
				r.push(`With each deposit of your seed into ${him}, ${his} <span class="lime">stomach swells a little larger.</span>`);
				slave.bellyImplant += cervixPump;
			}
		}

		if (slave.need) {
			if (slave.energy > 95 && V.masterSuiteUpgradeLuxury === 2 && fuckSlavesCount > 1) {
				r.push(`${He}'s a nymphomaniac and very difficult to sate, but the fuckpit allows ${him} all the sex even ${he} could ever want.`);
				slave.need = 0;
			} else if (slave.devotion > 95) {
				r.push(`${He}'s so devoted to you that any intimacy with you at all gives ${him} sexual satisfaction.`);
				slave.need = 0;
			} else if (slave.fetishKnown) {
				switch (slave.fetish) {
					case "masochist":
					case "submissive":
						if (analUse + vaginalUse > 0) {
							r.push(`${He} got tremendous sexual satisfaction from the ${analUse + vaginalUse} times you really fucked ${him} this week.`);
							slave.need = 0;
						}
						break;
					case "dom":
						if (penetrativeUse > 0) {
							r.push(`${He} got tremendous sexual satisfaction from the ${penetrativeUse} times ${he} got to fuck you this week.`);
							slave.need = 0;
						}
						break;
					case "boobs":
						if (mammaryUse > 0) {
							r.push(`${He} got tremendous sexual satisfaction from the ${mammaryUse} times you groped ${his} breasts to orgasm this week.`);
							slave.need = 0;
						}
						break;
					case "sadist":
					case "cumslut":
						if (oralUse > 0) {
							r.push(`${He} got tremendous sexual satisfaction from the ${oralUse} times you fucked ${his} face this week.`);
							slave.need = 0;
						}
						break;
					case "buttslut":
						if (analUse > 0) {
							r.push(`${He} got tremendous sexual satisfaction from the ${analUse} times you fucked ${his} ass this week.`);
							slave.need = 0;
						}
						break;
					case "pregnancy":
						if (vaginalUse > 0 && slave.mpreg === 0) {
							r.push(`${He} got tremendous sexual satisfaction from the ${vaginalUse} times you fucked ${his} pussy this week.`);
							slave.need = 0;
						} else if (analUse > 0 && slave.mpreg === 1) {
							r.push(`${He} got tremendous sexual satisfaction from the ${analUse} times you fucked ${his} butt this week.`);
							slave.need = 0;
						}
						break;
					case "humiliation":
					// nothing here
						break;
				}
			}
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 * @returns {number} rep multiplier
	 */
	function familyBonus(slave) {
		let multiplier = 0;
		let children;
		const isFucktoy = (s) => [Job.CONCUBINE, Job.MASTERSUITE, Job.FUCKTOY].includes(s.assignment);

		if (areRelated(V.PC, slave)) {
			r.push(`Keeping your own ${relativeTerm(V.PC, slave)} as a personal fucktoy leaves quite a public impression.`);
			multiplier += 0.01; // 1% base
			if (V.arcologies[0].FSEgyptianRevivalist !== "unset" || V.arcologies[0].FSEgyptianRevivalistIncestPolicy === 1) {
				multiplier += 0.04; // 5% if such behavior aligns with your societal goals
			}
		}

		if (slave.father > 0 && slave.mother !== slave.father) {
			const dad = getSlave(slave.father);
			if (dad && isFucktoy(dad)) {
				r.push(`Since you are also keeping ${his} father as a sexual servant, you often use them together, which leaves quite a public impression.`);
			}
		}

		if (slave.mother > 0) {
			const mom = getSlave(slave.mother);
			if (mom && isFucktoy(mom)) {
				r.push(`Since you are also keeping ${his} mother as a sexual servant, you often use them together, which leaves quite a public impression.`);
			}
		}

		children = V.slaves.filter(s => (s.father === slave.ID || s.mother === slave.ID) && isFucktoy(s));
		if (children.length > 1) {
			r.push(`Since you are also keeping ${his} daughters, ${toSentence(children.map(s => s.slaveName))}, as sexual servants, you often enjoy them all at once, which leaves quite a public impression.`);
		} else if (children.length > 0) {
			const childPronouns = getPronouns(children[0]);
			r.push(`Since you are also keeping ${his} ${childPronouns.daughter} as a sexual servant, you often use them together, which leaves quite a public impression.`);
		}

		children = V.slaves.filter((s) => (areSisters(slave, s) > 0) && isFucktoy(s));
		if (children.length > 1) {
			r.push(`Since you are also keeping ${his} sisters, ${toSentence(children.map(s => s.slaveName))}, as sexual servants, you often enjoy them all at once, which leaves quite a public impression.`);
		} else if (children.length > 0) {
			const childPronouns = getPronouns(children[0]);
			r.push(`Since you are also keeping ${his} ${childPronouns.sister} as a sexual servant, you often use them together, which leaves quite a public impression.`);
		}

		return multiplier;
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 * @param {number} familyMult
	 */
	function addRep(slave, familyMult) {
		let multiplier = 0.1 + familyMult;
		if (slave.fuckdoll === 0) {
			if (slave.fetish !== "mindbroken") {
				if (slave.relationship === -2) {
					multiplier += 0.04;
				} else if (slave.relationship === -3 && slave.devotion > 50) {
					multiplier += 0.06;
				}
			}
			if (V.arcologies[0].FSSlaveProfessionalism > 50 && slave.intelligence + slave.intelligenceImplant >= 100 && slave.skill.entertainment >= 100 && slave.skill.whoring >= 100 && slave.skill.anal >= 100 && slave.skill.oral >= 100) {
				multiplier += 0.04;
				if (slave.vagina >= 0 && slave.skill.vaginal >= 100) {
					multiplier += 0.01;
				}
			}
			if (V.arcologies[0].FSRestart > 50 && slave.breedingMark === 1 && V.propOutcome === 1) {
				multiplier += 0.04;
			}
			if (V.arcologies[0].FSRepopulationFocus > 50 && slave.bellyPreg >= 5000) {
				multiplier += 0.02;
			}
			if (slave.prestige > 0) {
				multiplier += 0.03*slave.prestige;
			}
			if (slave.porn.prestige > 2) {
				multiplier += 0.1;
			} else if (slave.porn.prestige > 1) {
				multiplier += 0.03;
			}
		} else {
			if (slave.porn.fameType === "fuckdoll") {
				multiplier += 0.1 * slave.porn.prestige;
			} else {
				multiplier += 0.04;
			}
		}
		if (slave.ID === V.ConcubineID) {
			multiplier += 0.05;
		} else if ((slave.ID === V.HeadGirlID) && (V.arcologies[0].FSEgyptianRevivalistLaw === 1)) {
			multiplier += 0.05;
		}

		repX(Math.trunc(( Beauty(slave) * FResult(slave) ) * multiplier / 4), "fucktoy", slave);

		r.push(`Keeping ${him} as nothing but your personal`);
		if (slave.toyHole === "pussy") {
			r.push(`pussy toy`);
		} else if (slave.toyHole === "ass") {
			r.push(`anal toy`);
		} else if (slave.toyHole === "mouth") {
			r.push(`oral toy`);
		} else if (slave.devotion <= 20) {
			r.push(`rapebait`);
		} else {
			r.push(`fucktoy`);
		}
		if (slave.prestige > 0 && slave.fuckdoll === 0) {
			r.push(`<span class="green">adds considerably to your reputation,</span> since ${he}'s prestigious.`);
		} else {
			r.push(`<span class="green">adds slightly to your reputation</span> as a prosperous citizen.`);
		}

		if (slave.fuckdoll === 0) {
			if (slave.porn.prestige > 2) {
				r.push(`Having your every urge attended to by a famous porn star <span class="green">is not lost on the citizenry.</span>`);
			} else if (slave.porn.prestige > 1) {
				r.push(`Having a rising porn star to sate your urges with <span class="green">demonstrates how well off you are.</span>`);
			}
			if (slave.fetish !== "mindbroken") {
				if (slave.relationship === -2) {
					r.push(`${His} satisfaction with ${his} place near you is obvious, <span class="green">bringing attention</span> to how completely you've broken ${him}.`);
				} else if (slave.relationship === -3 && slave.devotion > 50) {
					r.push(`${His} satisfaction with ${his} ${wife}ly duties is obvious, <span class="green">bringing attention</span> to the slave future you're building.`);
				}
			}
			if (V.arcologies[0].FSSlaveProfessionalism > 50 && slave.intelligence + slave.intelligenceImplant >= 100 && slave.skill.entertainment >= 100 && slave.skill.whoring >= 100 && slave.skill.anal >= 100 && slave.skill.oral >= 100) {
				r.push(`Keeping an ideal courtesan to attend to your needs <span class="green">is the definition of high class.</span>`);
			}
			if (V.arcologies[0].FSRestart > 50 && slave.breedingMark === 1 && V.propOutcome === 1) {
				r.push(`${His} breeding mark and ${his} place near you as a breeding toy is obvious, <span class="green">bringing attention</span> to how beautiful a pairing you make.`);
			}
			if (V.arcologies[0].FSRepopulationFocus > 50 && slave.bellyPreg >= 5000) {
				r.push(`${His} advanced pregnancy and role as your gravid breeder is obvious, <span class="green">bringing attention</span> to a woman's ideal role in ${arcology.name}.`);
			}
		} else {
			if (slave.porn.fameType === "fuckdoll") {
				if (slave.porn.prestige > 2) {
					r.push(`Keeping a legendary fuckdoll as your personal plaything <span class="green">is not lost on the citizenry.</span>`);
				} else if (slave.porn.prestige > 1) {
					r.push(`Keeping a well-known fuckdoll to sate your urges with <span class="green">demonstrates how well off you are.</span>`);
				}
			}
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 *
	 */
	function mentalEffects(slave) {
		if (slave.behavioralQuirk === "confident") {
			r.push(`${slave.slaveName} <span class="mediumaquamarine">confidently enjoys</span> the prestige within the slave hierarchy that comes with being your fucktoy.`);
			slave.trust += 1;
		} else if (slave.behavioralQuirk === "insecure") {
			r.push(`${slave.slaveName} <span class="mediumaquamarine">constantly reassures ${himself}</span> that ${he} must be pretty, since you keep ${him} as a fucktoy.`);
			slave.trust += 1;
		}
		if (slave.behavioralQuirk === "adores men") {
			if (V.PC.dick !== 0) {
				r.push(`${slave.slaveName} <span class="hotpink">adores your company,</span> and is happy to spend time with you, even when you don't have your cock in ${him}.`);
				slave.devotion += 1;
			}
		} else if (slave.behavioralQuirk === "adores women") {
			if (V.PC.vagina !== -1) {
				r.push(`${slave.slaveName} <span class="hotpink">adores your company,</span> and is happy to spend time with you, even when you aren't fucking.`);
				slave.devotion += 1;
			}
		} else if (slave.sexualQuirk === "romantic") {
			r.push(`${slave.slaveName} knows being part of your harem is the best romance ${he} can realistically expect, and does ${his} best to <span class="mediumaquamarine">be content</span> with it.`);
			slave.trust += 1;
		}
		if (slave.fetish === "pregnancy" && (V.PC.preg >= 20 || (V.PC.preg >= 16 && V.PC.career === "escort"))) { // .belly
			r.push(`${slave.slaveName} <span class="hotpink">enjoys being so close to ${his} gravid ${getWrittenTitle(slave)}.</span>`);
			slave.devotion += 1;
			if (slave.fetishKnown === 0) {
				r.push(`${He} enjoys being tasked with servicing a pregnant ${playerPronouns.woman} far more than a normal slave would; <span class="lightcoral">${he}'s harboring a pregnancy fetish!</span>`);
				slave.fetishKnown = 1;
			} else if (slave.fetishStrength < 95) {
				r.push(`Being tasked with servicing a lusty pregnant ${playerPronouns.woman} <span class="lightcoral">strengthens ${his} pregnancy fetish.</span>`);
				slave.fetishStrength += 4;
			}
		} else if (fetishChange > jsRandom(0, 100) && (V.PC.preg >= 20 || (V.PC.preg >= 16 && V.PC.career === "escort"))) {
			r.push(`At first ${he} found the prospect of being used by ${his} increasingly pregnant ${getWrittenTitle(slave)} a turn off, but being so close to your gravid form serves to be more erotic than ${he} anticipated. Soon ${he} finds ${himself} aroused less from the prospect of sex and more <span class="lightcoral">the chance to be near your child laden belly.</span>`);
			slave.fetish = "pregnancy";
			slave.fetishKnown = 1;
			slave.fetishStrength = 10;
		}
	}
})();

repo_name: CloudyCoffee/fc

license: mit


code:
App.SlaveAssignment.porn = (function() {
	"use strict";

	let r;
	let he;
	let him;
	let his;
	let himself;
	let He;
	let His;
	let decayRate;
	let viewership;
	let viewerSoaking;

	return saPorn;

	/**
	 * @param {App.Entity.SlaveState} slave
	 * @returns {string}
	 */
	function saPorn(slave) {
		({
			he, him, his, himself, He, His
		} = getPronouns(slave));

		r = ` `;

		let oldFame = slave.porn.viewerCount;

		if (V.studio === 1 && slave.porn.feed === 1) {
			viewerSoaking = 0;

			calcBaseViewership(slave);

			r += `The studio regularly releases clips of ${his} daily affairs. `;
			if (V.cheatMode === 1) {
				r += `(Decay: ${decayRate} Viewership: ${viewership} Last week's fame: ${oldFame}) `;
			}

			prestigeCommentary(slave);
			faceCommentary(slave);
			hack();

			allGenreViews(slave);
			updateViewerCount(slave);
			if (oldFame > slave.porn.viewerCount) {
				r += `Overall, ${his} online fame <span class="red">dropped</span> this week. `;
			} else if (oldFame < slave.porn.viewerCount) {
				r += `Overall, ${his} online fame <span class="green">rose</span> this week. `;
				if (oldFame < 100 && slave.porn.viewerCount >= 100 && V.studioFeed === 1) {
					r += `${He} <span class="yellow">has accrued enough views to determine prospective porn genres.</span> `;
				}
			} else if (slave.porn.viewerCount !== 0) {
				r += `Surprisingly, ${his} online fame <span class="yellow">remained consistent</span> this week despite how fickle watchers can be. `;
			} else {
				r += `${He} went <span class="red">completely overlooked</span> this week and failed to gain any hits at all. `;
			}

			if (slave.porn.viewerCount > 0) {
				let donations = Math.floor(slave.porn.viewerCount / jsRandom(10, 15 + viewerSoaking));
				if (donations > 0) {
					r += `Fans donated a total of <span class="cash inc">${cashFormat(donations)}</span> to ${his} account this week. `;
					cashX(donations, "porn", slave);
				}
			}
			if (slave.porn.spending > 0) {
				cashX(forceNeg(slave.porn.spending / V.PCSlutContacts), "porn", slave);
			}

			prestigeGen(slave);
		} else { /* popularity decay from lack of new content */
			if (slave.porn.prestige > 1) { // 500k
				decayRate = 5000;
			} else if (slave.porn.prestige > 0) { // 10k
				decayRate = 500;
			} else {
				decayRate = 30;
			}

			genreDecay(slave);
			updateViewerCount(slave);

			prestigeDecay(slave);
		}

		return r;
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 */
	function genreDecay(slave) {
		for (const genre of App.Porn.getAllGenres()) {
			if (slave.porn.fame[genre.fameName] > 0) {
				const oldPorn = slave.porn.fame[genre.fameName];
				slave.porn.fame[genre.fameName] = Math.clamp(slave.porn.fame[genre.fameName] - (decayRate * 2), 0, 100000);
				r += cheatDelta(genre.uiName(), oldPorn, slave.porn.fame[genre.fameName]);
			}
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 */
	function updateViewerCount(slave) {
		slave.porn.viewerCount = Math.trunc(App.Porn.getAllGenres().reduce((acc, cur) => acc + slave.porn.fame[cur.fameVar], 0.0));
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 */
	function prestigeDecay(slave) {
		if (slave.porn.prestige > 0) {
			const genre = App.Porn.getGenreByFameName(slave.porn.fameType);
			if (slave.porn.fame[genre.fameName] < 40000 && slave.porn.prestige === 2) {
				slave.porn.prestige = 1;
				slave.porn.prestigeDesc = `$He has a following in slave pornography. ${genre.prestigeDesc1}.`;
				r += `With the lack of any new content, ${his} popularity in ${slave.porn.fameType} pornography has dropped considerably, though some viewers still cling to the hope that ${he}'ll come back. `;
			} else if (slave.porn.fame[genre.fameName] < 5000) {
				slave.porn.prestige = 0;
				slave.porn.prestigeDesc = 0;
				slave.porn.fameType = "none";
				r += `With no new ${slave.porn.fameType} content coming out, <span class="red">${his} popularity has faded away.</span> `;
			}
		}
	}

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

		if (slave.porn.prestige > 1) {
			decayRate = 5000;
			if (slave.fuckdoll > 0) {
				face = 50;
			} else if (slave.faceAccessory === "porcelain mask") {
				face = 20;
			} else {
				face = slave.face * 4;
			}
			viewership = ((500 / V.HackingSkillMultiplier) + (slave.porn.spending) + (face) + (slave.prestige * 10) - (decayRate));
		} else if (slave.porn.prestige > 0) {
			decayRate = 500;
			if (slave.fuckdoll > 0) {
				face = 20;
			} else if (slave.faceAccessory === "porcelain mask") {
				face = 50;
			} else {
				face = slave.face * 2;
			}
			viewership = ((900 / V.HackingSkillMultiplier) + (slave.porn.spending / 15) + (face) + (slave.prestige * 250) - (decayRate));
		} else {
			decayRate = 30;
			if (slave.fuckdoll > 0) {
				face = 0;
			} else if (slave.faceAccessory === "porcelain mask") {
				face = 0;
			} else {
				face = slave.face / 20;
			}
			viewership = ((300 / V.HackingSkillMultiplier) + (slave.porn.spending > 0 ? 1.01 * slave.porn.spending : 200) + (face) + (slave.prestige * 20) - (decayRate));
		}
		viewership = Math.trunc(viewership);
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 */
	function prestigeCommentary(slave) {
		if (slave.porn.prestige > 1) {
			r += `${He} is widely regarded in ${slave.porn.fameType} porn, but with so many watchers, turn over is high. `;
		} else if (slave.porn.prestige > 0) {
			if (slave.porn.fameType === "generic") {
				r += `${He} has claimed a niche in slave porn, so there is a constant cycle of new arrivals and bored ex-watchers. `;
			} else {
				r += `${He} has claimed a niche for ${himself} in ${slave.porn.fameType} porn, so there is a constant cycle of new arrivals and bored ex-watchers. `;
			}
		} else {
			r += `${He} is borderline unknown, so ${he} tends to hold onto the few watchers ${he} has. `;
		}

		if (slave.prestige > 1) {
			r += `Interest in porn of ${him} is very high, since ${he}'s already quite prestigious. `;
		} else if (slave.prestige > 0) {
			r += `Interest in porn of ${him} is high, since ${he}'s already prestigious. `;
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 */
	function faceCommentary(slave) {
		if (slave.fuckdoll > 0) {
			return;
		} else if (slave.faceAccessory === "porcelain mask") {
			r += `${His} mask adds an air of mystery to ${him}, `;
			if (slave.porn.prestige > 1) {
				r += `but people wonder if ${he} is trying to hide something. `;
			} else if (slave.porn.prestige > 0) {
				r += `tantalizing viewers with what it hides. `;
			} else {
				r += `but viewers are more interested in ${his} body. `;
			}
		} else if (slave.face > 95) {
			r += `${His} unbelievably beautiful face seizes the attention of all who see it. `;
		} else if (slave.face > 40) {
			r += `${His} gorgeous face draws viewers in and keeps them watching. `;
		} else if (slave.face > 10) {
			r += `${His} pretty face draws viewers in. `;
		} else if (slave.face > 0) {
			r += `${His} face is attractive, but it attracts few viewers. `;
		} else if (slave.face === 0) {
			r += `${His} face is completely average and makes no difference to ${his} viewers. `;
		} else if (slave.face >= -10) {
			r += `${His} face, while attractive, is so average it turns off some viewers. `;
		} else if (slave.face >= -40) {
			r += `${His} unattractive face causes viewers to move on. `;
		} else if (slave.face >= -95) {
			r += `${His} ugly face drives viewers off. `;
		} else {
			r += `${His} face chases off all but the most desperate viewers. `;
		}
	}

	function hack() {
		if (V.PC.skill.hacking > 10) {
			r += `With your hacking skills, you manage to tweak search algorithms to display ${his} content more often. `;
		} else if (V.PC.skill.hacking < 0) {
			r += `With your lack of skill with computers you manage to misidentify ${his} content, complicating searches. `;
			IncreasePCSkills('hacking', 0.1);
		}
		IncreasePCSkills('hacking', 0.1);
	}

	function viewershipDelta(newPorn, oldPorn) {
		if (newPorn > oldPorn) {
			return `Viewership <span class="green">increased</span> this week. `;
		} else if (newPorn < oldPorn) {
			return `Viewership <span class="red">decreased</span> this week. `;
		} else {
			return `Viewership <span class="yellow">was stable</span> this week. `;
		}
	}

	/**
	 * @returns {string}
	 */
	function cheatDelta(name, oldPorn, newPorn) {
		if (V.cheatMode === 1) {
			return `(${name}: ${oldPorn} to ${newPorn}). `;
		}
		return ``;
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 */
	function allGenreViews(slave) {
		let adjustedViewership = viewership;

		function genreViews(slave, genre) {
			const oldPorn = slave.porn.fame[genre.fameVar];
			if (genre.valid(slave)) {
				if (slave.porn.focus === genre.focusName || slave.porn.fameType === genre.fameName) {
					adjustedViewership = viewership * genre.type.focusedViewershipFactor;
				} else if (slave.porn.focus !== "none") {
					adjustedViewership = viewership * genre.type.unfocusedViewershipFactor;
				}
				slave.porn.fame[genre.fameVar] += adjustedViewership / (1 + viewerSoaking * genre.type.viewershipSoakingFactor) + genre.type.bonusViewership(slave) - ((decayRate / 10) * (V.pornStars[genre.fameVar].p1count - 1));
				slave.porn.fame[genre.fameVar] = Math.clamp(slave.porn.fame[genre.fameVar], 0, 150000);
				viewerSoaking++;

				if (slave.porn.focus === genre.focusName || slave.porn.fameType === genre.fameName) {
					r += `${genre.hitText(slave)} `;
					r += viewershipDelta(slave.porn.fame[genre.fameVar], oldPorn);
				}
				r += cheatDelta(genre.uiName(), oldPorn, slave.porn.fame[genre.fameVar]);
			} else if (slave.porn.fame[genre.fameVar] > 0) {
				slave.porn.fame[genre.fameVar] = Math.clamp(slave.porn.fame[genre.fameVar] - decayRate * 2, 0, 150000);
				r += cheatDelta(genre.uiName(), oldPorn, slave.porn.fame[genre.fameVar]);
			}
		}

		/* Paraphilias have the highest take of viewers */
		for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.paraphilia)) {
			genreViews(slave, genre);
		}

		/* Fetishes */
		for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.fetish)) {
			genreViews(slave, genre);
		}

		/* General */
		for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.general)) {
			genreViews(slave, genre);
		}

		/* Generic porn */
		for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.generic)) {
			genreViews(slave, genre);
		}

		/* Quirks are low and unlikely, requiring focus to push into the limelight */
		for (const genre of App.Porn.getGenresByType(App.Porn.GenreType.quirk)) {
			genreViews(slave, genre);
		}
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 */
	function getHighestPornGenre(slave) {
		return App.Porn.getAllGenres().reduce((acc, cur) => slave.porn.fame[cur.fameVar] > slave.porn.fame[acc.fameVar] ? cur : acc);
	}

	/**
	 * @param {App.Entity.SlaveState} slave
	 */
	function prestigeGen(slave) {
		const highestPorn = getHighestPornGenre(slave);
		if (slave.porn.prestige === 0 && slave.porn.viewerCount >= 100000) {
			const pornFameGrabBag = App.Porn.getAllGenres().filter((g) => slave.porn.fame[g.fameVar] >= 10000);
			if (pornFameGrabBag.length > 0) {
				const weightedGrabBagIndices = {};
				pornFameGrabBag.forEach((g, i) => weightedGrabBagIndices[i] = slave.porn.fame[g.fameVar]); // Attach weights to the indices of pornFameGrabBag
				const genre = pornFameGrabBag[hashChoice(weightedGrabBagIndices)]; // hashChoice selects an index according to the weights
				slave.porn.fameType = genre.fameName;
				slave.porn.prestige = 1;

				r += `${He} has gained a following in ${slave.porn.fameType} pornography! ${pronounsForSlaveProp(slave, genre.prestigeDesc1)}, but ${he} isn't famous enough to be called prestigious yet. `;
				slave.porn.prestigeDesc = `$He has a following in slave pornography. ${genre.prestigeDesc1}.`;
				if (genre.type === App.Porn.GenreType.fetish && slave.fetishKnown !== 1) {
					slave.fetishKnown = 1;
				}
			}
		} else if (slave.porn.prestige === 1) {
			const swapPoint = 1.2;
			const genre = App.Porn.getGenreByFameName(slave.porn.fameType);
			if (slave.porn.fame[genre.fameVar] >= 50000) {
				slave.porn.prestige = 2;
				slave.porn.prestigeDesc = `$He is well known from $his career in slave pornography. ${genre.prestigeDesc2}.`;
				r += `<span class="green">${He} has gained a hold in ${slave.porn.fameType} pornography!</span> ${pronounsForSlaveProp(slave, genre.prestigeDesc2)}, so it is now prestigious to own ${him}. `;
			} else if (slave.porn.fame[highestPorn.fameVar] >= slave.porn.fame[genre.fameVar] * swapPoint) {
				r += `${His} fame in ${slave.porn.fameType} pornography has been overwhelmed by ${his} surging popularity in other aspects. ${He} is now better known for ${his} ${highestPorn.fameName} porn. `;
				slave.porn.fameType = highestPorn.fameName;
				slave.porn.prestigeDesc = `$He has a following in slave pornography. ${highestPorn.prestigeDesc1}.`;
			} else if (slave.porn.fame[genre.fameVar] < 5000) {
				slave.porn.prestige = 0;
				slave.porn.prestigeDesc = 0;
				r += `<span class="red">${His} popularity in ${slave.porn.fameType} pornography has faded.</span> ${He} is once again relatively unknown. `;
				slave.porn.fameType = "none";
			}
		} else if (slave.porn.prestige === 2) {
			const genre = App.Porn.getGenreByFameName(slave.porn.fameType);
			if (slave.porn.fame[genre.fameVar] >= 150000 && V.pornStars[genre.fameVar].p3ID === 0) {
				slave.porn.prestige = 3;
				slave.porn.fame[genre.fameVar] = 250000;
				slave.porn.viewerCount = 250000;
				V.pornStars[genre.fameVar].p3ID = slave.ID;
				slave.porn.prestigeDesc = `$He is world famous for $his career in slave pornography. ${genre.prestigeDesc3}.`;
				r += `${He} has become world famous for ${his} career in ${slave.porn.fameType} pornography! ${pronounsForSlaveProp(slave, genre.prestigeDesc3)}, so it is now extremely prestigious to own ${him}. `;
				V.trinkets.push(`a framed shot from porn starring ${slave.slaveName} ${genre.trinketShotDesc(slave)}`);

				r += `Further paid publicity cannot increase ${his} fame, so subsidy of porn featuring ${him} has stopped. `;
				slave.porn.spending = 0;
			} else if (slave.porn.fame[genre.fameVar] < 40000) {
				slave.porn.prestige = 1;
				slave.porn.prestigeDesc = `$He has a following in slave pornography. ${genre.prestigeDesc1}.`;
				r += `<span class="red">${His} popularity in ${slave.porn.fameType} pornography has dropped considerably,</span> though ${he} still retains a core fanbase. `;
			}
		}
	}
})();