code:
// cSpell:ignore pened

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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canWalk,
				canHear,
				canSee,
				s => s.devotion <= 95,
				s => [Job.QUARTER, Job.HOUSE].includes(s.assignment),
				s => s.intelligence + s.intelligenceImplant < -50,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself, girl
		} = getPronouns(eventSlave);
		const {heA} = getPronouns(assistant.pronouns().main).appendSuffix("A");
		const {title: Master, say} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);

		App.Events.drawEventArt(node, eventSlave);

		let r = [];
		r.push(`You're circulating in ${V.clubName}, looking over your holdings but mostly just letting yourself be seen, when your personal assistant quietly alerts you.`);
		if (V.assistant.personality <= 0) {
			r.push(`"${properTitle()},"`);
		} else {
			r.push(`"Baby,"`);
		}
		r.push(`${heA} says,"`);
		r.push(contextualIntro(V.PC, eventSlave, true));
		r.push(`can't get out of the refrigerator."`);
		if (V.assistant.personality <= 0) {
			r.push(`The personal assistant explains the absurd statement: "${He}'s been assigned to get some items out of the walk-in refrigerator. ${He} accidentally let the door shut behind ${him}, didn't notice, took too long in there, and is now too chilled to figure out the emergency release. I can unlock it remotely, or you can let ${him} out yourself."`);
		} else {
			r.push(`Chuckling, your personal assistant explains the absurd statement: "The silly ${girl}'s been assigned to get some things out of the walk-in refrigerator. ${He} accidentally let the door shut behind ${him}, didn't notice, took too long in there, and is now too chilled to figure out the emergency release. I can unlock it remotely, or you can head over and have some fun with ${him}."`);
		}
		App.Events.addParagraph(node, r);
		App.Events.addParagraph(node, [`The walk-in cooling unit is designed for the refrigeration of food for you and guests only, since the slaves drink a nutritive fluid that doesn't require it. Only servants ever have any reason to be in there, but ${he} was indeed instructed to fetch out some beverages necessary for an entertainment you have planned. It's cool in there, but not freezing, so ${he}'s in no immediate danger.`]);

		App.Events.addResponses(node, [
			new App.Events.Result(`Just direct ${V.assistant.name} to let ${him} out`, direct),
			new App.Events.Result(`Let ${him} out yourself`, yourself),
			new App.Events.Result(`Punish ${him} for ${his} forgetfulness`, punish, virginityWarning()),
		]);

		function direct() {
			r = [];
			r.push(`${capFirstChar(V.assistant.name)} unlatches the cooler door remotely, and admonishes ${eventSlave.slaveName}. The chilled slave scampers out of the cold air, rubbing ${his}`);
			if (eventSlave.bellyPreg >= 1500) {
				r.push(`${belly} pregnant belly's`);
			}
			r.push(`${eventSlave.skin} skin to get some warmth back into it. ${He}'s too cold to do much more than nod dumbly at ${V.assistant.name}'s review of how to operate the release, but ${he}'s much more careful the next time ${he}'s sent in there.`);
			return r;
		}

		function yourself() {
			r = [];
			r.push(`You're not close to the penthouse kitchen area, so it takes you some time to make your way there. By the time you get there, the poor ${girl} is pounding weakly against the refrigerator door to try to get someone's attention. ${capFirstChar(V.assistant.name)} was right, ${he} must be too cold to think straight; if ${he} weren't ${he} might notice the prominent release button right next to where ${he}'s striking the door. ${His} desperate ${eventSlave.skin} face is visible in the window. You hit the exterior release and the door swings open quickly, dumping ${him} into your arms.`);
			if (eventSlave.devotion < -50) {
				r.push(`Despite hating you, <span class="devotion inc">${he} clings to you like a long lost love,</span> ${his}`);
				eventSlave.devotion += 6;
			} else if (eventSlave.devotion <= 20) {
				r.push(`Despite not being devoted to you, <span class="devotion inc">${he} clings to you like a long lost love,</span> ${his}`);
				eventSlave.devotion += 4;
			} else {
				r.push(`${He} clings to ${his} savior, ${his}`);
			}
			if (eventSlave.height >= 185) {
				r.push(`big cold`);
			} else if (eventSlave.height >= 160) {
				r.push(`cold`);
			} else {
				r.push(`cold little`);
			}
			if (eventSlave.belly >= 1500) {
				r.push(belly);
				if (eventSlave.bellyPreg >= 1500) {
					r.push(`pregnant`);
				}
			}
			r.push(`body shaking convulsively. ${He} tries to burrow even`);
			if (V.PC.boobs >= 650) {
				r.push(`deeper between your breasts,`);
			} else {
				r.push(`closer to you,`);
			}
			r.push(`soaking up your warmth.`);
			if (!canTalk(eventSlave)) {
				r.push(`${He} gestures ${his} thanks shakily.`);
			} else {
				r.push(
					Spoken(eventSlave, `"T-t-thank y-you, ${Master}. I d-don't know what would have hap-p-pened if you hadn't come by,"`),
					`${he} ${say}s, teeth chattering.`
				);
			}
			r.push(`${He} clearly has no idea whatsoever that ${V.assistant.name} could have let ${him} out at any time. You rub your hands up and down ${his}`);
			if (eventSlave.weight > 160) {
				r.push(`rippling`);
			} else if (eventSlave.weight > 95) {
				r.push(`soft`);
			} else if (eventSlave.muscles > 95) {
				r.push(`ripped`);
			} else if (eventSlave.muscles > 30) {
				r.push(`muscular`);
			} else if (eventSlave.muscles > 5) {
				r.push(`toned`);
			} else {
				r.push(`soft`);
			}
			r.push(`back, helping ${him} get warm. You point out the release handle and ${he} apologizes hastily for forgetting. Once ${he}'s warm you gently tell ${him} to get back to it, and give ${him} a gentle shove on ${his}`);
			if (eventSlave.butt > 5) {
				r.push(`massive ass.`);
			} else if (eventSlave.butt > 2) {
				r.push(`big butt.`);
			} else {
				r.push(`nice little butt.`);
			}
			r.push(`${He} <span class="trust inc">smiles gratefully</span> at you before heading back to get those drinks.`);
			eventSlave.trust += 4;
			return r;
		}

		function punish() {
			r = [];
			r.push(`You're not close to the penthouse kitchen area, so it takes you some time to make your way there. By the time you`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`get there, the poor`);
			if (eventSlave.pregKnown === 1) {
				r.push(`pregnant`);
			}
			r.push(`${girl} is pounding weakly against the refrigerator door to try to get someone's attention. ${He} looks relieved when you open the door, but ${his} relief turns to ashes when you shut the door behind you. ${He} shivers with cold and fear as you sternly point out the release, high up on the door, and then demand ${his}`);
			if (hasBothArms(eventSlave)) {
				r.push(`hands. You bind them together and loop them over the release before hoisting ${his} legs off the ground so that ${his} back is against the cold metal door and all ${his} weight is hanging off the release by ${his} arms.`);
			} else {
				r.push(`hand. You bind it tightly and loop it over the release before hoisting ${his} legs off the ground so that ${his} back is against the cold metal door and all ${his} weight is hanging off the release by ${his} arm.`);
			}
			r.push(`${He} doesn't struggle until you tell ${him} ${he} can leave — if ${he} can get the release open like this. ${He} tries, but ${he} can't get enough leverage;`);
			if (canDoVaginal(eventSlave) || canDoAnal(eventSlave)) {
				r.push(`${his} spastic efforts get weaker as you pull ${his}`);
				if (eventSlave.butt > 5) {
					r.push(`massive ass`);
				} else if (eventSlave.butt > 2) {
					r.push(`big butt`);
				} else {
					r.push(`nice little butt`);
				}
				r.push(`away from the door and line`);
				if (V.PC.dick === 0) {
					r.push(`the strap-on`);
				} else {
					r.push(`your cock`);
				}
				r.push(`up with ${his}`);
				if (canDoVaginal(eventSlave)) {
					if (eventSlave.vagina > 2) {
						r.push(`loose pussy.`);
					} else if (eventSlave.vagina > 1) {
						r.push(`pussy.`);
					} else {
						r.push(`tight pussy.`);
					}
					VCheck.Vaginal(eventSlave, 1);
				} else {
					if (eventSlave.anus > 2) {
						r.push(`loose asspussy.`);
					} else if (eventSlave.anus > 1) {
						r.push(`asshole.`);
					} else {
						r.push(`tight little asshole.`);
					}
					VCheck.Anal(eventSlave, 1);
				}
				r.push(`Teeth chattering, legs shaking with cold, ${he} takes a ${!canDoVaginal(eventSlave) ? "butt" : ""}fuck in the cold cooler, hanging from what ${he} should have used to let ${himself} out.`);
			} else if (V.PC.dick === 0) {
				r.push(`${his} spastic efforts get weaker as you poke and prod ${his} sensitive areas with your strap-on. Teeth chattering, legs shaking with cold, ${he} takes your molestation in the cold cooler, hanging from what ${he} should have used to let ${himself} out.`);
			} else {
				r.push(`${his} spastic efforts get weaker when you take your dick in hand and warm yourself to a throbbing erection. Teeth chattering, legs shaking with cold, ${he} takes your load in the cold cooler, hanging from what ${he} should have used to let ${himself} out.`);
			}
			r.push(`When you finish, you hit it yourself and drop ${his} legs, letting ${him} unhook ${himself} and flee to the warmth outside. ${He} begs your pardon abjectly as ${he} rubs ${his}`);
			if (eventSlave.belly >= 5000) {
				r.push(`${belly} ${eventSlave.skin} belly`);
			} else {
				r.push(`${eventSlave.skin} shoulders`);
			}
			r.push(`to warm ${himself}`);
			if (V.PC.dick > 0) {
				r.push(`up, ignoring the cum`);
				if (canDoVaginal(eventSlave)) {
					if (eventSlave.vagina > 2) {
						r.push(`leaking out of ${his} broken-in vagina.`);
					} else if (eventSlave.vagina > 1) {
						r.push(`leaking out of ${his} parted vagina.`);
					} else {
						r.push(`filling ${his} still-tight vagina.`);
					}
				} else if (canDoAnal(eventSlave)) {
					if (eventSlave.anus > 2) {
						r.push(`leaking out of ${his} fucked-out anus.`);
					} else if (eventSlave.anus > 1) {
						r.push(`leaking out of ${his} now-gaped backdoor.`);
					} else {
						r.push(`filling ${his} still-tight anus.`);
					}
				} else {
					r.push(`dripping down ${his} body.`);
				}
			} else {
				r.push(`up.`);
			}
			eventSlave.trust -= 5;
			return r;
		}

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


code:
App.Events.RESSDesperateBreeder = class RESSDesperateBreeder extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => canPenetrate(V.PC),
			() => V.PC.belly < 100000,
		];
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				s => s.sexualFlaw === SexualFlaw.BREEDER,
				canGetPregnant,
				s => canImpreg(s, V.PC),
				s => ((s.mpreg === 0 && s.vagina > 0) || (s.mpreg === 1 && s.anus > 0)),
				s => s.preg === 0,
				s => s.counter.PCChildrenBeared > 2,
				s => s.belly < 100,
				s => s.trust > 50,
				s => s.devotion > 20,
				s => overpowerCheck(s, V.PC) < 0,
				canSee,
				canHear,
				hasBothArms,
				canWalk
			]
		];
	}

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

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

		let t = [];

		t.push(`It's not particularly unusual to get night visits every now and then from your more amorous slaves, so when you are roused from your sleep by the paraphilic`);
		t.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), ","));
		t.push(`you easily guess what the ${girl} is after.`);
		if (canTalk(eventSlave)) {
			t.push(`"${Master}," ${he} whispers. "${Spoken(eventSlave, `I can't take it any longer, I need a baby in me.`)}"`);
			t.push(`${His} voice begins to rise as the prospect of having ${his} addiction sated comes closer.`);
			t.push(`"${Spoken(eventSlave, `I can feel the egg inside me, ${Master}, and I want, no, NEED you to fertilize it for me. You'll do that, right? You've done it before...`)}"`);
			t.push(`${He} begins grinding ${his} ${eventSlave.mpreg === 1 ? "rear" : "pussy"} against your crotch, hoping to entice you erect. Your body quickly responds and ${he} positions ${himself} to be penetrated.`);
			t.push(`"${Spoken(eventSlave, `See ${Master}? He wants it too!`)}"`);
			t.push(`${He} wiggles against the tip, a hungry glint in ${his} eye${hasBothEyes(eventSlave) ? "s" : ""}.`);
			t.push(`"${Spoken(eventSlave, `He knows I'm ready to be knocked up... So stop trying to deny your feelings and FUCK ME! KNOCK ME UP! NOW!`)}"`);
		} else {
			t.push(`${He} uses gestures that ${he} wants a baby put in ${him} immediately, and since you've done it in the past, you're going to do it again. ${His} motions become increasingly erratic as ${he} begins grinding ${his} ${eventSlave.mpreg === 1 ? "rear" : "pussy"} against your crotch in an effort to bring you to erection. Your body quickly responds and ${he} positions ${himself} to be penetrated. The hunger in ${his} eye${hasBothEyes(eventSlave) ? "s" : ""} is obvious as ${he} struggles to convey how hard it is for ${him} not to be with child and how badly you want to put another bun or two in ${his} oven. ${He} wiggles against the tip of your eager cock, forcing you to support ${his} weight as ${he} desperately signs for you to drop ${him} on your shaft.`);
		}
		App.Events.addParagraph(node, t);
		t = [];
		t.push(`You are aware of ${his} pregnancy obsession, so ${he} is likely to calm down and stop ${canTalk(eventSlave) ? "all the shouting" : `${his} outburst`} once you've blown your load inside ${him}, but you would be giving up control of the situation.`);
		App.Events.addParagraph(node, t);
		t = [];

		App.Events.addResponses(node, [
			new App.Events.Result(`Give ${him} what ${he} wants`, matingPress),
			new App.Events.Result(`Let ${him} have ${his} way`, cowgirl),
			new App.Events.Result(`Push ${him} off`, reverseRape),
		]);

		function matingPress() {
			let frag = document.createDocumentFragment();
			t = [];

			t.push(`Fine then, if ${he} wants a baby that badly, you'll give ${him} one. You guide ${him} onto ${his} back as ${he}`);
			if (canTalk(eventSlave)) {
				t.push(`tries to ${say} a thank you,`);
			} else {
				t.push(`attempts to sign ${his} gratitude,`);
			}
			t.push(`but you don't let ${him} finish. You grab ${him} by the legs, pinning ${him} in a mating press as you hilt yourself in ${his} ${eventSlave.mpreg === 1 ? "asspussy" : "vagina"} and completely derail any train of thought ${he} may have had. You may be giving ${him} what ${he} wants, but you aren't about to let ${him} catch you with a leg lock and milk every last drop of sperm out of you that ${he} can manage. You take it nice and slow, savoring the pleasure as ${he} gasps in anticipation before releasing your seed`);
			if (V.PC.dick > 2) {
				t.push(`deep `);
			} else {
				t.push(`as deep as you can`);
			}
			t.push(`inside ${him}, setting off ${his} orgasm and leaving ${him} squirming as you lazily let the last several globs slip into ${him}. Satisfied, you roll back into bed and go back to sleep as ${he} cuddles up beside you. Other than the heavy breathing, at least ${he}'s quieter now.`);
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`You awake later that morning to find ${him} cradling ${his} ${eventSlave.bellySagPreg > 0 ? "softly sagging" : "lower"} belly, savoring the gift you've planted in ${him}.`);
			if (canTalk(eventSlave)) {
				t.push(`"${Spoken(eventSlave, `I'm sorry I got a little out of control last night, ${Master}. Thank you for putting up with me, I'm not sure many ${womenPC} would.`)}"`);
			} else {
				t.push(`When ${he} notices you're up, ${he} quickly apologizes for ${his} actions, and thanks you for being willing to put up with ${his} mental hang-ups.`);
			}
			t.push(`<span class="trust inc">${He}'s lucky to have you and ${he} knows it.</span>`);
			App.Events.addParagraph(frag, t);
			eventSlave.devotion += 3;
			eventSlave.trust += 2;
			tryKnockMeUp(eventSlave, 100, 2, V.PC);
			if (eventSlave.mpreg === 1) {
				seX(eventSlave, "anal", V.PC, "penetrative", 1);
			} else {
				seX(eventSlave, "vaginal", V.PC, "penetrative", 1);
			}

			return frag;
		}

		function cowgirl() {
			let facialDiverted = true;
			let frag = document.createDocumentFragment();
			t = [];

			t.push(`If ${he} wants to do all the work, then you'll just lie back and enjoy the show.`);
			if (canTalk(eventSlave)) {
				t.push(`${He} squeals with glee,`);
				t.push(`"${Spoken(eventSlave, `Sure thing! That first load should be just about ready, so we'll definitely be going again. You don't mind that, right ${Master}?`)}"`);
			} else {
				t.push(`${He} smiles happily as ${he} begins riding your dick.`);
			}
			t.push(`Having been edged this whole time, you don't last long under ${his} vigorous assault on your crotch and quickly fire a load into ${his} depths.`);
			if (canTalk(eventSlave)) {
				t.push(`"${Spoken(eventSlave, `Oh no, ${Master}, that felt small, there's no way I could be pregnant off just that. You need to be worked harder to really fill me with cum, but don't worry, leave it all to me.`)}"`);
			} else {
				t.push(`${He} frowns, clearly dissatisfied with your half-asleep cumshot. ${He} picks up the pace, desperate to milk a real ejaculation out of you.`);
			}
			App.Events.addParagraph(frag, t);
			t = [];
			if (V.PC.belly >= 30000) {
				t.push(`As much as you'd like to watch ${him} bounce around, all you have is a view of your ${V.PC.bellyPreg > 100 ? "pregnant" : "bulging"} belly being pressed forward by ${his} efforts.`);
				if (canTalk(eventSlave)) {
					if (V.PC.bellyPreg > 100) {
						t.push(`"${Spoken(eventSlave, `You're a nasty ${girl}, ${Master},`)}"`);
						t.push(`${he} ${say}s,`);
						t.push(`"${Spoken(eventSlave, `teasing me with that bump. You better make it up to me by filling me with babies.`)}"`);
					} else {
						t.push(`"${Spoken(eventSlave, `You're such a tease, ${Master},`)}"`);
						t.push(`${he} ${say}s,`);
						t.push(`"${Spoken(eventSlave, `you know I can't wait until I have a baby bump that big.`)}"`);
					}
				} else {
					t.push(`You can tell ${he} is envious of your rounded middle, eager to have ${his} own expanding to match.`);
				}
				if (eventSlave.dick > 0 && eventSlave.chastityPenis === 0 && canAchieveErection(eventSlave)) {
					t.push(`As ${he} bobs up and down on your shaft, you notice something hard rubbing against the underside of your stomach; ${his} own erection is grinding uncontrolled against you and ${he} is so caught up in the act that you doubt ${he}'ll have the respect to direct ${his} ejaculation away from you. Before long, ${he} clenches up in orgasm and you feel exactly what you expected splatter across your underbelly.`);
					facialDiverted = false;
				}
			} else {
				t.push(`You enjoy the sight of ${his}`);
				if (eventSlave.boobs >= 300) {
					if (eventSlave.boobs < 400) {
						t.push(`small breasts`);
					} else if ((eventSlave.boobsImplant / eventSlave.boobs) >= .75) {
						t.push(`fake tits`);
					} else if (eventSlave.boobs < 1000) {
						t.push(`large breasts`);
					} else if (eventSlave.boobs < 2500) {
						t.push(`heavy boobs`);
					} else {
						t.push(`enormous udders`);
					}
					t.push(`and`);
				}
				if (eventSlave.bellySagPreg > 0) {
					t.push(`body, still saggy and loose from prior pregnancy,`);
				} else if (eventSlave.weight >= 95) {
					t.push(`wobbly body`);
				} else if (eventSlave.weight > 30) {
					t.push(`chubby body`);
				} else if (eventSlave.weight > 10) {
					t.push(`soft body`);
				} else if (eventSlave.muscles > 50) {
					t.push(`ripped body`);
				} else if (eventSlave.muscles > 10) {
					t.push(`toned body`);
				} else {
					t.push(`lithe body`);
				}
				t.push(`bouncing`);
				if (V.PC.belly >= 5000) {
					t.push(`up and down over the swell of your ${V.PC.bellyPreg > 100 ? "pregnant" : "bulging"} belly.`);
				} else {
					t.push(`around as ${he} bobs up and down on your shaft.`);
				}
				if (canTalk(eventSlave)) {
					if (V.PC.bellyPreg > 100) {
						t.push(`"${Spoken(eventSlave, `You're such a tease, ${Master},`)}"`);
						t.push(`${he} ${say}s as ${he} leans into your pregnancy,`);
						t.push(`"${Spoken(eventSlave, `you know I can't wait until mine starts growing.`)}"`);
					} else {
						t.push(`"${Spoken(eventSlave, `Do you like what you see, ${Master},`)}"`);
						t.push(`${he} ${say}s teasingly,`);
						t.push(`"${Spoken(eventSlave, `there's no way I'm making it out of here without a baby in my belly, am I?`)}"`);
					}
				}
				if (eventSlave.dick > 0 && eventSlave.chastityPenis === 0) {
					const cumShot = cumLoad(eventSlave);
					if (eventSlave.dick > 10) {
						t.push(`You're very aware of ${his} massive dick slapping against you and the precum from its tip getting dangerously close to dripping on you. You order ${him} to point it somewhere else, and when it falls on deaf ears, you take it upon yourself to shove it to the side so ${he} may ejaculate someplace easier to clean tomorrow.`);
					} else if (canAchieveErection(eventSlave)) {
						t.push(`You can't help but notice ${his} erection and the precum beading at its tip. You order ${him} to point it somewhere else, but ${he} is too lost in ${his} growing pleasure to listen. Worse still, you're pinned under ${his} weight and have no chance of avoiding the coming ejaculation, nor any that follow it.`);
						if (cumShot >= 1) {
							t.push(`The amount of semen that flows from ${him} when ${he} cums is unreal, and there is no blocking it from washing across you.`);
						} else if (cumShot >= .1) {
							t.push(`You manage to block ${him} from giving you a facial with your hand, but you still end up coated in streaks out ${his} cum.`);
						} else {
							t.push(`As if it is any condolence, at least ${his} loads are weak and meekly splatter across your lower belly when ${he} cums.`);
						}
						facialDiverted = false;
					} else {
						t.push(`You can't help but notice ${his} limp dick flopping about and the precum being flung from its tip. You order ${him} to get it under control, but ${he} is too lost in ${his} growing pleasure to listen. Worse still, you're pinned under ${his} weight and have no chance of avoiding the coming ejaculation, nor any that follow it.`);
						if (cumShot >= 1) {
							t.push(`Like a loose firehose, ${he} sprays a jet of semen haphazardly across you, ${himself} and ${his} surroundings, thoroughly soaking everything in range.`);
						} else if (cumShot >= .1) {
							t.push(`You block most of ${his} cum from splashing across your face, but it still ends up all over the place.`);
						} else {
							t.push(`As if it is any condolence, at least ${his} loads are small even though ${he} still shakes them everywhere.`);
						}
						facialDiverted = false;
					}
				}
			}
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`${He} rides you for what feels like hours with little regard for your enjoyment; ${his} only goal being to get as much of your baby batter into ${his} fertile womb as possible. With one last blast of ${eventSlave.balls > 0 ? "your " : ""}cum, ${he} finally finishes and drunkely slides to your side, a hand resting`);
			if (cumLoad(V.PC) >= 1) {
				t.push(`on the swell ${his} semen-filled`);
			} else {
				t.push(`over ${his} lower `);
			}
			t.push(`belly, <span class="trust inc">completely satisfied.</span>`);
			if (!facialDiverted) {
				if (V.PC.balls >= 50) {
					t.push(`You, on the other hand, are left covered in ${his} sperm with a pair of painfully sore balls from where ${he} was bouncing against them.`);
				} else {
					t.push(`You, on the other hand, are left with a sore dick, an aching pelvis, and a layer of ${his} ${eventSlave.geneMods.aggressiveSperm === 1 ? "lively" : "rapidly drying"} sperm.`);
				}
				if (canMove(V.PC)) {
					t.push(`You slide out of bed to go clean yourself up and have a little ${V.PC.refreshment} to calm yourself down.`);
				} else if (haremLength() + servantsLength() > 0) {
					t.push(`You call for ${servantsLength() > 0 ? "one of your servants" : "a member of your harem"} to clean you up and bring you a little ${V.PC.refreshment} to calm your nerves.`);
				} else if (S.Bodyguard) {
					t.push(`With no one else to do it, your poor bodyguard ${S.Bodyguard.slaveName} is left to clean you up.`);
				} else {
					if (eventSlave.geneMods.aggressiveSperm === 1 && isVirile(eventSlave)) {
						t.push(`And since you can't move yourself, you're stuck like this until your morning cleaning, which means you can do nothing but watch as ${his} energetic loads steadily make their way down to your crotch. By the time the sun rises,`);
						if (canImpreg(V.PC, eventSlave)) {
							t.push(`<span class="pregnancy">you've been thoroughly impregnated.</span>`);
							tryKnockMeUp(V.PC, 100, 2, eventSlave);
						} else {
							t.push(`most of ${his} cum has worked its way into your body; it's a good thing ${he} can't get you pregnant.`);
						}
					} else {
						t.push(`And since you can't move yourself, you're stuck with ${his} loads all over you until your morning cleaning. Just great.`);
					}
				}
			} else if (V.PC.balls >= 50) {
				t.push(`You, on the other hand, are left to try and fall back to sleep with a pair of painfully sore balls from where ${he} was bouncing against them.`);
			} else {
				t.push(`You, on the other hand, are left to try and fall back to sleep with a sore dick and an aching pelvis.`);
			}
			App.Events.addParagraph(frag, t);
			eventSlave.trust += 4;
			tryKnockMeUp(eventSlave, 100, 2, V.PC);
			if (eventSlave.mpreg === 1) {
				seX(eventSlave, "anal", V.PC, "penetrative", 4);
			} else {
				seX(eventSlave, "vaginal", V.PC, "penetrative", 4);
			}

			return frag;
		}

		function reverseRape() {
			t = [];

			t.push(`When you try to reach for ${him}, ${he} grabs your ${hasBothArms(V.PC) ? "wrists" : "wrist"} and pins you down; ${he}'s got the advantage over you and intends to use it.`);
			if (canTalk(eventSlave)) {
				t.push(`"${Spoken(eventSlave, `No! I need this! You WILL get me pregnant!`)}"`);
			} else {
				t.push(`${He} glares ferociously at you, obviously intending to take what ${he} came here for by force if necessary.`);
			}
			t.push(`As ${he} slams down on your erect dick, it becomes clear just how far ${he} planned this out; ${he} has been keeping you on edge so that just a few quick bounces are all it takes to bring you to climax.`);
			if (canTalk(eventSlave)) {
				t.push(`${He} leans in close and whispers,`);
				t.push(`"${Spoken(eventSlave, `Thank you, ${Master}, you're the best,`)}"`);
				t.push(`before snapping back to ${his} senses and releasing you.`);
			} else {
				t.push(`As ${he} feels your warm ejaculate fill ${his} depths, ${he} gestures apology after apology in the vain hope that you'll show mercy before clambering off of you.`);
			}
			if (canTalk(eventSlave)) {
				t.push(`"${Spoken(eventSlave, `I'm sorry, I'm so sorry! I didn't mean it to be like this...`)}"`);
			}
			t.push(`${He} quickly flees the scene, <span class="trust dec">terrified of the impending repercussions.</span>`);
			eventSlave.trust -= 10;
			tryKnockMeUp(eventSlave, 100, 2, V.PC);
			if (eventSlave.mpreg === 1) {
				seX(eventSlave, "anal", V.PC, "penetrative", 1);
			} else {
				seX(eventSlave, "vaginal", V.PC, "penetrative", 1);
			}

			return t;
		}
	}
};

repo_name: Nithhogg/fc

license: mit


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				s => (canWalk(s) || (canMove(s) && s.rules.mobility === "permissive")),
				hasAnyArms,
				canTalk,
				s => s.devotion > 50,
				s => s.intelligence + s.intelligenceImplant > 50,
				s => s.intelligenceImplant >= 15,
				s => s.accent < 4
			]
		];
	}

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

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

		let t = [];

		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`comes before you for a routine inspection. The ${desc} is a well-educated and obedient slave. Though ${he} performs ${his} duties devotedly and to the best of ${his} abilities, slave life is not particularly conducive to straining an individual's brainpower. You happen to run into ${eventSlave.slaveName} in the hallways of the penthouse, where ${he} takes the opportunity to wordlessly signal ${he} wishes to gain your attention.`);
		if (canTalk(eventSlave)) {
			t.push(`"${Master}," ${he} ${say}s. "${Spoken(eventSlave, `I really enjoy my role as your slave, but I just don't feel like my new life stimulates me.`)}" ${He} blushes prettily at ${his} choice of words before continuing, "${Spoken(eventSlave, `Stimulate my mind, I mean.`)}"`);
		} else {
			t.push(`${He} uses gestures to beg your pardon and explains that while ${he} enjoys life as your slave, ${he} doesn't feel like ${his} new role in your arcology allows ${him} to stimulate ${his} mind as often as it does ${his} body.`);
		}
		App.Events.addParagraph(node, t);
		t = [];

		App.Events.addResponses(node, [
			new App.Events.Result(`Have a conversation with ${him}`, conversation),
			canDoAnal(eventSlave) || canDoVaginal(eventSlave)
				? new App.Events.Result(`Stimulate ${his} mind and body`, stimulate, virginityCheck())
				: new App.Events.Result(),
			FutureSocieties.isActive('FSDegradationist')
				? new App.Events.Result(`A public blowbang will show ${him} what a Degradationist arcology thinks about 'educated' slaves`, blowbang)
				: new App.Events.Result(),
			FutureSocieties.isActive('FSPaternalist')
				? new App.Events.Result(`Allow ${him} to audit some advanced classes at Paternalist slave schools`, schooling)
				: new App.Events.Result()
		]);

		function conversation() {
			t = [];

			t.push(`You linger in the hallway a while with ${eventSlave.slaveName} and enjoy a brief but verbose discussion. It's clear ${he} hasn't had the chance to engage in any meaningful conversations in a while, so ${he} relishes the opportunity energetically.`);
			App.Events.addParagraph(node, t);
			t = [];

			t.push(`Though the two of you only touch upon a handful of sophisticated topics, by the time you leave ${him} to tend to other matters, ${eventSlave.slaveName} is beaming happily as ${he} continues on to ${his} duties for the day. ${He} trusts you more for taking the time to engage with ${him} intellectually.`);
			App.Events.addParagraph(node, t);
			t = [];

			eventSlave.trust += 4;
			return t;
		}

		function stimulate() {
			t = [];

			t.push(`You find a comfortable seat to sit on ${PC.dick === 0 ? "and don a strap-on" : ""} as ${he} seats ${his}`);
			if (eventSlave.butt < 2) {
				t.push(`narrow`);
			} else if (eventSlave.butt < 5) {
				t.push(`average`);
			} else if (eventSlave.butt < 8) {
				t.push(`plump`);
			} else if (eventSlave.butt < 12) {
				t.push(`impressive`);
			} else {
				t.push(`mind-blowing`);
			}
			t.push(`ass on your ${PC.dick === 0 ? "strap-on" : "dick"} and rides you. While your cock plumbs the depths of ${his} ${canDoVaginal(eventSlave) ? "pussy" : "butt"}, the two of you engage in a casual debate over a number of topics of sophistry.`);
			App.Events.addParagraph(node, t);
			t = [];

			t.push(`At the crux of one of ${his} concluding arguments, the intense pleasure from the prolonged ${canDoVaginal(eventSlave) ? "fucking" : "buttfucking"} pushes ${him} over the edge into orgasm, robbing the thrust of ${his} defense of any gravitas it once had. ${He} doesn't seem to mind however, choosing to instead wrap up ${his} remarks by blowing you a kiss.`);
			if (canDoVaginal(eventSlave)) {
				t.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				t.push(VCheck.Anal(eventSlave, 1));
			}
			App.Events.addParagraph(node, t);
			t = [];

			eventSlave.devotion += 4;
			return t;
		}

		function blowbang() {
			t = [];

			t.push(`You tell ${him} ${he}'ll get fucked in the mouth until ${he} either gets over the idea of being special for ${his} education or until all ${his} learning is fucked out of ${his} head. You drag the protesting ${eventSlave.slaveName} out into a public plaza, restrain ${him} in stocks so that ${his} mouth is available, and inform the gathering crowd of citizens that this particular slave thinks ${himself} more than a fuckhole because of some fancy 'education'.`);
			App.Events.addParagraph(node, t);
			t = [];

			t.push(`When you return later in the evening, it becomes abundantly clear that your citizenry taught ${eventSlave.slaveName} a harsh lesson about a slave's place in ${V.arcologies[0].name}. ${eventSlave.slaveName} has certainly learned to keep any pretentious thoughts about ${his} education in ${his} head. ${He} did, however, have quite a rough time sucking all those dicks${eventSlave.skill.oral <= 30 ? `, though ${he} did learn about sucking dick, so ${he} can't claim enslavement isn't educational. ${slaveSkillIncrease('oral', eventSlave, 10)}` : "."} And last of all, you and ${eventSlave.slaveName} did make quite a good impression today, though for widely differing reasons.`);
			App.Events.addParagraph(node, t);
			t = [];

			seX(eventSlave, "oral", "public", "penetrative", jsRandom(65, 80));
			repX(500, "event", eventSlave);
			healthDamage(eventSlave, 10);
			return t;
		}

		function schooling() {
			t = [];

			t.push(`You tell ${him} to take the day off for a trip to audit classes at ${V.arcologies[0].name}'s most renowned Paternalist slave schools. ${eventSlave.slaveName} is shocked into a reverie by your words before running to wrap ${his} ${hasBothArms(eventSlave) ? "arms" : "arm"} around you in a tight hug. When ${he} eventually untangles ${himself} from you, ${he} races off to get ready for ${his} day of intellectualism while you direct ${V.assistant.name} to make the necessary arrangements.`);
			App.Events.addParagraph(node, t);
			t = [];

			t.push(`When ${eventSlave.slaveName} returns, ${he} looks exhausted but happier than you've ever seen ${him}. It seems ${he} benefited greatly from ${V.arcologies[0].name}'s Paternalist institutions, and has grown to trust you more while also deepening ${his} acceptance of slavery.`);
			App.Events.addParagraph(node, t);
			t = [];

			eventSlave.trust += 4;
			eventSlave.devotion += 4;
			return t;
		}

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


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canWalk,
				canTalk,
				s => s.devotion > 50,
				s => s.anus > 0,
				s => s.vagina !== 0,
				s => s.assignment !== Job.QUARTER,
				s => s.energy > 95,
				s => canDoAnal(s) || canDoVaginal(s)
			]
		];
	}

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

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

		let r = [];
		r.push(`On first slot of the inspection schedule for the day is`);
		r.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), "."));
		r.push(`When ${he} walks clumsily through the door of your office, it's obvious the poor nympho slut hasn't found release since waking up. ${His} incredible sex drive has ${his} arousal at a fever pitch.`);
		App.Events.addParagraph(node, r);

		r = [];
		r.push(`${He}'s walking awkwardly because of how painfully horny ${he} is. ${His}`);
		switch (eventSlave.nipples) {
			case "tiny":
				r.push(`tiny little nipples are rock hard.`);
				break;
			case "flat":
				r.push(`stretched nipples, which normally rest flush with ${his} areolae, are hard and prominent.`);
				break;
			case "puffy":
				r.push(`puffy nipples are flushed and stiff.`);
				break;
			case "partially inverted":
				r.push(`nipples, which normally rest flush with ${his} areolae, are fully erect.`);
				break;
			case "inverted":
				r.push(`nipples, which are normally fully inverted, are all the way out; that must have been a painful process.`);
				break;
			case "huge":
				r.push(`massive nipples are so big and hard ${he} could probably penetrate someone with them.`);
				break;
			case "fuckable":
				r.push(`fuckable nipples are practically swollen shut.`);
				break;
			default:
				r.push(`nipples are standing out with uncomfortable hardness.`);
		}
		if (eventSlave.chastityPenis) {
			r.push(`${His} chastity cage looks fit to burst with engorged dick.`);
		} else if (eventSlave.dick > 4 && canAchieveErection(eventSlave)) {
			r.push(`${His} gigantic erection waves around in front of ${him} as ${he} moves, its head describing a long arc in the air with each step.`);
		} else if (eventSlave.dick > 2 && canAchieveErection(eventSlave)) {
			r.push(`${His} erection waves around in front of ${him} as ${he} moves, its head bobbing lewdly up and down with each step.`);
		} else if (canAchieveErection(eventSlave)) {
			r.push(`${His} erection is so pathetically small that it stands out straight and stiff as ${he} moves.`);
		} else if (eventSlave.dick > maxErectionSize(eventSlave)) {
			r.push(`${His} oversized dick is as engorged as ${his} body can manage.`);
		} else if (eventSlave.dick > 0) {
			r.push(`${He}'s actually partway erect despite ${his} impotence, a remarkable testament to ${his} need.`);
		} else if (eventSlave.chastityVagina) {
			r.push(`${His} chastity belt positively tortures ${him} as ${he} moves.`);
		} else if (eventSlave.labia > 1) {
			r.push(`${His} normally-large pussylips are even more prominent than usual, swollen with need.`);
		} else if (eventSlave.clit > 3) {
			r.push(`${His} dick-like clit stands out straight and stiff as ${he} moves.`);
		} else if (eventSlave.clit > 1) {
			r.push(`${His} huge, sensitive clit positively tortures ${him} as ${he} moves.`);
		} else if (eventSlave.vagina === -1) {
			r.push(`${He} has no genitals to get hard or wet, but ${his} posture leaves no doubt that there's nothing ${he} wants more than to get ${his} ass reamed.`);
		} else {
			r.push(`${His} pussy is soaking wet, and streaks of female arousal are shining on ${his} inner thighs.`);
		}
		r.push(`As ${he} staggers to a halt in front of your desk,`);
		if (eventSlave.chastityPenis) {
			r.push(`the pressure on ${his} penis finally`);
		} else if (eventSlave.dick > 4 && canAchieveErection(eventSlave)) {
			r.push(`the movement of ${his} huge penis through the air`);
		} else if (eventSlave.dick > 2 && canAchieveErection(eventSlave)) {
			r.push(`${his} cock slaps up against ${his} stomach, which`);
		} else if (canAchieveErection(eventSlave)) {
			r.push(`${his} tiny dick is momentarily trapped between ${his} thighs, which`);
		} else if (eventSlave.dick > 6) {
			r.push(`${his} motion of ${his} gigantic cock against ${his} body.`);
		} else if (eventSlave.dick > 0) {
			r.push(`${his} floppy cock hits ${his} thighs, which`);
		} else if (eventSlave.chastityVagina) {
			r.push(`the friction against ${his} genitals finally`);
		} else if (eventSlave.labia > 1) {
			r.push(`which brings ${his} thighs together enough that this`);
		} else if (eventSlave.clit > 3) {
			r.push(`the movement of ${his} huge clit through the air`);
		} else if (eventSlave.clit > 1) {
			r.push(`stimulating ${his} clit enough that it`);
		} else if (eventSlave.vagina === -1) {
			r.push(`${his} motion flexes ${his} buttocks together just enough to clench ${his} sensitive asspussy, and`);
		} else {
			r.push(`${his} motion`);
		}
		r.push(`provides just enough stimulation that ${he} climaxes. ${His}`);
		if (hasAnyArms(eventSlave)) {
			if (hasBothArms(eventSlave)) {
				r.push(`hands ball into fists at ${his} sides`);
			} else {
				r.push(`hand balls into a fist at ${his} side`);
			}
			r.push(`and ${his}`);
		}
		r.push(`torso pitches forward involuntarily,`);
		if (eventSlave.chastityPenis) {
			r.push(`a dribble of cum leaking from ${his} cage.`);
		} else if ((eventSlave.balls > 3 && eventSlave.hormoneBalance < -20) || eventSlave.balls >= 10) {
			r.push(`a ridiculous, pent-up torrent of cum shooting out`);
			if (eventSlave.dick > 0) {
				r.push(`and onto the floor.`);
			} else {
				r.push(`of the tiny hole on ${his} featureless crotch.`);
			}
		} else if (canAchieveErection(eventSlave)) {
			r.push(`a strong jet of cum shooting out and onto the floor.`);
		} else if (eventSlave.vagina === -1 && eventSlave.dick === 0) {
			r.push(`dribbling a little fluid out of the tiny hole in ${his} otherwise featureless groin.`);
		} else if (eventSlave.balls > 0 && eventSlave.dick > 0 && !canAchieveErection(eventSlave)) {
			r.push(`${his} soft cock twitching upward and shooting out quite a lot of cum.`);
		} else if (eventSlave.dick > 0) {
			if (eventSlave.prostate > 1) {
				r.push(`a large spurt of`);
			} else {
				r.push(`a few drops`);
			}
			r.push(`watery ejaculate scattering from ${his} dickhead.`);
		} else if (eventSlave.vagina > 1) {
			r.push(`the strong muscles around ${his} big cunt visibly contracting with the force as ${he} squirts a jet of girlcum out onto ${his} legs and the floor.`);
		} else if (eventSlave.lactation > 1) {
			r.push(`a surprising`);
			if (eventSlave.nipples !== "fuckable") {
				r.push(`jet`);
			} else {
				r.push(`gush`);
			}
			r.push(`of ${milkFlavor(eventSlave)}milk issuing from both of ${his} nipples.`);
			eventSlave.lactationDuration = 2;
			eventSlave.boobs -= eventSlave.boobsMilk;
			eventSlave.boobsMilk = 0;
		} else if (eventSlave.lactation > 0) {
			r.push(`drops of ${milkFlavor(eventSlave)}milk`);
			if (eventSlave.nipples !== "fuckable") {
				r.push(`appearing at each of ${his} motherly nipples only to be flung onto the floor.`);
			} else {
				r.push(`running from each of ${his} nipples and down ${his} breasts.`);
			}
			eventSlave.lactationDuration = 2;
			eventSlave.boobs -= eventSlave.boobsMilk;
			eventSlave.boobsMilk = 0;
		} else if (eventSlave.belly >= 2000) {
			if (eventSlave.bellyFluid >= 2000) {
				r.push(`forcing a grunt out of ${him} as ${he} bends against ${his} ${belly} ${eventSlave.inflationType}-filled belly`);
				if (eventSlave.vagina > -1) {
					r.push(`squirting a`);
					if (eventSlave.prostate > 0) {
						r.push(`a large spurt of`);
					} else {
						r.push(`little jet`);
					}
					r.push(`of girlcum`);
					if (eventSlave.inflationMethod === 2) {
						r.push(`from ${his} pussy and a dribble of ${eventSlave.inflationType} from ${his} ass`);
					} else {
						r.push(`down ${his} legs and`);
					}
					r.push(`onto the floor.`);
				} else {
					if (eventSlave.inflationMethod === 2) {
						r.push(`as the muscles in ${his} lower body visibly contract with the force, squirting out a little jet of ${eventSlave.inflationType} from ${his} ass.`);
					} else {
						r.push(`as the muscles in ${his} lower body visibly contract with the force.`);
					}
				}
			} else {
				r.push(`forcing a grunt out of ${him} as ${he} bends against ${his} ${belly}`);
				if (eventSlave.bellyPreg >= 2000) {
					r.push(`pregnant`);
				}
				r.push(`belly`);
				if (eventSlave.vagina > -1) {
					r.push(`squirting a`);
					if (eventSlave.prostate > 0) {
						r.push(`a large spurt of`);
					} else {
						r.push(`little jet`);
					}
					r.push(`of girlcum out onto ${his} legs and the floor.`);
				} else {
					r.push(`as the muscles in ${his} lower body visibly contract with the force.`);
				}
			}
		} else if (eventSlave.vagina < 0) {
			r.push(`the muscles in ${his} lower body visibly contracting with the force.`);
		} else {
			r.push(`squirting a`);
			if (eventSlave.prostate > 0) {
				r.push(`a large spurt of`);
			} else {
				r.push(`little jet`);
			}
			r.push(`of girlcum out onto ${his} legs and the floor.`);
		}
		r.push(`${He} stands up straight, but this brings ${his}`);
		if (canSee(eventSlave)) {
			r.push(`${App.Desc.eyesColor(eventSlave)} up to gaze straight into yours,`);
		} else {
			r.push(`face to face with you,`);
		}
		r.push(`and the mixed release, humiliation, and naughtiness of having climaxed prematurely right in front of ${his} ${getWrittenTitle(eventSlave)} produces an aftershock, adding to the mess on the floor.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Make ${him} do that again`, again),
			new App.Events.Result(`Take pity on the poor nympho`, pity),
		]);

		function again() {
			const toss = canSee(eventSlave) ? "toss" : "hand";
			r = [];
			r.push(`You laugh at ${him} kindly, and ${he} <span class="trust inc">smiles with relief,</span> happy that you find ${his} wonderful and terrible sex drive amusing. After a cursory inspection, you`);
			if (eventSlave.fetish === "buttslut" && eventSlave.fetishKnown === 1) {
				if (eventSlave.chastityAnus) {
					r.push(`leave ${his} anal chastity unlocked,`);
				}
				r.push(`${toss} ${him} a`);
				if (eventSlave.anus > 2) {
					r.push(`vibrating buttplug so big it will fill even ${his} gaping backdoor,`);
				} else if (eventSlave.anus > 1) {
					r.push(`sizable vibrating buttplug,`);
				} else {
					r.push(`vibrating buttplug,`);
				}
				r.push(`let ${him} suck it wet and get it nestled between ${his} buttcheeks, and then tell ${him} to stand next to your desk. ${He} obeys, a bit puzzled, but ${he} loves standing around with things shoved up ${his} asshole`);
			} else if (eventSlave.fetish === "humiliation" && eventSlave.fetishKnown === 1) {
				r.push(`${toss} ${him} a`);
				if (canDoVaginal(eventSlave)) {
					if (eventSlave.vagina > 2) {
						r.push(`vibrating dildo so big it will fill even ${his} gaping cunt,`);
					} else if (eventSlave.vagina > 1) {
						r.push(`sizable vibrating dildo,`);
					} else {
						r.push(`vibrating dildo,`);
					}
					r.push(`let ${him} suck it wet and get it nestled inside ${himself}, and then tell ${him} to stand next to your desk. ${He} obeys, a bit puzzled, but ${he} loves standing around naked with humiliating things shoved in ${his} body`);
				} else {
					if (eventSlave.anus > 2) {
						r.push(`vibrating buttplug so big it will fill even ${his} gaping backdoor,`);
					} else if (eventSlave.anus > 1) {
						r.push(`sizable vibrating buttplug,`);
					} else {
						r.push(`vibrating buttplug,`);
					}
					r.push(`let ${him} suck it wet and get it nestled between ${his} buttcheeks, and then tell ${him} to stand next to your desk. ${He} obeys, a bit puzzled, but ${he} loves standing around naked with humiliating things shoved up ${his} asshole`);
				}
			} else if (eventSlave.fetish === "masochist" && eventSlave.fetishKnown === 1) {
				r.push(`${toss} ${him} a`);
				if (canDoVaginal(eventSlave)) {
					if (eventSlave.vagina > 2) {
						r.push(`vibrating dildo so big it will fill even ${his} gaping cunt,`);
					} else if (eventSlave.vagina > 1) {
						r.push(`sizable vibrating dildo,`);
					} else {
						r.push(`vibrating dildo,`);
					}
					r.push(`let ${him} suck it wet and get it nestled inside ${himself}, and then tell ${him} to stand next to your desk. ${He} obeys, a bit puzzled, but ${he} loves having painfully big things shoved up ${his} hole`);
				} else {
					if (eventSlave.anus > 2) {
						r.push(`vibrating buttplug so big it will fill even ${his} gaping backdoor,`);
					} else if (eventSlave.anus > 1) {
						r.push(`sizable vibrating buttplug,`);
					} else {
						r.push(`vibrating buttplug,`);
					}
					r.push(`let ${him} suck it wet and get it nestled between ${his} buttcheeks, and then tell ${him} to stand next to your desk. ${He} obeys, a bit puzzled, but ${he} loves having painfully big things shoved up ${his} asshole`);
				}
			} else if ((eventSlave.fetish === "boobs" && eventSlave.fetishKnown === 1) && eventSlave.boobs > 300) {
				r.push(`${toss} ${him} a`);
				if (eventSlave.nipples === "fuckable") {
					r.push(`pair of egg vibrators, let ${him} suck them wet and get them nestled inside ${his} nipples, and then tell ${him} to stand next to your desk. ${He} obeys, a bit puzzled, but ${he} loves having things shoved inside ${his} nipplecunts`);
				} else {
					r.push(`vibrating dildo, let ${him} suck it wet and get it nestled within ${his} cleavage, and then tell ${him} to stand next to your desk. ${He} obeys, a bit puzzled, but ${he} loves having long, hard objects shoved between ${his} tits`);
				}
			} else {
				r.push(`${toss} ${him} a`);
				if (canDoVaginal(eventSlave)) {
					if (eventSlave.vagina > 2) {
						r.push(`vibrating dildo so big it will fill even ${his} gaping cunt,`);
					} else if (eventSlave.vagina > 1) {
						r.push(`sizable vibrating dildo,`);
					} else {
						r.push(`vibrating dildo,`);
					}
					r.push(`let ${him} suck it wet and get it nestled inside ${himself},`);
				} else {
					if (eventSlave.anus > 2) {
						r.push(`vibrating buttplug so big it will fill even ${his} gaping backdoor,`);
					} else if (eventSlave.anus > 1) {
						r.push(`sizable vibrating buttplug,`);
					} else {
						r.push(`vibrating buttplug,`);
					}
					r.push(`let ${him} suck it wet and get it nestled between ${his} buttcheeks,`);
				}
				r.push(`and then tell ${him} to stand next to your desk. ${He} obeys, a bit puzzled, but ${he} has a very short refractory period`);
			}
			r.push(`and ${he} comes again without much delay, without touching ${his}`);
			if (eventSlave.dick > 0 && eventSlave.vagina > -1) {
				r.push(`bits.`);
			} else if (eventSlave.dick > 0) {
				r.push(`cock.`);
			} else if (eventSlave.vagina === -1) {
				r.push(`soft perineum, the only place ${he} has left.`);
			} else {
				r.push(`pussy.`);
			}
			r.push(`You keep ${him} there for quite a while, the quivering,`);
			if (eventSlave.chastityPenis) {
				r.push(`ejaculate-dripping`);
			} else if (canAchieveErection(eventSlave)) {
				r.push(`cum-jetting`);
			} else if (eventSlave.balls > 0) {
				r.push(`cum-squirting`);
			} else if (eventSlave.dick > 0) {
				r.push(`ejaculating`);
			} else if (eventSlave.lactation > 0) {
				r.push(`milk-squirting`);
			} else if (eventSlave.vagina === -1) {
				r.push(`weakly dribbling`);
			} else {
				r.push(`femcum-dripping`);
			}
			r.push(`statue of a slave providing visual diversion for visitors.`);
			eventSlave.trust += 5;
			return r;
		}

		function pity(){
			let didVaginal = false;
			let didAnal = false;

			r = [];
			r.push(`${He} shivers a little when ${he}`);
			if (canSee(eventSlave)) {
				r.push(`sees`);
			} else if (canHear(eventSlave)) {
				r.push(`hears`);
			} else {
				r.push(`senses`);
			}
			r.push(`you slide out from behind your desk and approach ${him}. ${His} overcharged sex drive allows ${him} no refractory period at all, and the hunger`);
			if (!canSee(eventSlave)) {
				r.push(`on ${his} face`);
			} else {
				r.push(`in ${his} eyes`);
			}
			r.push(`is undiminished. You pause to consider ${him} and ${his} face falls a little as ${he} wonders what you're planning. ${He}'s wrong to doubt you;`);
			if (eventSlave.fetish === Fetish.SUBMISSIVE && eventSlave.fetishKnown === 1) {
				r.push(`you pull ${him} in and embrace ${him} strongly, causing the submissive slut to melt into your`);
				if (V.PC.boobs >= 300) {
					if (V.PC.boobsImplant !== 0) {
						r.push(`firm chest.`);
					} else {
						r.push(`soft chest.`);
					}
				} else if (V.PC.title === 0) {
					r.push(`toned arms.`);
				} else {
					r.push(`muscular arms.`);
				}
				r.push(`You kiss ${him} aggressively, ${his} mouth opening to accept your dominant tongue as it slides into ${him}. Soon ${he}'s sighing with contentment as something else slides into ${him} on the couch; ${he} clings to you with near desperation.`);
				if (canDoVaginal(eventSlave)) {
					didVaginal = true;
				} else {
					didAnal = true;
				}
			} else if (eventSlave.fetish === "cumslut" && eventSlave.fetishKnown === 1) {
				r.push(`you push the orally fixated slut to ${his} knees and`);
				if (V.PC.dick === 0) {
					r.push(`ride ${his} face like it's a pussy you're tribbing.`);
				} else {
					r.push(`fuck ${his} face like you're trying to impregnate ${his} throat.`);
				}
				if (hasAnyArms(eventSlave)) {
					r.push(`${He}'s forced to hold onto your thighs for dear life, making it impossible for ${him} to touch ${himself}, but ${he} doesn't need to and climaxes again`);
					if (hasBothArms(eventSlave)) {
						r.push(`hands-free`);
					}
					r.push(r.pop() + ".");
				}
				seX(eventSlave, "oral", V.PC, "penetrative");
			} else if (eventSlave.fetish === "humiliation" && eventSlave.fetishKnown === 1) {
				r.push(`you set up a live feed on the screens throughout the arcology, pointing down from the ceiling above your desk, make ${him} lie down on the desk top, and fuck ${him}. ${He}`);
				if (canSee(eventSlave)) {
					r.push(`stares into`);
				} else {
					r.push(`gazes towards`);
				}
				r.push(`the camera's lens with mixed shame and relish as the full weight of the humiliation of being used in front of the whole arcology bears down on ${his} heaving chest.`);
				if (canDoVaginal(eventSlave)) {
					didVaginal = true;
				} else {
					didAnal = true;
				}
			} else if (eventSlave.fetish === "buttslut" && eventSlave.fetishKnown === 1 && canDoAnal(eventSlave)) {
				r.push(`you`);
				if (canSee(eventSlave)) {
					r.push(`point at the couch`);
				} else {
					r.push(`state "couch"`);
				}
				r.push(`and ${he} hurries over to kneel and offer you ${his} asshole. Since the butthole slut clearly doesn't need any foreplay today, the first contact between you is`);
				if (V.PC.dick !== 0) {
					r.push(`the tip of your cock`);
				} else {
					r.push(`the head of your strap-on`);
				}
				r.push(`pressing forcefully against ${his} anus. ${He} gives a huge shuddering gasp of satisfaction as ${his} sphincter stretches around the invading phallus.`);
				didAnal = true;
			} else if (eventSlave.fetish === "boobs" && eventSlave.fetishKnown === 1) {
				r.push(`you play with ${his} nipples until`);
				if (eventSlave.nipples !== "fuckable") {
					r.push(`they're good and hard,`);
				} else {
					r.push(`they swallow your fingers,`);
				}
				r.push(`while ${he} stands there shamelessly presenting ${his} breasts for your play. Once you're satisfied they can't get any harder, you`);
				if (V.PC.dick !== 0) {
					r.push(`push ${him} to ${his} knees`);
					if (eventSlave.nipples !== "fuckable") {
						r.push(r.pop() + ",");
						r.push(`tell ${him} to take over the nipple stimulation,`);
					}
					r.push(`and fuck ${his} boobs.`);
				} else {
					r.push(`throw ${him} down on the couch, straddle ${his} boobs, and`);
					if (eventSlave.nipples !== "fuckable") {
						r.push(`ride each of ${his} erect`);
					} else {
						r.push(`trib ${his}`);
					}
					r.push(`nipples in turn.`);
				}
				seX(eventSlave, "mammary", V.PC, "penetrative");
			} else if (eventSlave.fetish === "pregnancy" && eventSlave.fetishKnown === 1) {
				r.push(`you tell ${him} you're going to put a slave in ${his} belly, bringing ${him} instantaneously back to painfully full arousal. You take ${him} on the couch in the missionary position so ${he} can stare into your face.`);
				if (!canDoVaginal(eventSlave)) {
					r.push(`It's ${his} butt you're fucking, but ${he} doesn't let that disrupt ${his} fantasy.`);
				} else if (V.PC.dick === 0) {
					r.push(`The phallus in ${him} is a strap-on, but ${he} doesn't let that disrupt ${his} fantasy.`);
				} else if (eventSlave.pregKnown === 1) {
					r.push(`${He}'s already knocked up, but that just means that ${he} shamelessly begs you to fuck ${him} even more pregnant.`);
				} else if (!isFertile(eventSlave, true)) {
					r.push(`${He}'s not fertile, but ${he} doesn't let that get in ${his} way.`);
				}
				if (canDoVaginal(eventSlave)) {
					didVaginal = true;
				} else {
					didAnal = true;
				}
			} else if (eventSlave.fetish === "dom" && eventSlave.fetishKnown === 1) {
				r.push(`you shove ${him} back towards the couch and leap onto ${him}, pulling your legs into a scissor position. You bang ${him} hard, and ${he} grinds ${his} hips back at you with enthusiasm. This mutually challenging fuck goes on for a long time, to sweaty, endorphin-fueled muscle exhaustion.`);
				if (canDoVaginal(eventSlave)) {
					didVaginal = true;
				} else {
					didAnal = true;
				}
			} else if (eventSlave.fetish === "sadist" && eventSlave.fetishKnown === 1) {
				r.push(`you call in a less favored slave and let ${eventSlave.slaveName} spank ${him} until ${he}'s fully aroused again. That done, you and ${eventSlave.slaveName} spitroast the poor girl, with ${eventSlave.slaveName} taking the rear end. Judging by how the victim screams into your`);
				if (V.PC.dick !== 0) {
					r.push(`cock`);
					if (V.PC.vagina !== -1) {
						r.push(`and`);
					}
				}
				if (V.PC.vagina !== -1) {
					r.push(`cunt`);
				}
				r.push(r.pop() + ",");
				r.push(`${eventSlave.slaveName} is not being very nice to ${him} at all.`);
				seX(V.PC, "penetrative", "slaves", "oral");
				seX(eventSlave, "penetrative", "slaves", "oral");
			} else if (eventSlave.fetish === "masochist" && eventSlave.fetishKnown === 1) {
				r.push(`you prowl around ${him} to let ${his} masochistic anticipation build before nudging ${him} in the back of the knees. ${He} collapses helplessly and you drag ${him} over to the couch, slinging ${him} across its back and fucking ${him} without mercy. When the pleasurable pain loses its edge, you slide a finger into ${him} alongside your`);
				if (V.PC.dick === 0) {
					r.push(`strap-on,`);
				} else {
					r.push(`cock,`);
				}
				r.push(`eliciting an appreciative shriek.`);
				if (canDoVaginal(eventSlave)) {
					didVaginal = true;
				} else {
					didAnal = true;
				}
			}
			if (didAnal) {
				r.push(VCheck.Anal(eventSlave, 1));
			} else if (didVaginal) {
				r.push(VCheck.Vaginal(eventSlave, 1));
			}
			r.push(`${He}'s extremely pleased`);
			if (canSee(eventSlave)) {
				r.push(`to see ${himself}`);
			} else if (canHear(eventSlave)) {
				r.push(`to hear ${he}'s`);
			} else {
				r.push(`to learn ${he}'s`);
			}
			r.push(`on the inspection schedule for the same time tomorrow, and is almost bouncing with eagerness the next morning.`);
			if (eventSlave.fetishStrength === 100 || eventSlave.fetishKnown === 0 || eventSlave.fetish === Fetish.NONE) {
				r.push(`Being a nympho is a never-ending struggle in some ways, and ${he} is <span class="hotpink">deeply grateful</span> to you for understanding ${him}.`);
				eventSlave.devotion += 5;
			} else {
				r.push(`Since ${he}'s developing ${his} kinks, this delightful reinforcement <span class="lightcoral">advances ${his} fetish.</span>`);
				eventSlave.fetishStrength += 4;
			}
			return r;
		}
	}
};


code:
// cSpell:ignore maître

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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canStand,
				s => s.waist < -95,
				s => s.weight <= 95,
				s => s.trust >= -20,
				s => s.devotion > 20,
				s => s.belly < 30000
			]
		];
	}

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

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

		let t = [];

		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`is a real work of surgical art. As ${he} showers, carefully soaping and then moisturizing every ${V.showInches === 2 ? "inch" : "centimeter"} of ${his} ${eventSlave.skin} skin, you notice the undeniable eroticism created by the unnatural narrowness of`);
		if (eventSlave.belly >= 5000) {
			t.push(`${his} middle, especially given how much ${his} ${belly} ${eventSlave.bellyPreg >= 3000 ? "pregnancy" : "belly"} extends past ${his} sides.`);
		} else {
			t.push(`${his} middle.`);
		}
		t.push(`Though ${his} hands are by no means large, when ${he} washes ${his} sides, ${his} hands span almost the entire circumference of ${his} waist.`);
		if (eventSlave.dick > 0) {
			t.push(`Though ${he}'s not sexually aroused, ${his} cock is visible as ${he} bathes ${himself}; ${his} member and ${his} narrow waist work together to create a real mélange of gender traits.`);
		} else if (eventSlave.boobs > 800 && eventSlave.butt > 4) {
			t.push(`${His} massive bust and hips work together to create a spectacular hourglass effect; ${he}'s a fantasy ${woman} made flesh.`);
		} else {
			t.push(`The narrowness of ${his} waist accentuates ${his} feminine features.`);
		}
		App.Events.addParagraph(node, t);
		t = [];

		App.Events.addResponses(node, [
			new App.Events.Result(`Join ${him} and see if your hands can span ${his} waist`, grab, virginityWarning()),
			new App.Events.Result("Such a lovely work of art must be displayed", display, virginityWarning()),
		]);

		function grab() {
			t = [];

			t.push(`By the time you reach the shower, ${eventSlave.slaveName} is toweling ${himself}. ${He} notices your approach and folds the towel neatly before performing a little naked pirouette that shows off ${his} artificial`);
			if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
				t.push(`curviness while displaying each of ${his} delectable holes.`);
			} else if (canDoVaginal(eventSlave)) {
				t.push(`curviness while displaying ${his}`);
				if (eventSlave.vagina > 3) {
					t.push("gaping cunt.");
				} else if (eventSlave.vagina > 2) {
					t.push("loose cunt.");
				} else if (eventSlave.vagina > 1) {
					t.push("slutty pussy.");
				} else if (eventSlave.vagina > 0) {
					t.push("tight pussy.");
				} else {
					t.push("virgin pussy.");
				}
			} else if (canDoAnal(eventSlave)) {
				t.push(`curviness while displaying ${his}`);
				if (eventSlave.anus > 2) {
					t.push("gaping asshole.");
				} else if (eventSlave.anus > 1) {
					t.push("slutty asshole.");
				} else if (eventSlave.anus > 0) {
					t.push("tight asshole.");
				} else {
					t.push("virgin asshole.");
				}
			} else {
				t.push("curviness.");
			}
			if (eventSlave.belly >= 500 || eventSlave.weight > 30) {
				t.push(`You take ${him} about the middle and, with a little imagination, find that, indeed, you could make your thumbs and fingertips meet around it if you were to press.`);
			} else {
				t.push(`You take ${him} about the waist and find that, indeed, you can make your thumbs and fingertips meet around it if you press, which elicits a squeak.`);
			}
			if (!canDoVaginal(eventSlave) && !canDoAnal(eventSlave)) {
				t.push(`There are many ways you could apply this during sex, but since ${he} is fully locked in chastity, you can only explain, in detail, the ways you would fuck ${him} if you could. By the end ${he}'s blushing vibrantly, but more confident in ${his} sexual uniqueness.`);
			} else {
				t.push(`This can be applied during sex many ways. First, ${he} sits on the bathroom counter and bends ${himself} almost double for`);
				if (canDoAnal(eventSlave)) {
					t.push(`anal. Your control over the pace is perfected by your grip around ${his} tiny middle.`);
					t.push(VCheck.Anal(eventSlave, 1));
				} else {
					t.push(`vaginal. Your control over the pace is perfected by your grip around ${his} tiny middle.`);
					t.push(VCheck.Vaginal(eventSlave, 1));
				}
				t.push(`Finally, ${he} goes down on ${hasAllLimbs(eventSlave) ? "all fours" : "the floor"} for a hard`);
				if (canDoVaginal(eventSlave)) {
					t.push(`pounding, doggy style, losing ${himself} in the intense penetration as you use your hold around ${him} to give it to ${him} even harder.`);
					t.push(VCheck.Vaginal(eventSlave, 1));
				} else {
					t.push(`buttfuck, doggy style, losing ${himself} in the intense anal as you use your hold around ${him} to give it to ${him} even harder.`);
					t.push(VCheck.Anal(eventSlave, 1));
				}
				t.push(`By the end ${he}'s tired but <span class="mediumaquamarine">confident in ${his} sexual uniqueness.</span>`);
			}

			eventSlave.trust += 4;
			return t;
		}

		function display() {
			t = [];

			t.push(`There is a polite soirée tonight at one of ${V.arcologies[0].name}'s more upscale eating establishments. Many couples are there to enjoy themselves and preen, but even so, you make a stir as you enter wearing`);
			if (PC.title === 1) {
				t.push(`the latest in men's eveningwear${PC.boobs >= 300 || PC.belly >= 1500 || PC.butt >= 3 || PC.balls >= 9 ? ", tastefully tailored to accommodate your unusual build" : ""}.`);
			} else {
				t.push(`the latest dress from one of your arcology's leading tailors${PC.boobs >= 300 || PC.belly >= 1500 || PC.butt >= 3 || PC.balls >= 9 ? ", carefully tailored to accentuate your splendid curves" : ""}.`);
			}
			t.push(`${eventSlave.slaveName} is a confection on your arm, displayed in a silk gown of strips and cuts that accentuates ${his} artificial figure while leaving ${his} breasts,`);
			if (eventSlave.dick > 0) {
				t.push(`${eventSlave.chastityPenis === 1 ? "caged" : ""} cock,`);
			} else if (eventSlave.vagina > -1) {
				t.push(`${eventSlave.chastityPenis === 1 ? "chaste" : ""} pussy,`);
			} else if (eventSlave.balls > 1 && eventSlave.scrotum > 0) {
				t.push("dangling balls,");
			} else {
				t.push("featureless groin,");
			}
			t.push(`and ${eventSlave.chastityAnus ? "off-limits rear" : "butt"} lusciously bare. Your appearance together with your living accessory increases your reputation. After a refined meal and some sedate dancing, the maître d' announces that the establishment has become (the Free Cities definition of) a salon for the evening. After the more prudish couples file out, those who remain engage in public sexual congress;`);
			if (canDoAnal(eventSlave) || canDoVaginal(eventSlave)) {
				t.push(`${eventSlave.slaveName}'s gown allows you to take ${him} in a ${eventSlave.belly >= 5000 ? "tight" : "close"} lotus position on the cleared table, face to face.`);
				if (canDoVaginal(eventSlave)) {
					t.push(VCheck.Vaginal(eventSlave, 1));
				} else {
					t.push(VCheck.Anal(eventSlave, 1));
				}
			} else {
				t.push(`you and ${eventSlave.slaveName} enjoy the ${canSee(eventSlave) ? "sights" : "atmosphere"} while fooling around. While you'd love to use ${him}, ${his} chastity keeps you at bay.`);
			}
			t.push(`<span class="hotpink">${He} has become more devoted to you.</span>`);

			eventSlave.devotion += 4;
			repX(500, "event", eventSlave);
			return t;
		}

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


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

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

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

		App.Events.drawEventArt(node, eventSlave);

		let t = [];

		t.push("An escape attempt occurs and is stopped almost before you are informed of it.");
		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`made a rash attempt to leave the penthouse, but ${V.assistant.name} monitors everyone constantly and was able to enclose ${him} before ${he} got very far.`);
		if (V.assistant.personality <= 0) {
			t.push("It reports impersonally that the would-be escapee is locked in the entryway awaiting your judgment.");
		} else {
			t.push(`${He} reports suggestively that the would-be escapee is locked in the entryway awaiting your pleasure.`);
		}
		App.Events.addParagraph(node, t);
		t = [];

		if (V.arcologyUpgrade.drones === 1) {
			t.push(`Your advanced security systems are able to stop ${him} promptly, and there is no indication to the public that any escape attempt was made.`);
		} else {
			t.push(`Your basic security systems are only able to stop ${him} by briefly locking down your penthouse, exciting <span class="red">some adverse public comment.</span>`);
			repX(-100, "event", eventSlave);
		}
		App.Events.addParagraph(node, t);
		t = [];

		if (eventSlave.indentureRestrictions > 0) {
			t.push(`This behavior has violated ${his} indenture contract, allowing you to apply more severe punishments that might otherwise breach it.`);
			App.Events.addParagraph(node, t);
			t = [];
		}

		App.Events.addResponses(node, [
			new App.Events.Result("Do nothing", nothing),
			new App.Events.Result("Just confine the would-be escapee to prevent future attempts", confine),
			new App.Events.Result("Flog the would-be escapee", flog),
			...(V.seeExtreme === 1 ? [
				(hasAnyNaturalLegs(eventSlave) && eventSlave.heels === 0
					? new App.Events.Result("Clip the would-be escapee's tendons", clip)
					: new App.Events.Result()
				),
				(hasAnyNaturalLimbs(eventSlave)
					? new App.Events.Result("Amputate the would-be escapee's limbs", amputate)
					: new App.Events.Result()
				),
				(canSee(eventSlave)
					? new App.Events.Result("Blind the would-be escapee", blind)
					: new App.Events.Result()
				),
				(canTalk(eventSlave)
					? new App.Events.Result("Mute the would-be escapee", mute)
					: new App.Events.Result()
				)
			] : []
			)
		]);

		function nothing() {
			t = [];

			t.push(`Considering how easily this attempt was thwarted, you don't see much of a point in wasting your valuable time on punishing ${eventSlave.slaveName} in the hopes that ${he}'ll learn ${his} lesson. You send ${him} back to ${his} assigned duties, warning ${him} that you may not be so lenient in the future. ${eventSlave.slaveName} proclaims ${his} obedience, but, privately, it's clear that ${he} views your decision as an act of weakness rather than kindness. In addition, every single one of your other slaves not already obedient to you is encouraged in their trust that you won't hurt them by this minuscule punishment of an escape attempt.`);
			t.push(newRumor.weakness());
			eventSlave.devotion -= 10;
			eventSlave.trust += 2;
			getSlaves().forEach(function(s) { if (s.devotion <= 20) { s.trust += 8; } });

			return t;
		}

		function confine() {
			t = [];

			t.push(`You order ${eventSlave.slaveName} confined until further notice. ${eventSlave.slaveName} is a little crushed by ${his} failure to escape. However, every single one of your other slaves not already obedient to you is slightly encouraged in their trust that you won't hurt them by this moderate punishment of an escape attempt.`);

			eventSlave.devotion += 4;
			assignJob(eventSlave, "stay confined");
			getSlaves().forEach(function(s) { if (s.devotion <= 20) { s.trust += 4; } });

			return t;
		}

		function flog() {
			t = [];

			t.push(`Lesser whippings are usually performed by binding a slave's hands and then securing them to the ceiling so that ${he} will dance titillatingly when struck. This is not such a beating. You tie ${eventSlave.slaveName} to a wall by ${his} wrists and ankles and flog ${him} with workmanlike thoroughness${eventSlave.pregKnown === 1 ? `, making sure to avoid accidentally ending ${his} pregnancy` : ""}. ${He} passes from angry struggles to agonized sobbing and finally to bloody, exhausted weeping before you untie ${his} now-limp form and apply first aid. ${eventSlave.slaveName}'s rebelliousness is dulled by the experience, and ${his} health is damaged. Furthermore, every single one of your other slaves not already obedient to you is frightened by the example set.`);

			eventSlave.trust -= 5;
			healthDamage(eventSlave, 40);
			getSlaves().forEach(function(s) { if (s.devotion <= 20) { s.trust -= 5; } });

			return t;
		}

		function clip() {
			t = [];

			t.push(`The simple thing to do would be to sedate ${eventSlave.slaveName} and haul ${him} to the remote surgery for ${his} punishment. That would deny ${him} the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain ${him}, pronounce judgment, and drag ${his} struggling, weeping form through the penthouse to the surgery. ${eventSlave.slaveName} is saddened and frightened by this punishment, and ${his} health is damaged by the surgery. Every single one of your other slaves with any resistance left in them is sensibly restrained from trying such rash acts.`);

			eventSlave.devotion -= 5;
			eventSlave.trust -= 5;
			eventSlave.heels = 1;
			surgeryDamage(eventSlave, 10);
			getSlaves().forEach(function(s) { if (s.devotion <= 20) { s.trust -= 5; } });

			return t;
		}

		function amputate() {
			t = [];

			t.push(`The simple thing to do would be to sedate ${eventSlave.slaveName} and haul ${him} to the remote surgery for ${his} punishment. That would deny ${him} the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain ${him}, pronounce judgment, and drag ${his} struggling, weeping form through the penthouse to the surgery. ${eventSlave.slaveName} is filled with implacable hatred by this terrible punishment, and ${his} health is damaged by the major surgery. However, every single one of your other slaves not already obedient to you is utterly terrified by the example set.`);

			eventSlave.devotion -= 50;
			eventSlave.trust -= 50;
			eventSlave.diet = "healthy";
			removeLimbs(eventSlave, "all");
			surgeryDamage(eventSlave, 40);
			getSlaves().forEach(function(s) { if (s.devotion <= 20) { s.trust -= 10; } });

			return t;
		}

		function blind() {
			t = [];

			t.push(`The simple thing to do would be to sedate ${eventSlave.slaveName} and haul ${him} to the remote surgery for ${his} punishment. That would deny ${him} the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain ${him}, pronounce judgment, and drag ${his} struggling, weeping form through the penthouse to the surgery. You make sure to point out all the things ${he}'ll never get to see again. ${eventSlave.slaveName} is filled with implacable hatred by this terrible punishment, and ${his} health is slightly damaged by the surgery. However, every single one of your other slaves not already obedient to you is utterly terrified by the example set.`);

			eventSlave.devotion -= 50;
			eventSlave.trust -= 50;
			eyeSurgery(eventSlave, "both", "blind");
			surgeryDamage(eventSlave, 20);
			getSlaves().forEach(function(s) { if (s.devotion <= 20) { s.trust -= 10; } });

			return t;
		}

		function mute() {
			t = [];

			t.push(`The simple thing to do would be to sedate ${eventSlave.slaveName} and haul ${him} to the remote surgery for ${his} punishment. That would deny ${him} the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain ${him}, pronounce judgment, and drag ${his} struggling, protesting form through the penthouse to the surgery. ${He} is allowed one last chance to verbally resist you, plead with you, and finally to beg with you, all in vain. ${eventSlave.slaveName} is filled with hatred and terror by this harsh punishment, and ${his} health is slightly damaged by the surgery. However, every single one of your other slaves not already obedient to you is terrified by the example set.`);

			eventSlave.devotion -= 5;
			eventSlave.trust -= 25;
			eventSlave.voice = 0;
			surgeryDamage(eventSlave, 10);
			getSlaves().forEach(function(s) { if (s.devotion <= 20) { s.trust -= 5; } });

			return t;
		}
	}
};