code:
App.Events.RESSBreastExpansionBlues = class RESSBreastExpansionBlues 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.drugs === "intensive breast injections" || s.drugs === "hyper breast injections",
				s => s.boobs <= 8000,
				s => s.boobs > 2000,
				s => s.devotion <= 50,
				s => s.devotion >= -50,
				s => s.trust >= -50,
				s => s.fetish !== "boobs",
				s => s.intelligence + s.intelligenceImplant >= -50,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself, girl
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);
		const arms = hasBothArms(eventSlave) ? `arms` : `arm`;
		const hands = (hasBothArms(eventSlave)) ? `hands` : `hand`;
		const PC = V.PC;

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

		const r = new SpacedTextAccumulator(node);
		r.push(
			`During ${his} routine weekly inspection,`,
			contextualIntro(PC, eventSlave, true),
			`cradles ${his} huge breasts with ${his} ${arms} whenever the maneuvers of being inspected allow ${him} to do so. It's not an unusual gesture for a ${SlaveTitle(eventSlave)} on breast growth drugs, since slaves whose tits are expanding are, by definition, not used to their weight yet. But ${eventSlave.slaveName} is more than just uncomfortable. ${He} seems to regard ${his} weighty mammaries with distaste.`,
		);
		if (eventSlave.intelligence+eventSlave.intelligenceImplant >= -15) {
			r.push(`${He}'s not stupid, and quickly realizes`);
		} else {
			r.push(`${He}'s an idiot, but ${he}'s not dumb enough to completely miss`);
		}
		r.push(`that you've noticed ${his} feelings about ${his} boobs. ${He} bites ${his} lower lip, not sure if ${he} should say anything, so you follow your usual policy during slave inspections and ask ${him} about it.`);
		if (PC.skill.slaving >= 100) {
			r.push(`If you learned one thing from your long career of slave training, it's that it's`);
		} else {
			r.push(`It's`);
		}
		r.push(`typically best to suss these things out.`);
		r.toParagraph();
		r.push(`"${Master}," ${he} mumbles,`,
			Spoken(eventSlave, `"can I please be taken off the breast expansion drugs?"`),
			`${He} swallows, nervous that ${he}'s crossed a line, but ${he} presses on, hefting ${his} tits a little higher to show ${he}'s talking about them.`,
			Spoken(eventSlave, `"They're so heavy and awkward. I'm sore every night, and my back hurts. I feel like a cow with boobs this big, and I can't imagine what it'll be like if they get any bigger."`)
		);
		r.push(`In one sense, it's amusing that ${he} feels that way, because`);
		if (FutureSocieties.isActive('FSAssetExpansionist') || (FutureSocieties.isActive('FSTransformationFetishist') && !FutureSocieties.isActive('FSSlimnessEnthusiast')) || FutureSocieties.isActive('FSPastoralist')) {
			r.push(`as many slaves in this very arcology know quite well,`);
		}
		r.push(`it's possible for the miracles of modern medicine to grow a ${SlaveTitle(eventSlave)}'s tits until they're so heavy they immobilize ${him} completely.`);
		if (eventSlave.muscles > 5) {
			r.push(`${He} has the muscles to carry ${his} boobs around, so some of this may be simple whining.`);
		} else {
			r.push(`It's not surprising that ${his} breasts would be uncomfortable, since ${he} lacks anything in the way of muscle tone to help support them.`);
		}
		if (eventSlave.lactation > 0) {
			r.push(`${He} complained of feeling like a cow without detectable irony, despite the fact that ${his} left nipple has a`);
			if (eventSlave.nipples !== "fuckable") {
				r.push(`droplet of cream clinging to`);
			} else {
				r.push(`rivulet of cream running from`);
			}
			r.push(`it right now.`);
		} else if (eventSlave.preg > eventSlave.pregData.normalBirth/2.66) {
			r.push(`${He} complained of feeling like a cow without detectable irony, despite the fact that ${he} is pregnant and likely to begin lactating soon.`);
		}
		r.push(`${He} waits anxiously for your response, wondering if ${he}'ll be punished for expressing reservations about your expansion of ${his} breasts and, comically, still cradling ${his} heavy udders as ${he} does so.`);

		r.toParagraph();
		App.Events.addResponses(node, [
			new App.Events.Result(`Let ${him} know ${he}'ll be growing as fast as possible`, growing),
			(eventSlave.lactation < 2)
				? new App.Events.Result(`Augment ${his} breast growth with lactation implants`, augment, `This option will cost ${cashFormat(V.surgeryCost)}`)
				: new App.Events.Result(),
			(canGetPregnant(eventSlave) && PC.dick !== 0)
				? new App.Events.Result(`Give ${his} bust a boost by knocking ${him} up`, boost, virginityWarning())
				: new App.Events.Result(),
			new App.Events.Result(`Praise ${his} breasts and reassure ${him}`, praise),
			(eventSlave.nipples !== "fuckable")
				? new App.Events.Result(`Weight ${his} breasts as punishment`, punishment)
				: new App.Events.Result(),
		]);

		function growing() {
			const {
				heA, hisA, himA, himselfA
			} = getPronouns(assistant.pronouns().main).appendSuffix('A');
			const r = new SpacedTextAccumulator();
			r.push(`Rather than punishing ${him} directly, you address yourself to your personal assistant. You order ${himA} to make a note in ${eventSlave.slaveName}'s drug schedule that ${he}'s to remain on a breast expansion regime until further notice. The ${SlaveTitle(eventSlave)}'s face falls as ${he}`);
			if (canHear(eventSlave)) {
				r.push(`hears this, and ${V.assistant.name}`);
			} else if (canSee(eventSlave)) {
				r.push(`reads this order on a small screen provided by ${V.assistant.name}, who`);
			} else {
				r.push(`slowly realizes this, and ${V.assistant.name}`);
			}
			r.push(`doesn't help matters by`);
			if (V.assistant.personality <= 0) {
				r.push(`confirming the order in disturbingly clinical tones.`);
			} else if (V.assistant.appearance === "monstergirl") {
				r.push(`using ${hisA} avatar's tentacle hair to caress ${hisA} own tits as ${heA} concurs in disturbingly kind tones.`);
			} else if (V.assistant.appearance === "shemale") {
				r.push(`shaking ${hisA} avatar's enormous endowments, making a lewd comment, and then giving ${himselfA} a titjob.`);
			} else if (V.assistant.appearance === "amazon") {
				r.push(`observing that a good slave ${girl} should have big tits, since strong warriors like fertile, big-boobed ${girl}s back home to breed with.`);
			} else if (V.assistant.appearance === "businesswoman") {
				r.push(`having ${hisA} avatar give ${eventSlave.slaveName} a disturbingly appraising glance, as though ${he} and ${his} breasts are an interesting entry on a balance sheet.`);
			} else if (V.assistant.appearance === "schoolgirl") {
				r.push(`bending ${hisA} avatar over to show off ${hisA} cleavage, and then giving ${hisA} tits a jiggle, as though the point wasn't clear enough already.`);
			} else if (V.assistant.appearance === "goddess") {
				r.push(`hefting ${hisA} own motherly breasts and telling ${eventSlave.slaveName} that ${he} should be happy, since bigger breasts are a sign of health and fertility.`);
			} else if (V.assistant.appearance === "hypergoddess") {
				r.push(`massaging ${hisA} own heaving breasts and telling ${eventSlave.slaveName} that ${he} should be happy, since bigger breasts are a sign of health and fertility.`);
			} else if (V.assistant.appearance === "loli") {
				if (V.assistant.fsAppearance === "asset expansionist") {
					r.push(`playing with ${hisA} oversized breasts under ${hisA} swimsuit and telling ${eventSlave.slaveName} that being busty is amazing.`);
				} else if (V.assistant.fsAppearance === "pastoralist") {
					r.push(`cupping ${hisA} pitiful milk nubs and telling ${eventSlave.slaveName} that if ${heA} was in ${his} shoes ${heA} would be soo happy to be busty.`);
				} else if (V.assistant.fsAppearance === "transformation fetishist") {
					r.push(`playing with ${hisA} absurd implants and telling ${eventSlave.slaveName} that being busty is great, though ${he}'d look better with big fake balloons for breasts.`);
				} else {
					r.push(`cupping ${hisA} nonexistent breasts and telling ${eventSlave.slaveName} that if ${heA} was in ${his} shoes ${heA} would be soo happy to be busty.`);
				}
			} else if (V.assistant.appearance === "preggololi") {
				if (V.assistant.fsAppearance === "asset expansionist") {
					r.push(`playing with ${hisA} oversized breasts under ${hisA} swimsuit and telling ${eventSlave.slaveName} that being busty is amazing.`);
				} else if (V.assistant.fsAppearance === "pastoralist") {
					r.push(`cupping ${hisA} milky handfuls and telling ${eventSlave.slaveName} that if ${heA} was in ${his} shoes ${heA} would be soo happy to be that busty.`);
				} else if (V.assistant.fsAppearance === "transformation fetishist") {
					r.push(`playing with ${hisA} absurd implants and telling ${eventSlave.slaveName} that being busty is great, though ${he}'d look better with big fake balloons for breasts.`);
				} else {
					r.push(`cupping ${hisA} tiny breasts and telling ${eventSlave.slaveName} that if ${heA} was in ${his} shoes ${heA} would be soo happy to be busty.`);
				}
			} else if (V.assistant.appearance === "fairy") {
				r.push(`groping the air as if there were an imaginary pair of tits in front of ${himA} and telling ${eventSlave.slaveName} that ${his} oversized funbags would be wonderful for ${himA} to bounce and play on.`);
			} else if (V.assistant.appearance === "pregnant fairy") {
				r.push(`bouncing on the balls of ${hisA} feet to emphasize ${hisA} own small but bouncy breasts and giving ${eventSlave.slaveName} a knowing wink.`);
			} else if (V.assistant.appearance === "angel") {
				r.push(`loudly musing how many hungry children ${eventSlave.slaveName} could feed and how many more could be added to that number.`);
			} else if (V.assistant.appearance === "cherub") {
				r.push(`making groping gestures at ${eventSlave.slaveName}'s tits.`);
			} else if (V.assistant.appearance === "incubus") {
				r.push(`shouting lewd comments about ${eventSlave.slaveName}'s tits while masturbating furiously.`);
			} else if (V.assistant.appearance === "succubus") {
				if (V.assistant.fsAppearance === "asset expansionist") {
					r.push(`openly groping ${hisA} own immense breasts while dropping comments about how big you like 'em.`);
				} else if (V.assistant.fsAppearance === "pastoralist") {
					r.push(`openly groping ${hisA} milk-filled quad-breasts while dropping comments about how you love 'em big and milky.`);
				} else if (V.assistant.fsAppearance === "transformation fetishist") {
					r.push(`openly groping ${hisA} own immense chest balloons while dropping comments about filling ${eventSlave.slaveName} with the biggest implants possible.`);
				} else {
					r.push(`pushing ${hisA} breasts together and shaking them back and forth as they steadily swell.`);
				}
			} else if (V.assistant.appearance === "imp") {
				r.push(`making pinching gestures at ${eventSlave.slaveName}'s nipples and pretending to slap all that tit flesh.`);
			} else if (V.assistant.appearance === "witch") {
				if (V.assistant.fsAppearance === "asset expansionist") {
					r.push(`casting a spell and bloating ${hisA} breasts to insane proportions.`);
				} else if (V.assistant.fsAppearance === "pastoralist") {
					r.push(`running ${hisA} hands across ${hisA} many breasts, tweaking a nipple here and rubbing a tit there.`);
				} else if (V.assistant.fsAppearance === "transformation fetishist") {
					r.push(`bouncing ${hisA} oversized and overly round breasts back and forth.`);
				} else {
					r.push(`pulling down the top of ${hisA} dress to reveal ${hisA} ample cleavage.`);
				}
			} else if (V.assistant.appearance === "ERROR_1606_APPEARANCE_FILE_CORRUPT") {
				r.push(`reshapes ${hisA} arms into a pair of suckers and multiple needles designed to inject prey with growth accelerants as ${heA} slowly moves towards ${eventSlave.slaveName}.`);
			} else {
				r.push(`purring that ${heA}'d love to.`);
			}
			r.push(`You talk through ${eventSlave.slaveName}'s medical condition with ${him}, and give ${him} a`);
			if (PC.skill.medicine >= 100) {
				r.push(`personal examination with the speed and accuracy of years of general practice.`);
			} else {
				r.push(`thorough exam.`);
			}
			r.push(`Once this is done, you give ${V.assistant.name} technical directions to make minor changes to ${eventSlave.slaveName}'s drug regime, designed to make ${his} breasts grow just slightly faster. The effect is minimal, but the point is made. ${He}'s still not happy to be transformed into a big-breasted sex slave, but ${he}'s relieved that was ${his} only punishment for expressing ${his} unhappiness about it.`);
			if (eventSlave.geneMods.NCS === 0) {
				eventSlave.boobs += 100;
			} else {
				eventSlave.boobs += 50;
			}
			r.toParagraph();
			return r.container();
		}

		function augment() {
			eventSlave.trust -= 5;
			eventSlave.lactation = 2;
			cashX(forceNeg(V.surgeryCost), "slaveSurgery", eventSlave);
			surgeryDamage(eventSlave, 10);
			return `You announce that you're resolved to continue growing ${his} breasts, and since ${he} feels like a cow, plan to help ${him} fulfill ${his} image of ${himself}. ${He}'s experienced enough to know not to question what that means, just to fear the intent behind it. ${He}'s right to worry, as you drag ${him} to the remote surgery for an impromptu lactation implant installation. When ${he} comes to, ${he} immediately realizes ${his} breasts are larger than ever. As ${he} brings a hand to each of the full mounds, a moan laced with relief and disdain escapes ${his} lips; along with a strong gush of milk from ${his} engorged breasts. ${He} has been taught a harsh lesson about questioning your will, a lesson ${he} will be reminded of every time ${he} has to empty ${his} ever-swelling breasts of their excessive milk. As with all surgery ${his} health has been slightly affected.`;
		}

		function boost() {
			const r = new SpacedTextAccumulator();
			r.push(`You announce that you're resolved to continue growing ${his} breasts, and plan to increase their rate of growth in the coming months. ${He}'s experienced enough to know not to question what that means, just to fear the intent behind it. ${He}'s right to worry, as you easily tip ${him} off balance and to the ground; mounting ${his}`);
			if (eventSlave.mpreg === 1) {
				if (eventSlave.anus === 0) {
					r.push(`virgin`);
				} else {
					r.push(`exposed`);
				}
				r.push(`ass`);
			} else {
				if (eventSlave.vagina === 0) {
					r.push(`virgin`);
				} else {
					r.push(`exposed`);
				}
				r.push(`pussy`);
			}
			r.push(`as ${he} struggles to lift ${his} swollen breasts from the floor.`);
			if (eventSlave.mpreg === 1) {
				r.push(VCheck.Anal(eventSlave, 10));
			} else {
				r.push(VCheck.Vaginal(eventSlave, 10));
			}
			r.push(`${He}`);
			if (eventSlave.voice > 0) {
				r.push(`squeals`);
			} else {
				r.push(`rasps`);
			}
			r.push(`with displeasure as you roughly plow ${him} into ${his} distended breasts until you cum deep inside ${his} fertile hole. You return to your desk, leaving ${him} to sob into ${his} unwelcome bust as cum pools from ${his} abused`);
			if (eventSlave.mpreg === 1) {
				r.push(`ass.`);
			} else {
				r.push(`pussy.`);
			}
			r.push(`${He} knows full well what you meant now, and lets you have your way with ${his} body every time you catch ${him} in a vulnerable moment or complaining about ${his} tits. By the week's end, scans reveal that your seed has taken root; ${he}'s pregnant. As ${his} breasts grow to feed ${his} coming child, ${he} will likely be too distracted by ${his} swelling middle to complain about their added weight.`);
			eventSlave.trust -= 5;
			eventSlave.devotion += 5;
			knockMeUp(eventSlave, 100, 2, -1);
			r.toParagraph();
			return r.container();
		}

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

		function praise() {
			const r = new SpacedTextAccumulator();
			r.push(`You decide to reassure ${him}, and sit ${him} on your lap`);
			if (PC.belly >= 100000) {
				r.push(`as best ${he} can`);
			}
			r.addToLast(`.`);
			if (eventSlave.height > 185) {
				r.push(`${He}'s a big ${girl}, and has trouble fitting there, but you put ${him} there anyway, enjoying the absurdity.`);
			} else if (eventSlave.bellyPreg >= 1500) {
				r.push(`${His} pregnancy is very apparent to you in this posture, and ${he}'s quite aware of it too.`);
			} else if (eventSlave.butt > 3) {
				r.push(`${His} big soft butt is nice and comfortable on your thighs.`);
			} else {
				r.push(`${He}'s hesitant, but obeys anyway.`);
			}
			r.push(`Pulling ${him} back against your`);
			if (PC.belly > 1500) {
				r.push(`pregnant belly,`);
			} else if (PC.boobs >= 300) {
				r.push(`own bosom,`);
			} else if (PC.title === 0) {
				r.push(`flat chest,`);
			} else {
				r.push(`muscular chest,`);
			}
			r.push(`you reach around ${him} and take over the breast-cradling responsibilities. You say nothing for a while, just hefting ${his} weighty udders, rolling them from side to side slightly. After letting ${him} get used to the gentle treatment, you tell ${him} that you're ${his} owner, and you find big breasts very attractive. You tell ${him} that you understand that they can be uncomfortable at times, but you expect ${him} to tolerate that without complaint. It isn't easy to be pretty, but it's easier to be a pretty slave than to be a homely one. This last point affects ${him}, and ${he} seems to take heart in the idea that you're improving ${him}, at least from your perspective. After all, ${he}'s sitting atop`);
			if (PC.dick !== 0) {
				r.push(`your hard dick, which ${he} can definitely feel`);
			} else {
				r.push(`your hot cunt, which ${he} can probably detect`);
			}
			r.push(`through your clothes. ${He} does understand that having ${his} ${getWrittenTitle(eventSlave)} enjoy touching ${his} boobs will be advantageous to ${him}.`);
			eventSlave.trust += 5;
			if (eventSlave.lactation > 0) {
				eventSlave.lactationDuration = 2;
				eventSlave.boobs -= eventSlave.boobsMilk;
				eventSlave.boobsMilk = 0;
			} else {
				r.push(induceLactation(eventSlave, 3));
			}
			r.toParagraph();
			return r.container();
		}

		function punishment() {
			const r = new SpacedTextAccumulator();
			r.push(`You announce that you're resolved to continue growing ${his} breasts, and they need to be stretched out to accommodate the growth. The statement is absurd, but ${he}'s experienced enough to know not to question it, and to be afraid. ${He}'s right to fear. You secure ${him} with ${his} ${hands} over ${his} head, using the wrist shackles placed high on the office walls for this purpose. Then you`);
			if (eventSlave.nipples === "inverted") {
				r.push(`cruelly pop ${his} inverted nipples out and`);
			}
			if (eventSlave.piercing.nipple.weight === 0) {
				r.push(`attach a clip to each of`);
				if (eventSlave.nipples === "inverted") {
					r.push(`them.`);
				} else {
					r.push(`${his} nipples.`);
				}
				r.push(`The clips aren't painful, not yet, but they're very robust, and the reason is immediately apparent to ${him}.`);
			} else if (eventSlave.piercing.nipple.weight === 1) {
				r.push(`remove ${his} nipple piercings, one by one, and replace them with big rings. Then you give each of them a tug to ensure it's ready to bear some serious pulling.`);
			} else {
				r.push(`give each of ${his} nipple rings a tug to ensure it's ready to bear some serious pulling.`);
			}
			r.push(`You hang a weight from each, eliciting a moan of pain. ${eventSlave.slaveName} struggles against the restraints that hold ${his} ${hands} up high, desperately trying to find a comfortable way to stand, but it's impossible and the motion sets ${his} udders swaying, making the weights pulling at ${his} nipples even more uncomfortable.`);
			switch (eventSlave.boobShape) {
				case "perky":
					r.push(`${His} perky tits do their best to retain their pointy shape despite the tugging.`);
					break;
				case "spherical":
					r.push(`${His} implant-stuffed tits retain their rounded shape despite the tugging.`);
					break;
				case "downward-facing":
					r.push(`The nipples that cap ${his} downward-facing udders are tugged even farther towards the ground.`);
					break;
				case "torpedo-shaped":
					r.push(`${His} torpedoes are long enough that the weights are a long way from ${his} chest, allowing them to tug ${his} nipples a long way down.`);
					break;
				case "wide-set":
					r.push(`${His} wide-set tits are dragged together for once as their nipples are tugged downward.`);
					break;
				case "saggy":
					r.push(`${His} poor, saggy boobs cause ${his} real trouble, letting the weights tug ${his} nipples quite a ways down.`);
					break;
				default:
					r.push(`${His} heavy breasts let the weights tug ${his} nipples down to face at the ground.`);
			}
			r.push(`The first time ${he} tries begging, you add another weight to each breast, which drives ${him} over the edge into open crying. You leave ${him} there for a while, letting anyone who comes into the office experience the sight of ${eventSlave.slaveName} alternately sobbing, trying not to sob because doing so jiggles ${his} boobs, and then sobbing again because ${his} boobs hurt.`);
			eventSlave.trust -= 5;
			r.toParagraph();
			return r.container();
		}
	}
};


code:
App.Events.RESSCageRelief = class RESSCageRelief 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 => s.balls > 0,
				s => s.scrotum > 0,
				s => s.chastityPenis === 1,
				s => s.energy > 50,
				s => s.energy < 95,
				s => s.devotion <= 95,
				s => s.devotion >= -20 || s.trust < -20,
				s => s.need > 0,
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let r = [];
		r.push(
			`You come face to face with`,
			contextualIntro(PC, eventSlave, true),
			`in a hallway of your penthouse, entirely by happenstance.`
		);
		if (canSee(eventSlave)) {
			r.push(`${His} ${App.Desc.eyesColor(eventSlave)} lock with yours, and ${he} stares at you dumbly for a long moment.`);
		} else {
			r.push(`Once ${he} regains ${his} footing after bumping into you, ${he} gazes towards you dumbly for a long moment.`);
		}
		r.push(`Then ${he} squares ${his}`);
		if (eventSlave.shoulders > 0) {
			r.push(`broad`);
		} else if (eventSlave.shoulders < 0) {
			r.push(`pretty`);
		} else {
			r.push(`feminine`);
		}
		r.push(`shoulders and bites ${his} lower lip, obviously doing ${his} best to think quickly. Right when you're about to reprimand ${him} for not greeting you properly, ${he} surprises you by throwing ${himself} abjectly on the ground in front of you`);
		if (eventSlave.belly >= 10000) {
			r.push(r.pop() + `, ${his} rear forced into the air by ${his} ${belly}`);
			if (eventSlave.bellyPreg >= 3000) {
				r.push(`pregnant`);
			} else {
				r.push(`distended`);
			}
			r.push(`belly`);
		}
		r.push(r.pop() + `.`);
		App.Events.addParagraph(node, r);

		r = [];
		if (!canTalk(eventSlave)) {
			r.push(`${He} uses gestures to apologize for ${his} rudeness, and then gets to ${his}`);
			if (hasBothLegs(eventSlave)) {
				r.push(`knees`);
			} else {
				r.push(`knee`);
			}
			r.push(`so ${he} can use ${his} hand`);
			if (hasBothArms(eventSlave)) {
				r.push(`hands`);
			} else {
				r.push(`hand`);
			}
			r.push(`to gesture more clearly. ${His}`);
			if (hasBothArms(eventSlave)) {
				r.push(`hands are`);
			} else {
				r.push(`hand is`);
			}
			r.push(`shaky as ${he} begs, making two false starts before unmistakably gesturing to ask you to cut ${his} balls off. Once ${he}`);
			if (canSee(eventSlave)) {
				r.push(`sees`);
			} else {
				r.push(`figures`);
			}
			r.push(`that you understand, ${he} begins to cry openly. ${He} gestures that ${he} can barely get off wearing ${his} chastity cage, that it hurts when ${he} does, and that ${he}'s constantly oppressed by the need for release. ${He} thinks that it would be easier to be soft all the time, so ${he} could climax without discomfort. ${He} begs hard, and promises to be a good little bitch.`);
		} else {
			r.push(
				Spoken(eventSlave, `"Please, ${Master},"`),
				`the prostrate slave ${say}s shakily, sounding like ${he}'s on the verge of tears.`,
				Spoken(eventSlave, `"P-please cut my balls off."`)
			);
			if (canHear(eventSlave)) {
				r.push(`Hearing ${himself} ${say} it, ${he}`);
			} else {
				r.push(`${He}`);
			}
			r.push(
				`begins to cry openly.`,
				Spoken(eventSlave, `"I c-can't t-take it anymore. I can b-barely get off wearing this cage on my dick, and when I d-do, it h-hurts,"`),
				`${he} sobs.`,
				Spoken(eventSlave, `"I need to g-g-get off s-so bad. Please, please, if I were soft all the time, I wouldn't get hard, so I could come wh-whenever."`),
				He
			);
			if (canSee(eventSlave)) {
				r.push(`looks up at`);
			} else {
				r.push(`angles ${his} head towards you`);
			}
			r.push(
				`you in supplication, tears streaking ${his} face.`,
				Spoken(eventSlave, `"Please, ${Master}! I'll be s-such a good little bitch, I promise!"`)
			);
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Help ${him} get off`, help),
			new App.Events.Result(`Cut ${his} balls off`, cut, eventSlave.anus === 0 && canDoAnal(eventSlave) ? `This option will take ${his} anal virginity` : null),
			canDoAnal(eventSlave)
				? new App.Events.Result(`Use ${his} cage to torture ${him}`, torture, (eventSlave.anus === 0) ? `This option will take ${his} anal virginity` : null)
				: new App.Events.Result(),
			((((eventSlave.fetish === "pregnancy" && PC.belly >= 5000) ||
					(eventSlave.fetish === "cumslut" && PC.balls >= 14) ||
					(eventSlave.fetish === "boobs" && PC.boobs >= 1400)) &&
				eventSlave.fetishKnown === 1) ||
			(((eventSlave.attrXX > 70 && eventSlave.attrXY < 50 && PC.title === 0 && PC.vagina !== -1 && PC.dick === 0) ||
					(eventSlave.attrXY > 70 && eventSlave.attrXX < 50 && PC.title === 1 && PC.vagina === 0 && PC.dick !== 0)) &&
				eventSlave.attrKnown === 1)
			)
				? new App.Events.Result(`Use your body to make ${his} cage feel even tighter`, tighter, (eventSlave.anus === 0) ? `This option will take ${his} anal virginity` : null)
				: new App.Events.Result()
		]);

		function help() {
			const frag = document.createDocumentFragment();
			r = [];
			r.push(`You take ${him} by the hand and pull ${him} to ${his} feet, and then kiss ${him}. ${He} knows that this means no, but melts into you anyway, accepting the comforting gesture for what it is. ${He}'s surprised when you do not break the kiss, but continues to make out with you compliantly. You take ${him} by the hands, intertwining your fingers with ${hers} and holding them down at your sides for a while before wrapping ${his} arms around you at your`);
			if (PC.belly >= 10000) {
				r.push(`heavily pregnant`);
			} else if (PC.belly >= 5000) {
				r.push(`gravid`);
			} else if (PC.belly >= 1500) {
				r.push(`swollen`);
			} else if (FutureSocieties.isActive('FSPhysicalIdealist')) {
				r.push(`muscular`);
			} else if (PC.title === 0) {
				r.push(`feminine`);
			} else {
				r.push(`masculine`);
			}
			r.push(`waist. Your hands, thus freed to grope ${him}, tenderly hold ${his} head and neck instead, cupping ${his}`);
			if (eventSlave.face > 95) {
				r.push(`gorgeous`);
			} else if (eventSlave.face >= -10) {
				r.push(`pretty`);
			} else {
				r.push(`homely`);
			}
			r.push(`jawline and making ${him} moan at the intimacy.`);
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`${He}'s completely forgotten ${his} troubles, and you see that it stays that way. You consider yourself something of an expert on human stimulation at this point, and you manage ${hers} expertly. (Admittedly, you're also cheating, using discreet scanning of ${his} vital signs to check on ${his} state of arousal.) Whenever ${he}'s in danger of achieving an erection, which would remind ${him} of ${his} chastity cage with a twinge of discomfort, you cool your makeout session off slightly, massaging ${him} capably instead of kissing ${him} deeply. After some time, ${he} shudders, to ${his} own complete surprise and to your unsurprised satisfaction. ${He}'s just done what in a normal sexual encounter would be considered premature ejaculation, since you wrought ${him} to such a subtle state of arousal that ${he} got off without really getting hard. ${He} can muster no coherent response, but hugs you convulsively, sobbing into your`);
			if (PC.boobs >= 1400) {
				r.push(`enormous`);
				if (PC.boobsImplant !== 0) {
					r.push(`fake`);
				}
				r.push(`breasts`);
			} else if (PC.boobs >= 1200) {
				r.push(`huge`);
				if (PC.boobsImplant !== 0) {
					r.push(`fake`);
				}
				r.push(`breasts`);
			} else if (PC.boobs >= 1000) {
				r.push(`big`);
				if (PC.boobsImplant !== 0) {
					r.push(`firm`);
				}
				r.push(`breasts`);
			} else if (PC.boobs >= 300) {
				r.push(`boobs`);
			} else if (FutureSocieties.isActive('FSPhysicalIdealist')) {
				r.push(`strong shoulder`);
			} else if (PC.title === 0) {
				r.push(`feminine shoulder`);
			} else {
				r.push(`masculine shoulder`);
			}
			r.push(`with gratitude and release.`);
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`The scans suggest ${his} discomfort will return in less than half an hour.`);
			eventSlave.trust += 4;
			eventSlave.need -= 5;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function cut() {
			r = [];
			r.push(`You agree, on the condition that ${he} be a good little bitch like ${he} promised. ${He} thanks you frantically, following you with mixed relief, gratitude, and deep terror as you lead ${him} to the surgery. It's a medically simple procedure, but ${he}'s retained for recovery for some time, a common precaution in your penthouse where the surgery affects an area that might be reinjured by sexual use without a short break for the curatives to take effect. When the medical equipment verifies that ${he} can be fucked without pain or danger to ${his} health, you order ${him} to come back up to your office. ${He} is a very good little bitch,`);
			if (canDoAnal(eventSlave)) {
				r.push(`taking`);
				if (PC.dick !== 0) {
					r.push(`a hard buttfuck`);
				} else {
					r.push(`a hard anal fingerfuck`);
				}
				r.push(`with apparent enthusiasm and a strong orgasm, though of course ${his} continued use of a chastity cage conceals almost all the effects.`);
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(`enduring all of your teasing without the slightest hint of an erection. Even though ${his} chastity blocks the use of ${his} ass, you still focus most of your attention on ${his} rear for the day the belt comes off.`);
			}
			r.push(`When ${he} goes to the bathroom afterward, however, you see ${him}`);
			if (canSee(eventSlave)) {
				r.push(`glance at ${himself} in the mirror, just once, and then <span class="trust dec">glance away again,</span>`);
			} else {
				r.push(`run ${his} hand under ${his} cock, just once, and then <span class="trust dec">quickly removing ${his} hand,</span>`);
			}
			r.push(`a tear leaking down ${his} cheek.`);
			eventSlave.balls = 0;
			eventSlave.scrotum = 0;
			eventSlave.trust -= 4;
			eventSlave.devotion += 4;
			surgeryDamage(eventSlave, 5);
			App.Events.refreshEventArt(eventSlave);
			return r;
		}

		function torture() {
			const frag = document.createDocumentFragment();
			r = [];
			r.push(`You make no reply at all, but walk around to stand behind the slave. ${He} knows ${he}'s fucked, and starts to shake with fear. You put a foot on ${his} ass and shove ${him} down`);
			if (eventSlave.belly >= 5000) {
				r.push(`so ${his} rear is pointed into the air again,`);
			} else {
				r.push(`to lie flat on the floor,`);
			}
			r.push(`and then straddle ${him}, shoving`);
			if (PC.dick !== 0) {
				r.push(`your`);
				if (PC.vagina !== -1) {
					r.push(`futa`);
				}
				r.push(`cock up ${his} butt.`);
			} else {
				r.push(`one more finger than ${he} can comfortably take up ${his} butt.`);
			}
			r.push(`${He} tries to beg some more, but you give ${him} a warning slap, and ${he} shuts up. Despite your roughness, ${he}'s so horny that ${he} starts to get hard. You can't see or feel this directly, of course, but it's easy to tell from ${his} desperate sobbing and involuntary writhing, and the lovely spasming of ${his} anal sphincter. ${His} tears dry up as ${he} builds towards a climax; orgasm might be an uncomfortable experience for ${him}, but it will buy ${him} a few minutes free of discomfort.`);
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`But ${he}'s to be disappointed. You`);
			if (PC.dick !== 0) {
				r.push(`worm a hand down between ${his} ass and your stomach, and shove a finger up inside ${him}, alongside your dick`);
				if (PC.vagina !== -1) {
					r.push(r.pop() + `, dexterously using the thumb of that hand to stroke your own pussy`);
				}
			} else {
				r.push(`use the hand that isn't fucking ${him} to pull one of ${his} arms around behind ${him} into a painful joint lock`);
			}
			r.push(r.pop() + `. The pain ruins ${his} building orgasm, and ${he} cries with frustration and despair as ${he} realizes that ${he} won't be getting off today. You force ${him} to experience this horrible near-release twice more, bringing ${him} to a terribly uncomfortable state of arousal and then using sudden pain to destroy any chance ${he} has of getting relief. All the wriggling and jerking around is good for you, though.`);
			eventSlave.trust -= 4;
			r.push(VCheck.Anal(eventSlave, 1));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function tighter() {
			const hands = hasBothArms(eventSlave) ? "hands" : "hand";
			r = [];
			r.push(`You order ${him} to pay close attention`);
			if (canSee(eventSlave)) {
				r.push(`and not look away`);
			}
			r.push(r.pop() + `.`);
			if (eventSlave.fetish === "pregnancy" && PC.belly >= 5000) {
				if (canSee(eventSlave)) {
					r.push(`${He} questions what you mean until you begin sensually swaying your`);
					if (PC.belly >= 100000) {
						r.push(`massive pregnancy`);
					} else if (PC.belly >= 60000) {
						r.push(`giant pregnancy`);
					} else if (PC.belly >= 15000) {
						r.push(`advanced pregnancy`);
					} else if (PC.belly >= 10000) {
						r.push(`big, pregnant belly`);
					} else {
						r.push(`pregnant belly`);
					}
					r.push(`and slowly stripping down. ${He} groans at the sight, ${his} dick rapidly hardening at the view of your motherly body. You make sure to play off ${his} pregnancy fetish in every way possible until the aroused slave is in tears from the pressure on ${his} cock.`);
				} else {
					r.push(`${He} questions what you mean until you grab ${his} head and push ${his} face against your`);
					if (PC.belly >= 100000) {
						r.push(`massive pregnancy.`);
					} else if (PC.belly >= 60000) {
						r.push(`giant pregnancy.`);
					} else if (PC.belly >= 15000) {
						r.push(`advanced pregnancy.`);
					} else if (PC.belly >= 10000) {
						r.push(`big, pregnant belly.`);
					} else {
						r.push(`pregnant belly.`);
					}
					r.push(`${He} tries to recoil, bringing a hand to your middle. You catch it and run it along your motherly curve to your popped navel. You trace ${his} hand around it as ${he} groans at the sensation, ${his} dick rapidly hardening at the feel of your motherly body. You make sure to play off ${his} pregnancy fetish in every way possible until the aroused slave is in tears from the pressure on ${his} cock.`);
				}
			} else if (eventSlave.fetish === "cumslut" && PC.balls >= 14) {
				if (canSee(eventSlave)) {
					r.push(`${He} questions what you mean until you begin sensually caressing your massive balls and slowly stripping down. You quickly bring yourself erect and start to jack off. ${He} groans at the sight, licking ${his} lips a the thought of your coming load as ${his} dick rapidly hardens. You tease yourself and hype up just how big and messy your orgasm will be, making ${him} quiver with painful arousal. You moan as you feel the distinct sensation of your coming ejaculation, the sheer amount of sperm moving through you takes some time to release. You hug your nuts, thrusting repeatedly until the wave of cum forces its way out of your throbbing dick. You sigh with relief, just to rub it in ${his} face.`);
				} else {
					r.push(`${He} questions what you mean until you strip down and pull ${his} face directly into your massive balls. ${He} tries to recoil, bringing ${his} ${hands} to the immense spheres. You catch them and use one to massage your nuts and encourage a nice big load for ${him} and the other the help jack you off. You can feel ${him} shaking from the pressure on ${his} dick. Not only do you paint ${him} with seed, but you sigh loudly with relief, just to rub it in.`);
				}
			} else if (eventSlave.fetish === "boobs" && PC.boobs >= 1400) {
				if (canSee(eventSlave)) {
					r.push(`${He} questions what you mean until you pull your arms back, forcing your enormous`);
					if (PC.boobsImplant !== 0) {
						r.push(`fake`);
					}
					r.push(`breasts to pop free of your top. ${He} groans at the sight, ${his} dick rapidly hardening at the view of your impressive rack. You make sure to play off ${his} tit fetish in every way possible until the aroused slave is in tears from the pressure on ${his} cock.`);
				} else {
					r.push(`${He} questions what you mean until you grab ${his} head and push ${his} face against your enormous`);
					if (PC.boobsImplant !== 0) {
						r.push(`fake`);
					}
					r.push(`breasts. ${He} tries to recoil, bringing ${his} ${hands} to your breasts. You continue burying ${his} face in your rack as ${he} begins to grope you. ${He} groans at the sensation, ${his} dick rapidly hardening at the feel of your lovely tits. You make sure to play off ${his} boob fetish in every way possible until the aroused slave is in tears from the pressure on ${his} cock.`);
				}
			} else if (eventSlave.attrXX > 70 && eventSlave.attrXY < 50 && PC.title === 0 && PC.vagina !== -1 && PC.dick === 0) {
				if (canSee(eventSlave)) {
					r.push(`${He} questions what you mean until you begin your strip tease. ${He} groans at the sight, ${his} dick rapidly hardening at the view of your tits and pussy. You know just how arousing ${he} finds the female form, and you play off that until the aroused slave is in tears from the pressure on ${his} cock.`);
				} else {
					r.push(`${He} questions what you mean until you grab ${his} head and push ${his} face into your pussy. ${He} tries to recoil, bringing ${his} ${hands} to your rear. You continue rubbing yourself against ${his} face as begins to grope you, enjoying your feminine features. ${He} groans as ${his} dick rapidly hardens at the feel of your curves and the`);
					if (canSmell(eventSlave)) {
						r.push(`scent of`);
					} else {
						r.push(`warmth from`);
					}
					r.push(`your arousal. You know just how arousing ${he} finds the female form, and you play off that until the aroused slave is in tears from the pressure on ${his} cock.`);
				}
			} else {
				if (canSee(eventSlave)) {
					r.push(`${He} questions what you mean until you begin your strip tease. ${He} groans at the sight, ${his} dick rapidly hardening at the view of your erection. You know just how arousing ${he} finds the male form, and you play off that until the aroused slave is in tears from the pressure on ${his} cock.`);
				} else {
					r.push(`${He} questions what you mean until you grab ${his} head and push ${his} face against your dick. ${He} tries to recoil, bringing ${his} ${hands} to your balls. You continue rubbing yourself against ${his} face as begins to fondle you, enjoying your masculine features. ${He} groans as ${his} dick rapidly hardens at the feel of your penis against your face and the`);
					if (canSmell(eventSlave)) {
						r.push(`scent of`);
					} else {
						r.push(`warmth from`);
					}
					r.push(`your arousal and precum. You know just how arousing ${he} finds the male form, and you play off that until the aroused slave is in tears from the pressure on ${his} cock.`);
				}
			}
			r.push(`You leave ${him} in a <span class="trust dec">worse state than ${he} started in,</span> as ${he}'s hornier than ever and still lacks any satisfying release. But that's ${his} problem, not yours.`);
			if (PC.belly >= 10000) {
				r.push(`Even when so heavily pregnant, it feels good to know you can still bring a dick to full attention.`);
			}
			eventSlave.trust -= 4;
			return r;
		}
	}
};

repo_name: Nithhogg/fc

license: mit


code:
App.Events.RESSCowMilking = class RESSCowMilking 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.lactation > 0,
				s => s.boobs > 800,
				s => s.nipples !== "fuckable",
				s => s.devotion > 20,
				s => s.trust > 20,
			]
		];
	}

	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);
		const PC = V.PC;

		App.Events.drawEventArt(node, eventSlave);

		const r = new SpacedTextAccumulator(node);
		r.push(
			`Heading back towards your office after seeing to a minor matter, you encounter`,
			contextualIntro(PC, eventSlave, true)
		);
		r.addToLast(`, heading for the penthouse milkers.`);
		if (eventSlave.assignment === Job.MILKED) {
			r.push(`Though it's ${his} job to be a human cow, ${he}'s allowed to roam as ${he} pleases when ${he}'s not getting milked, being fed, or otherwise occupied, and ${he} must have been elsewhere.`);
		} else {
			r.push(`${He}'s not assigned to be a human cow full time, since it's ${his} main focus to ${eventSlave.assignment}, but ${he}'s still obliged to visit the milkers regularly.`);
		}
		r.push(`In any case, ${he}'s obviously in desperate need of a milking. ${He}'s hurrying along with ${his}`);
		if (eventSlave.boobs > 4000) {
			r.push(`absurd`);
		} else {
			r.push(`heavy`);
		}
		r.push(`udders cradled in both arms, trying desperately to shield them from the uncomfortable motion of walking.`);
		r.toParagraph();

		if (canSee(eventSlave)) {
			r.push(`Seeing`);
		} else {
			r.push(`Noticing`);
		}
		r.push(`you, ${he} stops short and then winces as ${his} milk-filled breasts slosh to a stop, too.`);
		if (!canTalk(eventSlave)) {
			r.push(`${He} gestures a submissive greeting and then hesitates, catching ${his} lower lip cutely behind ${his} upper teeth. Then ${he} politely asks if you would milk ${him}.`);
		} else {
			r.push(
				Spoken(eventSlave, `"Hi ${Master},"`),
				`${he} ${say}s in greeting, and then hesitates, catching ${his} lower lip cutely behind ${his} upper teeth.`,
				Spoken(eventSlave, `"Um, would you please milk me?"`)
			);
		}
		if (eventSlave.fetish === "boobs") {
			r.push(`The shamelessly breast obsessed cow rarely misses an opportunity to ask for mammary intercourse, or anything remotely like it. Something as intimate as having you tug the ${milkFlavor(eventSlave)}milk from ${his} nipples would definitely qualify.`);
		} else {
			r.push(`${He}'s not exactly a breast fetishist, but milking is nonetheless a deeply important activity for ${him}, emotionally; the neurochemical effects of continual lactation are strong. ${He}'s so devoted to you that ${he} probably considers this a reassuringly intimate act.`);
		}

		r.toParagraph();
		App.Events.addResponses(node, [
			new App.Events.Result(`Treat ${him} right`, right),
			new App.Events.Result(`Treat ${him} like a cow`, cow, virginityWarning())
		]);

		function right() {
			const r = new SpacedTextAccumulator();
			r.push(`You give ${him} a reassuring swat across the rump and tell ${him} you'd be happy to. You head toward the utility area with the milkers, and ${he} follows eagerly behind you,`);
			if (eventSlave.fetish === "boobs") {
				r.push(`very ready to have you touch ${his} favorite part of ${his} body.`);
			} else {
				r.push(`pleased you'd do this for ${him} and very ready to relieve the pressure in ${his} tits.`);
			}
			r.push(`To ${his} surprise, you seat yourself on a stool and draw ${him} onto your lap rather than sitting ${him} at a milking machine. Reaching behind yourself, you give the ${SlaveTitle(eventSlave)} on your lap a broad bucket, and tell ${him} to hold it`);
			if (eventSlave.belly >= 5000) {
				r.push(`under ${his} breasts as best ${he} can, given ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnant`);
				} else {
					r.push(belly);
				}
				r.push(`belly.`);
			} else {
				r.push(`on ${his} lap.`);
			}
			r.push(`Then you reach around ${him} and take ${his}`);
			if (eventSlave.boobs > 6000) {
				r.push(`gargantuan`);
			} else if (eventSlave.boobs > 2000) {
				r.push(`huge`);
			} else {
				r.push(`heavy`);
			}
			r.push(`udders in your hands. ${He} gasps as ${he} realizes exactly how you plan to do this, and adjusts the bucket so it's below both of ${his} nipples at once.`);
			r.toParagraph();

			r.push(`${He} instinctually expects the rhythmic tugging that the milkers usually produce, but what ${he} gets is a methodical massage of ${his} breasts, both at once. They're large enough to be more than a single handful, so you go bit by bit, ensuring that no part of ${his} udders goes untouched. ${His} nipples start to gush ${milkFlavor(eventSlave)}milk without help after a few moments of this, and ${he} groans with relief and satisfaction as ${he} feels ${his} breasts begin to empty and enjoys the sensation of the massage.`);
			if (eventSlave.fetish === "boobs") {
				r.push(`${He} orgasms strongly soon after the first jet of ${milkFlavor(eventSlave)}milk, producing an especially thick squirt.`);
			}
			r.push(`After you're satisfied, you move your hands to ${his} nipples and milk ${him} like a cow, getting the last drops of ${milkFlavor(eventSlave)}milk out of ${him}`);
			if (eventSlave.fetish === "boobs") {
				r.push(`and producing a shuddering series of aftershocks.`);
			} else {
				r.push(`and bringing ${him} to a surprise orgasm.`);
			}
			r.push(`When ${he}'s done, ${he} leans back into you for a moment before setting the milk bucket down, a wordless gesture of considerable trust. It means a lot to ${him} that you would milk ${him} yourself.`);
			eventSlave.trust += 4;
			seX(eventSlave, "mammary", V.PC, "penetrative");
			eventSlave.lactationDuration = 2;
			eventSlave.boobs -= eventSlave.boobsMilk;
			eventSlave.boobsMilk = 0;
			r.toParagraph();
			return r.container();
		}

		function cow() {
			const hands = hasBothArms(eventSlave) ? "hands" : "hand";
			const r = new SpacedTextAccumulator();
			r.push(`You ask ${him} if ${he} really wants to be treated like a cow. ${He} nods, a bit hesitantly, sensing a certain danger but not really knowing what else to do. You lead ${him} to the utility area of the penthouse, where the milkers are, but stop ${him} when ${he} starts for one. Instead, you`);
			if (eventSlave.belly >= 300000) {
				r.push(`pull ${him} over ${his} ${belly} belly with ${his} udders hanging beneath ${his}`);
				if (eventSlave.boobs > 5000) {
					r.addToLast(`, the twin masses of female flesh almost reaching the floor`);
				}
				r.addToLast(`.`);
			} else {
				r.push(`fetch a pair of low stools, make ${him} kneel on one, and put ${his} ${hands} on the other, so ${he}'s`);
				if (hasAllLimbs(eventSlave)) {
					r.push(`on all fours`);
				} else {
					r.push(`bent over`);
				}
				r.push(`with ${his} udders hanging beneath ${him}`);
				if (eventSlave.boobs > 5000) {
					r.addToLast(`, the twin masses of female flesh almost reaching the floor`);
				}
				r.addToLast(`.`);
			}
			r.toParagraph();

			r.push(`You swing a bucket under ${his} nipples and milk ${him} by hand, as though ${he} were a cow. This isn't exactly what ${he} had in mind, but the feeling of your hands on ${his} nipples, tugging the streams of ${milkFlavor(eventSlave)}milk out of ${him} and into the bucket beneath`);
			if (eventSlave.fetish === "boobs") {
				r.push(`brings ${him} very close to orgasm.`);
			} else {
				r.push(`eventually relaxes ${him}.`);
			}
			r.push(`Seeing this, you muse aloud, as though to yourself, that a little farmyard bestiality wouldn't hurt, since there's no one here but you and a dairy cow. Pawing the cow's behind possessively, you finger ${him} aggressively before deciding on`);
			if (canDoVaginal(eventSlave) && V.PC.dick !== 0) {
				r.push(`a little cow pussy. You walk around behind ${him} and fuck ${him} hard enough to shake the drops of ${milkFlavor(eventSlave)}milk still clinging to ${his} sore nipples down and into the bucket below.`);
				r.push(VCheck.Vaginal(eventSlave, 1));
				r.push(`When you're finished, you step away, leaving your cum to run out of ${his} cunt and down ${his} thighs,`);
			} else if (canDoAnal(eventSlave) && V.PC.dick !== 0) {
				r.push(`some cow ass. You walk around behind ${him} and buttfuck ${his} hard enough to shake the drops of ${milkFlavor(eventSlave)}milk still clinging to ${his} sore nipples down and into the bucket below.`);
				r.push(VCheck.Anal(eventSlave, 1));
				r.push(`When you're finished, you step away, leaving your cum to drip out of ${his} gaped asshole,`);
			} else {
				r.push(`a little cow tongue action.`);
				if (V.PC.vagina !== -1) {
					r.push(`You stand up and grind your pussy against the cow's upturned mouth, humping ${his} face hard enough to shake the drops of ${milkFlavor(eventSlave)}milk still clinging to ${his} sore nipples down and into the bucket below.`);
					if (V.PC.dick !== 0) {
						r.push(`You pull away when you're about halfway there, only to shove your cock ${canPenetrateThroat(V.PC) ? `down ${his} throat` : `into ${his} mouth`} instead.`);
					}
					r.push(`When you're finished, you step away, leaving ${his} face thoroughly coated in girlcum`);
					if (V.PC.dick !== 0) {
						r.push(`and ${his} mouth full of your load`);
					}
					r.addToLast(`,`);
				} else { // do nothing
				}
				seX(eventSlave, "oral", V.PC, "penetrative");
			}
			r.push(`and ask ${him} what cows say. "Um, moo?" ${he} responds in a small,`);
			r.push(`<span class="devotion inc">submissive</span> voice.`);
			eventSlave.devotion += 4;
			seX(eventSlave, "mammary", V.PC, "penetrative");
			eventSlave.lactationDuration = 2;
			eventSlave.boobs -= eventSlave.boobsMilk;
			eventSlave.boobsMilk = 0;
			r.toParagraph();
			return r.container();
		}

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


code:
App.Events.RESSCumslutWhore = class RESSCumslutWhore extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.PC.dick !== 0,
		]; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				s => s.devotion > 20,
				s => s.fetishKnown === 1,
				s => [Job.PUBLIC, Job.WHORE, Job.GLORYHOLE].includes(s.assignment),
				s => s.fetish === "cumslut" || s.energy > 95, // Add condition !== "hates oral" ?
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let r = [];
		r.push(
			`Late at night,`,
			contextualIntro(V.PC, eventSlave, true),
			`returns to the living area of the penthouse. It's the end of ${his} day as a working girl, and despite being obviously tired, ${he}'s smiling with obvious sexual satiation. Every so often, ${he}'ll get a dreamy expression and lick ${his} lips. ${He} fetishizes cum to the extent that getting to eat a`
		);
		if (V.showInches === 2) {
			r.push(`mile`);
		} else {
			r.push(`kilometer`);
		}
		r.push(`of dick really satisfies ${him}.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`${He} must have at least a little room left`, room),
			new App.Events.Result(`Cum in ${his} mouth all night`, night),
			cumSlaves().length >= 5
				? new App.Events.Result(`Give ${him} access to the Dairy's cockmilk`, cockmilk)
				: new App.Events.Result()
		]);

		function room() {
			r = [];
			r.push(`You call ${eventSlave.slaveName} in and ask how full ${he} is. ${He} looks confused for a moment but soon figures out what you mean.`);
			if (!canTalk(eventSlave) && (!hasAnyArms(eventSlave))) {
				r.push(`As a mute amputee ${he} communicates poorly,`);
				if (eventSlave.inflationType === "cum") {
					if (eventSlave.bellyFluid >= 10000) {
						r.push(`but ${he} sticks out ${his} hugely bloated cum-belly and opens wide, ${his} intent clear.`);
					} else if (eventSlave.bellyFluid >= 5000) {
						r.push(`but ${he} wiggles around so ${his} cum-filled belly sloshes audibly before opening wide.`);
					} else {
						r.push(`but ${he} sticks out ${his} cum-swollen belly and opens wide, ${his} intent clear.`);
					}
				} else {
					r.push(`but ${he} does manage to look hungry.`);
				}
			} else if (!canTalk(eventSlave)) {
				if (eventSlave.inflationType === "cum") {
					if (eventSlave.bellyFluid >= 10000) {
						r.push(`${He} strokes ${his} hugely bloated cum-belly, makes a sign for "never," and then makes a sign for "enough."`);
					} else if (eventSlave.bellyFluid >= 5000) {
						r.push(`${He} jiggles ${his} cum-filled belly lewdly, makes a sign for "need," and then makes a sign for "more."`);
					} else {
						r.push(`${He} pats ${his} cum-swollen belly, makes a sign for "much," and then makes a sign for "room."`);
					}
				} else {
					r.push(`${He} gestures at ${his}`);
					if (eventSlave.belly >= 1500) {
						r.push(belly);
					}
					r.push(`stomach, makes a sign for "full," and then makes a sign for "never."`);
				}
			} else {
				if (eventSlave.inflationType === "cum") {
					if (eventSlave.bellyFluid >= 10000) {
						r.push(
							`${He} strokes ${his} hugely bloated cum-belly,`,
							Spoken(eventSlave, `"Oh ${Master}, I've had so much cum already today, but I can't help myself if you're offering me even more. I'll find some room in there,"`)
						);
					} else if (eventSlave.bellyFluid >= 5000) {
						r.push(
							`${He} jiggles ${his} cum-filled belly lewdly,`,
							Spoken(eventSlave, `"Oh ${Master}, there's so much already in me, but I feel so empty still."`)
						);
					} else {
						r.push(
							`${He} pats ${his} cum-swollen stomach,`,
							Spoken(eventSlave, `"Oh ${Master}, this little belly is nothing, I always have room for more,"`)
						);
					}
				} else {
					r.push(Spoken(eventSlave, `"Oh ${Master}, I'll never be full again,"`));
				}
				r.push(`${he} ${say}s`);
				if (eventSlave.lips > 70) {
					r.push(`past ${his} enormous lips`);
				} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
					r.push(`past ${his} mouthful of piercings`);
				}
				r.push(r.pop() + `.`);
			}
			r.push(`${He} comes eagerly over and sucks you off with enthusiasm. As you cum, ${he} orgasms quickly at the`);
			if (canTaste(eventSlave)) {
				r.push(`taste`);
			} else {
				r.push(`feeling`);
			}
			r.push(`of the stuff hitting ${his}`);
			if (V.PC.balls >= 10) {
				r.push(`mouth, even as your load keeps flowing into ${his}`);
				if (V.PC.balls >= 30) {
					r.push(`gullet, steadily bloating the poor ${girl}.`);
				} else {
					r.push(`gullet.`);
				}
			} else {
				r.push(`mouth.`);
			}
			if (!canTalk(eventSlave)) {
				r.push(`${He}`);
				if (!canTaste(eventSlave)) {
					r.push(`(rather ironically)`);
				}
				r.push(`signs that you taste great.`);
			} else {
				r.push(
					Spoken(eventSlave, `"${Master}, you taste great,"`),
					`${he}`
				);
				if (!canTaste(eventSlave)) {
					r.push(`(rather ironically)`);
				}
				r.push(`purrs.`);
			}
			r.push(`<span class="trust inc">${He} has become more trusting</span> in your willingness to give ${him} what ${he} wants.`);
			eventSlave.trust += 4;
			seX(eventSlave, "oral", V.PC, "penetrative");
			return r;
		}

		function night() {
			r = [];
			r.push(`You've had a busy day, so you've been unusually remiss in fucking your slaves. Naturally, this means you'll be spending the evening wandering around your home using your living sexual appliances. ${eventSlave.slaveName} is instructed to follow you and assist. ${He}'s tired, so`);
			if (!hasAnyArms(eventSlave)) {
				r.push(`you bring`);
				if (isAmputee(eventSlave)) {
					r.push(`${his} limbless torso`);
				} else {
					r.push(`${him}`);
				}
				r.push(`along as a cum receptacle. Whenever you're about to finish in another slave, you pull out and fill ${his} mouth instead.`);
			} else {
				r.push(`you let ${him} tag meekly along, masturbating gently as you use other slaves or just watching lazily. But whenever you're on the point of coming, you switch to ${his} mouth and let ${him} finish you with a few sucks and pumps of ${his} fatigued ${hands}.`);
			}
			r.push(`By the time you put the exhausted ${eventSlave.slaveName} to bed ${he}'s in a haze of cum-induced pleasure. <span class="devotion inc">${He} has become more submissive to you.</span>`);
			eventSlave.devotion += 4;
			seX(eventSlave, "oral", V.PC, "penetrative", 5);
			return r;
		}

		function cockmilk() {
			eventSlave.devotion += 10;
			cashX(random(500, 1000), "event", eventSlave);
			return `You let ${him} know you have a sexual accessory for ${him} to use. This isn't too unusual, so ${he} comes to your office without much anticipation. ${He} doesn't understand why you have an enormous sealed canister of fresh cum on your desk, but when you explain that it's ${hers} to play with on the job, ${he} starts to bounce with excitement. Not all of ${his} customers are interested in cum play, but quite a few are, and ${he} spends almost as much time cleaning up the gorgeous messes that get made as ${he} does making them. It's a valuable and profitable whore who looks forward to ${his} next customer.`;
		}
	}
};


code:
App.Events.RESSDesperateNull = class RESSDesperateNull 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.dick === 0,
				s => s.vagina === -1,
				canDoAnal,
				s => s.energy > 20,
				s => s.devotion >= -50,
				s => s.fetish !== "buttslut" || s.fetishStrength <= 20,
				s => s.nipples !== "fuckable",
				s => s.need > 0,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, his, him, himself
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);
		const arms = hasBothArms(eventSlave) ? "arms" : "arm";
		const PC = V.PC;

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

		const r = new SpacedTextAccumulator(node);
		r.push(
			`You're inspecting`,
			contextualIntro(PC, eventSlave, true)
		);
		r.addToLast(`, and ${he}'s an unhappy little null today.`);
		if (eventSlave.devotion > 50) {
			r.push(`${He}'s devoted to you, so that's not the problem;`);
		} else if (eventSlave.devotion > 20) {
			r.push(`${He} accepts ${his} place, so that's not the problem;`);
		} else if (eventSlave.devotion >= -50) {
			r.push(`${He}'s not being especially defiant right now;`);
		} else {
			r.push(`It's not ${his} hatred of you;`);
		}
		r.push(`it's that ${he}'s experiencing extreme sexual frustration. It's not obvious, despite ${his} nakedness. ${He} has no`);
		if (V.seeDicks !== 0) {
			r.push(`cock to get hard`);
		}
		if (V.seeDicks !== 100) {
			if (V.seeDicks !== 0) {
				r.push(`or`);
			}
			r.push(`pussy to get wet`);
		}
		r.push(`to advertise ${his} uncomfortable state. Most slaves have obvious visual cues like that to do their sexual begging for them, but not ${him}. All ${he}'s got to show how pent up ${he} is is the stiffness of ${his} ${eventSlave.nipples} nipples, goosebumps all over ${his} areolae despite the warmth of your office, and a tiny bead of clear fluid at the little hole`);
		if (eventSlave.scrotum > 0) {
			r.push(`above ${his} lonely, abandoned ballsack.`);
		} else if (eventSlave.genes === "XX") {
			r.push(`where ${his} pussy used to be.`);
		} else {
			r.push(`where the base of ${his} penis used to be.`);
		}
		if (["whore", "serve the public", "work in the brothel", "serve in the club"].includes(eventSlave.assignment)) {
			r.push(`It's not like ${his} ass isn't sold to hundreds of different customers, but ${he} apparently isn't enough of a buttslut to get much sexual satisfaction from it.`);
		}
		r.toParagraph();
		r.push(
			`${He} does ${his} very best to get through the inspection without disgrace, hugging ${himself} uncomfortably and shivering. You let ${him} suffer through it, deferring the delicious choice about how to take advantage of ${his} situation until the inspection is done. ${He} breaks before then, though, suddenly falling to ${his} knees and starting to cry.`,
			Spoken(eventSlave, `"Please, ${Master},"`),
			`${he} begs piteously.`,
			Spoken(eventSlave, `Please help me! I can't t-take it! It's s-so f-fucking f-frustrating,"`),
			`${he} moans, trailing off, clasping ${his} hands in supplication as ${he}`);
		if (canSee(eventSlave)) {
			r.push(`looks up at`);
		} else {
			r.push(`faces`);
		}
		r.push(`you desperately.`);

		r.toParagraph();
		App.Events.addResponses(node, [
			new App.Events.Result(`Take pity`, pity, eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null),
			new App.Events.Result(`Assrape ${him}`, assrape, eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null),
			new App.Events.Result(`Ignore ${his} pleas`, ignore, eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null)
		]);

		function pity() {
			const r = new SpacedTextAccumulator();
			r.push(`Deciding to take pity, you stand up`);
			if (V.PC.dick === 0) {
				r.addToLast(`, pull on a strap-on,`);
			}
			r.push(`and approach ${his} crumpled, weeping form. You reach down and take ${his} clasped hands in yours, pulling ${him} gently`);
			if (hasBothLegs(eventSlave)) {
				r.push(`to ${his} feet`);
			} else {
				r.push(`upright`);
			}
			r.push(`and giving ${him} a quick cuddle. You make it just long enough to reassure ${him} that you care for ${him}, but not long enough to frustrate ${him} even further; ${his} extreme horniness is only sharpened by the hug and the way it traps ${his} ${arms} between ${his}`);
			if (eventSlave.boobsImplant/eventSlave.boobs >= .60) {
				r.push(`fake boobs`);
			} else if (eventSlave.boobs > 4000) {
				r.push(`monstrous udders`);
			} else if (eventSlave.boobs > 800) {
				r.push(`big soft breasts`);
			} else if (eventSlave.boobs > 300) {
				r.push(`tits`);
			} else {
				r.push(`flat chest`);
			}
			r.push(`and your`);
			if (V.PC.boobs >= 300) {
				r.push(`bosom.`);
			} else if (V.PC.title === 0) {
				r.push(`chest.`);
			} else {
				r.push(`hard pectorals.`);
			}
			r.push(`${He} sniffles, trying to restrain ${his} hopes. You push ${him} backwards toward the couch, giving ${him} a kiss to really bring ${him} to the height of anticipation before laying ${him} down and sliding your`);
			if (V.PC.dick !== 0) {
				r.push(`cock`);
			} else {
				r.push(`strap-on`);
			}
			if (eventSlave.anus > 1) {
				r.push(`inside ${his} soft asshole.`);
			} else {
				r.push(`up ${his} tight little butt.`);
			}
			if (eventSlave.prostate !== 0) {
				r.push(`The instant`);
				if (V.PC.dick !== 0) {
					r.push(`your hard dickhead`);
				} else {
					r.push(`the hard tip of your phallus`);
				}
				r.push(`presses against ${his} prostate, ${he} orgasms, squirting`);
				if (eventSlave.balls === 0) {
					r.push(`translucent fluid.`);
				} else {
					r.push(`cum.`);
				}
				r.push(`${He} looks like ${he} wants to say something, or maybe even apologize, so you shush ${him} with a gentle hand and pull out, letting the fluid run down`);
				if (eventSlave.scrotum > 0) {
					r.push(`${his} soft scrotum`);
				} else {
					r.push(`the pretty skin between ${his} cumhole and ${his} anus`);
				}
				r.push(`until it glazes ${his} asspussy. You use`);
				if (V.PC.dick !== 0) {
					r.push(`the tip of your cock`);
				} else {
					r.push(`the head of the strap-on`);
				}
				r.push(`to massage the fluid into the hole before penetrating it again with the extra lubrication.`);
				eventSlave.need -= 5;
			} else {
				r.push(`Without a prostate or a strong anal fetish, ${he}'ll have trouble climaxing to nothing but buttsex, so you make sure to tend to every erogenous zone ${he} has left. You guide one of ${his} hands down so ${he} can rub`);
				if (eventSlave.scrotum > 0) {
					r.push(`${his} scrotum,`);
				} else {
					r.push(`the skin between ${his} legs,`);
				}
				r.push(`and make ${his} stimulate one of ${his} nipples with the other. You`);
				if (eventSlave.nipples !== "fuckable") {
					r.push(`pinch and rub`);
				} else {
					r.push(`finger`);
				}
				r.push(`${his} other nipple, and push two fingers of your other hand into ${his} mouth, making ${him} suck them. So completely stimulated, ${he} finally manages to orgasm.`);
			}
			r.push(`You make love to ${him} until ${he}'s satisfied, and then carry ${him} to the shower to wash ${him} off. Under the warm water, ${he} stays trustingly close to your naked body, without even thinking about it.`);
			eventSlave.trust += 5;
			r.push(VCheck.Anal(eventSlave, 1));
			r.toParagraph();
			return r.container();
		}

		function assrape() {
			const r = new SpacedTextAccumulator();
			r.push(`${He}'s an anal sex toy, and you decide to use ${him} like one. You walk over, reach down, and jerk ${him}`);
			if (hasBothLegs(eventSlave)) {
				r.push(`to ${his} feet.`);
			} else {
				r.push(`off the ground.`);
			}
			r.push(`You don't hurt ${him}, not yet, but the violence of the motion forces a sob out of ${him}. ${He}`);
			if (canSee(eventSlave)) {
				r.push(`sees the open lust in your eyes`);
			} else {
				r.push(`feels the lust lingering about you`);
			}
			r.push(`and is afraid. ${He}'s not wrong to be so; you spin ${him} roughly around and use one arm to pin ${his} upper body mercilessly in place while you use your other hand to`);
			if (eventSlave.anus > 2) {
				r.push(`manhandle your`);
				if (V.PC.dick !== 0) {
					r.push(`cock`);
				} else {
					r.push(`strap-on`);
				}
				r.push(`up ${his} roomy ass. It's disappointingly easy, and ${he} takes it without a struggle, so you reach around ${his} front, down between ${his} legs, and jam a couple of fingers up there, too.`);
			} else if (eventSlave.anus > 1) {
				r.push(`shove your`);
				if (V.PC.dick !== 0) {
					r.push(`cock`);
				} else {
					r.push(`strap-on`);
				}
				r.push(`up ${his} anus. ${He}'s taken hard anal before, but the angle isn't particularly comfortable, you didn't bother with lube, and you begin to rape ${him} vigorously without any warning.`);
			} else {
				r.push(`force your`);
				if (V.PC.dick !== 0) {
					r.push(`cock`);
				} else {
					r.push(`strap-on`);
				}
				r.push(`up ${his} spasming anus. ${He}'d struggle to take it in a position far more comfortable for anal than standing straight up, and you don't even bother to take it slow.`);
			}
			r.push(
				Spoken(eventSlave, `"${Master}, that hurts!"`),
				`${he} screams, crying even harder.`,
				Spoken(eventSlave, `"Ow, it h-hurts! Please take it out, ow, ow,"`),
				`${he} shrieks, and then degenerates into nonverbal caterwauling.`
			);
			if (eventSlave.prostate !== 0) {
				r.push(
					`Then, without any warning, ${he} orgasms. ${He}'s so pent up that the prostate stimulation overpowers the pain. ${He} shudders, gasps, and then moans,`,
					Spoken(eventSlave, `"I'm s-such a whore, ${Master},"`),
					`in such a tone of utter submission and dejection that you climax too. Then you drop ${him}, letting ${his} slide off you, and go back to your work, leaving ${him} to clean ${himself} and the floor.`
				);
				eventSlave.devotion += 5;
				eventSlave.need -= 5;
			} else {
				r.push(`${He} knows ${he} shouldn't wriggle, that fighting will make it even worse for ${him}, but you assrape ${him} so mercilessly that ${his} body revolts, trying to escape the invading phallus. You have ${his} ${arms} pinioned securely, so all this struggling does is add to the fun. When you're done, you`);
				if (V.PC.dick !== 0) {
					r.push(`fill ${his} insides with your cum and`);
				}
				r.push(
					`drop ${him}, ordering ${him} to clean ${himself} up.`,
					Spoken(eventSlave, `"Y-yes ${Master},"`),
					`${he} sniffles <span class="trust dec">fearfully,</span> and hurries to obey, a little bent from ${his} burning backdoor. Only later does ${he} remember that ${he} still hasn't gotten off.`
				);
				eventSlave.trust -= 5;
			}
			r.push(VCheck.Anal(eventSlave, 1));
			r.toParagraph();
			return r.container();
		}

		function ignore() {
			const r = new SpacedTextAccumulator();
			r.push(`You order ${him} to take the next pose in the inspection series, as though ${he} hadn't broken down at all. There's such understated menace in your`);
			if (canHear(eventSlave)) {
				r.push(`voice`);
			} else {
				r.push(`words`);
			}
			r.push(`that ${he}`);
			if (hasBothLegs(eventSlave)) {
				r.push(`gets right back to ${his} feet`);
			} else {
				r.push(`stands right back up`);
			}
			if (hasAnyArms(eventSlave)) {
				r.addToLast(`, using the back of ${his} ${eventSlave.skin} hand to cuff away ${his} tears`);
			}
			r.addToLast(".");
			r.push(
				Spoken(eventSlave, `"Y-yes, ${Master}," ${he} sniffles, trying to get ${himself} under control, and then shudders.`));
			if (V.dairy > 0 && V.dairyStimulatorsSetting === 2) {
				r.push(`It's never hard to see the exact moment when your slaves remind themselves that you run an industrial Dairy, and that if they displease you, they may find themselves hydrated for milk production from fifty kilogram udders by constant machine rape down their throats and up their asses`);
				if (isFertile(eventSlave, true) && V.dairyPregSetting > 0) {
					r.push(`as their wombs steadily fill with life`);
				}
				r.addToLast(`.`);
			} else if (V.arcade > 0) {
				r.push(`It's never hard to see the exact moment when your slaves remind themselves that you own an Arcade, and that if they displease you, they may find themselves immured there and condemned to a universe in which the only sensory stimulation is penetration.`);
			} else if (eventSlave.trust < -20) {
				r.push(`${He}'s no stranger to being punished, and obviously wants to avoid another round.`);
			} else {
				r.push(`${He} knows that there are slaves who are treated much more harshly than ${he} is, and doesn't want to become one of them.`);
			}
			r.push(`${He} staggers out of your office after ${his} inspection, doing ${his} best to ignore ${his} condition. Over the coming week, ${he}'s continually tortured by ${his} libido, cruelly entombed as it is in a body which can no longer give it meaningful relief. ${He} manages to keep it together, mostly, and ${his} sex drive diminishes noticeably.`);
			eventSlave.energy -= 5;
			r.toParagraph();
			return r.container();
		}
	}
};