code:
// cSpell:ignore smokables, Miiistress, loooves, Maaaster

App.Events.RESSTrustingHG = class RESSTrustingHG extends App.Events.BaseEvent {
	eventPrerequisites() {
		return []; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				hasAnyLegs,
				canTalk,
				s => s.trust > 50,
				s => s.assignment === Job.HEADGIRL, // removed condition V.HeadgirlID !== 0 and eventSlave.ID === V.HeadgirlID during conversion
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself, girl, hers
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);
		const PC = V.PC;

		App.Events.drawEventArt(node, eventSlave, "no clothing");

		let r = [];
		r.push(
			App.UI.DOM.slaveDescriptionDialog(eventSlave),
			`is a busy ${girl}. Your Head Girl is heading for bed, but ${he}'s not done with the day's work just yet. ${He} walks into your office with a pensive look on ${his} face, using a tablet to fiddle with slaves' schedules for tomorrow. Since ${he} was about to retire, ${he}'s nude: you can't help but notice, in the dimmed light of nighttime in your penthouse, the way the low glow of the tablet`
		);
		if (eventSlave.boobs > 5000) {
			r.push(`falls across the tops of ${his} absurd boobs, since ${he}'s forced to hold it on top of them to use it.`);
		} else if (eventSlave.belly >= 10000) {
			r.push(`falls across the top of ${his} ${belly}, tautly `);
			if (eventSlave.belly >= 3000) {
				r.push(`pregnant`);
			} else {
				r.push(`swollen`);
			}
			r.push(` belly.`);
		} else if (!(eventSlave.chastityPenis) && canAchieveErection(eventSlave)) {
			if (eventSlave.dick > 4) {
				r.push(`makes ${his} perpetual, formidable erection cast a shadow.`);
			} else if (eventSlave.dick > 2) {
				r.push(`catches the head of ${his} stiffly erect dick.`);
			} else {
				r.push(`highlights ${his} stiff little girldick.`);
			}
		} else if (eventSlave.nipples === "huge") {
			r.push(`throws a shadow off each of ${his} massive nipples and down the lower halves of ${his} boobs.`);
		} else if (eventSlave.belly >= 1500) {
			r.push(`makes ${his} rounded middle cast a shadow.`);
		} else if (eventSlave.muscles > 95) {
			r.push(`gives extra definition to ${his} glorious muscles.`);
		} else if (eventSlave.weight > 95) {
			r.push(`highlights ${his} soft belly.`);
		} else if (eventSlave.dick > 0) {
			r.push(`rests on the base of ${his} soft cock.`);
		} else if (eventSlave.weight > 10) {
			r.push(`flatters ${his} soft body.`);
		} else {
			r.push(`flatters ${him}.`);
		}
		App.Events.addParagraph(node, r);

		r = [];
		r.push(
			`${He} did not expect to find you here, and is so preoccupied that ${he} doesn't notice you right away. When ${he} does, ${he} smiles.`,
			Spoken(eventSlave, `"Good evening,`)
		);
		if (V.HGFormality === 1) {
			r.push(Spoken(eventSlave, `${Master},"`));
			r.push(`${he} murmurs properly, and keeps working. Only a slight blush, barely detectable in the low light, betrays ${his} consternation at not greeting you immediately.`);
		} else if (eventSlave.trust > 95) {
			if (PC.customTitle) {
				if (SlaveStatsChecker.checkForLisp(eventSlave)) {
					r.push(`${PC.customTitleLisp},"`);
				} else {
					r.push(`${PC.customTitle},"`);
				}
			} else if (PC.title !== 0) {
				r.push(Spoken(eventSlave, `Sir,"`));
			} else {
				r.push(Spoken(eventSlave, `Ma'am,"`));
			}
			r.push(`${he} murmurs. Even in the dim light, you perceive a slight blush of pleasure from ${him} as ${he} savors the status of being allowed to call you that. ${He} goes back to working with a little smile still playing across ${his} lips.`);
		} else {
			r.push(`um,`);
			if (PC.customTitle) {
				if (SlaveStatsChecker.checkForLisp(eventSlave)) {
					r.push(`${PC.customTitleLisp},"`);
				} else {
					r.push(`${PC.customTitle},"`);
				}
			} else if (PC.title !== 0) {
				r.push(Spoken(eventSlave, `S-sir,"`));
			} else {
				r.push(`M-ma'am,"`);
			}
			r.push(`${he} stammers hesitantly. ${He} isn't comfortable with your permission to be less formal in private, and blushes furiously at ${his} awkwardness. ${He} takes refuge in ${his} tablet.`);
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Commend ${his} service`, commend),
			new App.Events.Result(`Share some refreshments with ${him}`, share),
		]);

		/** @returns {DocumentFragment} */
		function commend() {
			let frag = document.createDocumentFragment();
			r = [];
			r.push(`You clear your throat and compliment ${him}, commending ${his} work ethic, trustworthiness, and loyalty. ${He} blushes much harder as ${he} understands. "Thank you,`);
			if (V.HGFormality === 1) {
				r.push(`${Master}!"`);
			} else {
				if (PC.customTitle) {
					if (SlaveStatsChecker.checkForLisp(eventSlave)) {
						r.push(`${PC.customTitleLisp}!"`);
					} else {
						r.push(`${PC.customTitle}!"`);
					}
				} else if (PC.title !== 0) {
					r.push(Spoken(eventSlave, `Sir!"`));
				} else {
					r.push(Spoken(eventSlave, `Ma'am!"`));
				}
			}
			r.push(
				`${he} says fervently, and gestures at the tablet.`,
				Spoken(eventSlave, `"I've noticed a couple of the slaves working better together recently, so I'm making some minor adjustments to give them more shifts together."`)
			);
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`You're sure ${he}'ll do ${his} best, and you tell ${him} so. ${He} thanks you again, and you both go back to your work. Though your Head Girl continues manipulating ${his} tablet diligently, ${he} can't seem to stop ${himself} from stealing the occasional glance at you. ${His} ${App.Desc.eyesColor(eventSlave)}, dark in the dimness of the office, seem to have an unaccountable sheen.`);
			if (V.assistant.personality !== 0) {
				const {
					heA, hisA, girlA, himselfA, loliA
				} = getPronouns(assistant.pronouns().main).appendSuffix("A");
				r.push(`${capFirstChar(V.assistant.name)}'s ${V.assistant.appearance} avatar appears on your desktop, glowing brightly, and ruins the moment. "${eventSlave.slaveName} loooves ${his} `);
				if (PC.customTitle) {
					r.push(`${PC.customTitle},"`);
				} else if (PC.title !== 0) {
					r.push(`Maaaster,"`);
				} else {
					r.push(`Miiistress,"`);
				}
				r.push(`${heA} taunts,`);
				switch (V.assistant.appearance) {
					case "monstergirl":
						r.push(`${hisA} hair forming a heart shape.`);
						break;
					case "shemale":
						r.push(`using ${hisA} hands to make a heart shape over ${hisA} balls.`);
						break;
					case "amazon":
						r.push(`grinning far more sweetly than ${hisA} muscular form should be able to manage.`);
						break;
					case "businesswoman":
						r.push(`though ${heA}'s blushing ${himselfA}.`);
						break;
					case "cherub":
					case "fairy":
					case "pregnant fairy":
						r.push(`flitting around and giggling excitedly.`);
						break;
					case "goddess":
						r.push(`massaging ${hisA} pregnant belly meaningfully.`);
						break;
					case "hypergoddess":
						r.push(`massaging ${hisA} squirming pregnant belly meaningfully.`);
						break;
					case "loli":
						r.push(`giggling playfully.`);
						break;
					case "preggololi":
						r.push(`giggling playfully, though ${hisA} hands have wandered to ${hisA} crotch.`);
						break;
					case "angel":
						r.push(`using ${hisA} hands to make a heart shape.`);
						break;
					case "incubus":
						r.push(`using ${hisA} hands to make a heart shape around ${hisA} erection as ${heA} thrusts.`);
						break;
					case "succubus":
						if (PC.dick !== 0) {
							r.push(`forms an "O" with ${hisA} lips and makes exaggerated head bobbing motions.`);
						} else {
							r.push(`forms a "V" with ${hisA} fingers and wiggles ${hisA} tongue in it.`);
						}
						break;
					case "imp":
						r.push(`flapping around and cackling manically.`);
						break;
					case "witch":
						r.push(`while holding out a mostly empty vial of love potion.`);
						break;
					case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
						r.push(`forming half of ${himselfA} into an enormous pussy, the other into a giant dick, and introducing the two to each other.`);
						break;
					case "schoolgirl":
						r.push(`the very picture of a malicious school${girlA}.`);
						break;
					default:
						r.push(`turning ${hisA} avatar a throbbing pink.`);
				}
				App.Events.addParagraph(frag, r);
				r = [];
				r.push(
					`Your Head Girl turns a darker shade of red.`,
					Spoken(eventSlave, `"Oh, shut up, you little`)
				);
				switch (V.assistant.appearance) {
					case "monstergirl":
						r.push(Spoken(eventSlave, `monster,"`));
						break;
					case "shemale":
						r.push(Spoken(eventSlave, `cockmonster,"`));
						break;
					case "amazon":
						r.push(Spoken(eventSlave, `dyke,"`));
						break;
					case "businesswoman":
						r.push(Spoken(eventSlave, `witch,"`));
						break;
					case "fairy":
					case "pregnant fairy":
						r.push(Spoken(eventSlave, `mosquito,"`));
						break;
					case "goddess":
					case "hypergoddess":
						r.push(Spoken(eventSlave, `cow,"`));
						break;
					case "loli":
						r.push(Spoken(eventSlave, `midget,"`));
						break;
					case "preggololi":
						r.push(Spoken(eventSlave, `slut ${loliA},"`));
						break;
					case "angel":
						r.push(Spoken(eventSlave, `turkey,"`));
						break;
					case "cherub":
						r.push(Spoken(eventSlave, `dove,"`));
						break;
					case "incubus":
						r.push(Spoken(eventSlave, `dick,"`));
						break;
					case "succubus":
						r.push(Spoken(eventSlave, `cunt,"`));
						break;
					case "imp":
						r.push(Spoken(eventSlave, `bat,"`));
						break;
					case "witch":
						r.push(Spoken(eventSlave, `blunderer,"`));
						break;
					case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
						r.push(Spoken(eventSlave, `shapeshifter,"`));
						break;
					case "schoolgirl":
						r.push(Spoken(eventSlave, `slut,"`));
						break;
					default:
						r.push(Spoken(eventSlave, `toaster,"`));
				}
				r.push(`${he} says cattily, but ${he} smiles as well.`);
			}
			eventSlave.devotion += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		/** @returns {DocumentFragment} */
		function share() {
			let frag = document.createDocumentFragment();
			r = [];
			r.push(`You reach into the back of your desk, where your private reserves are, and wordlessly offer ${him} a ${generalRefreshment()}.`);
			r.push(`${He} stares at you disbelievingly for a moment before stammering ${his} thanks and accepting it with both hands. ${He} holds it uncertainly, watching you get one yourself.`);
			App.Events.addParagraph(frag, r);
			r = [];
			r.push(`${He} is first among your slaves, but ${he} is still very much a slave. ${He} neither receives nor expects`);
			if (PC.refreshmentType === 0) {
				r.push(`indulgences like tobacco and other smokables. Carcinogens are sometimes the necessary side effects of slave body modification, not an acceptable downside of luxury.`);
			} else if (PC.refreshmentType === 1) {
				r.push(`drink other than what the slave feeding systems provide ${him}. ${He} might be your Head Girl, but the liquid food keeps ${his} libido charged, ${his} body healthy, and ${his} asshole invitingly clean, just like any other slave.`);
			} else if (PC.refreshmentType === 2) {
				r.push(`food other than what the slave feeding systems provide ${him}. ${He} might be your Head Girl, but the liquid food keeps ${his} libido charged, ${his} body healthy, and ${his} asshole invitingly clean, just like any other slave.`);
			} else {
				r.push(`drugs other than what the drug dispensers provide ${him}. Addictive drugs are rarely provided to slaves, replaced instead with slightly healthier, but no less addictive, aphrodisiacs.`);
			}
			r.push(`But it'll do no harm, just this once, and you tell ${him} so. ${He} nods, not wanting to spoil the moment by speaking.`);
			App.Events.addParagraph(frag, r);
			r = [];
			if (PC.refreshmentType === 0) {
				r.push(`After you light ${his} ${PC.refreshment} for ${him}, ${he} holds the `);
				if (canTaste(eventSlave)) {
					r.push(`first taste`);
				} else {
					r.push(`feeling`);
				}
				r.push(` of its smoke in ${his} mouth for a long, sensual moment before letting it trickle back out through ${his} lips.`);
			} else if (PC.refreshmentType === 1 || PC.refreshmentType === 2) {
				r.push(`${He} holds the `);
				if (canTaste(eventSlave)) {
					r.push(`first taste`);
				} else {
					r.push(`feeling`);
				}
				r.push(` of it in ${his} mouth for a long, sensual moment before swallowing reverently.`);
			} else {
				r.push(`${He} savors the thrill of using ${PC.refreshment} for a moment, before turning to you, an almost desperate need on ${his} face.`);
			}
			r.push(`You return to work, and ${he} follows your example, though ${he}'s rather distracted. When ${he} finishes ${hers}, ${he} sets ${his} tablet down for a moment and comes over to you, doing ${his} best to show ${his} naked body to its best advantage as ${he} comes. ${He} gives you a deep kiss,`);
			if (PC.refreshmentType === 0 || PC.refreshmentType === 1 || PC.refreshmentType === 2) {
				r.push(`which tastes of fine ${PC.refreshment}, with a hint of ${eventSlave.slaveName},`);
			} else {
				r.push(`with plenty of tongue,`);
			}
			r.push(`and then goes back to work, <span class="mediumaquamarine">smiling unconsciously</span> as ${he} savors the lingering `);
			if (PC.refreshmentType === 3 || PC.refreshmentType === 4 || PC.refreshmentType === 5 || PC.refreshmentType === 6) {
				r.push(`rush.`);
			} else {
				if (canTaste(eventSlave)) {
					r.push(`flavor.`);
				} else {
					r.push(`sensation.`);
				}
			}
			eventSlave.trust += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
// cSpell:ignore throatfuckings

App.Events.RESSUnhappyVirgin = class RESSUnhappyVirgin extends App.Events.BaseEvent {
	eventPrerequisites() {
		return []; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				s => s.assignment !== Job.QUARTER,
				s => s.rules.speech !== "restrictive",
				canDoVaginal,
				s => s.fetish !== "buttslut",
				s => s.vagina === 0,
				s => s.anus !== 0,
				s => s.counter.oral + s.counter.vaginal /* this does not seem logical */ + s.counter.anal > 100,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {His, He, he, his, him, himself} = getPronouns(eventSlave);
		const {title: Master, say} = getEnunciation(eventSlave);
		const PC = V.PC;
		App.Events.drawEventArt(node, eventSlave, "no clothing");

		const r = new SpacedTextAccumulator(node);
		r.push(
			`During a routine inspection,`,
			contextualIntro(PC, eventSlave, true),
			`respectfully asks a question.`,
		);
		if (!canTalk(eventSlave)) {
			r.push(`${He} uses amusingly lewd gestures to depict how frequently ${he} gets fucked, and then points to ${his} virgin pussy. ${He} communicates that ${he} wants another hole to help share the work.`);
		} else {
			r.push(
				`${He} ${say}s,`,
				Spoken(eventSlave, `"${Master}, I take a lot of dick. I try my best, but`)
			);
			if (canDoAnal(eventSlave)) {
				r.push(Spoken(eventSlave, `my butt really hurts sometimes and my throat's sore, too.`));
			} else {
				r.push(Spoken(eventSlave, `my throat's really sore and I can't feel my tongue too well.`));
			}
			r.push(Spoken(eventSlave, `Can I get fucked in the pussy, to spread it out a little?"`));
		}

		r.toParagraph();
		App.Events.addResponses(node, [
			canDoAnal(eventSlave)
				? new App.Events.Result(`No, and ${his} role is to suck dick and take it in the ass`, ass)
				: new App.Events.Result(`No, and ${his} role is to suck dick and like it`, suck),
			new App.Events.Result(`No, and ${he} shouldn't have asked`, asked),
			new App.Events.Result(`Yes, the time has come`, yes, App.UI.DOM.combineNodes(
				App.UI.DOM.makeElement("span", `This option will destroy ${his} virginity.`, ["yellow"]),
				`${eventSlave.chastityVagina ? `This option will remove ${his} chastity belt` :``}`,
			)),
		]);

		function ass() {
			const r = new SpacedTextAccumulator();
			r.push(`You patiently explain that you've decided to use ${him} as an oral and anal slave, and leave ${his} pussy unfucked. ${He}'s unsurprised, but ${he} understands your decision. You usually fuck slaves during your inspection, and you don't exempt ${him} from this, but you do let ${him} take it easy. Rather than facefucking ${him} you let ${him} suckle you gently. Rather that a hard buttfuck, you take ${him} to the couch and gently spoon ${him} with your`);
			if (V.PC.dick === 0) {
				r.push(`strap-on`);
			} else {
				r.push(`dick`);
			}
			r.push(`up ${his} ass while making out with ${him} and playing with ${his} nipples. ${He} understands your forbearance and appreciates how kind ${his} ${getWrittenTitle(eventSlave)} is.`);
			eventSlave.devotion += 4;
			seX(eventSlave, "oral", V.PC, "penetrative");
			r.push(VCheck.Anal(eventSlave, 1));
			r.toParagraph();
			return r.container();
		}

		function suck() {
			eventSlave.devotion += 4;
			seX(eventSlave, "oral", V.PC, "penetrative");
			return `You patiently explain that you've decided to use ${him} as an oral slave, since ${his} ass is off-limits, and leave ${his} pussy unfucked. ${He}'s unsurprised, but ${he} understands your decision. You usually fuck slaves during your inspection, and you don't exempt ${him} from this, but you do let ${him} take it easy. Rather than facefucking ${him} you let ${him} suckle you gently, calmly patting ${his} head as ${he} does. ${He} understands your forbearance and appreciates how kind ${his} ${getWrittenTitle(eventSlave)} is.`;
		}

		function asked() {
			const r = new SpacedTextAccumulator();
			r.push(`Despite being allowed to ask questions ${he} should not question ${his} ${getWrittenTitle(eventSlave)}'s choices about ${his} sexual duties. To communicate the point, you`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`order ${him} to lie on the desk, on ${his} back, with ${his} throat slack for penetration.`);
			if (canDoAnal(eventSlave)) {
				r.push(`After a good long ${canPenetrateThroat(V.PC) ? `throatfuck` : `facefuck`} that leaves ${him} gasping and moaning, you flip ${him} over and fuck ${his} ass until ${he}'s squealing with each thrust.`);
			} else {
				r.push(`Only after an extended and forceful series of ${canPenetrateThroat(V.PC) ? `throatfuckings` : `facefuckings`} that leaves the bewildered ${SlaveTitle(eventSlave)} gasping for air and barely conscious, do you feel ${he} has learned what hole ${he} should be focused on. For good measure, you ${canPenetrateThroat(V.PC) ? `deepthroat` : `facefuck`} ${him} one last time, to really drive the point home.`);
			}
			r.push(`As ${he} leaves, sore all over, ${he}'s <span class="devotion dec">badly confused</span> that ${he} was apparently punished for asking questions.`);
			eventSlave.devotion -= 5;
			if (canDoAnal(eventSlave)) {
				r.push(VCheck.Anal(eventSlave, 1));
				seX(eventSlave, "oral", V.PC, "penetrative");
			} else {
				seX(eventSlave, "oral", V.PC, "penetrative", 4);
			}
			r.toParagraph();
			return r.container();
		}

		function yes() {
			const r = new SpacedTextAccumulator();
			r.push(`${He} framed ${his} desire to lose ${his} virginity in businesslike terms, but ${his} reaction to your assent suggests that ${he} also wouldn't mind having vanilla sex with ${his} ${getWrittenTitle(eventSlave)}. You're already quite`);
			if (V.PC.dick === 0) {
				r.push(`turned on by the idea, so you pull on a strap-on, pull ${him} over to the couch,`);
				if (eventSlave.chastityVagina) {
					r.push(`unfasten ${his} chastity belt,`);
				}
			} else {
				r.push(`hard, so you just lie down with ${him} on the couch,`);
				if (eventSlave.chastityVagina) {
					r.push(`unfasten ${his} chastity belt,`);
				}
			}
			r.push(`and have gentle vaginal sex in the missionary position`);
			if (V.PC.vagina !== -1 && V.PC.dick !== 0) {
				r.addToLast(`, your own pussy moving back and forth gently at the base of your dick as you fuck ${him}`);
			}
			r.addToLast(`. ${He} gasps at the first penetration, but you take it slowly and lavish attention on ${his} lips, breasts, and nipples. Soon ${he}'s shamelessly enjoying ${himself}. ${His} first vaginal sex is crowned with an abdominal-clenching orgasm. ${He} adores ${his} kind ${getWrittenTitle(eventSlave)}.`);
			eventSlave.devotion += 10;
			eventSlave.vagina = 1;
			seX(eventSlave, "vaginal", V.PC, "penetrative");
			eventSlave.chastityVagina = 0;
			if (canImpreg(eventSlave, V.PC)) {
				r.push(knockMeUp(eventSlave, 25, 0, -1));
			}
			r.toParagraph();
			return r.container();
		}
	}
};

repo_name: Nithhogg/fc

license: mit


code:
App.Events.RESSUsedWhore = class RESSUsedWhore extends App.Events.BaseEvent {
	eventPrerequisites() {
		return []; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				hasAnyLegs,
				s => [Job.PUBLIC, Job.WHORE].includes(s.assignment),
				s => s.vagina !== 0,
				s => s.anus !== 0,
				canDoAnal,
				s => s.devotion <= 50,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself, girl
		} = getPronouns(eventSlave);
		const {title: Master, say} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);
		const PC = V.PC;

		App.Events.drawEventArt(node, eventSlave, "no clothing");

		let r = [];
		r.push(
			`At the end of a long day, you take a moment to watch the comings and goings of your arcology to decompress. While doing so, you notice someone who's clearly had a longer day than you.`,
			contextualIntro(PC, eventSlave, true),
			`is`
		);
		if (eventSlave.belly >= 5000) {
			r.push(`slowly waddling, one hand under ${his} ${belly}`);
			if (eventSlave.bellyPreg >= 3000) {
				r.push(`pregnant`);
			}
			r.push(`belly and the other on the small of ${his} back,`);
		} else {
			r.push(`making`);
		}
		r.push(`${his} tired way back to the kitchen for a meal and then bed after a long day of sex work. ${He}'s stripped off ${his} soiled clothes already, and is clearly too tired to care about nudity at all.`);
		App.Events.addParagraph(node, r);

		r = [];
		r.push(`${He} comes around the corner and`);
		if (PC.belly >= 100000) {
			r.push(`slams into your massively distended belly, nearly knocking you over.`);
		} else if (PC.belly >= 10000) {
			r.push(`bumps into your heavily gravid middle.`);
		} else if (PC.belly >= 5000) {
			r.push(`bumps into your rounded middle.`);
		} else if (PC.balls >= 14) {
			r.push(`nearly knees your prominent testicles.`);
		} else if (PC.boobs >= 800) {
			r.push(`runs into your prominent rack.`);
		} else {
			r.push(`almost runs into you.`);
		}
		r.push(`${He} stops and`);
		if (canSee(eventSlave)) {
			r.push(`stares,`);
		} else {
			r.push(`faces you,`);
		}
		r.push(`struggling to find the appropriate thing to say or do, but too exhausted to manage it. Even though ${he}'s been obediently cleaning ${himself} between fucks, ${he} looks used up. ${His} ${eventSlave.skin} skin is reddened here and there.`);
		if (eventSlave.belly >= 750000) {
			r.push(`${His} ${belly} belly is heavily bruised, the super-stretched skin nearly at its limit from the weight put on it and the forces pushing against it.`);
		} else if (eventSlave.belly >= 600000) {
			r.push(`${His} ${belly} belly is deep red and heavily bruised; it's clear that at least one client roughly fucked ${him} over it.`);
		} else if (eventSlave.belly >= 450000) {
			r.push(`${His} ${belly} belly looks extremely painful, it's obvious ${he} got fucked over it.`);
		} else if (eventSlave.belly >= 300000) {
			r.push(`${His} ${belly} belly is black and blue, it's obvious ${he} got fucked over it.`);
		} else if (eventSlave.belly >= 150000) {
			r.push(`${His} ${belly} belly is heavily chafed from rubbing the floor as ${he} struggled to keep ${his} weight off it.`);
		} else if (eventSlave.belly >= 100000) {
			r.push(`${His} ${belly} belly is heavily chafed from rubbing against the floor.`);
		} else if (eventSlave.belly >= 10000) {
			r.push(`The tip of ${his} huge belly is chafed from rubbing against the floor.`);
		}
		if (canDoVaginal(eventSlave)) {
			r.push(`${His}`);
			if (eventSlave.labia > 1) {
				r.push(`generous`);
			} else {
				r.push(`poor`);
			}
			r.push(`pussylips are puffy, and you have no doubt ${his} vagina is quite sore.`);
		}
		if (canDoAnal(eventSlave)) {
			r.push(`The awkward way ${he}'s standing suggests that ${his}`);
			if (eventSlave.anus > 2) {
				r.push(`gaping`);
			} else if (eventSlave.anus > 1) {
				r.push(`big`);
			} else {
				r.push(`tight`);
			}
			r.push(`asshole has had more than one dick up it recently.`);
		}
		if (eventSlave.nipples !== "fuckable") {
			r.push(`Even ${his} nipples are pinker than usual, having been cruelly pinched`);
			if (eventSlave.lactation > 0) {
				r.push(`and milked`);
			}
			r.push(r.pop() + `.`);
			if (eventSlave.lactation > 0) {
				eventSlave.lactationDuration = 2;
				eventSlave.boobs -= eventSlave.boobsMilk;
				eventSlave.boobsMilk = 0;
			} else {
				r.push(induceLactation(eventSlave, 2));
			}
		} else {
			r.push(`Even ${his} nipples show signs of wear, having prolapsed slightly from heavy use.`);
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Use ${him} anyway`, anyway),
			new App.Events.Result(`Manipulate ${him} into asking to suck you off`, manipulate),
			new App.Events.Result(`Just talk with ${him}`, talk),
		]);

		function anyway() {
			r = [];
			r.push(`You reach out, grab ${his} shoulder, and shove ${him} against the wall.`);
			if (!canTalk(eventSlave)) {
				r.push(`${He} manages to use a gesture to beg you not to,`);
			} else {
				r.push(
					`${He} manages to beg,`,
					Spoken(eventSlave, `"Please no, ${Master}—"`)
				);
			}
			r.push(`before you give ${him} a hard warning slap on the ass to shut ${him} up. ${He}'s quiet, but starts to sob a little when ${he} feels`);
			if (PC.dick === 0) {
				r.push(`the head of a strap-on`);
			} else {
				r.push(`your cock`);
			}
			r.push(`against ${his}`);
			if (canDoAnal(eventSlave)) {
				r.push(`anus.`);
				if (eventSlave.anus > 2) {
					r.push(`It's gaped before you even touch it, but it's clearly sore enough that ${he} dreads anal anyway.`);
				} else if (eventSlave.anus > 1) {
					r.push(`It's been fucked loose, but it's clearly sore enough that ${he} dreads anal anyway.`);
				} else {
					r.push(`It's somehow not gaped yet, and ${he} dreads having it stretched yet again.`);
				}
				if (eventSlave.height >= 185) {
					r.push(`${He}'s tall enough that the angle isn't that uncomfortable for ${him}.`);
				} else if (eventSlave.anus > 0) {
					r.push(`${He} hikes ${himself} desperately up on ${his} tiptoes to make the angle less uncomfortable for ${him}.`);
				} else {
					r.push(`${He} hikes ${himself} desperately up on ${his} tiptoes, but ${he}'s so short the angle is desperately uncomfortable for ${him}.`);
				}
				r.push(`${He} decides to try begging one last time, and`);
				if (canDoVaginal(eventSlave)) {
					if (!canTalk(eventSlave)) {
						r.push(`signs to ask you to use ${his} pussy instead`);
					} else {
						r.push(
							`whines,`,
							Spoken(eventSlave, `"Just use my pussy, please!"`)
						);
					}
				} else {
					if (!canTalk(eventSlave)) {
						r.push(`signs to ask you to let ${him} suck you off instead`);
					} else {
						r.push(
							`whines,`,
							Spoken(eventSlave, `"Let me suck you off, please!"`)
						);
					}
				}
				r.push(`as you shove`);
				if (PC.dick === 0) {
					r.push(`the strap-on`);
				} else {
					r.push(`yourself`);
				}
				r.push(`up ${his} butt. ${He} reflexively tries to get away into the wall,`);
				if (eventSlave.belly > 100000) {
					r.push(`${his} ${belly} belly squashing out to either side.`);
				} else if (eventSlave.boobs > 2000) {
					r.push(`${his} enormous boobs squashing out to either side.`);
				} else if (eventSlave.boobs > 1000) {
					r.push(`${his} big boobs squashing out to either side.`);
				} else if (eventSlave.boobs > 300) {
					r.push(`${his} boobs crashing into it.`);
				} else {
					r.push(`${his} sore nipples giving ${him} a jerk as ${he} does.`);
				}
				r.push(`After some continued whining through ${his} tears, ${he} gives up and just <span class="trust dec">lets you</span> rape ${his} sore ass.`);
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(`pussy lips.`);
				if (eventSlave.vagina > 2) {
					r.push(`It's gaped before you even touch it, but it's clearly sore enough that ${he} dreads penetration anyway.`);
				} else if (eventSlave.vagina > 1) {
					r.push(`It's been fucked loose, but it's clearly been used enough that ${he} dreads penetration anyway.`);
				} else {
					r.push(`It's somehow not loose yet, and ${he} dreads having it stretched yet again.`);
				}
				if (eventSlave.height >= 185) {
					r.push(`${He}'s tall enough that the angle isn't that uncomfortable for ${him}.`);
				} else if (eventSlave.anus > 0) {
					r.push(`${He} hikes ${himself} desperately up on ${his} tiptoes to make the angle less uncomfortable for ${him}.`);
				} else {
					r.push(`${He} hikes ${himself} desperately up on ${his} tiptoes, but ${he}'s so short the angle is desperately uncomfortable for ${him}.`);
				}
				r.push(`${He} decides to try begging one last time, and`);
				if (!canTalk(eventSlave)) {
					r.push(`signs to ask you to let ${him} suck you off instead`);
				} else {
					r.push(
						`whines,`,
						Spoken(eventSlave, `"Let me suck you off, please!"`)
					);
				}
				r.push(`as you shove`);
				if (PC.dick === 0) {
					r.push(`the strap-on`);
				} else {
					r.push(`yourself`);
				}
				r.push(`up ${his} cunt. ${He} reflexively tries to get away into the wall,`);
				if (eventSlave.belly > 100000) {
					r.push(`${his} ${belly} belly squashing out to either side.`);
				} else if (eventSlave.boobs > 2000) {
					r.push(`${his} enormous boobs squashing out to either side.`);
				} else if (eventSlave.boobs > 1000) {
					r.push(`${his} big boobs squashing out to either side.`);
				} else if (eventSlave.boobs > 300) {
					r.push(`${his} boobs crashing into it.`);
				} else {
					r.push(`${his} sore nipples giving ${him} a jerk as ${he} does.`);
				}
				r.push(`After some continued whining through ${his} tears, ${he} gives up and just <span class="trust dec">lets you</span> rape ${his} sore vagina.`);
				r.push(VCheck.Vaginal(eventSlave, 1));
			}
			r.push(`When you finally`);
			if (PC.dick !== 0) {
				r.push(`fill ${his}`);
				if (canDoAnal(eventSlave)) {
					r.push(`butt`);
				} else {
					r.push(`pussy`);
				}
				r.push(`with your ejaculate and pull out,`);
				if (PC.vagina !== -1) {
					r.push(`the motion releasing a waft of the combined cum and pussyjuice smell of a satisfied futa,`);
				}
			} else {
				r.push(`shudder with orgasm and withdraw your strap-on,`);
			}
			r.push(`${he} slumps and turns to go, looking a bit sad for some reason.`);
			eventSlave.trust += 4;
			return r;
		}

		function manipulate() {
			r = [];
			r.push(`You reach out, grab ${his} shoulder, and shove ${him} against the wall.`);
			if (!canTalk(eventSlave)) {
				r.push(`${He} manages to use a gesture to beg you not to,`);
			} else {
				r.push(
					`${He} manages to beg,`,
					Spoken(eventSlave, `"Please no, ${Master}—"`)
				);
			}
			r.push(`before you give ${him} a hard warning slap on the ass to shut ${him} up. ${He}'s quiet, but starts to sob a little when ${he} feels`);
			if (PC.dick === 0) {
				r.push(`the head of a strap-on`);
			} else {
				r.push(`an invading`);
				if (PC.vagina !== -1) {
					r.push(`futa`);
				}
				r.push(`cockhead`);
			}
			r.push(`against ${his}`);
			if (canDoAnal(eventSlave)) {
				r.push(`anus.`);
				if (eventSlave.anus > 2) {
					r.push(`It's gaped before you even touch it, but it's clearly sore enough that ${he} dreads anal anyway.`);
				} else if (eventSlave.anus > 1) {
					r.push(`It's been fucked loose, but it's clearly sore enough that ${he} dreads anal anyway.`);
				} else {
					r.push(`It's somehow not gaped yet, and ${he} dreads having it stretched yet again.`);
				}
			} else {
				r.push(`pussy lips.`);
				if (eventSlave.vagina > 2) {
					r.push(`It's gaped before you even touch it, but it's clearly sore enough that ${he} dreads penetration anyway.`);
				} else if (eventSlave.vagina > 1) {
					r.push(`It's been fucked loose, but it's clearly been used enough that ${he} dreads penetration anyway.`);
				} else {
					r.push(`It's somehow not loose yet, and ${he} dreads having it stretched yet again.`);
				}
			}
			r.push(`${He}`);
			if (!canTalk(eventSlave)) {
				r.push(`signs let ${him} suck you off instead.`);
			} else {
				r.push(
					`whines,`,
					Spoken(eventSlave, `"Let me suck you off, please!"`)
				);
			}
			r.push(`Having gotten ${him} to beg for what you wanted all along, you spin ${him} so ${his}`);
			if (eventSlave.weight > 160) {
				r.push(`rippling`);
			} else if (eventSlave.weight > 95) {
				r.push(`fat`);
			} else if (eventSlave.muscles > 95) {
				r.push(`powerful`);
			} else if (eventSlave.muscles > 30) {
				r.push(`strong`);
			} else if (eventSlave.muscles > 5) {
				r.push(`toned`);
			} else {
				r.push(`feminine`);
			}
			r.push(`back hits the wall with a smack and shove ${him} down it until ${his}`);
			if (eventSlave.lips > 70) {
				r.push(`massive`);
			} else if (eventSlave.lips > 40) {
				r.push(`pillowlike`);
			} else if (eventSlave.lips > 20) {
				r.push(`girlish`);
			} else if (eventSlave.lips > 10) {
				r.push(`average`);
			} else {
				r.push(`minuscule`);
			}
			r.push(`lips are level with your`);
			if (PC.dick === 0) {
				r.push(`fake dick,`);
			} else {
				r.push(`dick,`);
			}
			if (eventSlave.belly >= 100000) {
				r.push(`straddle ${his} ${belly} belly,`);
			}
			r.push(`and push it into ${his} mouth without waiting for ${him} to get ready. ${He} gags, but does ${his} best to work ${his} tired mouth. When you're finally satisfied and you let ${him} up, you aim another slap at ${his}`);
			if (eventSlave.butt > 12) {
				r.push(`inhuman ass`);
			} else if (eventSlave.butt > 5) {
				r.push(`massive ass`);
			} else if (eventSlave.butt > 2) {
				r.push(`big butt`);
			} else if (eventSlave.butt > 0) {
				r.push(`nice ass`);
			} else {
				r.push(`flat ass`);
			}
			r.push(`and let ${him} see it coming; ${he} <span class="devotion inc">accepts</span> the spank due to fright at what you might do if ${he} dodged before fleeing.`);
			eventSlave.devotion += 4;
			seX(eventSlave, "oral", PC, "penetrative");
			return r;
		}

		function talk() {
			const frag = document.createDocumentFragment();
			r = [];
			r.push(`You take ${him} by the hand, lead ${him} to a nearby couch, and sit down with ${him}, letting ${him} seat ${himself} beside you so ${he} can`);
			if (eventSlave.belly >= 5000) {
				r.push(`rest ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`gravid`);
				}
				r.push(`bulk against you`);
			} else {
				r.push(`lean against you`);
			}
			r.push(`without putting too much weight on ${his} poor overused butthole. You ask ${him} about ${his} day.`);
			if (!canTalk(eventSlave)) {
				r.push(`${He} uses gestures to recount it through ${his} tears. Apparently while one guy was using ${his} anus, another thought it was hot and waited for him to be done before using ${him} in turn, without letting ${him} rest or clean ${himself}. It took four cocks total for another slave to notice and rescue ${him}.`);
			} else {
				r.push(
					`${He} ${say}s, a little tearfully,`,
					Spoken(eventSlave, `"${Master}, this guy wanted to use my butt in public. So of course I let him, and he made me sit in his lap to do it, and held my ${hasBothLegs(eventSlave) ? `legs` : "leg"} back so everyone could see! And then another guy thought it was hot and waited, and then fucked me in my ass too. Another slave finally noticed and rescued me after four cocks, ${Master}. I'm really sore."`)
				);
			}
			r.push(`${He}`);
			if (canSee(eventSlave)) {
				r.push(`looks up at you with big ${App.Desc.eyesColor(eventSlave)}`);
			} else {
				r.push(`gazes at you`);
			}
			r.push(`for a long moment, a final tear leaking down ${his} ${eventSlave.skin} cheek, before ${he} suddenly`);
			if (!canTalk(eventSlave)) {
				r.push(`shakes with mute laughter.`);
			} else {
				r.push(`giggles.`);
			}
			r.push(`${He} explains ${himself} after a while: it's not what ${he} thought ${he}'d be doing with ${his} life,`);
			switch (eventSlave.career) {
				case "a bioreactor":
				case "a breeder":
				case "a breeding bull":
				case "a dairy cow":
				case "a dairy slave":
				case "a Fuckdoll":
				case "a Futanari Sister":
				case "a slave":
				case "a slave since birth":
					r.push(`once upon a time.`);
					break;
				default:
					r.push(`back when ${he} was ${convertCareer(eventSlave)}.`);
			}
			if (!canTalk(eventSlave)) {
				r.push(`${He} points to ${himself} and uses both hands to mimic sodomy, as though to suggest that's all ${he} is, before giving you a rueful smile.`);
			} else {
				r.push(
					Spoken(eventSlave, `"${eventSlave.slaveName} the butthole ho, that's me,"`),
					`${he} ${say}s sadly, before giving you a rueful smile.`
				);
			}
			r.push(`${He} kisses you on the cheek and <span class="trust inc">thanks you</span> for listening instead of raping ${him}.`);
			eventSlave.trust += 4;

			App.Events.addParagraph(frag, r);
			App.Events.addResponses(frag, [
				new App.Events.Result(`Kiss ${him} back`, kiss),
				new App.Events.Result(`Rape ${him}`, rape),
			]);
			return frag;

			function kiss() {
				r = [];
				r.push(`You turn to kiss ${him} back, on the lips this time. ${He}`);
				if (canSee(eventSlave)) {
					r.push(`sees`);
				} else {
					r.push(`feels`);
				}
				r.push(`your intention and <span class="trust inc">complies trustingly,</span> closing ${his} eyes and tilting ${his} head slightly so your lips lock perfectly.`);
				if (eventSlave.lips > 70) {
					r.push(`${His} ridiculous, pillowlike lips part softly.`);
				} else if (eventSlave.teeth === "pointy") {
					r.push(`${He} opens ${his} jaw wide, careful to keep ${his} shark's teeth well clear of you.`);
				} else if (eventSlave.teeth === "fangs") {
					r.push(`${He} keeps ${his} jaw steady so you may work around ${his} fangs easier.`);
				} else if (eventSlave.teeth === "fang") {
					r.push(`You try your best to work around ${his} lone fang.`);
				}
				r.push(`After a few seconds, ${he} realizes you aren't planning to break the kiss anytime soon, and softens, ${his}`);
				if (eventSlave.bellyPreg >= 1500) {
					r.push(`pregnant`);
				}
				r.push(`body relaxing against yours. ${He} scoots closer to you, bringing ${his} legs up under ${him} on the couch cushions so ${he} can face you comfortably. ${He} leans one`);
				if (eventSlave.weight > 160) {
					r.push(`extremely well padded`);
				} else if (eventSlave.weight > 95) {
					r.push(`well padded`);
				} else if (eventSlave.muscles > 30) {
					r.push(`muscular`);
				} else if (eventSlave.weight > 10) {
					r.push(`plush`);
				} else if (eventSlave.hips > -1) {
					r.push(`pretty`);
				}
				r.push(`hip against your leg, hiking ${himself} half onto your lap so ${he} can make out with you without having to sit with any weight on ${his} sore butthole.`);
				eventSlave.trust += 2;
				return r;
			}

			function rape() {
				r = [];
				r.push(`But ${he}'s wrong to place that kind of faith in you. As ${he} withdraws from the kiss, you snake a betraying hand between ${his} butt and the couch, and shove`);
				if (eventSlave.anus <= 1) {
					r.push(`two rude fingers up ${his} sore little anus.`);
				} else if (eventSlave.anus === 2) {
					r.push(`three rude fingers up ${his} sore anus.`);
				} else {
					r.push(`all four of your fingers and your thumb, formed into a point, as far up ${his} loose butt as they will go.`);
				}
				r.push(`${He} lets out a pained "oh," and then goes silent. For such a little sound, it bears a great weight of betrayed trust. You insert your fingers to the knuckle, making ${him} writhe with discomfort, and then turf ${him} off the couch to land`);
				if (eventSlave.belly >= 300000) {
					r.push(`across ${his} ${belly} stomach`);
				} else {
					r.push(`face first`);
				}
				r.push(`on the floor in front of you. ${He} tries to spread ${his} butt and angle ${his} hips like a good ${girl}, but you slap ${his} hands away and push your`);
				if (PC.dick === 0) {
					r.push(`strap-on`);
				} else {
					r.push(`cock`);
				}
				r.push(`inside ${him} without regard for ${his} poor anus. ${He} shudders and begins to cry, and keeps crying as you ravage ${his} asshole. When you climax and pull out, ${he} continues to weep, but stumbles off to wash. When ${he} comes back, ${he}'s still sniffling, but without being prompted,`);
				if (eventSlave.belly >= 300000) {
					r.push(`<span class="devotion inc">${he} leans over ${his} belly and offers you ${his} sore butthole again.</span>`);
				} else {
					r.push(`<span class="devotion inc">${he} gets down on ${his} knees and offers you ${his} sore butthole again.</span>`);
				}
				eventSlave.trust -= 4;
				eventSlave.devotion += 5;
				r.push(VCheck.Anal(eventSlave, 1));
				return r;
			}
		}
	}
};


code:
// cSpell:ignore AAGHHH

App.Events.RESSVocalDisobedience = class RESSVocalDisobedience extends App.Events.BaseEvent {
	eventPrerequisites() {
		return []; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				hasAnyLegs,
				canTalk,
				s => s.assignment !== Job.QUARTER,
				s => s.devotion < -50,
				s => s.trust >= -20,
				s => s.rules.speech === "restrictive"
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);
		const rudeTitle = eventSlave.rudeTitle === 1 ? PoliteRudeTitle(eventSlave) : Master;
		const belly = bellyAdjective(eventSlave);

		App.Events.drawEventArt(node, eventSlave, "no clothing");

		let r = [];
		r.push(
			`One morning, despite the fact that ${he} is not allowed to speak without being spoken to,`,
			contextualIntro(V.PC, eventSlave, true),
		);
		if (canSee(eventSlave)) {
			r.push(`looks you directly in the eye`);
		} else {
			r.push(`faces you`);
		}
		r.push(`and asks`);
		if (SlaveStatsChecker.checkForLisp(eventSlave)) {
			r.push(`boldly through ${his}`);
			if (eventSlave.lips > 70) {
				r.push(`massive dick-sucking lips,`);
			} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
				r.push(`inconvenient oral piercings,`);
			} else {
				r.push(`lisp,`);
			}
			r.push(
				Spoken(eventSlave, `"I'm tired, can I have the day off?"`),
				`${He} didn't even call you ${getWrittenTitle(eventSlave)}.`
			);
		} else {
			r.push(
				`boldly,`,
				Spoken(eventSlave, `"I'm tired, can I have the day off, ${rudeTitle}?"`)
			);
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Give ${him} a rough spanking`, spanking, virginityWarning()),
			(canDoAnal(eventSlave) || canDoVaginal(eventSlave))
				? new App.Events.Result(`Sentence ${him} to public use`, sentence, virginityWarning())
				: new App.Events.Result(),
			new App.Events.Result(`Give ${him} the day off`, off),
		]);

		function virginityWarning() {
			if ((eventSlave.anus === 0 && canDoAnal(eventSlave)) || (eventSlave.vagina === 0 && canDoVaginal(eventSlave))) {
				return `This option will take ${his} virginity`;
			}
		}

		function spanking() {
			r = [];
			if (hasAnyLegs(eventSlave)) {
				r.push(`You tie the protesting slave to your desk`);
				if (eventSlave.belly >= 5000) {
					r.push(`with ${his} chest against the top of the desk with ${his} ${belly}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnant`);
					}
					r.push(`belly hanging of the side, so that`);
				} else {
					r.push(`so that ${his} chest is against the top of the desk and`);
				}
				r.push(`${he}'s standing upright with ${his} ass in the air.`);
			} else {
				if (eventSlave.belly >= 300000) {
					r.push(`You carefully balance the protesting, defenseless torso atop ${his} own ${belly}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy.`);
					} else {
						r.push(`stomach.`);
					}
				} else if (eventSlave.belly >= 5000) {
					r.push(`You place the protesting, defenseless torso on your lap, face-down with ${his} ${belly}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnant`);
					}
					r.push(`belly between your legs.`);
				} else {
					r.push(`You place the protesting, defenseless torso on your desk, face-down.`);
				}
			}
			r.push(`You spank ${him} severely, leaving ${his} buttocks bright pink. ${He} must count the strokes or have ${his} punishment start over. Sobbing, ${he} counts`);
			if (eventSlave.lips > 70) {
				r.push(`through ${his} massive dick-sucking lips,`);
			} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
				r.push(`through ${his} inconvenient oral piercings`);
			}
			r.push(
				Spoken(eventSlave, `"Six, AAGHHH, seven, AAGHHH, seven"`),
				`and then realizes ${his} mistake and begs for mercy — in vain, of course. You finish ${him} off with a rough`
			);
			if (canDoVaginal(eventSlave)) {
				r.push(`fuck, with ${him} jerking against ${his} restraints every time you stroke into ${his} sore buttocks.`);
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else if (canDoAnal(eventSlave)) {
				r.push(`assfuck, with ${him} jerking against ${his} restraints every time you stroke into ${his} sore buttocks.`);
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(`${canPenetrateThroat(V.PC) ? `throatfuck` : `facefuck`}, with ${him} jerking against ${his} restraints every time you hilt yourself and slap ${his} ass.`);
				seX(eventSlave, "oral", V.PC, "penetrative");
			}
			r.push(`<span class="trust dec">${He} learns from the experience.</span>`);
			eventSlave.trust -= 5;
			return r;
		}

		function sentence() {
			r = [];
			r.push(`When ${he}`);
			if (canSee(eventSlave)) {
				r.push(`sees ${he}'s being taken to a sex booth,`);
			} else if (canHear(eventSlave)) {
				r.push(`hears the sounds of a public sex parlor,`);
			} else {
				r.push(`finally figures out ${his} destination,`);
			}
			r.push(`${he} begins to cry. ${He} begs`);
			if (eventSlave.lips > 70) {
				r.push(`through ${his} massive dick-sucking lips,`);
			} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
				r.push(`through ${his} inconvenient oral piercings,`);
			} else {
				r.push(`through ${his} tears,`);
			}
			r.push(
				Spoken(eventSlave, `"Please, no, ${Master}, I'll be good —"`),
				`but is cut off when the machine closes around ${his} head. It will offer ${his}`
			);
			if (canDoAnal(eventSlave) && canDoVaginal(eventSlave)) {
				r.push(`ass and pussy`);
			} else if (canDoAnal(eventSlave)) {
				r.push(`ass`);
			} else {
				r.push(`pussy`);
			}
			r.push(`to anyone who pays for the rest of the week, and keep ${him} fed and cleaned. ${His} world will become nothing but silent, featureless darkness and dick. You earn some money off ${him}, and by the end of the night ${his}`);
			if (canDoAnal(eventSlave) && canDoVaginal(eventSlave)) {
				r.push(`holes get`);
			} else {
				r.push(`hole gets`);
			}
			if ((canDoAnal(eventSlave) && eventSlave.anus === 0) || (canDoVaginal(eventSlave) && eventSlave.vagina === 0)) {
				r.push(`well stretched.`);
			} else {
				r.push(`<span class="lime">well stretched.</span>`);
			}
			r.push(`<span class="devotion inc">${He} learns from the experience.</span>`);
			if (canDoAnal(eventSlave) && canDoVaginal(eventSlave)) {
				if (eventSlave.vagina === 0 && eventSlave.anus === 0) {
					r.push(`<span class="virginity loss">${He}'s lost both ${his} virginity and anal cherry.</span>`);
				} else if (eventSlave.vagina === 0) {
					r.push(`<span class="virginity loss">${He}'s lost ${his} virginity.</span>`);
				} else if (eventSlave.anus === 0) {
					r.push(`<span class="virginity loss"> ${He}'s lost ${his} anal cherry.</span>`);
				}
				eventSlave.vagina++;
				eventSlave.anus++;
				seX(eventSlave, "vaginal", "public", "penetrative", 10);
				seX(eventSlave, "anal", "public", "penetrative", 10);
				if (eventSlave.eggType === "human" && canGetPregnant(eventSlave)) {
					r.push(knockMeUp(eventSlave, 25, 2, -2));
				}
			} else if (canDoAnal(eventSlave)) {
				if (eventSlave.anus === 0) {
					r.push(`<span class="virginity loss"> ${He}'s lost ${his} anal cherry.</span>`);
				}
				eventSlave.anus++;
				seX(eventSlave, "anal", "public", "penetrative", 5);
				if (eventSlave.eggType === "human" && canGetPregnant(eventSlave)) {
					r.push(knockMeUp(eventSlave, 50, 1, -2));
				}
			} else {
				if (eventSlave.vagina === 0) {
					r.push(`<span class="virginity loss">${He}'s lost ${his} virginity.</span>`);
				}
				eventSlave.vagina++;
				seX(eventSlave, "vaginal", "public", "penetrative", 20);
				if (eventSlave.eggType === "human" && canGetPregnant(eventSlave)) {
					r.push(knockMeUp(eventSlave, 50, 0, -2));
				}
			}
			eventSlave.devotion += 4;
			cashX(50, "event", eventSlave);
			return r;
		}

		function off() {
			eventSlave.devotion -= 5;
			let r = [];
			r.push(`${He} skips away happily and spends the rest of the day lounging around. ${His} obedience to you <span class="devotion dec">has decreased.</span>`);
			r.push(newRumor.weakness());
			return r;
		}
	}
};


code:
App.Events.RESSWetDreams = class RESSWetDreams extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.seeAge === 1,
		];
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				(s) => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				hasAnyLegs,
				(s) => s.actualAge < 18,
				(s) => s.devotion > 20,
				canPenetrate,
				(s) => s.balls > 0,
				(s) => s.pubertyXY === 0,
				(s) => (s.physicalAge + s.birthWeek / 52 >= s.pubertyAgeXY - 0.5),

			]
		];
	}

	get weight() {
		return 10;
	}

	execute(node) {
		const [slave] = this.actors.map(a => getSlave(a));
		const {
			He, His,
			he, his, him, hers, himself, woman, girl
		} = getPronouns(slave);
		let r = [];
		const {title: Master} = getEnunciation(slave);
		const belly = bellyAdjective(slave);
		const {say} = getEnunciation(slave);

		App.Events.drawEventArt(node, slave);
		App.Events.addParagraph(node, [
			App.UI.DOM.slaveDescriptionDialog(slave),
			`appears in the door of your office early in the morning, hesitating before stepping in. You question why ${he} has come to see you and ${he} gingerly approaches your desk.`
		]);

		if (canTalk(slave)) {
			r.push(
				Spoken(slave, `"I'm sorry, ${Master},"`),
				`${he} ${say}s apologetically.`,
				Spoken(slave, `"I keep wetting my bed at night, and it feels so good too."`)
			);
		} else {
			r.push(`${He} uses gestures to point to ${his} crotch, and explains that ${he} has accidentally started wetting ${his} bed.`);
		}
		r.push(`You check ${his} records for any potential health issues that could be causing this annoyance when it dawns on you. ${slave.slaveName} is likely becoming potent, and now is the perfect time to cement ${his} sexuality.`);
		slave.pubertyXY = 1;
		App.Events.addParagraph(node, r);

		const choices = [];
		choices.push(new App.Events.Result(`Explain ${he}'s just growing up`, justGrowing));
		choices.push(new App.Events.Result(`Teach ${him} ${his} place`, teachHisPlace, (slave.vagina === 0) ? `This option will take ${his} virginity` : null));
		if (V.PC.vagina > 0) {
			choices.push(new App.Events.Result(`Let me teach you how to use it`, howToUse, `This option will penetrate you`));
		}
		choices.push(new App.Events.Result(`Tell ${him} it doesn't matter, ${he} won't be using it`, noMatter, (slave.anus === 0) ? `This option will take ${his} anal virginity` : null));
		if (V.seeExtreme === 1 && slave.indentureRestrictions <= 0) {
			choices.push(new App.Events.Result(`Geld ${him} to render ${him} impotent again`, geld));
		}

		App.Events.addResponses(node, choices);

		/** @returns {DocumentFragment} */
		function justGrowing() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You tell ${him} that ${his} body is preparing to be able to impregnate girls, and that what happens at night happens to all boys. Though as a slave, ${he} should consider ${himself} lucky to be allowed to keep ${his} male genitalia.`);
			if (canTalk(slave)) {
				r.push(
					Spoken(slave, `"I-I can get girls pregnant now? ${Master}, that m-means I'll have to be more careful."`),
					`${He} trails off.`
				);
			} else {
				r.push(`${He} brings ${his} hands to ${his} growing erection, a bubble of precum forming on its tip. ${He} fondles ${himself} as ${he} ponders ${his} new potency.`);
			}
			r.push(`You tell ${him} to keep ${his} dick in check or risk losing it, before continuing to read off the other various changes that will occur in ${him}. ${slave.slaveName} appreciates you taking the time to explain ${his} developing body.`);
			slave.trust += 5;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		/** @returns {DocumentFragment} */
		function teachHisPlace() {
			const frag = new DocumentFragment();
			let r = [];
			if (V.PC.dick === 0) {
				r.push(`You tell ${him} that ${he} is just becoming a potent ${woman}, and as such, ${he} will need to learn that you are the dominant force in ${his} life.`);
				if (canTalk(slave)) {
					r.push(Spoken(slave, `"What does that mean, ${Master}?"`));
				} else {
					r.push(`${His} expression shifts to confusion.`);
				}
				r.push(`You quickly approach and catch ${him}, forcing ${his}`);
				if (slave.belly >= 1500) {
					if (slave.bellyPreg >= 1500) {
						r.push(`gravid`);
					} else {
						r.push(`distended`);
					}
				}
				r.push(`body face-up onto the couch. ${He}`);
				if (canSee(slave)) {
					r.push(`watches you carefully`);
				} else if (canHear(slave)) {
					r.push(`listens to your movements`);
				} else {
					r.push(`waits with trepidation`);
				}
				r.push(`as you size up ${his} fully erect`);
				if (slave.dick === 1) {
					r.push(`tiny dick.`);
				} else if (slave.dick === 2) {
					r.push(`cute dick.`);
				} else if (slave.dick === 3) {
					r.push(`dick.`);
				} else if (slave.dick === 4) {
					r.push(`big dick.`);
				} else if (slave.dick === 5) {
					r.push(`impressive dick.`);
				} else if (slave.dick === 6) {
					r.push(`huge dick.`);
				} else if (slave.dick === 7) {
					r.push(`gigantic dick`);
				} else if (slave.dick === 8) {
					r.push(`titanic dick`);
				} else if (slave.dick === 9) {
					r.push(`absurd dick`);
				} else if (slave.dick === 10) {
					r.push(`inhuman dick`);
				} else {
					r.push(`hypertrophied dick`);
				}
				r.push(`You push ${him} back down as you straddle ${his}`);
				if (slave.belly >= 1500) {
					r.push(belly);
					if (slave.bellyPreg >= 1500) {
						r.push(`pregnant`);
					}
					r.push(`belly`);
				} else if (slave.boobs > 2000) {
					r.push(`huge tits`);
				} else {
					r.push(`chest`);
				}
				r.push(`planting your moistening pussy over the ${girl}'s face. You lean forward, teasing ${his} twitching cock, as you grind against ${his} face. As ${he} begins to moan with lust, you quickly bind the base of ${his} penis, denying ${his} release. You grind your cunt into ${his} face, telling ${him} that YOU are the one who'll be orgasming here, not ${him}. Only once you have taught ${him} ${his} place by soaking ${his} face in your cum do you release ${his} dick and lean back to avoid the coming blast. Just undoing the binding is enough to set ${him} over the edge, coating ${his}`);
				if (slave.bellyPreg >= 1500) {
					r.push(`pregnancy`);
				} else {
					r.push(`belly`);
				}
				r.push(`in ${his} virile sperm. You turn around and order the exhausted ${girl} to clean ${himself} up and go back to ${his} assignment; ${he} complies meekly, understanding that having a potent penis is meaningless in ${his} position.`);
				if (slave.fetish === Fetish.NONE) { // TODO: was coral, should probably be fetish gain.
					r.push(`The next time ${he} walks past your office, you can't help notice the growing erection ${he} carries. <span class="fetish dec"> Your dominating display has left ${him} craving domination.</span>`);
					slave.fetish = "submissive";
					slave.fetishStrength = 10;
				}
				slave.devotion += 5;
			} else {
				r.push(`You tell ${him} that ${he} is just becoming a potent ${woman}, and as such, ${he} will need to learn that you are the dominant force in ${his} life.`);
				if (canTalk(slave)) {
					r.push(Spoken(slave, `"What does that mean, ${Master}?"`));
				} else {
					r.push(`${His} expression shifts to confusion.`);
				}
				r.push(`You quickly approach and catch ${him}, forcing ${his}`);
				if (slave.belly >= 1500) {
					if (slave.bellyPreg >= 1500) {
						r.push(`gravid`);
					} else {
						r.push(`distended`);
					}
				}
				r.push(`body face-down onto the couch${(slave.belly >= 100000) ? ` as best you can` : ``}. ${He}`);
				if (canSee(slave)) {
					r.push(`watches you carefully`);
				} else {
					r.push(`listens to your movements`);
				}
				r.push(`as you size up ${his} fully erect`);
				if (slave.dick === 1) {
					r.push(`tiny dick.`);
				} else if (slave.dick === 2) {
					r.push(`cute dick.`);
				} else if (slave.dick === 3) {
					r.push(`dick.`);
				} else if (slave.dick === 4) {
					r.push(`big dick.`);
				} else if (slave.dick === 5) {
					r.push(`impressive dick.`);
				} else if (slave.dick === 6) {
					r.push(`huge dick.`);
				} else if (slave.dick === 7) {
					r.push(`gigantic dick`);
				} else if (slave.dick === 8) {
					r.push(`titanic dick`);
				} else if (slave.dick === 9) {
					r.push(`absurd dick`);
				} else if (slave.dick === 10) {
					r.push(`inhuman dick`);
				} else {
					r.push(`hypertrophied dick`);
				}
				r.push(`You push ${his} face into the cushions as you mount ${his}`);
				if (slave.butt > 6) {
					r.push(`ridiculous`);
				} else if (slave.butt > 5) {
					r.push(`gigantic`);
				} else if (slave.butt > 4) {
					r.push(`enormous`);
				} else if (slave.butt > 3) {
					r.push(`huge`);
				} else if (slave.butt > 2) {
					r.push(`big`);
				} else if (slave.butt > 1) {
					r.push(`plump`);
				} else if (slave.butt > 0) {
					r.push(`small`);
				} else {
					r.push(`flat`);
				}
				r.push(`butt, sinking your cock deep into ${his}`);
				if (slave.anus === 0) {
					r.push(`virgin`);
				}
				r.push(`asspussy. You lean forward, running your hands across ${his} nipples`);
				if (slave.belly >= 5000) {
					r.push(`and ${belly}`);
					if (slave.belly >= 3000) {
						r.push(`pregnant`);
					}
					r.push(`belly`);
				}
				r.push(`as you move to tease ${his} stiff prick. Between your dick in ${his} ass and your hand on ${his} cock, ${he} rapidly approaches ${his} peak. Quickly, you bind the base of ${his} penis, denying ${his} release and eliciting a long moan from the pent-up ${girl}. You begin thrusting hard, telling ${him} that YOU are the one who'll be orgasming here, not ${him}. Only once you have taught ${him} ${his} place by filling ${his} asspussy with your cum do you allow ${his} release. Just undoing the binding is enough to set ${him} over the edge, coating the cushions`);
				if (slave.belly >= 5000) {
					r.push(`and the bottom of ${his} ${belly}`);
					if (slave.belly >= 3000) {
						r.push(`pregnant`);
					}
					r.push(`belly`);
				}
				r.push(`in ${his} virile sperm. You dismount and order the exhausted ${girl} to clean ${himself} and the couch up before going back to ${his} assignment; ${he} complies meekly, understanding that having a potent penis is meaningless in ${his} position.`);
				if (slave.fetish === Fetish.NONE) {
					r.push(`The next time ${he} walks past your office, you can't help notice the growing erection ${he} carries. <span class="fetish gain">Your dominating display has left ${him} craving domination.</span>`);
					slave.fetish = "submissive";
					slave.fetishStrength = 10;
				}
				slave.devotion += 5;
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}

		/** @returns {DocumentFragment} */
		function howToUse() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You tell ${him} that ${he} is just becoming a potent ${woman}, and as such, ${he} will need to learn how to please ${his} partners.`);
			if (canTalk(slave)) {
				r.push(Spoken(slave, `"What's that mean, ${Master}?"`));
			} else {
				r.push(`${His} expression shifts to confusion.`);
			}
			r.push(`You quickly approach and catch ${him}, forcing ${his}`);
			if (slave.belly >= 1500) {
				if (slave.bellyPreg >= 1500) {
					r.push(`gravid`);
				} else {
					r.push(`distended`);
				}
			}
			r.push(`body face-up onto the couch. ${He}`);
			if (canSee(slave)) {
				r.push(`watches you carefully`);
			} else if (canHear(slave)) {
				r.push(`listens to your movements`);
			} else {
				r.push(`waits with trepidation`);
			}
			r.push(`as you size up ${his} fully erect`);
			if (slave.dick === 1) {
				r.push(`tiny dick.`);
			} else if (slave.dick === 2) {
				r.push(`cute dick.`);
			} else if (slave.dick === 3) {
				r.push(`dick.`);
			} else if (slave.dick === 4) {
				r.push(`big dick.`);
			} else if (slave.dick === 5) {
				r.push(`impressive dick.`);
			} else if (slave.dick === 6) {
				r.push(`huge dick.`);
			} else if (slave.dick === 7) {
				r.push(`gigantic dick.`);
			} else if (slave.dick === 8) {
				r.push(`titanic dick.`);
			} else if (slave.dick === 9) {
				r.push(`absurd dick.`);
			} else if (slave.dick === 10) {
				r.push(`inhuman dick.`);
			} else {
				r.push(`hypertrophied dick.`);
			}
			r.push(`You push ${him} back down as you straddle ${his} cock, lining it up before lowering`);
			if (V.PC.belly >= 1500) {
				r.push(`your pregnant body until ${he} delightfully penetrates you.`);
			} else {
				r.push(`yourself onto ${his} needy prick.`);
			}
			r.push(`You slowly ride ${his} dick, instructing ${him} the proper way to thrust into you and how to adequately support your weight. Once ${he} gets the hand of things, you dismount and lie down on the couch, legs spread, beckoning ${him} into you. ${He} gingerly inserts ${his} cock`);
			if (slave.belly >= 100000) {
				r.push(`while you do your best to manage ${his} ${belly} stomach`);
			}
			r.push(`and begins thrusting, slowly at first, before getting the hang of things and speeding up${(V.PC.dick !== 0)? `, your own neglected dick bobbing along to ${his} thrusts` : ``}. As soon as you feel ${his} beginning to tense you`);
			if (V.PC.pregKnown === 1) {
				r.push(`tell ${him} it's safe to cum in you, you're already pregnant.`);
			} else {
				r.push(`order ${him} to pull out.`);
			}
			r.push(`The poor ${girl} is so caught up in ${his} lust, ${he} can't stop thrusting. Before you can rectify this, ${he} pushes you over the edge and gushes deep into you as you climax`);
			if (V.PC.dick !== 0) {
				r.push(`and spray your own cum`);
				if (V.PC.belly >= 5000 && slave.belly >= 5000) {
					r.push(`into the cramped space between your swollen bodies.`);
				} else if (slave.belly >= 100000) {
					r.push(`across your belly and the underside of ${hers}.`);
				} else {
					r.push(`across ${his} chest.`);
				}
			}
			r.push(`${He} gingerly pulls ${himself} from you, apologizes meekly for losing control, and snuggles up next to you. Cumming in ${his} ${getWrittenTitle(slave)}'s pussy as ${his} first time builds a special bond with you.`);

			if (V.PC.preg === 0 && V.PC.pregWeek === 0) {
				r.push(`You aren't on contraceptives right now; ${his} first time may be more fruitful than ${he} realizes.`);
			}
			slave.devotion += 10;
			slave.trust += 20;
			seX(slave, "penetrative", V.PC, "vaginal");
			if (canImpreg(V.PC, slave)) {
				r.push(knockMeUp(V.PC, 60, 0, slave.ID));
			}

			App.Events.addParagraph(frag, r);
			return frag;
		}

		/** @returns {DocumentFragment} */
		function noMatter() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`In one swift motion, one pull out a chastity cage and lock it onto ${him}. ${He} gasps as ${he} feels it hug close to ${his} struggling erection. You explain that ${he} has just become potent, and thus, will be restricted until you feel differently.`);
			if (canTalk(slave)) {
				r.push(Spoken(slave, `"You don't want me to use my penis, ${Master}?"`));
			} else {
				r.push(`${He} rubs a hand across ${his} caged dick.`);
			}
			r.push(`You bring ${him} over to the couch, set ${him} on your lap, and teasingly call ${him} a buttslut. Every so often you graze a finger around ${his} chastity cage, torturing ${his} dick and balls, but you only make it the center of attention once the poor over-aroused slave`);
			if (canTalk(slave)) {
				r.push(
					`begs,`,
					Spoken(slave, `"I can't take it any more, ${Master}! Please fuck me!"`)
				);
			} else {
				r.push(`begins to use piteous gestures to beg you abjectly to penetrate ${him}.`);
			}
			r.push(`You snicker, but remind ${him} that ${he} has no say in ${his} release. You line up and insert your`);
			if (V.PC.dick === 0) {
				r.push(`strap-on`);
			} else {
				r.push(`cock`);
			}
			r.push(`up ${his} ass and begin slowly fucking ${him}, making sure to stimulate ${his} prostate. When ${he} finally orgasms`);
			if (V.PC.dick === 0) {
				r.push(`${his} unabashed enjoyment`);
			} else {
				r.push(`the strength of ${his} spasming sphincter`);
			}
			r.push(`sends you over as well. ${He}'s left in a confused haze; ${his} body tells ${him} to fuck, but you tell ${him} to get fucked. ${He} sides with your decision and vows to be the one taking dick for you.`);
			if (slave.fetish === Fetish.NONE) {
				r.push(`<span class="fetish dec">Overcoming ${his} urges to become a father via anal cause ${him} to become a buttslut.</span>`);
				slave.fetish = "buttslut";
				slave.fetishStrength = 10;
			}
			slave.devotion += 5;
			slave.chastityPenis = 1;
			r.push(VCheck.Anal(slave, 1));

			App.Events.addParagraph(frag, r);
			return frag;
		}

		/** @returns {string} */
		function geld() {
			slave.balls = 0;
			slave.trust -= 20;
			surgeryDamage(slave, 10);
			return `You bluntly tell ${him} ${he} is becoming potent, and that is something you can't allow to roam unchecked amongst your fertile slaves. You drag ${him} to the remote surgery and strap ${him} face-down with ${his} legs spread${(slave.belly >= 5000) ? `${his} ${belly} rounded belly forcing ${his} rear into the air` : ``}. ${He} doesn't understand what's happening, since the anesthetics totally deprive ${him} of any sensation. ${He}'s so drugged and drowsy with surgical recovery that it takes a while for ${him} to figure out what's happened. When ${he} does, ${his} poor mind scarcely processes the horror of what's happened. ${He} numbly carries on, terrified.`;
		}
	}
};


code:
App.Events.RESSScrubbing = class RESSScrubbing extends App.Events.BaseEvent {
	eventPrerequisites() {
		return []; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				s => (s.assignment === Job.QUARTER || s.assignment === Job.HOUSE),
				s => s.devotion <= 50,
				hasAnyArms,
				canWalk
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {His, He, he, his, him} = getPronouns(eventSlave);
		const {title: Master, say} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);

		let artDiv = document.createElement("div"); // named container so we can replace it later
		App.Events.drawEventArt(artDiv, eventSlave, "an apron"); // changed to an apron in conversion
		node.appendChild(artDiv);

		let r = [];
		r.push(`${V.arcologies[0].name} is well fitted with automated cleaning systems. However,`);
		r.push(contextualIntro(V.PC, eventSlave, true));
		r.push(`is acting as a servant to your other slaves, so whenever ${he} has nothing else to do the cleaners are deactivated and ${he} is made to clean by hand. After all, there is no sense in leaving ${him} idle, when ${he} could be scrubbing floors.`);
		App.Events.addParagraph(node, r);

		r = [];
		r.push(`Which, incidentally, is what ${he}'s doing now. ${He} has standing orders to change into a sturdy apron when doing such work, which ${he} is not pleased to follow, since the apron has no back at`);
		if (eventSlave.belly >= 100000) {
			r.push(`all, and with ${his} ${belly}`);
			if (eventSlave.bellyPreg > 0) {
				r.push(`pregnancy,`);
			} else {
				r.push(`belly,`);
			}
			r.push(`absolutely no side coverage either.`);
		} else if (eventSlave.weight > 190) {
			r.push(`all, and with ${his} hanging gut, no side coverage either.`);
		} else if (eventSlave.belly >= 10000) {
			r.push(`all, and with ${his}`);
			if (eventSlave.bellyPreg >= 8000) {
				r.push(`advanced pregnancy`);
			} else if (eventSlave.bellyImplant >= 8000) {
				r.push(`${belly} belly`);
			}
			r.push(r.pop() + ",");
			r.push(`no side coverage either.`);
		} else if (eventSlave.weight > 130) {
			r.push(`all, and with ${his} gut, no side coverage either.`);
		} else if (eventSlave.weight > 95) {
			r.push(`all, and with ${his} fat belly, no side coverage either.`);
		} else if (eventSlave.belly >= 5000) {
			r.push(`all, and with ${his}`);
			if (eventSlave.bellyPreg >= 3000) {
				r.push(`growing pregnancy`);
			} else if (eventSlave.bellyImplant >= 3000) {
				r.push(`bulging belly`);
			}
			r.push(r.pop() + ",");
			r.push(`no side coverage either.`);
		} else {
			r.push(`all.`);
		}
		r.push(`${He}'s working diligently on the floor, though, down on`);
		if (hasAllLimbs(eventSlave)) {
			r.push(`all fours,`);
		} else {
			r.push(`the ground,`);
		}
		if (eventSlave.belly >= 150000) {
			r.push(`struggling to work with ${his}`);
			if (eventSlave.bellyPreg >= 8000) {
				r.push(`pregnancy`);
			} else if (eventSlave.bellyImplant >= 8000) {
				r.push(`middle`);
			}
			r.push(`forcing ${him} off the ground, desperately trying to reach the floor with ${his} scrub brush.`);
		} else if (eventSlave.belly >= 100000) {
			r.push(his);
			if (eventSlave.bellyPreg >= 8000) {
				r.push(`pregnancy`);
			} else if (eventSlave.bellyImplant >= 8000) {
				r.push(`middle`);
			}
			r.push(`pushing uncomfortably into the floor, trying to use`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} whole arm`);
			}
			r.push(`to work a scrub-brush back and forth.`);
		} else if (eventSlave.weight > 190) {
			r.push(`${his} gut dragging along under ${him}, using`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} whole arm`);
			}
			r.push(`to work a scrub-brush back and forth.`);
		} else if (eventSlave.belly >= 10000) {
			r.push(his);
			if (eventSlave.bellyPreg >= 8000) {
				r.push(`pregnancy`);
			} else if (eventSlave.bellyImplant >= 8000) {
				r.push(`distended middle`);
			}
			r.push(`barely off the ground, using both hands to work a scrub-brush back and forth.`);
		} else if (eventSlave.weight > 130) {
			r.push(`fours, ${his} gut barely off the ground, using`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} whole arm`);
			}
			r.push(`to work a scrub-brush back and forth.`);
		} else if (eventSlave.weight > 95) {
			r.push(`${his} fat belly nearly sagging to the ground, using`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} whole arm`);
			}
			r.push(`to work a scrub-brush back and forth.`);
		} else {
			r.push(`using`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} whole arm`);
			}
			r.push(`to work a scrub-brush back and forth.`);
		}
		r.push(`${His} bare ass bobs back and forth as though ${he} were doing it doggy style with an invisible man.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			canDoAnal(eventSlave)
				? new App.Events.Result(`Use ${his} butt to help ${him} scrub`, scrub, eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null)
				: new App.Events.Result(),
			canDoVaginal(eventSlave)
				? new App.Events.Result(`Avail yourself of ${his} pussy`, pussy, eventSlave.vagina === 0 ? `This option will take ${his} virginity` : null)
				: new App.Events.Result(),
			canDoAnal(eventSlave) || canDoVaginal(eventSlave)
				? new App.Events.Result(`Give ${him} a bigger mess to deal with`, mess, virginityWarning())
				: new App.Events.Result(),
			new App.Events.Result(`Enjoy the view`, view),
		]);

		function responseIntro(){
			r = [];
			r.push(`In accordance with the rules, ${he}`);
			if (eventSlave.weight > 190 || eventSlave.belly >= 100000) {
				r.push(`struggles`);
			} else {
				r.push(`scrambles hurriedly`);
			}
			r.push(`to ${his} feet when you enter and asks`);
			if (!canTalk(eventSlave)) {
				r.push(`in gestures how ${he} can serve you.`);
			} else {
				if (eventSlave.lips > 70) {
					r.push(`meekly through ${his} massive dick-sucking lips,`);
				} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
					r.push(`meekly through ${his} inconvenient oral piercings,`);
				} else {
					r.push(`meekly,`);
				}
				r.push(Spoken(eventSlave, `"${Master}, how may I serve you?"`));
			}
			return r;
		}

		function scrub() {
			r = [];
			r.push(...responseIntro());
			r.push(`You instruct ${him} to go back to what ${he} was doing.`);
			if (eventSlave.belly >= 150000) {
				r.push(`${He} leans back over ${his} ${belly} stomach,`);
			} else {
				r.push(`${He} gets back to ${his} ${eventSlave.skin} knees,`);
			}
			r.push(`puzzled, and then gasps when ${he} finds`);
			if (V.PC.dick === 0) {
				r.push(`your fingers`);
			} else {
				r.push(`your cockhead`);
			}
			r.push(`pressing against ${his} rosebud. You instruct ${his} imperiously to get on with it, and ${he} soon understands your intent. ${He} scrubs back and forth, panting and moaning, as you buttfuck ${him} in time with ${his}`);
			if (V.PC.dick === 0) {
				r.push(`labors, using your other hand to look after yourself`);
			} else if (V.PC.vagina !== -1) {
				r.push(`labors, using your other hand to schlick your pussy while you pound ${him}`);
			} else {
				r.push("labors.");
			}
			r.push(`You even carefully scoot along with ${him} when ${he} needs to reach new spots. By the time ${he}'s done ${his}`);
			if (hasBothArms(eventSlave)) {
				r.push(`arms`);
			} else {
				r.push(`arm`);
			}
			r.push(`and ${his} anus are very tired. ${His} submission to you <span class="devotion inc">has increased.</span>`);
			r.push(VCheck.Anal(eventSlave, 1));
			eventSlave.devotion += 4;
			return r;
		}

		function pussy() {
			r = [];
			r.push(...responseIntro());
			r.push(`You instruct ${him} to go back to what ${he} was doing.`);
			if (eventSlave.belly >= 150000) {
				r.push(`${He} leans back over ${his} ${belly} stomach,`);
			} else {
				r.push(`${He} gets back to ${his} ${eventSlave.skin} knees,`);
			}
			r.push(`puzzled, and then gasps when ${he} finds`);
			if (V.PC.dick === 0) {
				r.push(`your fingers`);
			} else {
				r.push(`your cockhead`);
			}
			r.push(`tracing ${his} pussy lips. You instruct ${him} imperiously to get on with it, and ${he} soon understands your intent. ${He} scrubs back and forth, panting and moaning, as you fuck ${him} in time with ${his}`);
			if (V.PC.dick === 0) {
				r.push(`labors, using your other hand to look after yourself`);
			} else if (V.PC.vagina !== -1) {
				r.push(`labors, using your other hand to schlick your pussy while you pound ${him}`);
			} else {
				r.push(`labors.`);
			}
			r.push(`You even carefully scoot along with ${him} when ${he} needs to reach new spots. By the time ${he}'s done ${his}`);
			if (hasBothArms(eventSlave)) {
				r.push(`arms are`);
			} else {
				r.push(`arm is`);
			}
			r.push(`very tired and ${his}`);
			if (hasBothLegs(eventSlave)) {
				r.push(`legs are`);
			} else {
				r.push(`leg is`);
			}
			r.push(`struggling to hold ${him}. ${His} submission to you <span class="devotion inc">has increased.</span>`);
			r.push(VCheck.Vaginal(eventSlave, 1));
			eventSlave.devotion += 4;
			return r;
		}

		function mess() {
			// replace slave art
			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, eventSlave, "body oil");

			r = [];
			r.push(...responseIntro());
			r.push(`You instruct ${him} to strip off ${his} apron and lay ${his} ${eventSlave.skin} back against the ground. ${He} does, and you empty a bottle of lubricant across ${his} entire body. ${He} gasps from the cold fluid. You slide around on the floor with ${him}, playfully scrubbing ${his}`);
			if (V.seeRace === 1) {
				r.push(`${eventSlave.race}`);
			}
			r.push(`body around in the pool of lube, playing with ${his} wet breasts`);
			if (eventSlave.belly >= 5000) {
				r.push(r.pop() + ",");
				r.push(`${his} rounded`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnancy,`);
				} else {
					r.push(`stomach,`);
				}
			}
			r.push(`and ${his} lubricated thighs before`);
			if (V.PC.dick === 0) {
				r.push(`wrestling the slick slave onto ${his} back so you can ride ${his} face while reaching down to spread ${his}`);
				if (hasBothLegs(eventSlave)) {
					r.push(`legs`);
				} else {
					r.push(`cheeks`);
				}
				r.push(`and molest ${his}`);
				if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
					r.push(`pussy and ass.`);
				} else if (canDoVaginal(eventSlave)) {
					r.push(`pussy.`);
				} else {
					r.push(`ass.`);
				}
			} else {
				r.push(`sinking your cock into ${his}`);
				if (!canDoVaginal(eventSlave)) {
					r.push(`now-slick butthole`);
				} else {
					r.push(`now-slick pussy`);
					if (canDoAnal(eventSlave)) {
						r.push(`and then ${his} relaxing butthole`);
					}
				}
				if (V.PC.vagina !== -1) {
					r.push(r.pop() + ",");
					r.push(`followed by some grinding to coat ${his} face in your pussyjuice`);
				}
				r.push(r.pop() + ".");
			}
			r.push(`${He} had fun, though, and ${his} <span class="trust inc">trust in you has increased.</span>`);
			r.push(VCheck.Both(eventSlave, 1));
			eventSlave.trust += 4;
			return r;
		}

		function virginityWarning() {
			if (eventSlave.vagina === 0 && canDoVaginal(eventSlave) && eventSlave.anus === 0 && canDoAnal(eventSlave)) {
				return `This option will take both ${his} virginities`;
			} else if (eventSlave.vagina === 0 && canDoVaginal(eventSlave)) {
				return `This option will take ${his} virginity`;
			} else if (eventSlave.anus === 0 && canDoAnal(eventSlave)) {
				return `This option will take ${his} anal virginity`;
			}
			return null;
		}

		function view() {
			r = [];
			r.push(...responseIntro());
			r.push(`You instruct ${him} to return to work as you pull up a seat to enjoy the view of ${his}`);
			if (eventSlave.butt > 6) {
				r.push(`ridiculous`);
			} else if (eventSlave.butt > 5) {
				r.push(`gigantic`);
			} else if (eventSlave.butt > 4) {
				r.push(`enormous`);
			} else if (eventSlave.butt > 3) {
				r.push(`huge`);
			} else if (eventSlave.butt > 2) {
				r.push(`big`);
			} else if (eventSlave.butt > 1) {
				r.push(`plump`);
			} else if (eventSlave.butt > 0) {
				r.push(`small`);
			} else {
				r.push(`flat`);
			}
			r.push(`ass wiggling as ${he} cleans. It doesn't take long for the sight to leave you eager for some sexual attention, so you call the uncomfortable slave over to service you.`);
			if (!canTalk(eventSlave)) {
				r.push(`${He} begins to sign but is cut short by you`);
			} else {
				r.push(Spoken(eventSlave, `"${Master}, what would you —"`), `${he} begins to ${say} but is cut short by you gesturing to`);
			}
			if (V.PC.belly >= 10000) {
				r.push(`your swollen belly and commenting on how its ever-growing surface could use a good polishing.`);
				if (eventSlave.fetish === "pregnancy") {
					if (eventSlave.fetishKnown === 1) {
						r.push(`${He} wastes no time in rushing over to your firm dome and bringing ${his} tongue to your navel. ${He} happily massages your middle with surprising gusto, becoming intensely aroused as your child`);
						if (V.PC.pregType > 1) {
							r.push(`ren begin`);
						} else {
							r.push(`begins`);
						}
						r.push(`to kick with excitement and even reaching orgasm just by being allowed to touch your belly. ${He} feels closer to ${his} lovely, gravid, owner after being permitted to shower attention on the thing ${he} loves most.`);
						eventSlave.trust += 5;
					} else {
						r.push(`${He} wastes no time in rushing over to your firm dome and bringing ${his} tongue to your navel. ${He} happily massages your middle with surprising gusto, becoming visibly aroused as your child`);
						if (V.PC.pregType > 1) {
							r.push(`ren begin`);
						} else {
							r.push(`begins`);
						}
						r.push(`to kick with excitement. Once ${he} finishes ${his} first lap and returns to your belly button, ${he} spasms with an intense orgasm. ${He} clearly adores pregnant women.`);
						eventSlave.fetishKnown = 1;
					}
				} else {
					r.push(`${He} does so diligently, making sure to not miss`);
					if (V.showInches === 2) {
						r.push(`an inch`);
					} else {
						r.push(`a centimeter`);
					}
					r.push(`while keeping your enjoyment above all else.`);
				}
			} else if (V.PC.dick !== 0) {
				r.push(`your erect dick and commenting on how it could use a good cleaning. ${He} carefully takes your cock into ${his} mouth, doing ${his} best to bring you to a quick orgasm so ${he} can escape your gaze. After downing your cum, ${he} attempts to pull back, but you hold ${him} down; clearly ${he} has more work to do here.`);
				seX(eventSlave, "oral", V.PC, "penetrative");
			} else if (V.PC.vagina !== -1) {
				r.push(`your soaked pussy and commenting on how someone needs to clean up after it, preferably with their tongue. ${He} carefully ${his} tongue to your clit, doing ${his} best to bring you to a quick orgasm so ${he} can escape your gaze. After bring you to a rather unsatisfying climax, ${he} attempts to pull back, but you grab ${him} and force ${him} to lick the depths of your pussy.`);
				seX(eventSlave, "oral", V.PC, "vaginal");
			}
			r.push(`By the time you are satisfied with ${his} efforts, ${he} <span class="devotion inc">has become more submissive to you.</span>`);
			eventSlave.devotion += 4;
			return r;
		}
	}
};


code:
App.Events.RESSServeThePublicDevoted = class RESSServeThePublicDevoted extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [];
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.assignment === Job.PUBLIC,
				s => canDoAnal(s) || canDoVaginal(s),
				s => s.devotion > 50,
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canTalk,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, His, his, him, himself
		} = getPronouns(eventSlave);
		const belly = bellyAdjective(eventSlave);

		App.Events.drawEventArt(node, eventSlave);

		let t = [];

		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`is a real public servant. This morning, ${he} rose early, did ${his} chores, and looked after ${himself}.`);
		if (canWalk(eventSlave) || (canMove(eventSlave) && eventSlave.rules.mobility === "permissive")) {
			t.push(`${He} heads out`);
		} else {
			t.push(`${He}'s being escorted`);
		}
		t.push(`past your desk toward the arcology's lower floors to offer ${himself} freely to everyone ${he} meets.`);

		App.Events.addParagraph(node, t);
		t = [];
		t.push(`As ${he} goes, you notice that`);
		if (eventSlave.chastityPenis === 1) {
			t.push(`precum is starting to dribble out of ${his} chastity cage.`);
		} else if (eventSlave.dick > 0 && canAchieveErection(eventSlave)) {
			t.push(`${his} cock is so hard it's standing out, perfectly straight.`);
		} else if (eventSlave.dick > 0 && eventSlave.balls > 0 && !canAchieveErection(eventSlave)) {
			t.push(`${his} semi-hard cock is dribbling precum, a sure sign of a bitch who wants to be buttfucked.`);
		} else if (eventSlave.dick > 0 && !canAchieveErection(eventSlave)) {
			t.push(`${his} pathetically soft cock is streaming precum, a sure sign of a bitch who wants to be buttfucked.`);
		} else if (eventSlave.clit > 0) {
			t.push(`${his} big clit is obviously engorged.`);
		} else if (eventSlave.vaginaLube > 0) {
			t.push(`${his} pussy is already soaking wet.`);
		} else {
			t.push(`${his} cheeks are flushed and ${he}'s panting a little.`);
		}
		t.push(`Apparently, ${he} can't wait to`);
		if (eventSlave.fetish === Fetish.SUBMISSIVE) {
			t.push(`play the submissive.`);
		} else if (eventSlave.fetish === "humiliation") {
			t.push(`be publicly degraded.`);
		} else if (eventSlave.fetish === "masochist") {
			t.push(`be roughly handled.`);
		} else if (eventSlave.fetish === "dom") {
			t.push(`play the dom.`);
		} else if (eventSlave.fetish === "sadist") {
			t.push(`find a willing masochist.`);
		} else if (eventSlave.fetish === "pregnancy" && eventSlave.preg > eventSlave.pregData.normalBirth / 4) {
			t.push(`have ${his} pregnancy fondled.`);
		} else if (eventSlave.fetish === "pregnancy") {
			t.push(`pretend to get knocked up.`);
		} else if (eventSlave.fetish === "boobs") {
			t.push(`have ${his} tits fondled.`);
		} else if (eventSlave.fetish === "cumslut") {
			t.push(`gorge ${himself} on cum.`);
		} else if (eventSlave.fetish === "buttslut") {
			t.push(`spend all day getting pounded in the ass.`);
		} else if (eventSlave.attrXX > 65) {
			t.push(`enjoy all the women.`);
		} else if (eventSlave.attrXY > 65) {
			t.push(`enjoy all the men.`);
		} else {
			t.push(`be a complete slut.`);
		}
		t.push(`If you went with ${him}, you could certainly show off a little.`);

		App.Events.addParagraph(node, t);
		t = [];

		App.Events.addResponses(node, [
			(canDoAnal(eventSlave))
				? new App.Events.Result(`Share ${his} body with the public`, share, virginityWarning())
				: new App.Events.Result(),
			new App.Events.Result(`Give ${him} some aftercare`, aftercare, virginityWarning()),
			new App.Events.Result(`Chat about ${his} day`, chat),
		]);

		function virginityWarning() {
			if (canDoVaginal(eventSlave) && (eventSlave.vagina === 0)) {
				return `This option will take ${his} virginity`;
			} else if (canDoAnal(eventSlave) && (eventSlave.anus === 0)) {
				return `This option will take ${his} anal virginity`;
			} else {
				return null;
			}
		}

		function share() {
			let frag = document.createDocumentFragment();
			t = [];
			if (canWalk(eventSlave) || (canMove(eventSlave) && eventSlave.rules.mobility === "permissive")) {
				t.push(`${eventSlave.slaveName} is surprised to find you walking beside ${him}, but obediently falls in behind you as a proper slave should.`);
			} else if (canMove(eventSlave)) {
				t.push(`${eventSlave.slaveName} is surprised to find you swapping places with ${his} assistant to support ${his} weight.`);
			} else { // strength/height check here!
				t.push(`You scoop ${eventSlave.slaveName}'s ${isAmputee(eventSlave) ? "limbless" : "immobile"} form up and carry ${him} out.`);
			}
			t.push(`You take ${him} to a lovely open balcony and seat yourself on a bench surrounded by the lush greenery and flowing water of ${V.arcologies[0].name}'s food systems. You pull ${his} ass down onto your`);
			if (V.PC.dick === 0) {
				t.push(`strap-on`);
			} else {
				t.push(`rigid cock`);
			}
			t.push(`so ${he} can offer everything else to the public.`);
			if (V.PC.vagina !== -1 && V.PC.dick !== 0) {
				t.push(`They know not to presume to use the pussy located beneath your thrusting cock.`);
			}
			t.push(VCheck.Anal(eventSlave, 5));

			App.Events.addParagraph(frag, t);
			t = [];

			if (canDoVaginal(eventSlave)) {
				t.push(`For several hours, citizens come and go, most choosing to fuck ${his} wet and available pussy. You climax repeatedly from the`);
				if (V.PC.dick === 0) {
					t.push(`titillating nature of`);
				} else {
					t.push(`extra fullness of ${his} butt during`);
				}
				t.push(`double penetration, and by the time you're finished ${he}'s dripping ejaculate from both ${his} holes.`);
			} else if (eventSlave.belly >= 120000) {
				t.push(`Since`);
				if (eventSlave.bellyPreg >= 3000) {
					t.push(`${he}'s so enormously pregnant that ${his} ${belly} stomach blocks ${his} crotch`);
				} else {
					t.push(`${his} ${belly} stomach is so massive that is blocks ${his} crotch`);
				}
				t.push(`and you're wearing ${his} backdoor around your`);
				t.push(V.PC.dick === 0 ? "strap-on," : "cock,");
				t.push(`${his} mouth is all that's left. ${He} gives so many blowjobs by the time you're finished that ${his} face, hair, chest and belly are liberally spattered with cum.`);
			} else if (eventSlave.chastityVagina) {
				t.push(`Since ${he}'s wearing a chastity belt and you're wearing ${his} backdoor around your`);
				t.push(V.PC.dick === 0 ? "strap-on," : "cock,");
				t.push(`${his} mouth is all that's left. ${He} gives so many blowjobs by the time you're finished that ${his} face, hair, chest and`);
				if (eventSlave.belly >= 5000) {
					if (eventSlave.bellyPreg >= 3000) {
						t.push(`pregnant`);
					} else {
						t.push(belly);
					}
					t.push(`belly`);
				} else {
					t.push(`even stomach`);
				}
				t.push(`are liberally spattered with cum.`);
			} else {
				t.push(`With your cock pumping ${his} butt as much as you can manage with ${him} seated in your lap, ${his}`);
				if (eventSlave.dick !== 0 && eventSlave.belly >= 5000) {
					t.push(`dick flops up and down against the bottom of ${his} rounded stomach,`);
				} else if (eventSlave.dick !== 0) {
					t.push(`dick flops up and down,`);
				} else {
					t.push(`tiny front hole begins to glisten with the promise of a messy little orgasm,`);
				}
				t.push(`lewdly advertising ${his} sexual availability. ${He} gives so many blowjobs by the time you're finished that ${his} face, hair, chest and`);
				if (eventSlave.belly >= 5000) {
					if (eventSlave.bellyPreg >= 3000) {
						t.push(`pregnant`);
					} else {
						t.push(belly);
					}
					t.push(`belly`);
				} else {
					t.push(`even stomach`);
				}
				t.push(`are liberally spattered with cum.`);
			}
			t.push(`The public is sure to remember this spectacle; <span class="green">your reputation has increased.</span>`);
			repX(500, "event", eventSlave);
			if (canDoVaginal(eventSlave)) {
				seX(eventSlave, "vaginal", "public", "penetrative", 5);
				if (eventSlave.vagina === 0) {
					t.push(`They have also <span class="lime">broken in ${eventSlave.slaveName}'s virgin pussy.</span>`);
					eventSlave.vagina = 1;
				}
				if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
					t.push(knockMeUp(eventSlave, 10, 0, -2));
				}
			} else {
				seX(eventSlave, "oral", "public", "penetrative", 5);
			}
			App.Events.addParagraph(frag, t);
			t = [];
			return [frag];
		}

		function aftercare() {
			t = [];
			t.push(`${eventSlave.slaveName} returns many hours later. ${He} carefully took breaks for ${his} own safety,`);
			if (eventSlave.preg > eventSlave.pregData.normalBirth / 1.33) {
				t.push(`especially so given ${his} advanced pregnancy,`);
			}
			t.push(`and cleaned ${himself} periodically, so there isn't much evidence, but ${he}'s obviously bone tired. When you meet ${him} at the entrance to your penthouse ${he}'s surprised to`);
			t.push(canSee(eventSlave) ? "see" : "find");
			t.push(`you, but ${he} gives you a little smile anyway. You give ${him} a strong massage and put ${him} to bed. Afterward you turn to be about your business, but ${he} wordlessly offers ${himself} to you as you do.`);
			if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina === 0) {
					t.push(`${His} virgin pussy is certainly tempting.`);
				} else if (eventSlave.vagina === 1) {
					t.push(`${His} tight pussy is certainly tempting.`);
				} else if (eventSlave.vagina === 2) {
					t.push(`${His} soft pussy is certainly tempting.`);
				} else if (eventSlave.labia > 0) {
					t.push(`${His} generous petals are certainly tempting.`);
				} else if (eventSlave.clit > 0) {
					t.push(`${His} prominent clit is certainly eye-catching.`);
				} else if (eventSlave.vagina === -1) {
					t.push(`${His} relaxed anus is certainly inviting.`);
				} else {
					t.push(`${His} capacious pussy is certainly inviting.`);
				}
			} else {
				if (eventSlave.anus === 0) {
					t.push(`${His} virgin asshole is certainly tempting.`);
				} else if (eventSlave.anus === 1) {
					t.push(`${His} tight asshole is certainly tempting.`);
				} else if (eventSlave.anus === 2) {
					t.push(`${His} experienced asshole is certainly tempting.`);
				} else {
					t.push(`${His} capacious asshole is certainly inviting.`);
				}
			}
			t.push(`${He}'s sore, so you spoon`);
			if (eventSlave.belly >= 5000) {
				if (eventSlave.bellyPreg >= 3000) {
					t.push(`${his} gravid`);
				} else {
					t.push(`${his} rounded`);
				}
				t.push(`body`);
			} else {
				t.push(him);
			}
			t.push(`gently in bed, fucking ${him} slowly to sleep.`);
			if (canDoVaginal(eventSlave)) {
				t.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				t.push(VCheck.Anal(eventSlave, 1));
			}
			t.push(`${He} falls asleep with a serene expression on ${his} face. <span class="mediumaquamarine">${His} trust in you has increased.</span>`);
			eventSlave.trust += 4;
			return t;
		}

		function chat() {
			t = [];
			t.push(`${eventSlave.slaveName} returns many hours later. ${He}'s obviously bone tired. When you meet ${him} at the entrance to your penthouse ${he}'s surprised to`);
			t.push(canSee(eventSlave) ? "see" : "find");
			t.push(`you, but ${he} gives you a little smile anyway. You bring ${him} back to your office, and ${he}'s clearly expecting to get fucked, so ${he}'s surprised when you hand ${him} a hot beverage and sit down on the couch with ${him}. ${He} relaxes quickly and chats with you about ${his} day, gossiping about all the private doings of all the prominent citizens who fucked ${his}`);
			if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) {
				t.push(`cunt`);
			} else if (eventSlave.anus > 0 && canDoAnal(eventSlave)) {
				t.push(`asshole`);
			} else {
				t.push(`mouth`);
			}
			t.push(`today.`);
			if (eventSlave.intelligence + eventSlave.intelligenceImplant > 50) {
				t.push(`${He}'s witty and holds up ${his} end of the conversation without straying from ${his} role as a slave.`);
			} else if (eventSlave.intelligence + eventSlave.intelligenceImplant >= -15) {
				t.push(`${He} has a few juicy items to share, and even while gossiping, ${he}'s mindful of ${his} role as a slave.`);
			} else {
				t.push(`${He} may be an idiot, but ${his} babble is amusing enough.`);
			}
			t.push(`Time flies, and when you finally stand up to continue with your evening, ${he} thanks you prettily for listening to ${him}`);
			if (eventSlave.belly >= 10000) {
				t.push(`as you help ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					t.push(`pregnant`);
				} else {
					t.push(`heavy`);
				}
				t.push(`body off the couch`);
			}
			t.push(t.pop() + ".");
			t.push(`<span class="hotpink">${His} devotion to you has increased.</span>`);
			eventSlave.devotion += 4;
			return t;
		}
	}
};