code:
App.Events.RESSHugeNaturals = class RESSHugeNaturals 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.boobs >= 2000,
				s => s.assignment !== Job.QUARTER,
				s => s.boobsImplant === 0,
				s => s.nipples !== "tiny" && s.nipples !== "fuckable",
				s => s.devotion > 20,
			]
		];
	}

	execute(node) {
		/** @type {Array<App.Entity.SlaveState>} */
		let [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);

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

		let r = [];
		r.push(
			App.UI.DOM.slaveDescriptionDialog(eventSlave),
			`comes before you naked for a routine inspection. You take particular care to examine ${his} massive breasts, since they've grown so large it's necessary to check for unsightly veins, stretch marks, and the like. You note ${his} big nipples with appreciation. Since ${his} breasts are so enormous and completely free of implants, they're quite heavy. When ${he} stands,`
		);
		if (eventSlave.boobShape === "saggy" || eventSlave.boobShape === "downward-facing") {
			r.push(`${his} nipples face out and down.`);
		} else {
			r.push(`gravity causes them to hang low.`);
		}
		r.push(`As you inspect ${him} with your hands, ${he}`);
		if (!canTalk(eventSlave)) {
			r.push(`breathes a little harder and looks like ${he} would speak, were ${he} not mute.`);
		} else {
			if (eventSlave.lips > 70) {
				r.push(`murmurs through ${his} huge lips,`);
			} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
				r.push(`murmurs through ${his} piercings,`);
			} else {
				r.push(`murmurs,`);
			}
			r.push(Spoken(eventSlave, `"That feels really nice, ${Master}."`));
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Give ${him} a nice massage`, massage),
			(canDoAnal(eventSlave) || canDoVaginal(eventSlave) && eventSlave.belly < 100000)
				? new App.Events.Result(`Use ${him} so they swing around`, swing, ((eventSlave.anus === 0 && canDoAnal(eventSlave)) || (eventSlave.vagina === 0 && canDoVaginal(eventSlave))) ? `This option will take ${his} virginity` : null)
				: new App.Events.Result(),
			(canDoAnal(eventSlave) || canDoVaginal(eventSlave))
				? new App.Events.Result(`Show ${him} off in public`, show, virginityWarning())
				: new App.Events.Result()
		]);

		function virginityWarning() {
			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`;
			}
			return null;
		}

		function massage() {
			r = [];
			r.push(`You sit on the couch next to your desk and pat your thighs. ${He} smiles and comes over, lowering ${himself}`);
			if (V.PC.belly >= 10000) {
				r.push(`beside you and cozying up to your pregnant belly and sliding a hand down to see to your pussy without hesitation. You help ${him} get comfortable and instead of demanding ${he} please you or get down on all fours, you just sit there with ${him},`);
			} else if (V.PC.dick === 0) {
				r.push(`into your lap without hesitation. You help ${him} get comfortable and instead of`);
				if (V.PC.dick === 0) {
					r.push(`grinding`);
				} else {
					r.push(`thrusting`);
				}
				r.push(`or telling ${him} to ride, you just sit there with ${him} in your lap,`);
			} else {
				r.push(`onto your member`);
				if (V.PC.vagina !== -1) {
					r.push(`and sliding a hand down to see to your pussy`);
				}
				r.push(`without hesitation. You help ${him} get comfortable and instead of`);
				if (V.PC.dick === 0) {
					r.push(`grinding`);
				} else {
					r.push(`thrusting`);
				}
				r.push(`or telling ${him} to ride, you just sit there with ${him} in your lap,`);
			}
			r.push(`gently massaging ${his} massive tits. They get sore from swinging around as ${he} moves, works, and fucks, and soon ${he}'s groaning with pleasure at the attention. You finally manage to bring ${him} to orgasm with almost nothing but delicate stimulation of ${his} nipples. ${He} has become more trusting of you.`);
			eventSlave.trust += 4;
			seX(eventSlave, "mammary", V.PC, "penetrative");
			if (eventSlave.lactation > 0) {
				eventSlave.lactationDuration = 2;
				eventSlave.boobs -= eventSlave.boobsMilk;
				eventSlave.boobsMilk = 0;
			} else {
				r.push(induceLactation(eventSlave, 3));
			}
			return r;
		}

		function swing() {
			r = [];
			r.push(`You tell ${him} to kneel on the smooth floor. ${He} knows this means doggy style, so ${he} compliantly arches ${his} back and cocks ${his} hips to offer ${himself} to you. You`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`enter`);
			if (canDoVaginal(eventSlave)) {
				r.push(`${his} pussy`);
			} else {
				r.push(`${his} ass`);
			}
			r.push(`without preamble and seize ${his} hips. ${He} braces ${himself}, knowing what's coming, but soon ${he} discovers a new disadvantage to ${his} pendulous breasts: as you pound ${him} hard, ${his} long nipples frequently brush against the floor, causing ${him} to wince and buck.`);
			if (eventSlave.dick > 0 && !(eventSlave.chastityPenis)) {
				if (canAchieveErection(eventSlave)) {
					r.push(`${His} cock doesn't help, either, flopping around half-erect as ${he} vacillates between pain and arousal.`);
				} else if (eventSlave.dick > 20) {
					r.push(`${His} cock doesn't help, either, flopping around on the floor as ${he} vacillates between pain and arousal.`);
				} else {
					r.push(`${His} cock doesn't help, either, flopping around feebly as ${he} vacillates between pain and arousal.`);
				}
			} else if (eventSlave.clit > 2) {
				r.push(`${His} huge clit doesn't help, either, flopping around half-erect as ${he} vacillates between pain and arousal.`);
			}
			if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
				r.push(`When you switch to ${his} ass, the shallower strokes give ${his} nipples a bit of respite.`);
			}
			r.push(`You finish with a particularly hard thrust`);
			if (V.PC.dick === 0) {
				r.push(`and shake with climax,`);
			} else {
				r.push(`to spill your seed deep inside ${his}`);
				if (canDoAnal(eventSlave)) {
					r.push(`butt, ramming forward hard enough to spill ${him} down onto ${his} bosom. As you rise, ${his} discomfited form is a pretty sight, with ${his} breasts squashed against the floor and ${his} well fucked butt lewdly relaxed.`);
				} else {
					r.push(`pussy, ramming forward hard enough to spill ${him} down onto ${his} bosom. As you rise, ${his} discomfited form is a pretty sight, with ${his} breasts squashed against the floor and ${his} well fucked cunt lewdly gaped.`);
				}
			}
			r.push(`<span class="devotion inc">${He} has become more submissive.</span>`);
			eventSlave.devotion += 4;
			r.push(VCheck.Both(eventSlave, 1));
			return r;
		}

		function show() {
			r = [];
			r.push(`You bring ${him} out onto the promenade, still nude, ${his} huge bare udders attracting open stares as ${his} every movement sets them in motion.`);
			if (eventSlave.sexualFlaw === "attention whore") {
				r.push(`The slut loves being the center of attention and couldn't ask for more.`);
			} else if (eventSlave.fetishKnown === 1 && eventSlave.fetishStrength > 60 && eventSlave.fetish === "humiliation") {
				r.push(`The slut loves being embarrassed, and ${he} blushes furiously as ${his} nipples stiffen with arousal.`);
			} else if (eventSlave.energy > 95) {
				r.push(`The nympho slut loves being shown off, and ${he} flaunts ${his} boobs shamelessly.`);
			} else if (eventSlave.counter.anal > 100 && eventSlave.counter.oral > 100) {
				r.push(`${He}'s such a veteran sex slave that ${he} takes the stares in stride.`);
			} else {
				r.push(`${He} blushes a little, but tips ${his} chin up and follows you obediently.`);
			}
			r.push(`When you reach a good spot, you grab ${his}`);
			if (eventSlave.weight > 30) {
				r.push(`fat ass`);
			} else if (eventSlave.weight > 10) {
				r.push(`plush hips`);
			} else if (eventSlave.weight >= -10) {
				r.push(`trim hips`);
			} else if (eventSlave.butt > 2) {
				r.push(`big butt`);
			} else {
				r.push(`skinny ass`);
			}
			r.push(`and`);
			if (eventSlave.height >= 185) {
				r.push(`pull ${his} tall body in`);
			} else if (eventSlave.height >= 160) {
				r.push(`pull ${him} up on tiptoe`);
			} else {
				r.push(`push ${his} petite form up onto a railing`);
			}
			r.push(`for standing sex. ${He} cocks ${his} hips and takes your`);
			if (V.PC.dick === 0) {
				r.push(`strap-on`);
			} else {
				r.push(`cock`);
			}
			r.push(`compliantly, and after a few thrusts you reach down, seize ${him} behind each knee, and`);
			if (V.PC.belly >= 5000 && eventSlave.belly >= 100000) {
				r.push(`collapse against a nearby bunch under the excessive weight between your pregnancy and ${his} ${belly} stomach. Appreciating the bench's sacrifice, you return to fucking ${him}.`);
				if (eventSlave.bellyPreg >= 600000) {
					r.push(`Penetrating ${him} while feeling so much movement between you is unbelievably lewd. ${His} children squirm at their mother's excitement, causing ${his} bloated body to rub against you in ways you couldn't imagine.`);
				}
			} else if (eventSlave.belly >= 100000) {
				r.push(`pull ${him} as close as you can with ${his} ${belly} belly between you. Struggling to support the immense weight, you back ${him} against a rail so that you can continue to fuck ${him} while holding ${him}.`);
				if (eventSlave.bellyPreg >= 600000) {
					r.push(`Penetrating ${him} while feeling so much movement between you is unbelievably lewd. ${His} children squirm at their mother's excitement, causing ${his} bloated body to rub against you in ways you couldn't imagine.`);
				}
			} else {
				r.push(`hoist ${his} legs up so ${he}'s pinned against your`);
				if (V.PC.belly >= 1500) {
					r.push(`pregnancy,`);
				} else if (V.PC.boobs < 300) {
					r.push(`chest,`);
				} else {
					r.push(`boobs,`);
				}
				r.push(`helpless to do anything but let you hold ${him} in midair and fuck ${him}.`);
			}
			if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina > 1) {
					r.push(`${His} pussy can take a hard pounding, so you give it to ${him}.`);
				} else {
					r.push(`${His} poor tight pussy can barely take the pounding you're administering.`);
				}
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				if (eventSlave.anus > 1) {
					r.push(`${His} loose butthole can take a hard pounding, so you give it to ${him}.`);
				} else {
					r.push(`${His} poor tight butthole can barely take the pounding you're administering.`);
				}
				r.push(VCheck.Anal(eventSlave, 1));
			}
			r.push(`${He} loses all composure, gasping and panting as the massive weight of ${his} chest bounces up and down, making an audible clap with each stroke as ${his} huge tits slap painfully together. Despite this, or perhaps partly because of it, ${he} begins to orgasm,`);
			if (eventSlave.chastityPenis === 1) {
				r.push(`the discomfort of being half-hard under ${his} chastity cage making ${him} squirm as cum rushes out of the hole at its tip.`);
			} else if (canAchieveErection(eventSlave)) {
				if (eventSlave.dick > 4) {
					r.push(`${his} monster of a cock releasing a jet of cum with each thrust into ${him}.`);
				} else if (eventSlave.dick > 3) {
					r.push(`${his} huge cock releasing a jet of cum with each thrust into ${him}.`);
				} else if (eventSlave.dick > 2) {
					r.push(`${his} cock releasing a spurt of cum with each thrust into ${him}.`);
				} else {
					r.push(`${his} tiny dick spurting cum with each thrust into ${him}.`);
				}
			} else if (eventSlave.dick > 9) {
				r.push(`${his} huge, soft cock spurting cum as it wiggles to your motions.`);
			} else if (eventSlave.dick > 0) {
				r.push(`${his} soft cock scattering cum all over the place as it flops around.`);
			} else if (eventSlave.belly >= 1500) {
				r.push(`${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnant`);
				}
				r.push(`belly adding to ${his} near-total discomfiture.`);
			} else if (eventSlave.weight > 95) {
				r.push(`${his} soft body jiggling as ${he} climaxes.`);
			} else if (eventSlave.muscles > 5) {
				r.push(`${his} abs convulsing deliciously as ${he} climaxes.`);
			} else if (canDoVaginal(eventSlave)) {
				r.push(`${his} pussy tightening.`);
			} else {
				r.push(`${his} poor anal ring tightening.`);
			}
			r.push(`The crowd that surrounds you during this noisy spectacle <span class="reputation inc">is suitably impressed.</span>`);
			repX(1250, "event", eventSlave);
			return r;
		}
	}
};


code:
App.Events.RESSHugeTits = class RESSHugeTits extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.boobAccessibility !== 1,
			() => V.ballsAccessibility !== 1,
			() => V.pregAccessibility !== 1,
			() => V.slaves.length > 2,
		]; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				hasAnyArms,
				hasAnyLegs,
				canTalk,
				s => s.boobs > 10000,
				s => s.devotion >= -20,
				s => (canDoAnal(s) || canDoVaginal(s))
			]
		];
	}

	execute(node) {
		/** @type {Array<App.Entity.SlaveState>} */
		let [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);

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

		let r = [];
		r.push(
			`There is a horrible crash from the shower. You rush in to see`,
			contextualIntro(V.PC, eventSlave, true),
			`face-down and covered in soap. ${He}'s uninjured, but ${his} tits are so huge that, soapy as ${he} is, ${he} can't seem to stand again. ${His} udders have ${him} pinned to the ground with ${his} legs sticking out of the shower. ${He} pleads`
		);
		if (eventSlave.lips > 70) {
			r.push(`through ${his} huge lips,`);
		} else if ((eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2)) {
			r.push(`through ${his} piercings,`);
		} else {
			r.push(`piteously,`);
		}
		r.push(Spoken(eventSlave, `"Help me, ${Master}!"`));

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Join ${him} in the shower`, join, virginityWarning()),
			new App.Events.Result(`Fuck ${his} immobilized body`, immobilized, ((eventSlave.anus === 0) || (eventSlave.vagina === 0)) ? `This option will take ${his} virginity` : null),
			new App.Events.Result(`Let ${him} figure it out`, figure),
		]);

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

		function join() {
			r = [];
			r.push(`You step into the running water and help ${him} to ${his} feet with exaggerated gallantry. ${He} seems surprised`);
			if (canSee(eventSlave)) {
				r.push(`and stares at`);
			} else {
				r.push(`faces`);
			}
			r.push(`you through the steam for a moment before looking away with a blush. Before long you have ${his} back against the shower wall, ${his} titanic udders`);
			if (eventSlave.belly >= 5000) {
				r.push(`and ${belly}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnant`);
				}
				r.push(`belly`);
			}
			r.push(`offering an amusing challenge as they slide soapily between you as you fuck. ${He} comes in no time at all, and a brief massage of ${his} huge soapy nipples produces a whimpering aftershock orgasm.`);
			if (canSee(eventSlave)) {
				r.push(`${His} ${App.Desc.eyesColor(eventSlave)} stare straight into yours`);
			} else {
				r.push(`You stare into ${his} ${App.Desc.eyesColor(eventSlave)}`);
			}
			r.push(`as ${he} writhes with overstimulation, <span class="devotion inc">${his} trust in your stewardship of ${his} pleasure total.</span>`);
			if (canDoVaginal(eventSlave)) {
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else if (canDoAnal(eventSlave)) {
				r.push(VCheck.Anal(eventSlave, 1));
			}
			eventSlave.devotion += 4;
			return r;
		}

		function immobilized() {
			let didAnal = false;
			let didVaginal = false;
			r = [];
			r.push(`You make no answer, groping ${his} soapy`);
			if (V.seeRace === 1) {
				r.push(eventSlave.race);
			}
			r.push(`buttocks.`);
			if ((eventSlave.anus > 2) && canDoAnal(eventSlave)) {
				r.push(`${His} rectum is so fucked out and loose that your groping hand almost slides up it.`);
			} else if ((eventSlave.vagina > 2) && canDoVaginal(eventSlave)) {
				r.push(`${His} pussy is so fucked out and loose that your groping hand almost slides up it.`);
			} else {
				r.push(`You fingerfuck ${him} for a while, the sting of the soap on ${his} sensitive insides making ${him} gasp.`);
			}
			r.push(`It's not like you can't tie ${him} up and fuck ${him} whenever you like, but sliding back and forth on ${his} soapy body is kind of nice.`);
			if (V.PC.dick === 0) {
				r.push(`You ride yourself against ${him} until you orgasm`);
			} else {
				r.push(`You leave a load of cum in`);
				if (canDoAnal(eventSlave) && canDoVaginal(eventSlave)) {
					r.push(`each of ${his} holes`);
					didVaginal = true;
					didAnal = true;
				} else if (canDoAnal(eventSlave)) {
					r.push(`${his} loosened butthole`);
					didAnal = true;
				} else {
					r.push(`${his} loosened vagina`);
					didVaginal = true;
				}
				if (V.PC.vagina !== -1) {
					r.push(`and make ${him} eat your pussy for a quick aftershock,`);
				}
			}
			r.push(`and only then do you help ${him} back to ${his} feet. ${He} drips soap, water, and`);
			if (V.PC.dick === 0) {
				r.push(`your juices.`);
			} else {
				r.push(`ejaculate.`);
			}
			r.push(`<span class="devotion inc">${He} has become more submissive.</span>`);
			if (didVaginal && didAnal) {
				r.push(VCheck.Both(eventSlave, 1));
			} else if (didVaginal) {
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else if (didAnal) {
				r.push(VCheck.Anal(eventSlave, 1));
			}
			eventSlave.devotion += 4;
			return r;
		}

		function figure() {
			eventSlave.devotion -= 5;
			return `${He} flounders around for a while until you get bored and leave ${him} to it. Eventually ${his} whining brings another slave in, who helps ${him}. This interdependence between slaves reduces ${his} devotion.`;
		}
	}
};

repo_name: CloudyCoffee/fc

license: mit


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => s.bellyPreg >= 10000,
			]
		];
	}

	execute(node) {
		/** @type {Array<App.Entity.SlaveState>} */
		let [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);

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

		let r = [];
		r.push(
			App.UI.DOM.combineNodes(App.UI.DOM.slaveDescriptionDialog(eventSlave), "'s"),
			`daily routine includes frequent application of special skin care to ${his} ${eventSlave.skin}, hugely swollen belly to prevent ${his} pregnancy from ruining ${his} appearance with unsightly stretch marks. Several times a day, ${he} visits the bathroom to`
		);
		if (!hasAnyArms(eventSlave)) {
			r.push(`have another slave`);
		} else {
			r.push(`carefully`);
		}
		r.push(`coat ${his} entire ${belly} stomach in the stuff. ${He}'s so pregnant that it's hard to reach`);
		if (eventSlave.belly >= 150000) {
			r.push(`most of its mass.`);
		} else {
			r.push(`the underside.`);
		}
		r.push(`The chore keeps ${him} occupied and stationary for quite a while; there's no need to leave ${him} sexually idle while ${he} completes it.`);

		App.Events.addParagraph(node, r);

		let choices = [new App.Events.Result(`Help ${him} with those hard to reach places`, reach)];
		if ((canDoAnal(eventSlave) && eventSlave.mpreg === 1) || canDoVaginal(eventSlave)) {
			choices.push(new App.Events.Result(`Gently fuck ${him} while helping ${him} apply lotion`, lotion, virginityWarning()));
		}
		if (canDoAnal(eventSlave)) {
			choices.push(new App.Events.Result(`${His} backdoor can't get more pregnant`, backdoor, virginityWarning(true)));
		} else {
			choices.push(new App.Events.Result(`${His} backdoor isn't pregnant`, unPregnant, virginityWarning(true)));
		}
		if ((canDoAnal(eventSlave) && eventSlave.mpreg === 1) || canDoVaginal(eventSlave) && eventSlave.belly >= 300000) {
			choices.push(new App.Events.Result(`Tip ${him} over and fuck ${him}`, tip, virginityWarning()));
		}
		App.Events.addResponses(node, choices);

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

		function reach() {
			r = [];
			r.push(`${He}'s absorbed enough with ${his} application that ${he} starts with surprise when you gently encircle ${him} from behind with a hug`);
			if (V.PC.belly >= 5000) {
				r.push(r.pop() + `, pushing your own gravid belly into the small of ${his} back`);
			}
			r.push(r.pop() + `. When you take the lotion and begin to lovingly massage it into ${his} harder to reach areas, ${he} sighs with pleasure and leans against you.`);
			if (hasAnyArms(eventSlave) && V.PC.belly >= 1500) {
				r.push(`${He} takes the lotion and begins to return the favor. You spend the rest of ${his} break carefully massaging each other's baby bumps.`);
			}
			if (!canTalk(eventSlave)) {
				if (eventSlave.voice === 0) {
					r.push(`${He} looks like ${he} would love to thank you, were ${he} not mute.`);
				} else if (eventSlave.accent >= 3) {
					r.push(`${He} looks like ${he} would love to thank you, if ${he} knew how.`);
				}
			} else {
				if (eventSlave.lips > 70) {
					r.push(`${He} murmurs through ${his} huge lips,`);
				} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
					r.push(`${He} murmurs through ${his} piercings,`);
				} else {
					r.push(`${He} murmurs,`);
				}
				r.push(Spoken(eventSlave, `"That felt really nice, ${Master}."`));
				if (V.PC.belly >= 1500) {
					r.push(`You have to agree, it did feel nice on your growing middle.`);
				}
			}
			r.push(`<span class="trust inc">${He} has become more trusting of you.</span>`);
			eventSlave.trust += 4;
			return r;
		}

		function lotion() {
			r = [];
			r.push(`${He}'s absorbed enough with ${his} application that ${he} starts with surprise when you gently encircle ${him} from behind with a hug`);
			if (V.PC.belly >= 5000) {
				r.push(r.pop() + `, pushing your own gravid belly into the small of ${his} back`);
			}
			r.push(r.pop() + `. When you take the lotion and begin to lovingly massage it into ${his} harder to reach areas, ${he} sighs with pleasure and leans back into you. ${He} feels`);
			if (V.PC.dick === 0) {
				r.push(`the warmth of your growing arousal`);
			} else {
				r.push(`your erection hard`);
			}
			r.push(`against ${him}, so ${he}`);
			if (isAmputee(eventSlave)) {
				r.push(`wriggles ${his} limbless form around on the floor so as to offer ${himself} to you.`);
			} else {
				r.push(`slowly kneels down with you into a comfortable lotus position on the bathroom floor.`);
			}
			if (eventSlave.mpreg === 1) {
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(VCheck.Vaginal(eventSlave, 1));
			}
			r.push(`Coupling like this, you can't`);
			if (V.PC.dick === 0) {
				r.push(`scissor`);
			} else {
				r.push(`fuck`);
			}
			r.push(`${him} all that hard, but that's just fine given`);
			if (V.PC.preg >= 5000) {
				r.push(`your condition.`);
			} else {
				r.push(`${his} condition.`);
			}
			r.push(`${He} snuggles back into you as you have gentle sex while looking after ${his} drum-taut skin.`);
			if (!canTalk(eventSlave)) {
				if (eventSlave.voice === 0) {
					r.push(`${He} looks like ${he} would love to thank you, were ${he} not mute.`);
				} else if (eventSlave.accent >= 3) {
					r.push(`${He} looks like ${he} would love to thank you, if ${he} knew how.`);
				}
			} else {
				if (eventSlave.lips > 70) {
					r.push(`${He} murmurs through ${his} huge lips,`);
				} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
					r.push(`${He} murmurs through ${his} piercings,`);
				} else {
					r.push(`${He} murmurs,`);
				}
				r.push(Spoken(eventSlave, `"That feels really nice, ${Master}."`));
			}
			r.push(`<span class="trust inc">${He} has become more trusting of you.</span>`);
			eventSlave.trust += 4;
			return r;
		}

		function backdoor() {
			r = [];
			r.push(`${He}'s absorbed enough with ${his} application that ${he} starts with surprise when you seize ${his} hips and bend ${him} over the sink for a quick assfuck.`);
			r.push(VCheck.Anal(eventSlave, 1));
			if (hasAnyArms(eventSlave)) {
				r.push(`${He} does ${his} best to brace ${himself} against the sink, but ${his}`);
				if (!hasBothArms(eventSlave)) {
					r.push(`hand is`);
				} else {
					r.push(`hands are`);
				}
				r.push(`slick from the lotion and ${he} slides around for a while before ${he} gives up and accepts that ${he}'s in for an uncomfortable time.`);
			}
			r.push(`Taking it up the ass while hugely pregnant isn't the most comfortable way to have sex, but such is the life of a sex slave.`);
			if (eventSlave.lactation === 1) {
				r.push(`As you pound ${him}, ${his} breasts, sore from lactation, give ${him} quite a bit of discomfort.`);
			} else if (eventSlave.boobs > 1000) {
				r.push(`As you pound ${him}, ${his} huge breasts compound the discomfort.`);
			}
			r.push(`When you finally finish and withdraw your`);
			if (V.PC.dick === 0) {
				r.push(`vibrating strap-on,`);
			} else {
				r.push(`cock,`);
			}
			r.push(`${he} groans with relief. <span class="devotion inc">${He} has become more submissive.</span>`);
			eventSlave.devotion += 4;
			return r;
		}

		function unPregnant() {
			r = [];
			r.push(`${He}'s absorbed enough with ${his} application that ${he} starts with surprise when you seize ${his} hips and bend ${him} over the sink for a quick assfuck.`);
			r.push(VCheck.Anal(eventSlave, 1));
			if (hasAnyArms(eventSlave)) {
				r.push(`${He} does ${his} best to brace ${himself} against the sink, but ${his}`);
				if (!hasBothArms(eventSlave)) {
					r.push(`hand is`);
				} else {
					r.push(`hands are`);
				}
				r.push(`slick from the lotion and ${he} slides around for a while before ${he} gives up and accepts that ${he}'s in for an uncomfortable time.`);
			}
			r.push(`Taking it up the ass while hugely pregnant isn't the most comfortable way to have sex, but such is the life of a sex slave.`);
			if (eventSlave.lactation === 1) {
				r.push(`As you pound ${him}, ${his} breasts, sore from lactation, give ${him} quite a bit of discomfort.`);
			} else if (eventSlave.boobs > 1000) {
				r.push(`As you pound ${him}, ${his} huge breasts compound the discomfort.`);
			}
			r.push(`When you finally finish and withdraw your`);
			if (V.PC.dick === 0) {
				r.push(`vibrating strap-on,`);
			} else {
				r.push(`cock,`);
			}
			r.push(`${he} groans with relief. <span class="devotion inc">${He} has become more submissive.</span>`);
			eventSlave.devotion += 4;
			return r;
		}

		function tip() {
			r = [];
			r.push(`${He}'s absorbed enough with ${his} application that ${he} starts with surprise when you seize ${his} hips and shove ${him} onto ${his} ${belly} stomach for a quick fuck.`);
			if (eventSlave.mpreg === 1) {
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(VCheck.Vaginal(eventSlave, 1));
			}
			if (hasAnyArms(eventSlave)) {
				r.push(`${He} does ${his} best to steady ${himself} atop the squirming mass, but ${his}`);
				if (!hasBothArms(eventSlave)) {
					r.push(`hand is`);
				} else {
					r.push(`hands are`);
				}
				r.push(`slick from the lotion and ${he} slides around for a while before ${he} gives up and accepts that ${he}'s in for an uncomfortable time.`);
			}
			if (eventSlave.mpreg === 1) {
				r.push(`Taking it up the ass`);
			} else {
				r.push(`Getting roughly fucked`);
			}
			r.push(`while hugely pregnant isn't the most comfortable way to have sex, neither is being forced to put more pressure on an already overfilled organ, but such is the life of a sex slave.`);
			if (eventSlave.lactation === 1) {
				r.push(`As you pound ${him}, ${his} breasts, sore from lactation, give ${him} quite a bit of discomfort.`);
			} else if (eventSlave.boobs > 1000) {
				r.push(`As you pound ${him}, ${his} huge breasts compound the discomfort.`);
			}
			r.push(`When you finally finish and withdraw your`);
			if (V.PC.dick === 0) {
				r.push(`vibrating strap-on,`);
			} else {
				r.push(`cock,`);
			}
			r.push(`${he} groans with relief and rolls onto ${his} side. <span class="devotion inc">${He} has become more submissive.</span>`);
			eventSlave.devotion += 4;
			return r;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => s.bellyPreg >= 300000,
			]
		];
	}

	execute(node) {
		/** @type {Array<App.Entity.SlaveState>} */
		let [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself, girl, woman, hers
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);

		App.Events.drawEventArt(node, eventSlave);

		const r = new SpacedTextAccumulator(node);
		r.push(`You are alerted to an issue regarding your`);
		if (eventSlave.broodmother === 2 && eventSlave.preg >= 30) {
			r.push(`hyperbroodmother,`);
		} else if (eventSlave.broodmother === 1 && eventSlave.preg >= 30) {
			r.push(`broodmother,`);
		} else {
			r.push(`debilitatingly pregnant slave,`);
		}
		r.push(contextualIntro(V.PC, eventSlave, true));
		r.addToLast(`. It seems`);
		if (V.pregAccessibility === 1 || V.ballsAccessibility === 1 || V.buttAccessibility === 1 || V.boobAccessibility === 1) {
			r.push(`that, despite updating your penthouse to accommodate extra wide slaves,`);
		} else {
			r.push(`since you have not yet updated your penthouse to accommodate slaves of ${his} girth,`);
		}
		r.push(`the poor ${girl} has gotten lodged in the doorway exiting`);
		if (eventSlave.rules.living === "luxurious") {
			r.push(`${his} room.`);
		} else if (eventSlave.ID === V.HeadGirlID && V.HGSuite === 1) {
			r.push(`${his} suite.`);
		} else {
			r.push(`the dormitory where ${he} sleeps.`);
		}
		r.push(`The menials assigned to care for ${him} have been struggling for several weeks to fit ${his} through this particular doorway, but refrained from informing you, as their ward`);
		if (eventSlave.devotion > 95) {
			r.push(`did not wish to worry you.`);
		} else if (eventSlave.devotion > 50) {
			r.push(`was concerned you would worry.`);
		} else if (eventSlave.devotion > 20) {
			r.push(`was concerned how you would react.`);
		} else if (eventSlave.trust < -20 && eventSlave.devotion > -10) {
			r.push(`feared how you would react.`);
		} else if (eventSlave.trust < -50) {
			r.push(`was terrified of how you might respond.`);
		} else {
			r.push(`argued you couldn't be trusted.`);
		}
		r.push(`You make a mental note to punish ${his} caretakers and then set out to see ${his} predicament for yourself.`);
		r.toParagraph();
		r.push(`The sight that greets you when you arrive is equal parts incredible and amusing. En route to the baths, the slave attempted to exit`);
		if (eventSlave.rules.living === "luxurious") {
			r.push(`${his} room`);
		} else if (eventSlave.ID === V.HeadGirlID && V.HGSuite === 1) {
			r.push(`${his} suite`);
		} else {
			r.push(`the dorm`);
		}
		r.push(`backwards and, as a result, you have a glorious view of ${his}`);
		if (eventSlave.broodmother === 2 && eventSlave.preg >= 30) {
			r.push(`mind boggling, obscenely swollen belly`);
		} else if (eventSlave.broodmother === 1 && eventSlave.preg >= 30) {
			r.push(`massive, brood swollen belly`);
		} else {
			r.push(`inhumanly gravid belly`);
		}
		r.push(`squeezed painfully by the inadequate doorway and framing the attractive rear view of the rest of ${his} body, including ${his}`);
		if (eventSlave.butt > 5) {
			r.push(`debilitatingly huge ass cheeks.`);
		} else if (eventSlave.butt > 2) {
			r.push(`plush ass.`);
		} else {
			r.push(`cute little ass.`);
		}
		r.toParagraph();
		r.push(`${He} cranes ${his} neck, glancing over ${his} shoulder to give you a pleading look.`);

		r.toParagraph();
		App.Events.addResponses(node, [
			new App.Events.Result(`Abuse ${him}`, abuse, virginityWarning()),
			new App.Events.Result(`Fuck ${him}`, fuck, virginityWarning()),
			new App.Events.Result(`Try the 'Butter Strategy'`, butter),
			new App.Events.Result(`Leave ${him} to figure it out`, leave),
		]);

		function virginityWarning() {
			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`;
			}
		}

		function abuse() {
			const r = new SpacedTextAccumulator();
			r.push(`You lean against a wall and take a moment to enjoy your slave's discomfort. Realizing that ${his} ${getWrittenTitle(eventSlave)} is intending to do nothing, ${he} blushes and begins pulling on ${his} belly, attempting to free ${himself}.`);
			if (eventSlave.broodmother === 2 && eventSlave.preg >= 30) {
				r.push(`${His} innumerable brood are awakened by ${his} exertions and begin to move, testing the thin walls of the womb constraining them and causing ${his} belly to throb ominously. You count the number of infants distinctly outlined against your poor hyperbroodmother's straining body.`);
			} else if (eventSlave.broodmother === 1 && eventSlave.preg >= 30) {
				r.push(`With a groan of effort, the broodmother manages to pull ${his} belly slightly further out through the doorway, but, in the effort, only really manages to wedge it more firmly. It bulges ominously from the added pressure.`);
			} else {
				r.push(`The massively pregnant slave's belly clutches in a false contraction and ${he} pulls several`);
				if (V.showInches === 2) {
					r.push(`inches`);
				} else {
					r.push(`centimeters`);
				}
				r.push(`further out through the door frame before it expands again, leaving ${his} even more hopelessly stuck`);
			}
			r.toParagraph();
			if (!canTalk(eventSlave)) {
				r.push(`${He} moans and rubs up and down what little ${he} can reach of ${his} belly while looking back at you with more urgency. It's clear ${he} is in severe distress.`);
			} else {
				r.push(`"${Master}," ${he} says through clenched teeth.`,
					Spoken(eventSlave, `"Please."`)
				);
			}
			r.toParagraph();
			r.push(`You judge that you've seen enough and move forward.`);
			if (eventSlave.butt > 10) {
				r.push(`Wading in between ${his} huge ass cheeks`);
			} else if (eventSlave.butt > 4) {
				r.push(`Grabbing a handful of one generous ass cheek,`);
			} else {
				r.push(`Slapping a pert ass cheek,`);
			}
			if (canDoVaginal(eventSlave)) {
				r.push(`you hilt yourself in ${his} pregnant pussy and begin pounding.`);
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else if (canDoAnal(eventSlave)) {
				r.push(`you hilt yourself in ${his} butthole and begin pounding.`);
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(`you push them together around your cock and begin pounding.`);
			}
			r.push(`${His} stomach distorts back and forth under your vigorous ministrations before, with a "pop," belly, slave, and owner come tumbling through the threshold. ${He} yelps in shock and pain as ${his} belly impacts the ground as the sound of ${his} voice, coupled with the feeling of jolting up and down on top of your slave's abused gut, sends you over the edge. You ejaculate`);
			if (canDoVaginal(eventSlave)) {
				r.push(`into ${his} fertile, wanting hole`);
			} else if (canDoAnal(eventSlave)) {
				r.push(`into ${his} needy hole`);
			} else {
				r.push(`across ${his} back`);
			}
			r.push(`and then slide off of ${him} to instruct your servants to fix the door frame before they carry ${him} to ${his} duties for the day.`);
			eventSlave.trust -= 20;
			healthDamage(eventSlave, 20);
			r.toParagraph();
			return r.container();
		}

		function fuck() {
			const r = new SpacedTextAccumulator();
			r.push(`You can't help but be aroused by the sight of your swollen, helpless slave, and you take off your pants, revealing your erection. The slave's`);
			if (canSee(eventSlave)) {
				r.push(`backward glance falls on your dick`);
			} else if (canHear(eventSlave)) {
				r.push(`ears perk up`);
			} else {
				r.push(`head tilts to face you`);
			}
			r.push(`and ${he}`);
			if (eventSlave.devotion > 95) {
				r.push(`licks ${his} lips,`);
				if (hasAnyLegs(eventSlave)) {
					if (hasBothLegs(eventSlave)) {
						r.push(`spreading ${his} legs`);
					} else {
						r.push(`moving ${his} leg`);
					}
					r.push(`and revealing more of ${his} massive underbelly while angling ${his} wanting`);
					if (canDoVaginal(eventSlave)) {
						r.push(`pussy`);
					} else {
						r.push(`ass`);
					}
					r.push(`at the perfect angle for fucking.`);
				} else {
					r.push(`wiggling the stumps of ${his} legs and swiveling ${his} hips to give you a clear angle at ${his} hungry`);
					if (canDoVaginal(eventSlave)) {
						r.push(`pussy.`);
					} else {
						r.push(`ass.`);
					}
				}
			} else if (eventSlave.devotion > 50) {
				r.push(`blushes, swiveling ${his} hips to give you easy access to ${his}`);
				if (canDoVaginal(eventSlave)) {
					r.push(`pussy.`);
				} else {
					r.push(`ass.`);
				}
			} else if (eventSlave.devotion > 20) {
				r.push(`blushes and leans into ${his} belly, knowing what to expect.`);
			} else if (eventSlave.trust < -20 && eventSlave.devotion > -10) {
				r.push(`moans nervously.`);
			} else if (eventSlave.trust < -50) {
				r.push(`yelps, turning away from you and`);
				if (canSee(eventSlave)) {
					r.push(`reflexively`);
				}
				r.push(`clenching ${his} eyes shut as ${his}`);
				if (hasBothLegs(eventSlave)) {
					r.push(`legs instinctively clench together to hide ${his}`);
					if (canDoVaginal(eventSlave)) {
						r.push(`pussy.`);
					} else {
						r.push(`ass.`);
					}
				} else if (hasAnyLegs(eventSlave)) {
					r.push(`leg bends and flexes in a futile attempt to hide ${his}`);
					if (canDoVaginal(eventSlave)) {
						r.push(`pussy.`);
					} else {
						r.push(`ass.`);
					}
				} else {
					r.push(`stumps push toward each other, clearly trying (and failing) to conceal ${his}`);
					if (canDoVaginal(eventSlave)) {
						r.push(`pussy.`);
					} else {
						r.push(`ass.`);
					}
				}
			} else {
				r.push(`snorts derisively despite ${his} vulnerability.`);
			}
			r.toParagraph();
			r.push(`You step forward and run an appreciative hand over the surface of ${his} belly. ${His} womb is packed so full that the outline of ${his} squirming children is obvious under ${his} stretched-thin flesh. ${He} groans at your touch, clearly in some distress, and you promise ${him} that you'll free ${him} once you've finished up.`);
			if (eventSlave.devotion > 95) {
				r.push(`The slave is clearly too aroused by your fondling to`);
				if (canHear(eventSlave)) {
					r.push(`hear what you're saying`);
				} else {
					r.push(`interpret your body language`);
				}
				r.push(`and leans back into you, stretching against ${his} tortured belly to nibble at your ear.`);
			} else if (eventSlave.devotion > 50) {
				r.push(`The slave says nothing, but wiggles ${his} ass against your hips, making it clear ${he}'s ready.`);
			} else if (eventSlave.devotion > 20) {
				r.push(`You can see tears streaming down the slave's face from the discomfort ${he}'s experiencing, but ${he} nods that ${he}'s ready.`);
			} else if (eventSlave.trust < -20 && eventSlave.devotion > -10) {
				r.push(`The slave cries and begs you to finish quickly and help ${him} before ${he} bursts.`);
			} else if (eventSlave.trust < -50) {
				r.push(`The shock of contact with your body causes the terrified slave's skin to contract, as if ${he}'s trying to pull away despite ${his} current reality, and ${his} only response to your promise is sobbing.`);
			} else {
				r.push(`The slave`);
				if (!canTalk(eventSlave)) {
					r.push(`motions for you to`);
				} else {
					r.push(`responds by telling you to`);
				}
				r.push(`just fuck ${him} already and let ${him} move on with ${his} day.`);
			}
			r.push(`You let your hand wander downward`);
			if (canDoVaginal(eventSlave)) {
				r.push(`and then push down on the base of ${his} clit with finger and thumb, making ${him} whimper, before removing your hand and burying your cock inside ${him}.`);
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else if (canDoAnal(eventSlave)) {
				r.push(`and circle ${his} anus with a finger, making ${him} whimper, before removing your hand and burying your cock inside ${him}.`);
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(`and trace the edge of ${his} chastity with a finger, making ${him} whimper, before removing your hand and squeezing ${his} rear around your cock.`);
			}
			r.push(`As you fuck ${him}, ${his} poor, tortured belly wobbles against the constraining door frame and the frame itself groans in protest. ${He} grinds in rhythm to your pistoning until the back and forth movement of ${his} sloshing tummy overpowers ${his} efforts and sends ${him} careening back and forth between its oceanic movements and your less than tender ministrations. The sensation of fucking a ${woman} who is literally a slave to the motion of ${his} own womb drives you over the edge and you pull out, ejaculating all over ${his}`);
			if (eventSlave.butt > 10) {
				r.push(`enveloping ass cleavage.`);
			} else if (eventSlave.butt > 4) {
				r.push(`fat, waiting ass cheeks.`);
			} else {
				r.push(`pert ass.`);
			}
			r.toParagraph();
			r.push(`You step back, taking one last appreciative look at your trapped slave, then call a team of menials to remove the door from its foundation to free ${him}. Though your slave is extricated uninjured, your decision to use ${him} before saving ${him} leaves the ${girl} trusting you less. You could pay to have the door widened, but then you wouldn't get this opportunity again, would you?`);
			eventSlave.trust -= 10;
			healthDamage(eventSlave, 10);
			r.toParagraph();
			return r.container();
		}

		function butter() {
			const r = new SpacedTextAccumulator();
			r.push(`You ponder ${his} predicament for a moment before settling on a solution. You procure an industrial-sized jar of curative-laced moisturizing butter — specially formulated to ease the strain of hypermassive pregnancy — and explain to your slave that, to free ${him}, you're going to need to completely cover ${him} in it so that ${he} can squeeze through.`);
			if (eventSlave.devotion > 95) {
				r.push(`${He} grins at you and then huffs, pretending to be put off by the idea.`);
			} else if (eventSlave.devotion > 50) {
				r.push(`${He} quirks an eyebrow, then smiles, clearly intrigued.`);
			} else if (eventSlave.devotion > 20) {
				r.push(`${He} nods, happy to`);
				if (canHear(eventSlave)) {
					r.push(`hear`);
				} else {
					r.push(`know`);
				}
				r.push(`you've considered a way to free ${him} without causing ${him} undue harm.`);
			} else if (eventSlave.trust < -20 && eventSlave.devotion > -10) {
				r.push(`${He} had seemed uneasy when you first described your idea, but seems to resign ${himself} to it once you finish your description.`);
			} else if (eventSlave.trust < -50) {
				r.push(`The wide-eyed slave nods as you describe your idea, clearly hoping you'll free ${him} as quickly as possible so that ${he} can get away from you.`);
			} else {
				r.push(`${He} laughs derisively at you after you describe your idea, then motions for you to get on with it.`);
			}
			r.push(`You move toward ${him} and slather a generous helping of the stuff over ${his} back and`);
			if (eventSlave.butt > 10) {
				r.push(`couch-smothering ass,`);
			} else if (eventSlave.butt > 4) {
				r.push(`fat ass cheeks,`);
			} else {
				r.push(`petite ass,`);
			}
			r.push(`for the sake of "being thorough." You then move forward, covering the parts of ${his} belly you can reach from behind and taking special care to`);
			if (eventSlave.boobs >= 20000) {
				r.push(`massage the soft butter into every`);
				if (V.showInches === 2) {
					r.push(`inch`);
				} else {
					r.push(`centimeter`);
				}
				r.push(`of ${his} colossal tits, noting with satisfaction ${his} distant nipples, stuck on the other side of the doorway with the bulk of ${his} room filling breasts, harden with arousal.`);
			} else if (eventSlave.boobs >= 12000) {
				r.push(`massage the soft butter into ${his} massive tits as they push up between the arch of the doorway and ${his} bulging belly. You note with satisfaction ${his} nipples harden with arousal.`);
			} else if (eventSlave.boobs >= 7000) {
				r.push(`massage the soft butter into ${his} monstrous tits, enjoying the struggle it takes to heft each butter-slick, glistening melon with both hands. You note with satisfaction ${his} nipples harden with arousal.`);
			} else if (eventSlave.boobs >= 3000) {
				r.push(`massage the soft butter into each of ${his} huge tits. Your slave cranes ${his} head back a bit to avoid being smothered by ${his} own breasts as you work the butter into them, but you can tell ${he}'s aroused by what you're doing — ${his} nipples have turned hard as rocks.`);
			} else if (eventSlave.boobsImplant/eventSlave.boobs >= .60) {
				r.push(`massage the soft butter into ${his} fat, fake titties, noting with satisfaction ${his} nipples harden with arousal.`);
			} else if (eventSlave.boobs >= 650) {
				r.push(`massage the soft butter into ${his} big tits, noting with satisfaction ${his} nipples harden with arousal.`);
			} else if (eventSlave.boobs >= 300) {
				r.push(`massage the soft butter into ${his} small, girlish chest, noting with satisfaction ${his} nipples harden with arousal.`);
			} else {
				r.push(`massage the soft butter into ${his} flat chest, noting with satisfaction ${his} nipples harden with arousal.`);
			}
			r.toParagraph();
			r.push(`Satisfied with your covering of your slave's back half, you then resolve to work on ${his} front. Getting down on your hands and knees, you crawl through the narrow triangle of space between the base of your slave's massive belly, the floor, and the doorway. It's a tight squeeze, and you take longer than you need to in order to enjoy the sound of your slave groaning as you rub up against ${his} sweaty, buttered up belly, but you eventually make it through. Taking generous handfuls of butter, you slick up the front half of your slave's stomach, starting at the flattened nub of ${his} pressure-obliterated belly button and slowly working your way up to the round oval of baby-packed flesh being constricted by the doorway.`);
			r.toParagraph();
			r.push(`With your slave's body dripping with the thick moisturizer, you call out to ${him} to start pulling ${his} belly through the doorway, pushing your body up against ${his} stomach to help push. You didn't bother to strip your clothes while buttering ${his} gravid figure and, as you crush up against ${him} and heave, again and again, against the sheer mass of ${his} abdomen, you can't help but get aroused by the way your greasy clothes rub between your body and ${hers} with each motion. At first, ${his} belly is so firmly lodged that it doesn't move, but momentum eventually builds up and, with an audible "pop," the poor baby-laden breeder finally breaks free from ${his} containment, falling onto ${his} back and pulling you with ${him} into an absurd, buttery mass of flailing limbs and giggles. You take some time to flip ${him} into a position where ${he} won't be crushed by the weight of ${his} own womb, and then take some more time to enjoy the fruits of your labors.`);
			r.toParagraph();
			r.push(`Once finished, you allow your servants to carry your thoroughly satisfied slave to the baths for a needed cleaning. You could pay to have the door widened, but then you wouldn't have such a perfect excuse to lather ${him} in cream, would you?`);
			eventSlave.devotion += 5;
			r.toParagraph();
			return r.container();
		}

		function leave() {
			eventSlave.devotion -= 2;
			eventSlave.trust -= 2;
			return `You leave ${him} to get ${himself} out of this situation and return to your daily affairs, though not without focusing a camera on the distraught breeder first. For several hours, you enjoy the sight of ${his} backside struggling to squeeze through the doorway before ${he} finally manages to figure it out. ${He} blames you for this indignity and worries about what else you have waiting to torment ${him}.`;
		}
	}
};


code:
App.Events.RESSIgnorantHorny = class RESSIgnorantHorny 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.devotion <= 50,
				s => s.devotion >= -20,
				s => s.weekAcquired > 0,
				s => V.week - s.weekAcquired < 10,
				s => s.energy > 20,
				s => s.anus !== 0,
				s => s.vagina !== 0,
			]
		];
	}

	execute(node) {
		/** @type {Array<App.Entity.SlaveState>} */
		let [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself, girl
		} = getPronouns(eventSlave);
		const {title: Master, say} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);
		const PC = V.PC;

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

		let r = [];
		r.push(
			`First on the inspection schedule is`,
			App.UI.DOM.combineNodes(contextualIntro(PC, eventSlave, true), ","),
			`and as you watch ${him} enter your office, you note several good signs about ${his} progress towards becoming a good sex slave. ${He} enters obediently, without pretending to be thrilled to be here, but also without hesitation. Best of all,`
		);
		if (eventSlave.chastityPenis && canAchieveErection(eventSlave)) {
			r.push(`${he}'s squirming with discomfort over the lack of room in ${his} chastity.`);
		} else if (eventSlave.dick > 4 && canAchieveErection(eventSlave)) {
			r.push(`${he}'s sporting a massive half-erection which slaps lewdly against ${his} thighs as ${he} walks.`);
		} else if (eventSlave.dick > 2 && canAchieveErection(eventSlave)) {
			r.push(`${his} dick is half-erect, bobbing lewdly as ${he} walks.`);
		} else if (eventSlave.dick > 0 && canAchieveErection(eventSlave)) {
			r.push(`${his} pathetic little bitch dick is half-erect.`);
		} else if (eventSlave.dick > 6) {
			r.push(`${his} enormous dick is slightly engorged and dripping precum.`);
		} else if (eventSlave.dick > 0) {
			r.push(`${his} soft bitch dick is dripping precum.`);
		} else if (eventSlave.labia > 1) {
			r.push(`${his} lovely pussylips are flushed and wet.`);
		} else if (eventSlave.clit > 1) {
			r.push(`${his} glorious bitch button is stiffly erect.`);
		} else if (eventSlave.vagina === -1) {
			r.push(`${he}'s unconsciously sticking ${his} ass out. Getting fucked there is ${his} main sexual outlet, now that ${he} lacks genitals.`);
		} else {
			r.push(`${his} pussy is flushed and moist.`);
		}
		App.Events.addParagraph(node, r);

		r = [];
		if (eventSlave.aphrodisiacs > 0 || eventSlave.inflationType === "aphrodisiac") {
			r.push(`The aphrodisiacs racing through ${his} system have ${him} desperate to get off, right now.`);
		} else if (eventSlave.piercing.genitals.smart && eventSlave.clitSetting !== "none") {
			r.push(His);
			if (eventSlave.vagina > -1) {
				r.push(`clit`);
			} else {
				r.push(`frenulum`);
			}
			r.push(`piercing is keeping ${his} arousal exquisitely balanced for ${his} inspection.`);
		} else {
			r.push(`The mild aphrodisiacs in the slave food have clearly built up some arousal that ${he} hasn't been able to address recently.`);
		}
		r.push(`${He} hasn't been with you long; it's been a mere ${V.week-eventSlave.weekAcquired > 1 ? `${V.week-eventSlave.weekAcquired} weeks` : `week`} since ${he} became your slave. ${He} may not be fully cognizant of how ${his} libido is being altered. New slaves aren't informed of the true extent of your abilities to force sexual need. It can be useful for a new ${girl} to wonder if some of the horniness ${he} feels is natural, and suspect that ${he}'s nothing but a dirty slut who deserves to be a sex slave.`);

		App.Events.addParagraph(node, r);

		let choices = [new App.Events.Result(`Tell ${him} the truth`, truth)];
		if (eventSlave.fetish !== "cumslut" || eventSlave.fetishKnown !== 1) {
			choices.push(new App.Events.Result(`Trade some oral for release`, trade));
		}
		if (eventSlave.fetish !== "buttslut" || eventSlave.fetishKnown !== 1) {
			if (eventSlave.vagina === -1 && eventSlave.attrXY <= 65) {
				choices.push(new App.Events.Result(`Make ${him} cum like a girl`, cum));
			} else if (eventSlave.vagina > -1) {
				choices.push(new App.Events.Result(`Work on broadening ${his} sexual horizons`, broaden));
			}
		}
		App.Events.addResponses(node, choices);

		function truth() {
			let frag = document.createDocumentFragment();
			r = [];
			r.push(`You explain the effects of the`);
			if (eventSlave.aphrodisiacs > 0 || eventSlave.inflationType === "aphrodisiac") {
				r.push(`sex drugs`);
			} else if (eventSlave.piercing.genitals.smart && eventSlave.clitSetting !== "none") {
				r.push(`advanced`);
				if (eventSlave.vagina > -1) {
					r.push(`clit`);
				} else {
					r.push(`frenulum`);
				}
				r.push(`piercing`);
			} else {
				r.push(`slave food`);
			}
			r.push(`briefly. Comprehension dawns across ${his}`);
			if (eventSlave.faceShape !== "normal") {
				r.push(eventSlave.faceShape);
			}
			r.push(
				`face.`,
				Spoken(eventSlave, `"Yes ${Master},"`),
				`${he} ${say}s quietly, more to buy time to formulate a response than anything else.`,
				Spoken(eventSlave, `"Um. I still really, really want to cum, though. W-would you please fuck me? Please, please, ${Master}, please fuck`)
			);
			if (eventSlave.vagina > 0 && eventSlave.preg > eventSlave.pregData.normalBirth/4 && canDoVaginal(eventSlave)) {
				r.push(Spoken(eventSlave, `my pregnant pussy."`));
			} else if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) {
				r.push(`me."`);
			} else if (canDoAnal(eventSlave)) {
				r.push(`my butt."`);
			} else {
				if (eventSlave.vagina > 0 && eventSlave.preg > eventSlave.pregData.normalBirth/4) {
					r.push(Spoken(eventSlave, `my pregnant pussy.`));
				} else if (eventSlave.vagina > 0) {
					r.push(`me.`);
				} else {
					r.push(`my butt.`);
				}
				r.push(Spoken(eventSlave, `I need it so bad right now, please rip off my chastity and fuck me senseless."`));
			}
			r.push(`A vague hint of embarrassment at begging for`);
			if (PC.dick !== 0) {
				r.push(`a hard`);
				if (PC.vagina !== -1) {
					r.push(`futa`);
				}
				r.push(`dicking`);
			} else {
				r.push(`your strap-on`);
			}
			r.push(`flickers across ${his} face, but hope for sexual release extinguishes it quickly.`);
			App.Events.addParagraph(frag, r);

			r = [];
			if (canDoAnal(eventSlave) || canDoVaginal(eventSlave)) {
				r.push(`${He} groans with relief as your`);
				if (PC.dick !== 0) {
					r.push(`cock`);
				} else {
					r.push(`phallus`);
				}
				r.push(
					`enters ${him}. ${He} does not orgasm immediately, but ${he} knows sweet release is coming. You have ${him} atop your desk, on ${his} back, and ${he}'s participating in ${his} own sexual degradation by holding ${his} legs spread wide apart for you. "Ohh," ${he} moans as you fuck ${him},`,
					Spoken(eventSlave, `"thank you for telling me why I feel this way, ${Master}. I guess this is how I, oh, am now? Oh, oh, it feels so g-good! Yes! AHH!"`)
				);
				if (PC.dick !== 0) {
					r.push(His);
					if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) {
						r.push(`cunt`);
					} else {
						r.push(`asshole`);
					}
					r.push(`tightens around your shaft delightfully as ${he} climaxes.`);
				} else {
					r.push(`${He} shudders with climax.`);
				}
				r.push(`${He} smiles <span class="trust inc">trustingly</span> up at you in the afterglow,`);
				if (eventSlave.balls > 0) {
					r.push(`${his} ejaculate`);
					if (eventSlave.chastityPenis === 1) {
						r.push(`seeping from ${his} chastity cage,`);
					} else {
						r.push(`glistening on ${his}`);
						if (eventSlave.belly > 1500) {
							r.push(belly);
							if (eventSlave.bellyPreg >= 1500) {
								r.push(`gravid`);
							}
						}
						r.push(`belly,`);
					}
				}
				r.push(`touched that you would tell ${him} something like that so honestly.`);
				if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) {
					r.push(VCheck.Both(eventSlave, 1));
				} else {
					r.push(VCheck.Anal(eventSlave, 1));
				}
			} else {
				r.push(`${He} groans with lust as pull ${him} onto your lap to make out. "Ohh," ${he} moans as you run your hands across ${his}`);
				if (eventSlave.boobsImplant >= 1000 && (eventSlave.boobsImplant/eventSlave.boobs) >= .60) {
					r.push(`bimbo`);
				} else if (eventSlave.boobs >= 1000 && eventSlave.butt > 5 && eventSlave.hips > 0) {
					r.push(`fecund`);
				} else if (eventSlave.boobs >= 1000 && eventSlave.butt > 5) {
					r.push(`voluptuous`);
				} else if (eventSlave.weight > 190) {
					r.push(`voluminous`);
				} else if (eventSlave.belly >= 5000) {
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`gravid`);
					} else if (eventSlave.bellyImplant >= 3000) {
						r.push(`rounded`);
					} else {
						r.push(`swollen`);
					}
				} else if (eventSlave.weight > 30) {
					r.push(`soft`);
				} else if (eventSlave.muscles > 30) {
					r.push(`ripped`);
				} else if (eventSlave.muscles > 5) {
					r.push(`toned`);
				} else if (eventSlave.boobs >= 500) {
					r.push(`sultry`);
				} else {
					r.push(`needy`);
				}
				r.push(
					`body,`,
					Spoken(eventSlave, `"thank you for telling me why I feel this way, ${Master}. I guess this is how I, oh, am now?"`),
					`You reward ${him} for the realization by`
				);
				switch (eventSlave.nipples) {
					case "huge":
						r.push(`stroking ${his} lewdly erect nipples.`);
						break;
					case "flat":
						r.push(`tweaking ${his} revealed nipples.`);
						break;
					case "puffy":
						r.push(`cupping and fondling ${his} puffy nipples.`);
						break;
					case "partially inverted":
						r.push(`teasing ${his} fully exposed nipples.`);
						break;
					case "inverted":
						r.push(`squeezing ${his} puffy areolae until ${his} inverted nipples pop out for you to tease.`);
						break;
					case "fuckable":
						r.push(`sticking your fingers deep into ${his} nipples.`);
						break;
					default:
						r.push(`tweaking ${his} ${eventSlave.nipples} nipples.`);
				}
				r.push(`The pent-up ${girl} is so desperate for release, you can feel ${him} trembling with ecstasy from the nipple stimulation alone.`);
				r.push(Spoken(eventSlave, `"Oh, oh, it feels so g-good! Yes! AHH!"`));
				r.push(`${He} shudders with climax, smiling <span class="trust inc">trustingly</span> up at you in the afterglow,`);
				if (eventSlave.balls > 0) {
					r.push(`${his} ejaculate`);
					if (eventSlave.chastityPenis === 1) {
						r.push(`seeping from ${his} chastity cage,`);
					} else {
						r.push(`glistening on ${his}`);
						if (eventSlave.belly > 1500) {
							r.push(belly);
							if (eventSlave.bellyPreg >= 1500) {
								r.push(`gravid`);
							}
						}
						r.push(`belly,`);
					}
				}
				r.push(`touched that you would tell ${him} something like that so honestly.`);
				seX(eventSlave, "mammary", PC, "penetrative");
			}
			eventSlave.trust += 4;
			App.Events.addParagraph(frag, r);
			return r;
		}

		function trade() {
			const hands = (hasBothArms(eventSlave)) ? `hands` : `hand`;
			let frag = document.createDocumentFragment();
			r = [];
			r.push(`You observe, noncommittally, that ${he} seems ready to get off.`);
			r.push(
				Spoken(eventSlave, `"Yes ${Master}!"`),
				`${he} squeals, too`
			);
			if (eventSlave.intelligence+eventSlave.intelligenceImplant >= -50) {
				r.push(`horny`);
			} else {
				r.push(`stupid`);
			}
			r.push(`to notice the sarcasm. Sighing inwardly, you slide yourself back from your desk and glance downward significantly, indicating your`);
			if (PC.dick !== 0) {
				r.push(`dick`);
				if (PC.vagina !== -1) {
					r.push(`and pussy`);
				}
			} else {
				r.push(`girl parts`);
			}
			r.push(r.pop() + `. ${He} hurries over, almost throwing ${himself} at your feet in ${his} eagerness. "Touch yourself", you say, making it an imperious command rather than kind permission. ${He} moans into your`); // TODO: review talking PC
			if (PC.dick !== 0) {
				r.push(`cock`);
			} else {
				r.push(`cunt`);
			}
			r.push(`with gratitude as ${he}`);
			if (canDoVaginal(eventSlave)) {
				if (eventSlave.dick > 0 && !(eventSlave.chastityPenis)) {
					r.push(`wraps one hand around ${his} dick and slips the other into ${his} pussy.`);
				} else {
					r.push(`dives for ${his} pussy with`);
					if (hasBothArms(eventSlave)) {
						r.push(`both hands.`);
					} else {
						r.push(`${his} hand.`);
					}
				}
			} else if (eventSlave.dick > 0 && !(eventSlave.chastityPenis)) {
				if (canAchieveErection(eventSlave)) {
					if (eventSlave.dick > 4) {
						r.push(`wraps ${his} ${hands} around ${his} huge erection.`);
					} else if (canDoAnal(eventSlave) && eventSlave.prostate > 0) {
						r.push(`wraps a hand around ${his} throbbing erection and reaches around to finger ${his} butt and stimulate ${his} prostate.${his}`);
					} else {
						r.push(`wraps a hand around ${his} throbbing erection.`);
					}
				} else {
					if (eventSlave.dick > 4) {
						r.push(`dives for ${his} huge, soft cock with`);
						if (hasBothArms(eventSlave)) {
							r.push(`both hands.`);
						} else {
							r.push(`${his} hand.`);
						}
					} else {
						r.push(`reaches down to fondle ${his} limp dick.`);
					}
				}
			} else if (canDoAnal(eventSlave)) {
				if (eventSlave.dick === 0) {
					r.push(`reaches down and around to rub ${his}`);
					if (canDoAnal(eventSlave)) {
						r.push(`anus and`);
					}
					r.push(`perineum.`);
				} else {
					if (eventSlave.vagina === -1) {
						r.push(`reaches around to finger ${his} butt, since that's ${his} only hole.`);
					} else if (eventSlave.chastityVagina === 1) {
						r.push(`reaches around to finger ${his} butt, since ${his} pussy's in chastity.`);
					} else {
						r.push(`dives for ${his} pussy with`);
						if (hasBothArms(eventSlave)) {
							r.push(`both hands.`);
						} else {
							r.push(`${his} hand.`);
						}
					}
				}
			} else if (eventSlave.vagina === -1 && eventSlave.dick === 0) {
				if (eventSlave.balls > 4) {
					r.push(`cups ${his} desperate balls, massaging them and encouraging them to release their pent-up cum.`);
				} else {
					r.push(`reaches down and around to rub ${his}`);
					if (canDoAnal(eventSlave)) {
						r.push(`anus and`);
					}
					r.push(`perineum.`);
				}
			} else {
				r.push(`brings ${his} ${hands} to ${his} breasts to`);
				if (eventSlave.nipples !== "fuckable") {
					r.push(`tease ${his} erect`);
				} else {
					r.push(`finger ${his} swollen`);
				}
				r.push(`nipples.`);
			}
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`${He}'s extremely pent up, and orgasms twice with`);
			if (PC.dick !== 0) {
				r.push(`your dick in ${his} mouth`);
				if (PC.vagina !== -1) {
					r.push(`first and ${his} tongue quivering along your pussylips second`);
				}
			} else {
				r.push(`${his} mouth on your cunt`);
			}
			r.push(r.pop() + `. The mental effects of this formative little experience are impossible to control with precision. Over the next few days, you notice that whenever`);
			if (canSee(eventSlave)) {
				r.push(`${he} sees you,`);
			} else {
				r.push(`you see ${him},`);
			}
			if (random(0, 1) === 1) {
				r.push(`${he} licks ${his} lips unconsciously. ${He} seems to be developing the beginnings of a lovely <span class="fetish gain">oral fixation.</span>`);
				eventSlave.fetish = "cumslut";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 10;
			} else {
				r.push(`${he} betrays mixed feelings. The shocking intimacy of reaching sexual release as ${he} used ${his} mouth to pleasure you seems to be <span class="devotion inc">affecting ${him}.</span>`);
				eventSlave.devotion += 4;
			}
			seX(eventSlave, "oral", PC, "penetrative");
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function cum() {
			let frag = document.createDocumentFragment();
			r = [];
			r.push(`You order ${him} to get ${his} ass up on your desk. ${He} obeys, though not without a flicker of trepidation. ${He} points ${his} butt at you like a sex slave should, and doesn't crane around to`);
			if (canSee(eventSlave)) {
				r.push(`see`);
			} else {
				r.push(`feel`);
			}
			r.push(`what you're doing behind ${him}, but ${he}'s stiff with the awareness that`);
			if (PC.dick !== 0) {
				r.push(`there's almost certainly a hard`);
				if (PC.vagina !== -1) {
					r.push(`futa`);
				}
				r.push(`dick about`);
			} else {
				r.push(`you're almost certainly donning a strap-on`);
			}
			r.push(`to slide inside ${his} girly asspussy. ${He}'s not wrong, and ${he} lets out a little moan as`);
			if (PC.dick !== 0) {
				r.push(`your cockhead`);
				if (PC.vagina !== -1) {
					r.push(r.pop() + `, which you kindly lubed with a bit of your pussyjuice,`);
				}
			} else {
				r.push(`its broad tip`);
			}
			if (eventSlave.anus > 2) {
				r.push(`slides easily inside ${his} whorish anus.`);
			} else if (eventSlave.anus === 2) {
				r.push(`slides up ${his} experienced butthole.`);
			} else {
				r.push(`forces its way inside ${his} tight sphincter.`);
			}
			App.Events.addParagraph(frag, r);
			r = [];
			r.push(`As you fuck ${him}, you pull ${his} torso up so you can play with ${his}`);
			if (eventSlave.boobs > 2000) {
				r.push(`udders`);
			} else if (eventSlave.boobs > 800) {
				r.push(`tits`);
			} else {
				r.push(`nipples`);
			}
			r.push(`and whisper manipulation into ${his} ear. You tell ${him} ${he}'s about to cum like a girl. ${He} says nothing, but ${his} body language communicates incomprehension. Girls, you tell ${him}, cum when they get fucked. They cum when`);
			if (PC.title === 1) {
				r.push(`guys`);
			} else {
				r.push(`their betters`);
			}
			r.push(`stick their dicks inside them. ${He} bursts into tears, sobbing with shame and degradation even as ${he} shakes and`);
			if (eventSlave.balls > 0) {
				r.push(`squirts cum.`);
			} else {
				r.push(`dribbles ejaculate.`);
			}
			r.push(`The next time ${he} sees you,`);
			if (random(0, 1) === 1) {
				r.push(`${he} visibly gathers ${his} courage, and flirtatiously <span class="fetish gain">offers you ${his} ass.</span>`);
				eventSlave.fetish = "buttslut";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 10;
			} else {
				r.push(`${he} manages to stop ${himself} from breaking down, and seems to be <span class="devotion inc">working hard</span> to convince ${himself} that ${he}'s a girl.`);
				eventSlave.devotion += 4;
			}
			r.push(VCheck.Anal(eventSlave, 1));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function broaden() {
			let frag = document.createDocumentFragment();
			r = [];
			r.push(`${He} seems a little too focused on ${his} hot cunt. You order ${him} to get up on your desk, and ${he} obeys eagerly, ${his}`);
			if (canSee(eventSlave)) {
				r.push(`${App.Desc.eyesColor(eventSlave)} shining`);
			} else {
				r.push(`facial expression filled`);
			}
			r.push(`with lust.`);
			if (canSee(eventSlave)) {
				r.push(`They focus`);
			} else {
				r.push(`${He} focuses`);
			}
			r.push(`on`);
			if (PC.dick !== 0) {
				r.push(`your cock as you bring it to bear,`);
				if (PC.vagina !== -1) {
					r.push(`not to mention the pussy at its base,`);
				}
			} else {
				r.push(`your strap-on as you step into it,`);
			}
			r.push(`and ${he}'s about to express ${his} gratitude when you push the slave, who is sitting on the edge of your desk with ${his} legs spread to provide you access to ${his} pussy, over onto ${his} back. ${He} barely has time to reorient ${himself} when ${he} feels`);
			if (eventSlave.anus > 2) {
				r.push(`a sudden fullness in ${his} loose ass.`);
			} else if (eventSlave.anus === 2) {
				r.push(`a presence inside ${his} experienced ass.`);
			} else {
				r.push(`something starting to push its way up ${his} poor little bottom.`);
			}
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`${He} cannot hide ${his} disappointment, but has the presence of mind not to protest as you assfuck ${him} hard enough that ${his}`);
			if (eventSlave.boobs > 2000) {
				r.push(`ridiculous tits almost hit ${him} in the face with each stroke`);
			} else if (eventSlave.boobs > 800) {
				r.push(`big boobs bounce all over the place`);
			} else {
				r.push(`boobs bounce`);
			}
			if (eventSlave.belly >= 10000) {
				r.push(`and taut belly is forced back`);
			}
			r.push(r.pop() + `. ${His} orgasm sneaks up on ${him}, and comes by surprise, forcing a squeal out of ${him} as ${his} sphincter tightens down involuntarily. ${He} gets up gingerly, clearly feeling sore,`);
			if (random(0, 1) === 1) {
				r.push(`and looks preoccupied. ${He} reaches idly around and massages ${his} well-fucked backdoor meditatively, biting ${his} lower lip as ${he} investigates. Maybe, ${he} seems to be thinking, <span class="fetish gain">anal is fun?</span>`);
				eventSlave.fetish = "buttslut";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 10;
			} else {
				r.push(`but <span class="devotion inc">does ${his} honest best</span> to look grateful. ${He} knows ${he}'s a sex slave and can't afford to be particular about little things like getting buttfucked.`);
				eventSlave.devotion += 4;
			}
			r.push(VCheck.Anal(eventSlave, 1));
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.RESSImplantInspection = class RESSImplantInspection 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.boobs > 800,
				s => s.boobsImplant / s.boobs >= 0.60,
				s => s.devotion > 20,
			]
		];
	}

	execute(node) {
		/** @type {Array<App.Entity.SlaveState>} */
		let [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself
		} = getPronouns(eventSlave);
		const {title: Master, say} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);

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

		const r = new SpacedTextAccumulator(node);
		r.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		r.push(`comes before you naked for a routine inspection. You take particular care to examine ${his} implants; even a careful hand at the remote surgery has been known to produce unsightly scars, stretch marks, and the like. ${His} breasts are`);
		if (eventSlave.boobs < 1200) {
			r.push(`large,`);
		} else {
			r.push(`massive,`);
		}
		r.push(`but ${his} implants render them perky and rounded despite their size. An impossibility, had they been fully natural. Standing before you, ${his} breasts protrude outward from ${his} chest proudly and without sagging. As you inspect ${him} with your hands, ${he}`);
		if (eventSlave.voice === 0) {
			r.push(`breathes a little harder and looks like ${he} would speak, were ${he} not mute.`);
		} else if (eventSlave.accent > 3) {
			r.push(`breathes a little harder and looks like ${he} would speak, if ${he} knew how.`);
		} else if (eventSlave.accent > 2) {
			r.push(`breathes a little harder and ${say}s something in a language you don't understand.`);
		} else if (!canTalk(eventSlave)) {
			r.push(`breathes a little harder and gestures that it feels nice.`);
		} else {
			if (eventSlave.lips > 70) {
				r.push(`murmurs through ${his} huge lips,`);
			} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
				r.push(`murmurs through ${his} piercings,`);
			} else {
				r.push(`murmurs,`);
			}
			r.push(Spoken(eventSlave, `"That feels really nice, ${Master}."`));
		}

		r.toParagraph();
		App.Events.addResponses(node, [
			new App.Events.Result(`Give ${him} a nice massage`, massage),
			(canDoAnal(eventSlave) || canDoVaginal(eventSlave))
				? new App.Events.Result(`See if they've got any bounce`, bounce, ((eventSlave.anus === 0 && canDoAnal(eventSlave)) || (eventSlave.vagina === 0 && canDoVaginal(eventSlave))) ? `This option will take ${his} virginity` : null)
				: new App.Events.Result(),
			(canDoAnal(eventSlave) || canDoVaginal(eventSlave))
				? new App.Events.Result(`Show ${him} off in public`, show, virginityWarning())
				: new App.Events.Result(),
		]);

		function virginityWarning() {
			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`;
			}
		}

		function massage() {
			const r = new SpacedTextAccumulator();
			r.push(`You sit on the couch next to your desk and pat your thighs. ${He} smiles and comes over, lowering ${himself}`);
			if (V.PC.dick === 0) {
				r.push(`into your lap`);
			} else {
				r.push(`onto your member`);
				if (V.PC.vagina !== -1) {
					r.push(`and sliding a hand down to see to your pussy`);
				}
			}
			r.push(`without hesitation. You help ${him} get comfortable and instead of`);
			if (V.PC.dick === 0) {
				r.push(`grinding`);
			} else {
				r.push(`thrusting`);
			}
			r.push(`or telling ${him} to ride, you just sit there with ${him} in your lap, gently massaging ${his}`);
			if (eventSlave.boobs < 900) {
				r.push(`big`);
			} else {
				r.push(`huge`);
			}
			r.push(`tits. Despite their fine craftsmanship, implants are prone to rendering breasts sore, so ${he}'s soon groaning with relief at the attention you lavish upon them. You finally manage to bring ${him} to orgasm with almost nothing but delicate stimulation of ${his} nipples, despite ${his} implants making them less sensitive than usual. ${He} has become more trusting of you.`);
			eventSlave.trust += 4;
			r.toParagraph();
			return r.container();
		}

		function bounce() {
			const r = new SpacedTextAccumulator();
			r.push(`You tell ${him} to kneel on the smooth floor. ${He} knows this means doggy style, so ${he} compliantly`);
			if (eventSlave.belly >= 300000) {
				r.push(`shifts onto ${his} ${belly} belly,`);
			}
			r.push(`arches ${his} back and cocks ${his} hips to offer ${himself} to you. You`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`enter`);
			if (canDoVaginal(eventSlave)) {
				r.push(`${his} pussy`);
			} else {
				r.push(`${his} ass`);
			}
			r.push(`without preamble and seize ${his} hips. ${He} braces ${himself}, knowing what's coming, but soon ${he} discovers a new disadvantage to ${his} augmented breasts: even as you pound ${him} hard and grope ${his} chest, ${his} tits barely move despite their rough treatment. ${His} unyielding breasts only encourage you to fuck ${him} harder, in an effort to garner any iota of movement from ${his} ample chest.`);
			if (eventSlave.dick > 0 && !(eventSlave.chastityPenis)) {
				if (canAchieveErection(eventSlave)) {
					r.push(`${His} cock doesn't help, either, flopping around half-erect as ${he} vacillates between pain and arousal.`);
				} else if (eventSlave.dick > 20) {
					r.push(`${His} cock doesn't help, either, flopping around on the floor as ${he} vacillates between pain and arousal.`);
				} else {
					r.push(`${His} cock doesn't help, either, flopping around feebly as ${he} vacillates between pain and arousal.`);
				}
			} else if (eventSlave.clit > 2) {
				r.push(`${His} huge clit doesn't help, either, flopping around half-erect as ${he} vacillates between pain and arousal.`);
			}
			if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
				r.push(`Even a switch to ${his} ass does little to slow your thrusts, and so ${his} breasts continue to rest impassively on ${his} chest as their owner is buttfucked senseless.`);
			}
			r.push(`You finish with a particularly hard thrust`);
			if (V.PC.dick === 0) {
				r.push(`and shake with climax,`);
			} else {
				r.push(`to spill your seed deep inside ${him},`);
			}
			r.push(`ramming forward hard enough to knock ${him} down to the floor. As you rise, ${his} discomfited form is a pretty sight, with ${his} perfectly rounded breasts`);
			if (eventSlave.belly >= 300000) {
				r.push(`neatly stack on top each other`);
			} else {
				r.push(`keeping ${his} body suspended off the ground`);
			}
			r.push(`and ${his} well fucked butt lewdly relaxed. <span class="devotion inc">${He} has become more submissive.</span>`);
			eventSlave.devotion += 4;
			r.push(VCheck.Both(eventSlave, 1));
			r.toParagraph();
			return r.container();
		}

		function show() {
			const r = new SpacedTextAccumulator();
			r.push(`You bring ${him} out onto the promenade, still nude, ${his} impressively augmented breasts attracting open stares with their perfect roundness and perkiness.`);
			if (eventSlave.sexualFlaw === "attention whore") {
				r.push(`The slut loves being the center of attention and wishes ${his} tits where even more eye catching.`);
			} else if (eventSlave.fetishKnown === 1 && eventSlave.fetishStrength > 60 && eventSlave.fetish === "humiliation") {
				r.push(`The slut loves being embarrassed, and ${he} blushes furiously as ${his} nipples`);
				if (eventSlave.nipples !== "fuckable") {
					r.push(`stiffen`);
				} else {
					r.push(`swell shut`);
				}
				r.push(`with arousal despite ${his} implants having sapped them off some of their sensitivity.`);
			} else if (eventSlave.energy > 95) {
				r.push(`The nympho slut loves being shown off, and ${he} flaunts ${his} implanted boobs shamelessly.`);
			} else if (eventSlave.counter.anal > 100 && eventSlave.counter.oral > 100) {
				r.push(`${He}'s such a veteran sex slave that ${he} takes the stares in stride.`);
			} else {
				r.push(`${He} blushes a little, but tips ${his} chin up and follows you obediently.`);
			}
			r.push(`When you reach a good spot, you grab ${his}`);
			if (eventSlave.weight > 30) {
				r.push(`fat ass`);
			} else if (eventSlave.weight > 10) {
				r.push(`plush hips`);
			} else if (eventSlave.weight >= -10) {
				r.push(`trim hips`);
			} else if (eventSlave.butt > 2) {
				r.push(`big butt`);
			} else {
				r.push(`skinny ass`);
			}
			r.push(`and`);
			if (eventSlave.height >= 185) {
				r.push(`pull ${his} tall body in`);
			} else if (eventSlave.height >= 160) {
				r.push(`pull ${him} up on tiptoe`);
			} else {
				r.push(`push ${his} petite form up onto a railing`);
			}
			r.push(`for standing sex. ${He} cocks ${his} hips and takes your`);
			if (V.PC.dick === 0) {
				r.push(`strap-on`);
			} else {
				r.push(`cock`);
			}
			r.push(`compliantly, and after a few thrusts you reach down, seize ${him} behind each knee, and`);
			if (V.PC.belly >= 5000 && eventSlave.belly >= 100000) {
				r.push(`collapse against a nearby bunch under the excessive weight between your pregnancy and ${his} ${belly} stomach. Appreciating the bench's sacrifice, you return to fucking ${him}.`);
				if (eventSlave.bellyPreg >= 600000) {
					r.push(`Penetrating ${him} while feeling so much movement between you is unbelievably lewd. ${His} children squirm at their mother's excitement, causing ${his} bloated body to rub against you in ways you couldn't imagine.`);
				}
			} else if (eventSlave.belly >= 100000) {
				r.push(`pull ${him} as close as you can with ${his} ${belly} belly between you. Struggling to support the immense weight, you back ${him} against a rail so that you can continue to fuck ${him} while holding ${him}.`);
				if (eventSlave.bellyPreg >= 600000) {
					r.push(`Penetrating ${him} while feeling so much movement between you is unbelievably lewd. ${His} children squirm at their mother's excitement, causing ${his} bloated body to rub against you in ways you couldn't imagine.`);
				}
			} else {
				r.push(`hoist ${his} legs up so ${he}'s pinned against your`);
				if (V.PC.belly >= 1500) {
					r.push(`pregnancy,`);
				} else if (V.PC.boobs < 300) {
					r.push(`chest,`);
				} else {
					r.push(`boobs,`);
				}
				r.push(`helpless to do anything but let you hold ${him} in midair and fuck ${him}.`);
			}
			if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina > 1) {
					r.push(`${His} pussy can take a hard pounding, so you give it to ${him}.`);
				} else {
					r.push(`${His} poor tight pussy can barely take the pounding you're administering.`);
				}
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				if (eventSlave.anus > 1) {
					r.push(`${His} loose butthole can take a hard pounding, so you give it to ${him}.`);
				} else {
					r.push(`${His} poor tight butthole can barely take the pounding you're administering.`);
				}
				r.push(VCheck.Anal(eventSlave, 1));
			}
			r.push(`${He} loses all composure, gasping and panting as the massive weight of ${his} augmented chest weighs ${him} down, causing ${him} to all but collapse against you. Despite this, or perhaps partly because of it, ${he} begins to orgasm,`);
			if (eventSlave.chastityPenis === 1) {
				r.push(`the discomfort of being half-hard under ${his} chastity cage making ${him} squirm as cum rushes out of the hole at its tip.`);
			} else if (canAchieveErection(eventSlave)) {
				if (eventSlave.dick > 4) {
					r.push(`${his} monster of a cock releasing a jet of cum with each thrust into ${him}.`);
				} else if (eventSlave.dick > 3) {
					r.push(`${his} huge cock releasing a jet of cum with each thrust into ${him}.`);
				} else if (eventSlave.dick > 1) {
					r.push(`${his} cock releasing a spurt of cum with each thrust into ${him}.`);
				} else {
					r.push(`${his} tiny dick spurting cum with each thrust into ${him}.`);
				}
			} else if (eventSlave.dick > 9) {
				r.push(`${his} huge, soft cock spurting cum as it wiggles to your motions.`);
			} else if (eventSlave.dick > 0) {
				r.push(`${his} soft cock scattering cum all over the place as it flops around.`);
			} else if (eventSlave.belly >= 1500) {
				r.push(`${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnant`);
				}
				r.push(`belly adding to ${his} near-total discomfiture.`);
			} else if (eventSlave.weight > 95) {
				r.push(`${his} soft body jiggling as ${he} climaxes.`);
			} else if (eventSlave.muscles > 5) {
				r.push(`${his} abs convulsing deliciously as ${he} climaxes.`);
			} else if (canDoVaginal(eventSlave)) {
				r.push(`${his} pussy tightening.`);
			} else {
				r.push(`${his} poor anal ring tightening.`);
			}
			r.push(`The crowd that surrounds you during this noisy spectacle <span class="reputation inc">is suitably impressed.</span>`);
			repX(1250, "event", eventSlave);
			r.push(VCheck.Both(eventSlave, 1));
			r.toParagraph();
			return r.container();
		}
	}
};


code:
App.Events.RESSInconvenientLabia = class RESSInconvenientLabia 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.labia > 1,
				s => s.vagina >= 0,
				s => s.muscles > 5 || s.diet === "muscle building",
				s => s.belly < 10000,
				s => s.devotion > 20,
				s => s.trust > 20,
			]
		];
	}

	execute(node) {
		/** @type {Array<App.Entity.SlaveState>} */
		let [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, his, him, girl, hers
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);

		/* "pulling down the compression shorts $he was wearing" */
		if (isItemAccessible.entry("sport shorts", "clothes")) {
			if (eventSlave.boobs >= 650) {
				App.Events.drawEventArt(node, eventSlave, "sport shorts and a sports bra");
			} else {
				App.Events.drawEventArt(node, eventSlave, "sport shorts");
			}
		} else {
			App.Events.drawEventArt(node, eventSlave, "spats and a tank top");
		}

		let r = [];
		App.Events.addParagraph(node, [
			`You see`,
			contextualIntro(V.PC, eventSlave, true),
			`moving gingerly as ${he} heads out of the workout room, as though ${he}'s suffering some pain in ${his} groin. Since ${he}'s coming off a workout rather than any duty that would explain a sore pussy, you head over to ${him} to investigate. ${He} greets you properly, looking a little rueful.`
		]);
		if (!canTalk(eventSlave)) {
			r.push(`${He} gestures impatiently at ${his} pussy, pulling down the compression shorts ${he} was wearing to display ${his} generous labia. ${He} humorously pantomimes them moving about as ${he} exercises and indicates pain.`);
		} else {
			if (eventSlave.lips > 70) {
				r.push(`${He} lisps through ${his} massive lips,`);
			} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
				r.push(`${He} lisps through ${his} huge piercings,`);
			}
			r.push(
				Spoken(eventSlave, `"${Master}, my pussylips are really big. They make running on the treadmill really painful, even wearing my compression shorts"`),
				`${he} explains.`,
				Spoken(eventSlave, `"They just kind of get in the way."`)
			);
		}
		r.push(`${He} looks doubtful, as though ${he}'s wondering whether to make a request. Finally ${he} makes up ${his} mind to ask:`);
		if (!canTalk(eventSlave)) {
			r.push(`${he} waves towards the surgery, and gestures about the labiaplasty ${he} knows some slaves receive, asking you if ${he} can have ${hers} reduced.`);
		} else {
			r.push(Spoken(eventSlave, `"May I have labiaplasty, ${Master}? It would make working out so much easier on my poor pussy."`));
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Let ${him} have labiaplasty to resolve the issue`, labiaplasty),
			canDoVaginal(eventSlave)
				? new App.Events.Result(`Let ${him} know ${he}'s got a wonderful vagina`, reassure, eventSlave.vagina === 0 ? `This option will take ${his} virginity` : null)
				: new App.Events.Result()
		]);

		function labiaplasty() {
			r = [];
			r.push(`When you assent, ${he} cheers up immediately, looking remarkably happy for a ${girl} who's just learned ${his} vagina is about to have a surgical operation performed on it. Then again, having those huge pussylips constantly getting in ${his} way when ${he} runs must be extremely uncomfortable, so it's not shocking ${he} would consider a radical solution to ${his} problem. When ${he} exits the remote surgery, ${he} looks sorer than ever, of course, but ${he} smiles gratefully at you the next time ${he}`);
			if (canSee(eventSlave)) {
				r.push(`sees`);
			} else {
				r.push(`meets`);
			}
			r.push(`you, and lets you know ${he}'s really looking forward to recovering enough for ${him} to take ${his} beloved ${getWrittenTitle(eventSlave)} into ${his} newly streamlined cunt.`);
			eventSlave.devotion += 4;
			eventSlave.labia = 0;
			surgeryDamage(eventSlave, 10);
			return r;
		}

		function reassure() {
			r = [];
			r.push(`By way of an answer, you embrace ${him} and give ${him} a deep kiss on ${his}`);
			if (eventSlave.lips > 70) {
				r.push(`enormous`);
			} else if (eventSlave.lips > 40) {
				r.push(`pillowlike`);
			} else if (eventSlave.lips > 20) {
				r.push(`big`);
			} else {
				r.push(`pretty`);
			}
			r.push(`lips, spreading a blush across ${his} ${eventSlave.skin} cheeks. Your hands rove down ${his}`);
			if (eventSlave.belly >= 1500) {
				if (eventSlave.bellyPreg >= 1500) {
					r.push(`pregnant`);
				} else {
					r.push(`swollen`);
				}
			} else if (eventSlave.weight > 190) {
				r.push(`expansive`);
			} else if (eventSlave.weight > 160) {
				r.push(`ponderous`);
			} else if (eventSlave.weight > 130) {
				r.push(`big, soft`);
			} else if (eventSlave.weight > 95) {
				r.push(`plump`);
			} else if (eventSlave.weight > 10) {
				r.push(`plush`);
			} else if (eventSlave.weight < -10) {
				r.push(`thin`);
			} else {
				r.push(`nice`);
			}
			r.push(`body, coming to rest on ${his}`);
			if (eventSlave.butt > 15) {
				r.push(`immeasurable`);
			} else if (eventSlave.butt > 10) {
				r.push(`mind-blowing`);
			} else if (eventSlave.butt > 7) {
				r.push(`spectacular`);
			} else if (eventSlave.butt > 5) {
				r.push(`magnificent`);
			} else if (eventSlave.butt > 3) {
				r.push(`rounded`);
			} else {
				r.push(`tight`);
			}
			r.push(`butt. You hug ${him} up and into you, crushing ${his}`);
			if (eventSlave.boobs > 2000) {
				r.push(`titanic`);
			} else if (eventSlave.boobs > 800) {
				r.push(`big`);
			} else {
				r.push(`small`);
			}
			r.push(`breasts against`);
			const bust = V.PC.boobsImplant !== 0 ? "balloons" : "bust";
			if (V.PC.boobs >= 1400) {
				r.push(`your enormous ${bust}.`);
			} else if (V.PC.boobs >= 1200) {
				r.push(`your huge ${bust}.`);
			} else if (V.PC.boobs >= 1000) {
				r.push(`your big ${bust}.`);
			} else if (V.PC.boobs >= 300) {
				r.push(`yours.`);
			} else if (V.PC.title === 0) {
				r.push(`your flat ones.`);
			} else {
				r.push(`your manly chest.`);
			}
			r.push(`Before long being kissed and held by ${his} beloved ${getWrittenTitle(eventSlave)} has ${him} playing the slut in your arms, and ${he} backs against the wall before wrapping ${his} legs around your middle to bring ${his} pussy against your`);
			const body = eventSlave.bellyPreg >= 3000 ? "gravid bulk" : "distended body";
			if (V.PC.dick === 0) {
				r.push(`own.`);
				if (eventSlave.belly >= 5000) {
					r.push(`You move your hands under ${him} to better support ${his} ${body}.`);
				}
				r.push(`${He} moans in pain as you scissor against ${his} sore pussy,`);
			} else {
				r.push(`stiff prick.`);
				if (eventSlave.preg > eventSlave.pregData.normalBirth/2) {
					r.push(`You move your hands under ${him} to better support ${his} ${body}.`);
				}
				r.push(`${He} gasps in pain as you press past ${his} sore pussylips,`);
			}
			r.push(`but before long ${he}'s grinding against you with ${his} back propped against the wall, using the embrace of ${his} strong legs to provide the power for a vigorous fuck. When ${he} finally slides down the wall to stand again, a look of profound pleasure on ${his} face, ${he} lets you know that ${he} understands your meaning and that ${he}'ll put up with sore petals, since ${his} ${getWrittenTitle(eventSlave)} prefers ${him} that way.`);
			r.push(VCheck.Vaginal(eventSlave, 1));
			eventSlave.devotion += 4;
			return r;
		}
	}
};