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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				hasAnyArms,
				hasAnyLegs,
				s => s.assignment !== Job.QUARTER,
				s => s.devotion > 20,
				s => s.boobs > 2000,
			]
		];
	}

	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 arms = hasBothArms(eventSlave) ? "arms" : "arm";
		const PC = V.PC;

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

		const r = new SpacedTextAccumulator(node);
		r.push(
			`You pass through your slaves' living area as some of them are starting their days.`,
			contextualIntro(PC, eventSlave, true, false, true),
			`is one of them, and ${he}'s just`,
		);
		if (eventSlave.rules.living === "spare") {
			r.push(`crawled out of ${his} spartan bedroll.`);
		} else if (eventSlave.rules.living === "normal") {
			r.push(`gotten out of ${his} neat little cot.`);
		} else if (eventSlave.relationship >= 4) {
			const relation = getSlave(eventSlave.relationshipTarget);
			const {his2, girl2, wife2} = getPronouns(relation).appendSuffix("2");
			r.push(`climbed out of bed. ${eventSlave.slaveName}'s`);
			if (eventSlave.relationship === 5) {
				r.push(wife2);
			} else {
				r.push(`${girl2}friend`);
			}
			r.push(`${relation.slaveName} is still asleep in it, and the shape of ${his2}`);
			if (relation.belly >= 120000) {
				r.push(`${belly} belly is`);
			} else if (relation.boobs > 25000) {
				r.push(`immense`);
				if (relation.boobsImplant/relation.boobs >= .60) {
					r.push(`fake`);
				}
				r.push(`breasts are`);
			} else if (relation.dick > 10) {
				r.push(`monster dick is`);
			} else if (relation.balls > 50) {
				r.push(`immense testicles are`);
			} else if (relation.weight > 130) {
				r.push(`gigantic body is`);
			} else if (relation.butt > 12) {
				r.push(`inhuman ass is`);
			} else if (relation.weight > 96) {
				r.push(`fat form is`);
			} else if (relation.hips > 2) {
				r.push(`inhuman hips are`);
			} else if (relation.dick > 6) {
				r.push(`huge soft cock is`);
			} else if (canAchieveErection(relation)) {
				r.push(`half-erect dick is`);
			} else if (relation.belly >= 5000) {
				r.push(`big`);
				if (relation.bellyPreg >= 3000) {
					r.push(`pregnant`);
				}
				r.push(`belly is`);
			} else if (relation.nipples === "huge") {
				r.push(`huge nipples are`);
			} else if (relation.boobs > 5000) {
				r.push(`monstrous`);
				if (relation.boobsImplant/relation.boobs >= .60) {
					r.push(`fake`);
				}
				r.push(`breasts are`);
			} else if (relation.boobs > 2000) {
				r.push(`huge`);
				if (relation.boobsImplant/relation.boobs >= .60) {
					r.push(`fake`);
				}
				r.push(`tits are`);
			} else if (relation.butt > 5) {
				r.push(`monstrous ass is`);
			} else if (relation.balls > 8) {
				r.push(`giant balls are`);
			} else if (relation.weight > 95) {
				r.push(`chubby body is`);
			} else if (relation.muscles > 30) {
				r.push(`muscular body is`);
			} else if (relation.weight > 10) {
				r.push(`chubby belly is`);
			} else if (relation.weight >= -10) {
				r.push(`feminine form is`);
			} else {
				r.push(`thin body is`);
			}
			r.push(`clearly visible under the sheet. They sleep naked, of course.)`);
		} else {
			r.push(`climbed out of ${his} comfortable bed.`);
		}
		r.push(`It's time for ${him} to start another strenuous day of carrying the weight of ${his}`);
		if (eventSlave.boobs > 45000) {
			r.push(`arm-filling`);
		} else if (eventSlave.boobs > 25000) {
			r.push(`back-breaking`);
		} else if (eventSlave.boobs > 10000) {
			r.push(`disproportionate`);
		} else if (eventSlave.boobs > 5000) {
			r.push(`massive`);
		} else {
			r.push(`heavy`);
		}
		if (eventSlave.boobsImplant/eventSlave.boobs >= .60) {
			r.push(`implants.`);
		} else if (eventSlave.lactation) {
			r.push(`milk-bearing udders.`);
		} else if (eventSlave.boobsImplant > 0) {
			r.push(`breasts.`);
		} else {
			r.push(`natural breasts.`);
		}
		r.push(`${He} can manage it`);
		if (eventSlave.muscles <= 10) {
			r.push(`only with difficulty, since ${he}'s not in good shape.`);
		} else if (eventSlave.physicalAge >= 18 && eventSlave.boobs <= 30000+(eventSlave.muscles*100)) {
			r.push(`with ease, since ${he}'s in good shape.`);
		} else if (eventSlave.physicalAge >= 13 && eventSlave.boobs <= 20000+(eventSlave.muscles*50)) {
			r.push(`with ease, since ${he}'s in good shape.`);
		} else if (eventSlave.physicalAge >= 4 && eventSlave.boobs <= 10000+(eventSlave.muscles*20)) {
			r.push(`with ease, since ${he}'s in good shape.`);
		} else if (eventSlave.physicalAge === 3 && eventSlave.boobs <= 5000+(eventSlave.muscles*10)) {
			r.push(`with ease, since ${he}'s in good shape.`);
		} else {
			r.push(`with some difficulty, since they're so big.`);
		}
		r.push(`Slaves with endowments like ${hers} are trained to stretch, and since ${he}'s a good ${SlaveTitle(eventSlave)}, ${he} does it as soon as ${he} gets up. ${He}'s doing it now.`);
		r.toParagraph();
		r.push(`${He} kneels with ${his} legs together, and then sits back, ${his}`);
		if (eventSlave.buttImplant/eventSlave.butt >= .5) {
			r.push(`fake ass not changing shape at all as it rests on ${his} heels.`);
		} else if (eventSlave.butt > 12) {
			r.push(`endless assflesh devouring ${his} legs completely.`);
		} else if (eventSlave.butt > 6) {
			r.push(`mass of assflesh extinguishing ${his} feet completely.`);
		} else if (eventSlave.butt > 2) {
			r.push(`big butt resting heavily on ${his} heels.`);
		} else {
			r.push(`cute butt resting lightly on ${his} heels.`);
		}
		r.push(`Then ${he} reaches ${his} ${arms} back, and leans back, as far as ${he} can go. ${He} arches ${his} spine, closing ${his} eyes voluptuously as ${he} enjoys the stretch in ${his} lower back. The pose thrusts ${his} chest up and out,`);
		if (eventSlave.boobShape === "spherical") {
			r.push(`but ${his} implants stretch ${his} skin so tight that they stay tacked to ${his} chest, right where they are. ${He} looks like a stereotypical silicone queen, arching ${his} back and sticking ${his} fake cans out.`);
		} else if ((eventSlave.boobsImplant/eventSlave.boobs) >= .50) {
			r.push(`making ${his} implant-filled tits stick out even farther than they usually do. ${He} looks like a stereotypical silicone queen, arching ${his} back and sticking ${his} fake cans out.`);
		} else if (eventSlave.boobShape === "perky") {
			r.push(`making ${his} spectacularly perky breasts point their ${eventSlave.nipples} nipples straight up at the ceiling. It's incredible that they've managed to maintain their youthful shape despite their great weight.`);
		} else if (eventSlave.boobShape === "downward-facing") {
			r.push(`showing off the huge area of soft skin above ${his} ${eventSlave.nipples} nipples. Since these face somewhat downward, ${his} swell of bosom above them is a pair of uninterrupted mounds of ${eventSlave.skin} breast.`);
		} else if (eventSlave.boobShape === "torpedo-shaped") {
			r.push(`making ${his} absurd torpedo-shaped tits stick out even farther than they usually do. ${His} ${eventSlave.nipples} nipples point out so far that it's difficult to see how such delectably soft flesh can support its shape.`);
		} else if (eventSlave.boobShape === "wide-set") {
			r.push(`making ${his} wide-set breasts spread even farther, to hang almost to ${his} armpits on either side. It's not conventionally attractive, but ${he}'s certainly very well endowed.`);
		} else if (eventSlave.boobShape === "saggy") {
			r.push(`emphasizing how saggy ${his} tits are. They`);
			if (eventSlave.belly >= 10000) {
				r.push(`rest heavily atop ${his} tautly`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`gravid`);
				} else {
					r.push(`distended`);
				}
				if (eventSlave.belly >= 1500) {
					r.push(belly);
				}
				r.push(`belly.`);
			} else {
				r.push(`hang down far enough to obscure the top of ${his} ${belly} belly.`);
			}
			r.push(`It's not conventionally attractive, but ${he}'s certainly very well endowed.`);
		} else {
			r.push(`making ${his} beautiful breasts stick out nicely. They maintain their perfect shape surprisingly well for being so enormous, and ${his} ${eventSlave.nipples} nipples`);
			if (eventSlave.nipples !== "fuckable") {
				r.push(`stick out at you prominently.`);
			} else {
				r.push(`just beg to be penetrated.`);
			}
		}
		r.push(`${He} sits back up and rubs ${his} hands down`);
		if (eventSlave.belly >= 300000) {
			r.push(`the rear of ${his} swollen sides,`);
		} else {
			r.push(`${his} lower back on either side,`);
		}
		r.push(`sighing contentedly at the feeling.`);
		if (canSee(eventSlave)) {
			r.push(`${He} opens ${his} eyes, and sees you looking at ${him}.`);
		} else {
			r.push(`${His} ears perk up as ${he} notices your presence.`);
		}
		if (eventSlave.energy > 80) {
			if (canTalk(eventSlave)) {
				r.push(Spoken(eventSlave, `"Hi ${Master},"`), `${he} ${say}s flirtatiously,`);
			} else {
				r.push(`${He} waves at you flirtatiously`);
			}
			r.push(`and hugs ${himself} under ${his} boobs, presenting them even more obviously. ${His} strong sex drive is awake, too. ${He}`);
			if (canSee(eventSlave)) {
				r.push(`looks at you speculatively,`);
			} else if (canHear(eventSlave)) {
				r.push(`listens closely,`);
			} else {
				r.push(`waits patiently,`);
			}
			r.push(`obviously hoping to get fucked.`);
		} else if (eventSlave.trust > 20) {
			if (canTalk(eventSlave)) {
				r.push(Spoken(eventSlave, `"Hi ${Master},"`), `${he} ${say}s cutely,`);
			} else {
				r.push(`${He} waves at you cutely`);
			}
			r.push(`and gives ${his} torso a flirty little shake from side to side, making ${his} boobs move interestingly. ${He}`);
			if (canSee(eventSlave)) {
				r.push(`watches you trustingly,`);
			} else {
				r.push(`calmly faces you,`);
			}
			r.push(`obviously wondering if you'd like to enjoy ${his} body.`);
		} else {
			if (canTalk(eventSlave)) {
				r.push(Spoken(eventSlave, `"Good morning, ${Master},"`), `${he} ${say}s properly,`);
			} else {
				r.push(`${He} mutely bows ${his} head towards you, acknowledging your presence and`);
			}
			r.push(`doing ${his} best to be good. ${He}`);
			if (canSee(eventSlave)) {
				r.push(`watches you closely,`);
			} else if (canHear(eventSlave)) {
				r.push(`listens closely,`);
			} else {
				r.push(`waits patiently,`);
			}
			r.push(`ready to obey any command you might give ${him}.`);
		}

		r.toParagraph();
		App.Events.addResponses(node, [
			new App.Events.Result(`Fuck ${his} boobs`, boobs),
			new App.Events.Result(`Hurt ${him}`, hurt),
			(eventSlave.lactation > 0)
				? new App.Events.Result(`Drink from ${him}`, drink)
				: new App.Events.Result()
		]);

		function boobs() {
			const frag = document.createDocumentFragment();
			const r = new SpacedTextAccumulator(frag);
			r.push(`When ${he}`);
			if (canSee(eventSlave)) {
				r.push(`sees you`);
				if (V.PC.dick !== 0) {
					r.push(`get your dick out,`);
				} else {
					r.push(`approaching ${him} with sapphic lust in your eyes,`);
				}
			} else if (canHear(eventSlave)) {
				r.push(`hears you`);
				if (V.PC.dick !== 0) {
					r.push(`get your dick out,`);
				} else {
					r.push(`hungrily approach,`);
				}
			} else {
				r.push(`feels your fingertips brush against ${his} nipples,`);
			}
			r.push(`${he}`);
			if (eventSlave.energy > 80) {
				r.push(`grins with anticipation,`);
			} else if (eventSlave.trust > 20) {
				r.push(`smiles appealingly,`);
			} else {
				r.push(`does ${his} best to look submissive,`);
			}
			r.push(`and offers you ${his} chest.`);
			if (V.PC.dick !== 0) {
				if (eventSlave.belly >= 300000) {
					r.push(`You have to straddle ${his} ${belly} stomach to get close enough, but ${his} tantalizing breasts are worth the strain.`);
				}
				r.push(`You collect some lubrication for it by sticking your dick in ${his} mouth.`);
				if (eventSlave.skill.oral >= 100) {
					r.push(`${He} swallows you to your base, and is such a skilled cocksucker that ${he} salivates at will, doing ${his} best to get you`);
				} else {
					r.push(`${He} does ${his} best to swallow you as deeply as ${he} can manage, and get your cock`);
				}
				r.push(`nice and slick. You pull your member out of ${his} industriously sucking mouth with a pop, and slide it between ${his} warm breasts. ${He} promptly grabs them and squeezes them together, forming a nice channel for you to fuck. As you start pounding away, ${he} does ${his} best to crane ${his} head down and suckle your dickhead whenever it appears between ${his} boobs, adding more lubrication from ${his} lewdly wet mouth. ${He} knows when you're about to climax, and makes no attempt to avoid it, opening ${his} mouth wide to accept your load. ${He} catches most of it, but your generous ejaculation spatters ${his} face with pearly decoration.`);
			} else {
				r.push(`Deciding to do something a little more intimate than fucking ${his} cleavage with a strap-on, you walk forward and into ${his} face, pressing ${him} inexorably backwards as ${he} nuzzles your pussy until ${he}'s forced to collapse onto the ground. Then you scoot backwards a little, until you're`);
				if (eventSlave.belly >= 10000) {
					r.push(`crammed between ${his} ${belly} middle and breasts.`);
				} else {
					r.push(`straddling ${his} ribcage just below ${his} breasts.`);
				}
				r.push(`${His} huge breasts rest atop your inner thighs,`);
				if (eventSlave.boobsImplant/eventSlave.boobs >= .60) {
					r.push(`${his} skin taut against yours, from the implants.`);
				} else {
					r.push(`heavy and soft and female.`);
				}
				r.push(`You ride ${him} gently like this for a little while, enjoying the feminine weight of ${him} and the effects of this intimacy on ${his} face. Once you're ready for some more stimulation, you pull one of ${his} hands down between ${his} breasts; ${he} gets ${his} thumb down into ${his} cleavage, all the way down until it can stimulate your button and bring you to a soft orgasm. Pleased, you slide down until you're face to face with ${him}, and give ${him} a kiss.`);
			}
			r.push(He);
			if (eventSlave.energy > 80) {
				r.push(`was looking after ${himself} with a hand the whole time, and ${he} <span class="trust inc">smiles gratefully at you</span> with satisfaction.`);
			} else if (eventSlave.trust > 20) {
				r.push(`giggles a little, <span class="trust inc">pleased with ${himself}.</span>`);
			} else {
				r.push(`smiles hesitantly, clearly thinking that <span class="trust inc">${he} did well.</span>`);
			}
			eventSlave.trust += 5;
			r.toParagraph();
			frag.append(App.Events.eventFetish(eventSlave, "boobs"));
			return r.container();
		}

		function hurt() {
			const frag = document.createDocumentFragment();
			const r = new SpacedTextAccumulator(frag);
			r.push(`You decide to exercise a little maliciousness. You take a step forward, producing a look of`);
			if (eventSlave.energy > 80) {
				r.push(`lustful anticipation,`);
			} else if (eventSlave.trust > 20) {
				r.push(`expectation,`);
			} else {
				r.push(`trepidation,`);
			}
			r.push(`but then you stop,`);
			if (canSee(eventSlave)) {
				r.push(`wordlessly gesturing at ${him}`);
			} else if (canHear(eventSlave)) {
				r.push(`telling ${him}`);
			} else {
				r.push(`nudging and gesturing at ${him}`);
			}
			r.push(`to continue. ${He} does, bending ${him} back forward and backward, concave and convex, rolling ${himself} around on ${his} hips a little, and making ${his}`);
			if (eventSlave.belly >= 5000) {
				r.push(`${belly} belly and`);
			}
			r.push(`breasts move mesmerizingly. Eventually, ${he} stretches deeply enough that`);
			if (eventSlave.trust <= 50) {
				r.push(`${he} lets ${his} guard down and`);
			}
			r.push(`${his} eyes close again.`);
			switch (eventSlave.nipples) {
				case "tiny":
					r.push(`${His} tiny little nipples are too small to grab and pull effectively, so you simply flick them, aiming a vicious high-velocity fingernail at each of them, using both hands.`);
					break;
				case "puffy":
					r.push(`${His} puffy nipples provide shamefully easy targets. You grab them in a mercilessly tight grip and haul, jerking ${his} whole body forward until ${he}'s about to topple over.`);
					break;
				case "partially inverted":
					r.push(`You grab each of ${his} nipples around the margins of ${his} areolae, and squeeze them with such force that, partially inverted as they are, they protrude instantly.`);
					break;
				case "inverted":
					r.push(`You seize each of ${his} inverted nipples, your thumbs uppermost, squeezing ${his} sensitive, hidden nipples inside their fleshy prisons with cruel force.`);
					break;
				case "huge":
					r.push(`${His} huge nipples provide you an excellent grip as you grab them and haul on them, jerking ${his} whole body forward until ${he}'s about to topple over.`);
					break;
				case "fuckable":
					r.push(`You cram a fist into each of ${his} nipples and spread your fingers wide, making sure that you don't come loose as you jerk ${his} body forward.`);
					break;
				default:
					r.push(`You grab each of ${his} nipples in a merciless grip and pinch them with abandon, adding a cruel twist as soon as you've got them held tightly enough.`);
			}
			r.push(`${His} ${App.Desc.eyesColor(eventSlave)} fly open and ${he}`);
			if (canTalk(eventSlave, false)) {
				if (eventSlave.voice === 1) {
					r.push(`bellows with pain, ${his} deep voice very loud.`);
				} else if (eventSlave.voice === 2) {
					r.push(`screams at the tops of ${his} lungs.`);
				} else if (eventSlave.voice === 3) {
					r.push(`shrieks, ${his} high, girlish voice very shrill.`);
				}
			} else {
				r.push(`goes rigid in pain. If ${he} was able to cry out, you know ${he} would have.`);
			}
			r.push(`The sudden agony discombobulates ${him} so badly that for a few moments, ${he} has no idea what's going on, and ${his} hands fly forward reflexively. ${He} manages to stop ${himself} at the last minute, realizing that trying to knock your hands away from ${his} poor nipples would be a very bad idea indeed. ${He} looks up at you with`);
			if (canSee(eventSlave)) {
				r.push(`huge eyes,`);
			} else {
				r.push(`terror splashed across ${his} face,`);
			}
			if (canTalk(eventSlave, false)) {
				r.push(`mewling helplessly,`);
			}
			r.push(`<span class="trust dec">tears beginning to collect at the corners of ${his} eyes.</span> Pleased, you turn and go.`);
			eventSlave.trust -= 5;
			r.toParagraph();
			frag.append(App.Events.eventFetish(eventSlave, "masochist"));
			return r.container();
		}

		function drink() {
			const frag = document.createDocumentFragment();
			const r = new SpacedTextAccumulator(frag);
			r.push(`${His}`);
			if (canSee(eventSlave)) {
				r.push(`eyes widen`);
			} else {
				r.push(`face light up`);
			}
			r.push(`with surprise when you`);
			if (eventSlave.belly >= 300000) {
				r.push(`lean against ${his} ${belly} stomach.`);
			} else {
				r.push(`kneel down in front of ${him}.`);
			}
			r.push(`${He} begins to straighten, to face you, but you place a`);
			if (V.PC.title === 1) {
				r.push(`strong`);
			} else {
				r.push(`feminine`);
			}
			r.push(`hand on ${his} chest, right between ${his} breasts, and keep ${him} leaning backward. Then, without any preamble, you take ${his} right breast in both of your hands, bend forward, and take ${his} nipple into your mouth. ${He} gasps`);
			if (canTalk(eventSlave)) {
				r.addToLast(`, ${say}s "Oh, ${Master}"`);
			}
			r.push(`quietly, and then begins to moan as you begin to suck powerfully,`);
			switch (eventSlave.nipples) {
				case "tiny":
					r.push(`drawing ${his} tiny nipple entirely into your mouth.`);
					break;
				case "puffy":
					r.push(`engorging ${his} soft, puffy nipple until it fills your mouth.`);
					break;
				case "partially inverted":
					r.push(`pulling ${his} partially inverted nipple straight out and into your mouth.`);
					break;
				case "inverted":
					r.push(`gradually pulling at ${his} inverted nipple until it's finally forced to pop out and into your mouth.`);
					break;
				case "huge":
					r.push(`${his} huge nipple filling your mouth comfortably.`);
					break;
				case "fuckable":
					r.push(`drawing an unreasonable amount of breast into your mouth just to keep a seal.`);
					break;
				case "flat":
					r.push(`pulling ${his} nipple and the areolae around it into your mouth.`);
					break;
				default:
					r.push(`pulling ${his} soft nipple and some of the areolae around it into your mouth.`);
			}
			r.push(`${His} rich ${milkFlavor(eventSlave)}milk begins to flow across your tongue. ${He} breathes faster and faster as ${he} becomes aroused, but then the stimulation peaks. You keep drinking from ${him}, making no move to stop nursing and start fucking ${him}. ${He} sighs with sudden contentment, realizing that you're going to drink every drop ${he} has, and ${his} sudden relaxation sends a little extra gush of ${milkFlavor(eventSlave)}milk into your mouth. ${He} <span class="hotpink">definitely enjoys the experience,</span> leaning back compliantly as you drain that breast and then ${his} left one, too.`);
			if (eventSlave.boobs > 25000 || (eventSlave.boobs > 10000 && eventSlave.lactation > 1)) {
				r.push(`Your clothes feel tight around your middle for the rest of the day; you may have indulged a little too much.`);
			}
			eventSlave.devotion += 5;
			eventSlave.lactationDuration = 2;
			eventSlave.boobs -= eventSlave.boobsMilk;
			eventSlave.boobsMilk = 0;
			r.toParagraph();
			frag.append(App.Events.eventFetish(eventSlave, "boobs"));
			return r.container();
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				hasAnyArms,
				hasAnyLegs,
				s => canTalk(s, false),
				s => s.assignment !== Job.QUARTER,
				s => s.devotion <= 20,
				s => s.trust < -20,
				s => s.rules.living === "spare",
			]
		];
	}

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

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

		let r = [];
		r.push(
			`Passing near the slave dormitory late at night, you hear a quiet cry within. This is strange; most slaves housed there are not inclined or not allowed to have sex in the middle of the night, and in any case, the noise wasn't one of pleasure. Looking in, you see a jerky movement near the door. It's`,
			App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), ","),
			`and ${he}'s obviously having a bad dream. ${He} raises`
		);
		if (hasBothArms(eventSlave)) {
			r.push(`an`);
		} else {
			r.push(`${his}`);
		}
		r.push(`arm to fend off some imagined danger, and in doing so, pushes the sheet down around ${his} waist. ${He} sleeps naked, like all your slaves, and the movement bares ${his}`);
		if (eventSlave.boobs > 2000) {
			r.push(`udders`);
		} else if (eventSlave.boobs > 1000) {
			r.push(`heavy breasts`);
		} else if (eventSlave.boobs > 400) {
			r.push(`boobs`);
		} else {
			r.push(`little tits`);
		}
		if (eventSlave.belly >= 5000) {
			r.push(`and ${belly}`);
			if (eventSlave.bellyPreg >= 3000) {
				r.push(`pregnant`);
			}
			r.push(`belly`);
		}
		r.push(`to the cool night air. The low blue light outlines ${his} nipples as they`);
		if (eventSlave.nipples !== "fuckable") {
			r.push(`stiffen`);
		} else {
			r.push(`swell`);
		}
		r.push(`at the sudden change of temperature,`);
		switch (eventSlave.nipples) {
			case "tiny":
				r.push(`pricking up into little buds.`);
				break;
			case "flat":
				r.push(`becoming visible against ${his} areolae.`);
				break;
			case "puffy":
				r.push(`the puffy promontories jutting even farther out.`);
				break;
			case "partially inverted":
				r.push(`just starting to poke past their inversion.`);
				break;
			case "inverted":
				r.push(`the twin domes formed by their inverted shapes becoming more prominent.`);
				break;
			case "huge":
				r.push(`becoming so large they cast long shadows across ${his} bed.`);
				break;
			case "fuckable":
				r.push(`the fuckable holes steadily closing and starting to poke outwards.`);
				break;
			default:
				r.push(`becoming attractively erect.`);
		}
		r.push(`Still dreaming, ${he} clasps ${his}`);
		if (hasBothArms(eventSlave)) {
			r.push(`arms`);
		} else {
			r.push(`arm`);
		}
		r.push(`protectively over ${his}`);
		if (eventSlave.pregKnown === 1) {
			r.push(`unborn`);
			if (eventSlave.pregType > 1) {
				r.push(`children,`);
			} else {
				r.push(`child,`);
			}
		} else {
			r.push(`vulnerable chest,`);
		}
		r.push(`and rolls to one side. Halfway into a fetal position, ${he} turns ${his} head against ${his} pillow, murmuring`);
		if (eventSlave.accent <= 2) {
			r.push(Spoken(eventSlave, `"N-no — please no — I'll d-do anyth-thing — no..."`));
		} else {
			r.push(`earnest protests in ${his} mother tongue.`);
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
		/* TODO: add a positive variant */
			new App.Events.Result(`Let ${him} be`, leave),
			new App.Events.Result(`Hug ${him}`, hug),
			(canDoAnal(eventSlave) || canDoVaginal(eventSlave))
				? new App.Events.Result(`Rape ${him}`, rape, ((eventSlave.vagina === 0 && canDoVaginal(eventSlave)) || (eventSlave.anus === 0) && canDoAnal(eventSlave)) ? `This option will take ${his} virginity` : null)
				: new App.Events.Result(),
		]);

		function leave() {
			return `It may be for the best to not disturb ${his} restless slumber, you decide. Admiring the attractive view for just a moment longer, you turn back and head to your own bed. The next morning, it appears as though ${eventSlave.slaveName} doesn't even remember this nightmare.`;
		}

		function hug() {
			r = [];
			r.push(`You reach out to hug ${him}, but as soon as your hand touches ${his} shoulder, ${he} writhes instinctively away.`);
			if (canSee(eventSlave)) {
				r.push(`${His} eyes fly open, searching frantically for ${his} assailant. Seeing that it's you, ${he} screams and scrabbles away even harder. After making it a few feet, ${he} collects ${his} wits enough to bring ${himself} to a stop and stop screaming, though ${he} continues to sob, staring at you in terror.`);
			} else {
				r.push(`${He} gropes frantically for ${his} assailant, before making contact with you. ${He} screams and scrabbles away, only stopping when ${he} collides with the nearest solid object.`);
				if (canHear(eventSlave)) {
					r.push(`Only after several call outs that it is you does ${he} stop screaming, though ${he} continues to sob, listening to your every breath in terror.`);
				} else {
					r.push(`After screaming ${himself} hoarse, ${he} realizes that ${his} assault has abruptly ended, and gently feels around ${his} surroundings with a shaking hand to discover ${himself} back in ${his} room.`);
				}
			}
			r.push(`${He} remains frozen in place as you slowly advance on ${him} and give ${him} a light embrace. ${His} tears gradually stop, but ${he} does not relax,`);
			if (canSee(eventSlave)) {
				r.push(`remaining dumbly stiff`);
			} else {
				r.push(`continuing to quake in fear`);
			}
			r.push(`within your arms. Eventually you let ${him} go, and ${he} crawls pathetically back under ${his} sheet, still weeping softly. It seems ${he} is more afraid of you than ever, and if you thought that a simple hug could win ${him} over, you were wrong.`);
			if (canSee(eventSlave)) {
				eventSlave.trust -= 4;
			} else if (canHear(eventSlave)) {
				eventSlave.trust -= 5;
			} else {
				eventSlave.trust -= 6;
			}
			return r;
		}

		function rape() {
			const frag = document.createDocumentFragment();
			r = [];
			r.push(`You snatch the sheet off ${him}, shove ${his} uppermost shoulder down so ${his} face is smashed into the pillow, and bring your knees down between ${his} legs, spreading them to force ${hers} apart. You use the hand that isn't controlling ${his} torso to locate ${his}`); // TODO: add support for one-handed PC?
			if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina > 2) {
					r.push(`amusingly loose cunt`);
				} else if (eventSlave.vagina > 1) {
					r.push(`large womanhood`);
				} else if (eventSlave.vagina > 0) {
					r.push(`tight pussy`);
				} else {
					r.push(`poor virgin pussy`);
				}
			} else {
				if (eventSlave.anus > 2) {
					r.push(`amusingly broad asshole`);
				} else if (eventSlave.anus > 1) {
					r.push(`big butthole`);
				} else if (eventSlave.anus > 0) {
					r.push(`tight rosebud`);
				} else {
					r.push(`poor virgin anus`);
				}
			}
			r.push(`in the dark as ${he} begins to <span class="trust dec">struggle and scream.</span> ${He} comes fully awake when ${he} feels your rough fingers searching for and then finding ${his}`);
			if (eventSlave.vagina >= 0 && canDoVaginal(eventSlave)) {
				r.push(`vagina,`);
			} else {
				r.push(`crinkled hole,`);
			}
			r.push(`and ${his} noise increases to the point where it becomes annoying. You stuff ${his} face into the pillow and take ${him} mercilessly, using the pillow to cut off ${his} breath whenever ${he} struggles too much, until oncoming suffocation forces ${him} to go still and take it like a good little bitch.`);
			App.Events.addParagraph(frag, r);
			App.Events.addParagraph(frag, [`<span class="devotion dec">Sometimes dreams do come true.</span>`]);
			App.Events.addParagraph(frag, [VCheck.Simple(eventSlave, 1)]);
			eventSlave.trust -= 4;
			eventSlave.devotion -= 4;
			return frag;
		}
	}
};

repo_name: Banyanael/fc

license: mit


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				hasAnyArms,
				hasAnyLegs,
				s => s.relationship <= -2,
				s => s.trust > 50,
				s => s.devotion > 50,
			]
		];
	}

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

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

		const r = new SpacedTextAccumulator(node);
		r.push(
			`Working in your office early in the morning, you can hear the low, human hum of your slaves who work during the daytime busily getting ready for their days. Suddenly, there's motion at your doorway, and`,
			contextualIntro(V.PC, eventSlave, true),
			`hurries in. ${He}'s nude, ${his} ${eventSlave.skin} skin glowing with the fresh cleanliness of having just gotten out of the shower. ${He}`,
		);
		if (canSee(eventSlave)) {
			r.push(`glances at you`);
		} else if (canHear(eventSlave)) {
			r.push(`listens`);
		} else {
			r.push(`waits`);
		}
		r.push(`to see if ${he}'s unwelcome, and seeing no sign that ${he} is, the devoted ${SlaveTitle(eventSlave)} comes over to your desk.`);
		if (eventSlave.boobs < 400) {
			r.push(`${His} little ${eventSlave.boobShape} tits barely move at all as ${he} walks, though ${his} ${eventSlave.nipples} nipples certainly catch your eye.`);
		} else if ((eventSlave.boobsImplant/eventSlave.boobs) >= .75) { // tiny little 200cc implants in 20000cc tits are laughable. Now we make sure those tits are fake.
			r.push(`${His} fake tits barely move at all as ${he} walks, their shape maintained by ${his} implants.`);
		} else if (eventSlave.boobs < 1000) {
			r.push(`${His} lovely ${eventSlave.boobShape} boobs move delightfully as ${he} walks, and ${his} ${eventSlave.nipples} nipples bounce prettily.`);
		} else if (eventSlave.boobs < 2500) {
			r.push(`${His} heavy, ${eventSlave.boobShape} breasts bounce up and down as ${he} walks, making ${his} ${eventSlave.nipples} nipples dance around distractingly.`);
		} else {
			r.push(`${His} massive, ${eventSlave.boobShape} udders jiggle alluringly as ${he} walks, and ${his} ${eventSlave.nipples} nipples sway from side to side distractingly.`);
		}
		r.push(`Your eyes move down ${his} body, noting`);
		if (eventSlave.bellyPreg >= 450000) {
			r.push(`${his} ${belly} belly,`);
			if (eventSlave.pregSource === -1) {
				r.push(`practically bursting with your ${children},`);
			}
			r.push(`and how ${he} struggles to walk with it while keeping all the kicking from throwing ${him} off balance.`);
		} else if (eventSlave.belly >= 450000) {
			r.push(`${his} ${belly} belly and how the struggles to walk with it without bumping things.`);
		} else if (eventSlave.bellyPreg >= 150000) {
			r.push(`${his} ${belly} belly,`);
			if (eventSlave.pregSource === -1) {
				r.push(`completely filled with your ${children},`);
			}
			r.push(`and the slight movement within with each struggled step ${he} takes.`);
		} else if (eventSlave.belly >= 150000) {
			r.push(`${his} ${belly} belly and the vastly altered gait ${he} steps with to handle it.`);
		} else if (eventSlave.bellyPreg >= 10000) {
			r.push(`${his} full-term pregnant belly,`);
			if (eventSlave.pregSource === -1) {
				r.push(`rounded with your ${children},`);
			} else {
				r.push(`which`);
			}
			r.push(`adds a distinct awkwardness to ${his} gait.`);
		} else if (eventSlave.bellyFluid >= 10000) {
			r.push(`${his} straining ${eventSlave.inflationType}-filled belly and how ${he} struggles to walk normally with it.`);
		} else if (eventSlave.bellyImplant >= 10000) {
			r.push(`${his} full-term pregnancy-looking belly and how it adds a distinct awkwardness to ${his} gait.`);
		} else if (eventSlave.bellyPreg >= 5000) {
			r.push(`${his} hugely pregnant belly,`);
			if (eventSlave.pregSource === -1) {
				r.push(`rounded with your ${children},`);
			} else {
				r.push(`which`);
			}
			r.push(`adds a certain unavoidable awkwardness to ${his} gait.`);
		} else if (eventSlave.bellyFluid >= 5000) {
			r.push(`${his} ${eventSlave.inflationType}-filled belly and the delightful jiggle that runs through it with each step.`);
		} else if (eventSlave.bellyImplant >= 5000) {
			r.push(`${his} hugely rounded belly and the certain unavoidable awkwardness in ${his} gait it causes.`);
		} else if (eventSlave.weight >= 95) {
			r.push(`${his} big fat belly and how it sways and jiggles with each step.`);
		} else if (eventSlave.bellyPreg >= 1500) {
			r.push(`${his} pregnant belly,`);
			if (eventSlave.pregSource === -1) {
				r.push(`swollen with your ${children},`);
			} else {
				r.push(`which`);
			}
			r.push(`isn't truly huge yet, but clearly advertises ${his} status as a breeding ${SlaveTitle(eventSlave)}.`);
		} else if (eventSlave.bellyFluid >= 2000) {
			r.push(`the slight bloat to ${his} belly caused by the liters of ${eventSlave.inflationType} held inside ${him}.`);
		} else if (eventSlave.bellyImplant >= 1500) {
			r.push(`${his} slightly rounded belly, not truly noticeable, but enough to advertise ${him} as a breeding ${SlaveTitle(eventSlave)}, even though it's fake.`);
		} else if (eventSlave.hips === 3) {
			r.push(`${his} extremely wide hips and the cartoonish sway to them as ${he} walks.`);
		} else if (eventSlave.muscles > 30) {
			r.push(`${his} rippling abs, which work visibly as ${he} walks, flexing and straining powerfully underneath ${his} ${eventSlave.skin} skin.`);
		} else if (eventSlave.waist < -95) {
			r.push(`${his} cartoonish wasp waist and the way it emphasizes ${his} status as a sex toy.`);
		} else if (eventSlave.hips > 0) {
			r.push(`${his} wide hips and the sensual sway to them as ${he} walks.`);
		} else if (eventSlave.waist < -10) {
			r.push(`${his} nice narrow waist and the way it emphasizes the feminine swell of ${his} hips.`);
		} else if (eventSlave.weight > 30) {
			r.push(`${his} chubby belly and how it jiggles as ${he} walks, ${his} plush fat moving voluptuously with ${him}.`);
		} else if (eventSlave.weight > 10) {
			r.push(`${his} plush belly and how it jiggles a little as ${he} walks, giving ${him} a soft and sensual appeal.`);
		} else {
			r.push(`${his} trim belly before looking further down.`);
		}
		r.push(`Below that,`);
		if (eventSlave.dick > 0) {
			if (canAchieveErection(eventSlave)) {
				r.push(`${his} cock is soft for once, probably from the shower; it`);
			} else if (eventSlave.dick > 6) {
				r.push(`${his} soft python of a cock`);
			} else {
				r.push(`${his} soft bitchclit`);
			}
			if (eventSlave.dick > 4) {
				r.push(`flops around lewdly`);
			} else if (eventSlave.dick > 2) {
				r.push(`bounces around`);
			} else {
				r.push(`wiggles pathetically`);
			}
			r.push(`as ${he} moves.`);
		} else if (eventSlave.labia > 0) {
			r.push(`${his} generous petals, flushed and a little full from the warmth of the shower, offer soft, healthy advertisement of ${his} womanhood.`);
		} else if (eventSlave.clit > 0) {
			r.push(`${his} prominent clit, flushed and a little full from the warmth of the shower, offers soft testament to ${his} female sexuality.`);
		} else if (eventSlave.piercing.genitals.weight > 0) {
			r.push(`${his} glinting`);
			if (eventSlave.dick === 0) {
				r.push(`clit`);
			} else {
				r.push(`dick`);
			}
			r.push(`piercing catches your eye, just as it's meant to do.`);
		} else if (eventSlave.vagina === -1) {
			r.push(`the smooth, featureless skin between ${his} legs is a little flushed; the tiny hole in it is barely noticeable.`);
		} else {
			r.push(`${his} healthy womanhood looks a little flushed from the warmth of the shower.`);
		}
		r.push(`Coming to a stop, ${he}`);
		if (eventSlave.height > 190) {
			r.push(`bends the long, long way down necessary to bring`);
		} else if (eventSlave.height < 155) {
			r.push(`bends the amusingly short way down ${he} needs to bring`);
		} else {
			r.push(`bends down`);
		}
		r.push(`to bring ${his}`);
		if (eventSlave.lips > 40) {
			r.push(`pillowy`);
		} else if (eventSlave.piercing.lips.weight > 0) {
			r.push(`pierced`);
		}
		r.push(`lips next to your ear.`);

		r.toParagraph();

		if (!canTalk(eventSlave)) {
			r.push(`${He} mouths 'I love you, ${getWrittenTitle(eventSlave)},' holding ${his} hands out in front of you both to say it in sign language at the same time.`);
		} else {
			r.push(`"I love you, ${Master}," ${he} whispers.`);
		}

		r.toParagraph();
		App.Events.addResponses(node, [
			new App.Events.Result(`Tell ${him} ${he}'s a good slave`, good),
			new App.Events.Result(`Tell ${him} you love ${him} too`, love),
		]);

		function good() {
			const r = new SpacedTextAccumulator();
			r.push(`Without turning your head, you tell ${him} ${he}'s a very good slave. ${He} laughs happily,`);
			if (!canTalk(eventSlave)) {
				r.addToLast(`though of course this is silent,`);
			}
			r.push(`${his} warm breath gusting against your ear. It took confidence for ${him} to come in here and tell ${him} ${he} loved you, and ${he} trusts you more for responding this way. ${He} plants a light kiss on your cheek and walks quickly out of your office, hurrying to go about ${his} day's business, but careful to strut ${his} stuff for you on ${his} way out.`);
			if (eventSlave.butt < 3) {
				r.push(`${His} nice little butt moves cutely as ${he} goes. ${His} small buttocks leave`);
				if (!canDoAnal(eventSlave)) {
					r.push(`${his} anal chastity visible from the rear as ${he} walks.`);
				} else if (eventSlave.analArea > 3) {
					r.push(`the huge area of puckered skin around ${his} asspussy clearly visible from the rear, and ${his} asshole works lewdly with the motion.`);
				} else if (eventSlave.anus > 1) {
					r.push(`${his} asshole visible, the pucker of ${his} backdoor lewdly available.`);
				} else {
					r.push(`${his} tight anus visible from the rear as ${he} walks.`);
				}
			} else if (eventSlave.butt < 6) {
				r.push(`${His} healthy butt bounces as ${he} goes. ${His} big buttocks mostly conceal`);
				if (!canDoAnal(eventSlave)) {
					r.push(`${his} anal chastity, but there's the occasional tempting glimpse.`);
				} else if (eventSlave.analArea > 3) {
					r.push(`the huge area of puckered skin around ${his} asspussy, but ${his} butthole is so well used that it's obvious from the rear that ${he} takes it up the ass. A lot.`);
				} else if (eventSlave.anus > 1) {
					r.push(`${his} backdoor, but there's the occasional cute glimpse of ${his} experienced anus.`);
				} else {
					r.push(`what's between them, but there's the occasional cute glimpse of ${his} tight rosebud.`);
				}
			} else {
				r.push(`${His} gigantic ass jiggles as ${he} goes. ${His} enormous buttocks mostly stay together as ${he} moves,`);
				if (!canDoAnal(eventSlave)) {
					r.push(`completely swallowing ${his} anal chastity.`);
				} else if (eventSlave.analArea > 3) {
					r.push(`almost concealing the huge area of puckered skin around ${his} lewd asspussy.`);
				} else if (eventSlave.anus > 1) {
					r.push(`completely concealing ${his} welcoming backdoor.`);
				} else {
					r.push(`completely concealing ${his} tight asshole.`);
				}
			}
			r.push(`${He} pauses for an instant in the doorway, turns over ${his} shoulder to give you a sexy wink, and is gone.`);
			eventSlave.trust += 4;
			r.toParagraph();
			return r.container();
		}

		function love() {
			const r = new SpacedTextAccumulator();
			r.push(`You turn towards ${him} and direct the full weight of your gaze into ${his} eyes.`);
			if (canSee(eventSlave)) {
				r.push(`${His} eyelids flicker with the shock of the shared look,`);
			} else {
				r.push(`${His} eyes may not be capable of sight, but ${he} can feel your gaze,`);
			}
			r.push(`so close, but ${he} bears it, biting ${his} lower lip. Then you kiss ${him}. The released tension is too much for ${him}, and ${he} moans, slumping against you a little as you kiss ${him} like a lover. ${He}'s so lost in it that when you break the kiss, ${his} mouth stays slightly open and pursues yours slightly, hungry for more. You place a finger against ${his} moist lips, making ${him} wait a moment, and tell ${him} that you love ${him} too. ${He} makes`);
			if (eventSlave.voice === 0) {
				r.push(`a quiet moaning sound, deep in ${his} useless throat,`);
			} else {
				r.push(`an almost animal sound, somewhere between a sob and a moan,`);
			}
			r.push(`and as you withdraw your finger, ${he} kisses you back. ${He} knows ${he} has a job to do today, and it's waiting for ${him}, so when you give ${him} no indication that you'd like ${him} to stay, ${he} withdraws, keeping ${his}`);
			if (canSee(eventSlave)) {
				r.push(`eyes`);
			} else {
				r.push(`face`);
			}
			r.push(`on yours, doing ${his} best to <span class="devotion inc">make love to you</span> with ${his} gaze.`);
			eventSlave.devotion += 4;
			r.toParagraph();
			return r.container();
		}
	}
};


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 !== "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 (V.arcologies[0].FSAssetExpansionist !== "unset" || (V.arcologies[0].FSTransformationFetishist !== "unset" && V.arcologies[0].FSSlimnessEnthusiast === "unset") || V.arcologies[0].FSPastoralist !== "unset") {
			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.addToLast(`. ${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 !== "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
			]
		];
	}

	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 (V.arcologies[0].FSPhysicalIdealist !== "unset") {
				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 (V.arcologies[0].FSPhysicalIdealist !== "unset") {
				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;
			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;
		}
	}
};


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 !== "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 === "get 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 down ${his} throat 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`;
				}
			}
		}
	}
};