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 > 6) {
			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)) {
					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:
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`;
			}
		}
	}
};

repo_name: DontAskDontTell/fc

license: mit


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.`);

			eventSlave.devotion -= 10;
			eventSlave.trust += 2;
			V.slaves.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");
			V.slaves.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);
			V.slaves.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);
			V.slaves.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);
			V.slaves.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);
			V.slaves.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);
			V.slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 5; } });

			return t;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				s => s.rules.release.masturbation === 0,
				s => !App.Utils.hasNonassignmentSex(s),
				s => s.need > 0,
				s => s.devotion <= 95,
				s => s.trust >= -20,
				s => (s.chastityPenis !== 1 || s.dick === 0),
				hasAnyArms,
				hasAnyLegs,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, His, his, him, himself
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);
		const {hisA, himselfA, HisA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
		const bellyAdj = bellyAdjective(eventSlave);
		const knees = hasBothLegs(eventSlave) ? "knees" : "knee";

		let offHand = "nothing";

		App.Events.drawEventArt(node, eventSlave);

		let r = [];
		if (V.assistant.personality > 0) {
			r.push(`There is an alert from ${V.assistant.name}, in ${hisA} deliciously feminine voice: "${properMaster()},`, contextualIntro(V.PC, eventSlave, true), `is masturbating. Ooh, ${he}'s breaking the rules, ${properMaster()}!" ${HisA} avatar`);
			switch (V.assistant.appearance) {
				case "monstergirl":
					r.push(`strokes ${hisA} dicks suggestively.`);
					break;
				case "shemale":
					r.push(`shifts uncomfortably, ${hisA} cock rock hard.`);
					break;
				case "amazon":
					r.push(`struts back and forth indignantly, ${hisA} bone bangles rattling.`);
					break;
				case "businesswoman":
					r.push(`licks ${hisA} cherry-red lips suggestively.`);
					break;
				case "fairy":
				case "pregnant fairy":
					r.push(`giggles uncontrollably.`);
					break;
				case "hypergoddess":
				case "goddess":
					r.push(`tutting disapprovingly, despite ${hisA} blushing.`);
					break;
				case "loli":
					r.push(`stares innocently at the scene.`);
					break;
				case "preggololi":
					r.push(`stares at the scene, blushing, while a hand caresses ${hisA} large belly.`);
					break;
				case "angel":
					r.push(`is covering ${hisA} face, occasionally peeping through ${hisA} fingers.`);
					break;
				case "cherub":
					r.push(`is trying ${hisA} hardest to look away, but keeps glancing back at the scene.`);
					break;
				case "incubus":
					r.push(`is openly jacking off to the sight.`);
					break;
				case "succubus":
					r.push(`is groping ${himselfA} to the sight.`);
					break;
				case "imp":
					r.push(`is hovering while viciously fingering ${hisA} cunt.`);
					break;
				case "witch":
					r.push(`is pretending to read from ${hisA} spell book, but is obviously watching over the top of it.`);
					break;
				case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
					r.push(`is mimicking ${hisA} actions nearly perfectly.`);
					break;
				case "schoolgirl":
					r.push(`giggles nervously.`);
					break;
				default:
					r.push(`spins accusingly.`);
			}
		} else {
			r.push(`There is a gentle alert from ${V.assistant.name}: "${properMaster()},`, contextualIntro(V.PC, eventSlave, true), `is masturbating in violation of the rules."`);
		}
		r.push(`A video feed appears.`);
		if (eventSlave.chastityVagina && eventSlave.chastityPenis === 1) {
			r.push(`In ${his} combination chastity, all ${he} can manage is furious nipple-${eventSlave.nipples !== "fuckable" ? "rubbing" : "fisting"}`);
			if (hasBothArms(eventSlave) && canDoAnal(eventSlave)) {
				r.push(`and some furtive fingering of ${his} asshole`);
				offHand = "anal";
			}
			r.push(r.pop() + `.`);
		} else if (eventSlave.chastityVagina && eventSlave.dick === 0) {
			r.push(`In ${his} chastity belt, all ${he} can manage is furious nipple-${eventSlave.nipples !== "fuckable" ? "rubbing" : "fisting"}`);
			if (hasBothArms(eventSlave) && canDoAnal(eventSlave)) {
				r.push(`and some furtive fingering of ${his} asshole`);
				offHand = "anal";
			}
			r.push(r.pop() + `.`);
		} else if (eventSlave.chastityPenis === 1 && eventSlave.vagina === -1) {
			r.push(`In ${his} chastity cage, all ${he} can manage is furious nipple-${eventSlave.nipples !== "fuckable" ? "rubbing" : "fisting"}`);
			if (hasBothArms(eventSlave) && canDoAnal(eventSlave)) {
				r.push(`and some furtive fingering of ${his} asshole`);
				offHand = "anal";
			}
			r.push(r.pop() + `.`);
		} else if (eventSlave.dick > 0 && ((eventSlave.hormoneBalance >= 100) || (eventSlave.balls > 0 && eventSlave.ballType === "sterile") || (eventSlave.balls === 0))) {
			r.push(`Since ${he}'s impotent`);
			if (eventSlave.balls === 0) {
				r.push(`due to ${his} lack of balls,`);
			} else if (eventSlave.ballType === "sterile") {
				r.push(`due to ${his} useless balls,`);
			} else {
				r.push(`from hormone treatment,`);
			}
			r.push(`all ${he} can manage is rubbing ${his} soft dick`);
			if (hasBothArms(eventSlave)) {
				if (canDoVaginal(eventSlave)) {
					r.push(`and some furtive fingering of ${his} pussy.`);
					offHand = "pussy";
				} else if (canDoAnal(eventSlave)) {
					r.push(`and some furtive fingering of ${his} asshole.`);
					offHand = "anal";
				} else {
					r.push(`and some ${eventSlave.nipples !== "fuckable" ? `furious tweaking of ${his} nipples` : `furtive fingering of ${his} nipplecunts`}`);
					offHand = "nipples";
				}
			}
			r.push(r.pop() + `.`);
		} else if (!canAchieveErection(eventSlave) && eventSlave.dick > 6) {
			r.push(`Since ${his} dick requires far too much blood to get erect, ${he}'s furiously massaging the semi-engorged monster.`);
		} else if (!canAchieveErection(eventSlave) && eventSlave.dick > 0) {
			r.push(`Since ${he}'s can't get it up, all ${he} can manage is rubbing ${his} soft dick`);
			if (hasBothArms(eventSlave)) {
				if (canDoVaginal(eventSlave)) {
					r.push(`and some furtive fingering of ${his} pussy.`);
					offHand = "pussy";
				} else if (canDoAnal(eventSlave)) {
					r.push(`and some furtive fingering of ${his} asshole.`);
					offHand = "anal";
				} else {
					r.push(`and some ${eventSlave.nipples !== "fuckable" ? `furious tweaking of ${his} nipples` : `furtive fingering of ${his} nipplecunts`}`);
					offHand = "nipples";
				}
			}
			r.push(r.pop() + `.`);
		} else if (eventSlave.vagina === -1 && eventSlave.dick === 0) {
			r.push(`${He}'s rubbing ${his} perineum desperately`);
			if (hasBothArms(eventSlave)) {
				if (canDoAnal(eventSlave)) {
					r.push(`with one hand, and ${his} anus with the other,`);
					offHand = "anal";
				} else {
					r.push(`with one hand, and a nipple with the other,`);
					offHand = "nipples";
				}
			}
			r.push(`since ${he} lacks external genitalia.`);
		} else if (eventSlave.vagina === -1) {
			r.push(`${He}'s furiously jacking off.`);
		} else if (eventSlave.clit >= 3) {
			r.push(`${He}'s furiously jacking off ${his} clitdick.`);
		} else {
			r.push(`${He}'s furiously polishing ${his} pearl.`);
		}
		r.push(`${He}'s chosen to do it in a dark corner and looks like ${he}'s hurrying; ${he} clearly knows this is forbidden.`);
		App.Events.addParagraph(node, r);
		r = [];

		r.push(`${eventSlave.slaveName} does not hear your`);
		if (canHear(eventSlave)) {
			r.push(`approach until you're very close.`);
		} else {
			r.push(`approach, but soon realizes your presence.`);
		}
		r.push(`${He} starts and tries to look normal.`);
		if (!canTalk(eventSlave)) {
			r.push(`${He} nervously gestures that ${he} wasn't doing anything.`);
		} else {
			r.push(Spoken(eventSlave, `"I wasn't doing anything, ${(eventSlave.rudeTitle === 1) ? PoliteRudeTitle(eventSlave) : Master}!"`), `${he} lies.`);
		}

		App.Events.addParagraph(node, r);
		const unknownOradvanceableFetish = eventSlave.fetishKnown !== 1 || eventSlave.fetishStrength <= 95;
		const responses = [new App.Events.Result(`Let ${him} earn relief`, relief)];
		if (eventSlave.fetish !== "cumslut" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`when ${he} sucks`, sucks));
		}
		if (eventSlave.fetish !== "boobs" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`during nipple play`, nipple));
		}
		if ((eventSlave.fetish !== "pregnancy" || unknownOradvanceableFetish) && eventSlave.belly >= 5000) {
			responses.push(new App.Events.Result(`while fondling ${his} belly`, belly));
		}
		if (canDoAnal(eventSlave) && eventSlave.fetish !== "buttslut" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`when ${he} takes it up the ass`, ass, (eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null)));
		}
		if (eventSlave.fetish !== "humiliation" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`in public`, inPublic));
		}
		if (eventSlave.fetish !== "submissive" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`while submitting to a spanking`, spanking));
		}
		if (eventSlave.fetish !== "masochist" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`while in pain`, pain));
		}

		if (responses.length > 1) {
			responses.splice(1, 0, new App.Events.Result(null, null, `Punish ${him}, but then let ${him} get off:`)); // Hack for providing a headline to certain responses
		}
		App.Events.addResponses(node, responses);

		function relief() {
			r = [];

			r.push(`${He}'s extremely relieved that you're not going to punish ${him} for the rulebreaking when you tell ${him} that ${he} can touch ${himself} if ${he}`);
			if (eventSlave.belly >= 300000) {
				r.push(`leans over ${his} ${bellyAdj} belly`);
			} else {
				r.push(`gets on ${his} ${knees}`);
			}
			r.push(`and sucks you off. ${He} does a decent job, playing with ${himself} all the while. ${He}'s learned that ${he} can get away with infractions if ${he}'s willing to suck dick afterward. ${His} resistance to your will has increased.`);
			eventSlave.devotion -= 5;
			seX(eventSlave, "oral", V.PC, "penetrative");
			return r;
		}

		function sucks() {
			r = [];
			if (V.PC.belly >= 10000) {
				if (eventSlave.belly >= 300000) {
					r.push(`You tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy,`);
					} else {
						r.push(`middle,`);
					}
					r.push(`do your best to get close beside ${him},`);
				} else if (eventSlave.belly >= 5000) {
					r.push(`You order ${him} to bend over beside you so your pregnancy doesn't obstruct you as badly`);
				} else {
					r.push(`You lean back, pull ${him} over your knee and under your gravid dome of a middle`);
				}
			} else {
				if (eventSlave.belly >= 300000) {
					r.push(`You tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`middle`);
					}
				} else if (eventSlave.belly >= 5000) {
					r.push(`You spread your legs to give ${his}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`bloated middle`);
					}
					r.push(`room as you pull ${him} onto your lap`);
				} else {
					r.push(`You pull ${him} down over your knee`);
				}
			}
			r.push(`and spank ${his} ${eventSlave.skin} buttocks until they're warm to the touch. It's not a sexual punishment, it's too painful for that; by the end, ${eventSlave.slaveName} has cried ${himself} out and is limp in your hands. You pull ${him} up to face you and give ${him} your instructions: from now on, ${he} can come to you and ask to`);
			if (V.PC.dick !== 0 && V.PC.vagina !== -1) {
				r.push(`blow you and perform cunnilingus on you,`);
			} else if (V.PC.dick !== 0) {
				r.push(`blow you,`);
			} else if (V.PC.vagina !== -1) {
				r.push(`and perform cunnilingus on you,`);
			}
			r.push(`and masturbate while ${he} does. ${He} nods through ${his} tears and flees. In an hour or so, though, ${he} finds you and asks to`);
			if (V.PC.vagina !== -1) {
				r.push(`give you oral.`);
			} else {
				r.push(`suck your cock.`);
			}
			r.push(`When you pretend indifference, ${he} abjectly begs. Soon, ${he}'s down on ${his} ${knees}, crying a little with shame as ${he} masturbates furiously.`);
			seX(eventSlave, "oral", V.PC, "penetrative", 5);
			if (eventSlave.fetish === "cumslut" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of`);
				if (V.PC.dick === 0) {
					r.push(`giving head`);
				} else {
					r.push(`sucking cock`);
				}
				r.push(`has increased.</span>`);
			} else if (eventSlave.fetish === "cumslut") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of`);
				if (V.PC.dick === 0) {
					r.push(`giving head`);
				} else {
					r.push(`sucking cock`);
				}
				r.push(`is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "cumslut";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s getting aroused at the thought of`);
				if (V.PC.dick === 0) {
					r.push(`giving head.</span>`);
				} else {
					r.push(`sucking cock.</span>`);
				}
			}
			return r;
		}

		function nipple() {
			r = [];
			if (V.PC.belly >= 10000) {
				if (eventSlave.belly >= 300000) {
					r.push(`You tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy,`);
					} else {
						r.push(`middle,`);
					}
					r.push(`do your best to get close beside ${him}, and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you flip ${him} onto ${his} back, lower your gravid body down to ${his} level and start playing with ${his} nipples.`);
				} else if (eventSlave.belly >= 5000) {
					r.push(`You order ${him} to bend over beside you so your pregnancy doesn't obstruct you as badly and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you haul ${him} upright and start playing with ${his} nipples.`);
				} else {
					r.push(`You lean back, pull ${him} over your knee and under your gravid dome of a middle and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you haul ${him} upright and start playing with ${his} nipples.`);
				}
			} else {
				if (eventSlave.belly >= 300000) {
					r.push(`You tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`middle`);
					}
					r.push(`and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you haul ${him} up into your lap, ${his} stomach spreading your legs, and start playing with ${his} nipples.`);
				} else if (eventSlave.belly >= 5000) {
					r.push(`You spread your legs to give ${his}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`bloated middle`);
					}
					r.push(`room as you pull ${him} onto your lap and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you haul ${him} up into your lap and start playing with ${his} nipples.`);
				} else {
					r.push(`You pull ${him} down over your knee and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you haul ${him} up into your lap and start playing with ${his} nipples.`);
				}
			}
			r.push(`${He} writhes and sobs at the orgasm denial, since the nipple play is just barely enough to keep ${him} at a high level of arousal without giving relief. You switch back and forth until ${he} finally goes over into muscle-spasming climax during nipple stimulation alone.`);
			seX(eventSlave, "mammary", V.PC, "penetrative");
			if (eventSlave.fetish === "boobs" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of breast play has increased.</span>`);
			} else if (eventSlave.fetish === "boobs") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of breast play is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "boobs";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s getting aroused at every brush against ${his} breasts.</span>`);
			}
			return r;
		}

		function belly() {
			r= [];
			r.push(`You`);
			if (eventSlave.belly >= 300000) {
				r.push(`roll ${him} onto ${his} back`);
			} else {
				r.push(`pull ${him} into a sitting position on your lap`);
			}
			r.push(`and grope ${his} ${bellyAdj}`);
			if (eventSlave.bellyPreg >= 3000) {
				r.push(`pregnancy`);
			} else {
				r.push(`stomach`);
			}
			r.push(`thoroughly, allowing ${him} to reach the painful edge of orgasm. You feel ${his} belly shudder as ${he} reaches climax under your ministrations. You tease ${his}`);
			if (eventSlave.belly >= 10001) {
				r.push(`popped`);
			}
			r.push(`navel as ${he} comes down from ${his} masturbation session.`);
			if (eventSlave.fetish === "pregnancy" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of pregnancy has increased.</span>`);
			} else if (eventSlave.fetish === "pregnancy") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of pregnancy is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "pregnancy";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s getting aroused at`);
				if (eventSlave.pregKnown === 1) {
					r.push(`every thought about ${his} pregnancy`);
				} else {
					r.push(`the very thought of being pregnant`);
				}
				r.push(r.pop() + `.</span>`);
			}
			return r;
		}

		function ass() {
			r= [];
			r.push(`You`);
			if (V.PC.belly >= 10000) {
				if (eventSlave.belly >= 300000) {
					r.push(`tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy,`);
					} else {
						r.push(`middle,`);
					}
					r.push(`do your best to get close beside ${him},`);
				} else if (eventSlave.belly >= 5000) {
					r.push(`order ${him} to bend over beside you so your pregnancy doesn't obstruct you as badly`);
				} else {
					r.push(`lean back, pull ${him} over your knee and under your gravid dome of a middle`);
				}
			} else {
				if (eventSlave.belly >= 300000) {
					r.push(`tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`middle`);
					}
				} else if (eventSlave.belly >= 5000) {
					r.push(`spread your legs to give ${his}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`bloated middle`);
					}
					r.push(`room as you pull ${him} onto your lap`);
				} else {
					r.push(`pull ${him} down over your knee`);
				}
			}
			r.push(`and spank ${his} ${eventSlave.skin} buttocks until they're warm to the touch. It's not a sexual punishment, it's too painful for that; by the end, ${eventSlave.slaveName} has cried ${himself} out and is limp in your hands. You pull ${him} up to face you and give ${him} your instructions: from now on, ${he} can come to you and ask you to assrape ${him}, and masturbate while ${he} takes`);
			if (V.PC.dick === 0) {
				r.push(`anal penetration.`);
			} else {
				r.push(`cock.`);
			}
			r.push(`${He} nods through ${his} tears and flees. In an hour or so, though, ${he} finds you and haltingly asks you to buttfuck ${him}. When you pretend indifference, ${he} offers you ${his} anus and abjectly begs you to stick`);
			if (V.PC.dick === 0) {
				r.push(`a strap-on`);
			} else {
				r.push(`your cock`);
			}
			r.push(`up ${his} butt. Soon, ${he}'s down on all fours, crying a little with mixed shame and anal pain as ${he} masturbates furiously.`);
			r.push(VCheck.Anal(eventSlave, 5));
			if (eventSlave.fetish === "buttslut" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of anal has increased.</span>`);
			} else if (eventSlave.fetish === "buttslut") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of anal is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "buttslut";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s getting aroused at the thought of anal sex.</span>`);
			}
			return r;
		}

		function inPublic() {
			r= [];
			r.push(`You bring ${him} out`);
			if (App.Entity.facilities.club.established) {
				r.push(`to ${App.Entity.facilities.club.nameCaps}`);
			} else {
				r.push(`onto the street`);
			}
			r.push(`and secure ${him} upright with a set of vibrators attached to all of ${his} erogenous zones. There's a lot of them, and they're extremely powerful; when you test the setup, ${he} wriggles with the intensity of the stimulation, and is about to climax when you shut it down. Without telling ${him}, you slave the vibrators to a program originally designed for VIP security details. It uses the cameras scattered through the area to detect when passersby are looking at ${him}. The more eyes on ${him}, the stronger the vibrations.`);
			if (eventSlave.fetish === "humiliation" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of humiliation has increased.</span>`);
			} else if (eventSlave.fetish === "humiliation") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of humiliation is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "humiliation";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s starting to long for humiliation.</span>`);
			}
			return r;
		}

		function spanking() {
			r= [];
			r.push(`You tell ${him} that ${he} can get ${himself} off while ${he}'s being spanked, and that's it: you don't tell ${him} to offer ${his} bottom, much less start spanking ${him}. ${He} doesn't understand for a long moment, but before long ${he}'s begging abjectly for a spanking, and has ${his} buttocks presented, quivering with simultaneous arousal and fear of pain. The pain comes soon enough, with a delicious crack of palm on flesh`);
			if (eventSlave.voice === 0) {
				r.push(`and a hoarse grunt, the most noise ${he} can make.`);
			} else {
				r.push(`and a shriek of agony.`);
			}
			r.push(`${He} masturbates furiously, but you're an accomplished spanker, and you repeatedly cause ${him} just enough pain to prevent climax. Eventually ${he} gets off in part because of, rather than in spite of, the lengthy beating.`);
			if (eventSlave.fetish === Fetish.SUBMISSIVE && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of submission has increased.</span>`);
			} else if (eventSlave.fetish === Fetish.SUBMISSIVE) {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of submission is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "submissive";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he} starts to associate submitting to you with getting off.</span>`);
			}
			return r;
		}

		function pain() {
			r = [];
			r.push(`You order ${him} to`);
			if ((eventSlave.heels === 1 && shoeHeelCategory(eventSlave) === 0) || !canStand(eventSlave)) {
				r.push(`kneel`);
			} else if (shoeHeelCategory(eventSlave) > 1 || canMove(eventSlave)) {
				r.push(`teeter`);
			} else {
				r.push(`stand`);
			}
			if (hasBothArms(eventSlave)) {
				r.push(`with ${his} arms`);
			} else {
				r.push(`with ${his} arm`);
			}
			if (hasBothLegs(eventSlave)) {
				r.push(`over ${his} head and ${his} legs splayed,`);
			} else {
				r.push(`over ${his} head and ${his} leg bent,`);
			}
			r.push(`and tell ${him} that if ${he} moves or resists, ${his} punishment will begin again from the start.`);
			if (eventSlave.chastityVagina || eventSlave.chastityPenis === 1) {
				if (offHand === "anal") {
					r.push(`${He} was touching ${his} nipples and ass, so you flick and torture ${his} nipples and give ${him} a severe spanking.`);
				} else {
					r.push(`${He} was playing with ${his} nipples, so you flick and torture them, enjoying ${his} agony.`);
				}
			} else if (!canAchieveErection(eventSlave) && eventSlave.dick > 6) {
				r.push(`${He} was playing with ${his} oversized cock, so you kick and swat at the swollen monster, enjoying the way it spasms.`);
			} else if (eventSlave.dick > 0 && !canAchieveErection(eventSlave)) {
				if (offHand === "anal") {
					r.push(`${He} was touching ${his} limp dick and ass, so you slap and torture ${his} offending dick and give ${him} a severe spanking.`);
				} else if (offHand === "pussy") {
					r.push(`${He} was touching ${his} limp dick and pussy, so you slap and torture ${his} offending dick and labia.`);
				} else if (offHand === "nipples") {
					r.push(`${He} was playing with ${his} limp dick and nipples, so you slap and torture ${his} offending dick while pinching and twisting nipples.`);
				} else {
					r.push(`${He} was playing with ${his} limp dick, so you slap and torture ${his} worthless cock, enjoying ${his} agony.`);
				}
			} else if (eventSlave.vagina === -1 && eventSlave.dick === 0) {
				if (offHand === "anal") {
					r.push(`${He} was desperately rubbing ${his} perineum and anus, the most sensitive parts ${he} has left, so you slap that part of ${him} repeatedly, enjoying the way it spasms.`);
				} else if (offHand === "nipples") {
					r.push(`${He} was desperately rubbing ${his} perineum and nipples, the most sensitive parts ${he} has left, so you slap those parts of ${him} repeatedly, enjoying the way they spasm.`);
				}
			} else if (eventSlave.vagina === -1 || eventSlave.clit >= 3) {
				r.push(`${He} was jacking it, so you force ${him} to get ${himself} hard for punishment and then deliver a series of agonizing slaps and flicks to ${his} offending member.`);
			} else if (eventSlave.labia > 1) {
				r.push(`${His} generous pussylips bear a sheen of incriminating moisture, so you slap and flick them, causing ${him} intense agony.`);
			} else {
				r.push(`You deliver a series of agonizing slaps to ${his} mons.`);
			}
			r.push(`You have to start over twice. By the end, ${he}'s managed to orgasm to all the stimulation, but ${he}'s crying and desperately promising never to touch ${himself} again without your permission. ${His} submission to you has increased.`);
			eventSlave.devotion += 4;
			if (eventSlave.fetish === "masochist" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of pain has increased.</span>`);
			} else if (eventSlave.fetish === "masochist") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of pain is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "masochist";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s getting aroused at the thought of ${his} ${getWrittenTitle(eventSlave)} beating ${him}.</span>`);
			}
			return r;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				s => s.energy > 40,
				s => s.devotion > 0 && s.devotion <= 50,
				s => s.trust >= -50,
				canMove,
				canSee,
				hasAnyArms,
				s =>
					(s.attrXX >= 50 && V.PC.belly < 5000 && (V.PC.boobs >= 300 || V.PC.title === 0)) ||
					(s.attrXY >= 50 && V.PC.dick > 0 && V.PC.boobs < 300 && V.PC.belly < 1500) ||
					(s.fetish === "pregnancy" && V.PC.belly >= 5000) ||
					(s.fetish === "boobs" && V.PC.belly < 5000 && V.PC.boobs >= 1000),
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let t = [];

		if (V.arcologies[0].FSPhysicalIdealist !== "unset") {
			t.push(`You maintain a tremendous workout routine: the leader of a society that worships physical perfection can afford nothing less. Working out maintains your appearance, keeps you sharp, and makes you the exemplar of the physical ideal that you have to be for your vision for the future to be realized. So, you pay the iron price for your ${PC.title === 1 ? "muscles" : "toned body"}. Like most of the arcology's prominent citizens, you often lift publicly and take part in other amateur sports, but you also have your own private weight room in your penthouse, and you spend a lot of time there.`);
		} else if (PC.physicalAge >= 50) {
			t.push(`You take care of yourself. You're no longer as young as you once were, making it almost a requirement that you work out, hard and regularly. The fact is, the overwhelming majority of arcology owners who maintain their positions for more than a short time are physically fit. The Free Cities have a reputation for destroying old world wastrels who inherit wealth and think that makes them able to survive in an anarcho-capitalist world. Sloth and an inability to self-govern are not qualities common among your successful peers. Not to mention, it's useful to look good, and it may well prove essential to be physically capable in the near future.`);
		} else {
			t.push(`You take care of yourself. It would be absurd to think that there's any explicit requirement that you work out, hard and regularly, but the fact remains that the overwhelming majority of arcology owners who maintain their positions for more than a short time are physically fit. The Free Cities have a reputation for destroying old world wastrels who inherit wealth and think that makes them able to survive in an anarcho-capitalist world. Sloth and an inability to self-govern are not qualities common among your successful peers. Not to mention, it's useful to look good, and it may well prove essential to be physically capable in the near future.`);
		}

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

		t.push(`You complete the final rep of your first workout of the day, rack the bar, and jump to your feet to shower, change, and see to your empire. The motion brings your field of view up, and you notice for the first time that`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		t.push(`is frozen in the open doorway, having seen something in the workout room that caught ${his} attention as ${he} passed by. ${His} eyes are fixed on your`);
		if (PC.belly >= 120000) {
			t.push(`massive pregnancy with almost painful intensity. You can't really blame ${him}; you're the perfect image of a fertile goddess and your overfilled belly is coated in sweat. Even though you can't work your core any longer, you still take your workouts seriously, something most pregnant women would shy away from. You flush a little at what must ${he} must have thought; with all the grunting and effort, ${he} likely thought you were giving birth.`);
		} else if (PC.belly >= 100000) {
			t.push(`massive pregnancy with almost painful intensity. You can't really blame ${him}; you're eye-catchingly gravid and your full belly is coated in a thin sheen of sweat. Even though you can't work your core any longer, you still take your workouts seriously, something most pregnant women would shy away from.`);
		} else if (PC.belly >= 60000) {
			t.push(`giant pregnancy with almost painful intensity. You can't really blame ${him}; you're eye-catchingly massive and your heavy belly is coated in a thin sheen of sweat.`);
		} else if (PC.belly >= 15000) {
			t.push(`advanced pregnancy with almost painful intensity. You can't really blame ${him}; you're the perfect image of a mother-to-be and your heavy belly is coated in a thin sheen of sweat.`);
		} else if (PC.belly >= 10000) {
			t.push(`heavily pregnant middle and the last remnants of your abs with almost painful intensity. You can't really blame ${him}; you're the perfect image of a mother-to-be and your heavy belly is coated in a thin sheen of sweat.`);
		} else if (PC.belly >= 5000) {
			t.push(`greatly swollen middle and its stretched abdominal muscles with almost painful intensity. You can't really blame ${him}; despite how big you've gotten, you still have some abs left.`);
		} else if (PC.boobs >= 1400) {
			t.push(`sports bra clad boobs with almost painful intensity. You can't really blame ${him}; the bra is three sizes too small, forcing your enormous ${PC.boobsImplant > 0 ? "fake breasts to balloon around the strained material" : "breasts to lewdly bulge around the strained material"}, soaked in your sweat${PC.lactation > 0 ? " and breast milk" : ""}, and your nipples are clearly defined through the stretched thin fabric.`);
		} else if (PC.boobs >= 1200) {
			t.push(`sports bra clad boobs with almost painful intensity. You can't really blame ${him}; the bra is two sizes too small, allowing your huge ${PC.boobsImplant > 0 ? "fake" : ""} breasts to lewdly bulge out of them, soaked in your sweat${PC.lactation > 0 ? " and breast milk" : ""}, and your nipples are clearly visible as bumps in the strained material.`);
		} else if (PC.boobs >= 1000) {
			t.push(`sports bra clad boobs with almost painful intensity. You can't really blame ${him}; the bra is one size too small, allowing your big ${PC.boobsImplant > 0 ? "fake" : ""} breasts to bulge out of them, soaked in your sweat${PC.lactation > 0 ? " and breast milk" : ""}, and your nipples are clearly visible as bumps in the taut material.`);
		} else if (PC.boobs >= 300) {
			t.push(`sports bra clad boobs with almost painful intensity. You can't really blame ${him}; the bra is soaked in your sweat ${PC.lactation > 0 ? "and breast milk" : ""} and your nipples are clearly visible as bumps in the tight material.`);
		} else if (PC.belly >= 1500) {
			t.push(`swollen middle and its abdominal muscles with almost painful intensity. You can't really blame ${him}; despite your growing child${PC.pregType > 1 ? "ren" : ""}, they're still pretty cut.`);
		} else if (PC.belly >= 100) {
			if (PC.title === 0) {
				t.push(`slightly distended abdominal muscles and flat chest with almost painful intensity. You can't really blame ${him}; they're pretty cut, and your sports bra's soaked in your sweat ${PC.lactation > 0 ? "and breast milk" : ""} and your nipples are clearly visible as bumps in the tight material.`);
			} else {
				t.push(`slightly distended abdominal muscles with almost painful intensity. You can't really blame ${him}; they're pretty cut, and your bare chest is coated in a light sheen of glistening sweat.`);
			}
			if (PC.pregKnown === 1) {
				t.push(`You doubt ${he} realizes that the slight swell to your middle is a child.`);
			}
		} else {
			if (PC.title === 0) {
				t.push(`abdominal muscles and flat chest with almost painful intensity. You can't really blame ${him}; they're pretty cut, and your sports bra's soaked in your sweat${PC.lactation > 0 ? " and breast milk" : ""} and your nipples are clearly visible as bumps in the tight material.`);
			} else {
				t.push(`abdominal muscles with almost painful intensity. You can't really blame ${him}; they're pretty cut, and your bare chest is coated in a light sheen of glistening sweat.`);
			}
		}

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

		t.push(`${His} ${App.Desc.eyesColor(eventSlave)} track up your torso comically until ${he}'s looking into your eyes. ${He} stares dumbly at you for a moment before realizing what ${he}'s doing and blushes with embarrassment. ${He}'s reasonably well broken, but is still coming to terms with ${his} sexual place as a ${SlaveTitle(eventSlave)}.`);
		t.push(`In particular, ${he} hasn't gotten used to the effects of ${his} training, the slave food, and the atmosphere in the penthouse, all of which are serving to fuel an acceleration of ${his} sex drive.`);
		if (!canTalk(eventSlave)) {
			t.push(`${He} uses shaky ${hasBothArms(eventSlave) ? "hands" : "gestures"} to ask you to fuck ${him},`);
		} else {
			t.push(Spoken(eventSlave, `"Sorry, ${Master}, I was just, um, passing by and I thought, um, I saw, um, sorry ${Master}, I'm going now,"`));
			t.push(`${he} babbles,`);
		}
		t.push("and turns to flee.");

		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result("Not so fast", caught),
			new App.Events.Result(`Let ${him} go`, released),
		]);

		function caught() {
			const frag = document.createDocumentFragment();
			const belly = bellyAdjective(eventSlave);
			t = [];
			t.push(`As ${he} goes, ${he} follows the natural human impulse when embarrassed, and turns ${his} head resolutely away from you, trying very hard to forget making such a fool of ${himself}. This means that ${he} does not see your rapid, predatory pursuit of ${him}, nor does ${he} ${canHear(eventSlave) ? "hear" : "notice"} your careful stride across the flooring. ${His} first indication that ${he}'s prey is when your hands grab ${him} around ${his}`);
			if (eventSlave.bellyPreg >= 5000) {
				t.push(`pregnant belly`);
			} else if (eventSlave.belly >= 5000) {
				t.push(`${belly} belly`);
			} else if (eventSlave.weight > 130) {
				t.push("gut");
			} else if (eventSlave.weight > 95) {
				t.push("fat belly");
			} else if (eventSlave.muscles > 30) {
				t.push("own well-muscled middle");
			} else if (eventSlave.weight > 10) {
				t.push("plush belly");
			} else {
				t.push("middle");
			}
			t.push(`and hug ${him} hard against your`);
			if (PC.belly >= 100000) {
				t.push("massive sweaty pregnancy.");
			} else if (PC.belly >= 60000) {
				t.push("giant sweaty pregnancy.");
			} else if (PC.belly >= 15000) {
				t.push("huge sweaty pregnancy.");
			} else if (PC.belly >= 5000) {
				t.push("sweaty pregnancy.");
			} else if (PC.boobs >= 1400) {
				t.push("enormous sweaty boobs.");
			} else if (PC.boobs >= 1200) {
				t.push("huge sweaty boobs.");
			} else if (PC.boobs >= 1000) {
				t.push("big sweaty boobs.");
			} else if (PC.boobs >= 300) {
				t.push("sweaty boobs.");
			} else {
				t.push(PC.title === 0 ? "sweaty, flat chest." : "sweaty, bare chest.");
			}
			t.push(`${He} stiffens ${eventSlave.voice !== 0 ? "and shrieks" : ""} with surprise, but relaxes obediently within your embrace. Your warm, animal presence has an immediate effect. You hear ${him} suck in ${his} breath and then feel ${him} begin to breathe increasingly hard as your ${canSmell(eventSlave) ? "scent" : "body heat"} sinks into ${him} and ${his} embarrassment fades.`);

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

			App.Events.addResponses(frag, [
				(canDoVaginal(eventSlave) || canDoAnal(eventSlave))
					? new App.Events.Result(`Fuck ${him} right here`, fuck, virginityWarning())
					: new App.Events.Result(virginityWarning()),
				new App.Events.Result(`Have ${him} lick you clean`, lick),
			]);

			function fuck() {
				t = [];

				if (PC.title === 0 || PC.boobs >= 300 || PC.belly >= 1500) {
					t.push("Despite your feminine appearance, you have capable hands.");
				} else {
					t.push("You have strong hands to go with your masculine appeal.");
				}
				t.push(`They rove across ${his} front, hugging ${him} hard against you as you massage and grope.`);
				if (eventSlave.boobs > 4000) {
					t.push(`${His} tits are so big that hefting them creates a bit of a burn in your biceps, in addition to making ${him} writhe against you.`);
				} else if (eventSlave.belly >= 10000) {
					t.push(`The skin that covers ${his} swollen belly is erotically taught, and you run your fingers across it possessively.`);
				} else if (eventSlave.nipples === "inverted") {
					t.push(`You wrap your hands around the bases of ${his} inverted nipples, and use your strong grip to stimulate and squeeze them until they protrude, much to the writhing slave's anguish.`);
				} else if (eventSlave.nipples === "fuckable") {
					t.push(`You slip your fingers into ${his} nipples and spread them wide, making the slave writhe and buck against you.`);
				} else {
					t.push(`You pinch ${his} nipples and tug them hard, making the slave writhe and buck against you.`);
				}
				if (PC.dick === 0) {
					if (hasBothArms(eventSlave)) {
						t.push(`You grab one of ${his} hands and guide it down to ${his}`);
					} else if (hasAnyArms(eventSlave)) {
						t.push(`You grab ${his} hand and guide it down to ${his}`);
					} else {
						t.push(`You `);
					}
					if (eventSlave.dick > 0 && !(eventSlave.chastityPenis)) {
						t.push("cock,");
					} else if (canDoVaginal(eventSlave)) {
						t.push("pussy,");
					} else if (eventSlave.scrotum > 0 && eventSlave.balls > 1) {
						t.push("testicles,");
					} else if (eventSlave.chastityPenis === 1) {
						t.push("caged dick,");
					} else if (eventSlave.chastityVagina) {
						t.push("chastity belt,");
					} else if (eventSlave.vagina === -1) {
						t.push("perineum,");
					}
					t.push(`making ${him} play with ${himself}. Meanwhile, you look after your womanhood with your other hand, schlicking expertly while holding ${him} close, ensuring that ${he} feels every motion of what you're doing. When your fingers are thoroughly coated with pussyjuice, you drop ${his} hand, letting ${him} continue masturbating on ${his} own, and then use the freed hand to replace the one you're using to touch yourself. Then, you take the wet fingers and push them into ${his} mouth; ${he} willingly sucks them clean, using ${his} tongue to gather every trace of your secretions. You gather sweat from between your breasts, and make ${him} suck that off ${his} fingers too. When ${he} orgasms, you shove ${him} against the wall and hump against ${him} and your hand both, climaxing yourself.`);
				} else {
					t.push(`You pull ${him} up ${hasAnyLegs(eventSlave) ? `onto ${his} toes` : "to face you"} and slide yourself inside ${him}, the slave gasping when ${he} feels your hot dick enter ${his}`);
					t.push(canDoVaginal(eventSlave) ? "cunt." : "anus.");
					if (PC.belly >= 5000 && eventSlave.belly >= 10000) {
						t.push(`You'd like to lift ${him} up into a standing fuck, but there is so much distended stomach between the both of you that it's impossible so you opt for a position where you can both penetrate ${him} and continue your work out.`);
						if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
							t.push(`After a while, you shift positions, freeing your member, and force yourself up ${his} butt despite the slave's anxious begging.`);
							t.push(VCheck.Both(eventSlave, 1, 1));
							t.push(`It doesn't take long before you fill ${his} ass with cum.`);
						} else {
							t.push((canDoVaginal(eventSlave)) ? fuckVagina() : fuckAss());
						}
					} else if (PC.belly >= 5000) {
						t.push(`You'd like to lift ${him} up into a standing fuck, but you are far too pregnant to manage. Instead, you lie on your back and have ${him} work your legs as you fuck ${him}.`);
						if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
							t.push(`After a while, you lift ${him} up as high as you can, freeing your member, and then lower ${him} back down again, forcing yourself up ${his} butt instead despite the slave's anxious begging.`);
							t.push(VCheck.Both(eventSlave, 1, 1));
							t.push(`It doesn't take long before you fill ${his} ass with cum.`);
						} else {
							t.push((canDoVaginal(eventSlave)) ? fuckVagina() : fuckAss());
						}
					} else if (eventSlave.belly >= 300000) {
						t.push(`You'd like to lift ${him} up into a standing fuck, but even you aren't strong enough to lift ${his} extreme weight. Instead, you choose to have ${him} ride you; supporting ${his} ${belly} middle is a workout in its own right.`);
						if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
							t.push(`After a while, you push ${him} up as high as you can, freeing your member, and then lower ${him} back down again, forcing yourself up ${his} butt instead despite the slave's anxious begging.`);
							t.push(VCheck.Both(eventSlave, 1, 1));
							t.push(`It doesn't take long before you fill ${his} ass with cum.`);
						} else {
							t.push((canDoVaginal(eventSlave)) ? fuckVagina() : fuckAss());
						}
					} else if (eventSlave.belly >= 100000) {
						t.push(`Once you're hilted, you hoist ${him} up by the underarms, shifting your stance to handle ${his} ${belly} stomach's weight, and hold ${him} in midair, impaled on your dick. You can't pound ${him} all that hard in this challenging position, but the effort of holding ${him} this way forces you to work out hard, producing an excellent sensation. ${PC.vagina !== -1 ? `The position angles your dick upward, producing a lovely massaging sensation in your pussy as you slide in and out of ${him}.` : ""}`);
						if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
							t.push(`After a while, you lift ${him} up as high as you can, freeing your member, and then lower ${him} back down again, forcing yourself up ${his} butt instead despite the slave's anxious begging.`);
							t.push(VCheck.Both(eventSlave, 1, 1));
							t.push(`It doesn't take long before you fill ${his} ass with cum.`);
						} else {
							t.push((canDoVaginal(eventSlave)) ? fuckVagina() : fuckAss());
						}
						t.push("You're going to be feeling this tomorrow.");
					} else {
						t.push(`Once you're hilted, you bring ${his} hands up on either side of ${his} head to grasp your shoulders behind ${him}, and then scoop ${his} legs up and hoist ${him} to rest against your chest, held in midair and impaled on your dick. You can't pound ${him} all that hard in this challenging position, but the effort of holding ${himself} this way forces ${him} to tighten ${his} muscles down hard, producing an excellent sensation. ${PC.vagina !== -1 ? `The position angles your dick upward, producing a lovely massaging sensation in your pussy as you slide in and out of ${him}.` : ""}`);
						if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
							t.push(`After a while, you lift ${him} up as high as you can, freeing your member, and then lower ${him} back down again, forcing yourself up ${his} butt instead despite the slave's anxious begging.`);
							t.push(VCheck.Both(eventSlave, 1, 1));
							t.push(`It doesn't take long before you fill ${his} ass with cum.`);
						} else {
							t.push((canDoVaginal(eventSlave)) ? fuckVagina() : fuckAss());
						}
					}
				}

				function fuckVagina() {
					return `${VCheck.Vaginal(eventSlave, 1)} It doesn't take long before you fill ${his} pussy with cum.`;
				}

				function fuckAss() {
					return `${VCheck.Anal(eventSlave, 1)} It doesn't take long before you fill ${his} ass with cum.`;
				}

				t.push(`You tell your quivering sex toy that ${he} doesn't have to be embarrassed about ${his} needs. ${He} seems relieved that the sexual being ${he}'s becoming is acceptable, at least to you.`);
				eventSlave.trust += 4;
				return t;
			}

			function lick() {
				t = [];

				t.push(`You take ${him} by the hand and ${PC.belly >= 10000 ? "waddle" : "walk"} towards the shower. The sudden loss of your closeness jerks ${him} rudely out of ${his} sexual reverie, but ${he} follows willingly, perhaps distracted by the view as you shed your workout clothes on the way. When you get there, you pull ${him} in with you, but you do not turn on the water. Instead, you tell ${him} to wash you. Not understanding, ${he} turns to switch on the shower, but you catch ${him}, and insert two sweaty fingers into the slave's compliant mouth. ${He} sucks on them, taking refuge in the simple task, and then understands what you mean. ${He} runs ${his} tongue up your arm, sucking the salty sweat off you as best ${he} can. Soon, ${he} bends down and heads for your`);
				if (PC.dick !== 0 && PC.vagina !== -1) {
					t.push("cock and cunt");
				} else if (PC.dick !== 0) {
					t.push("cock");
				} else if (PC.vagina !== -1) {
					t.push("cunt");
				}
				t.push(`but you pull ${him} up again and tell ${him} to do that last.`);
				if (PC.belly >= 60000) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up your linea nigra. When ${he} reaches your ${PC.preg >= 22 ? "popped" : "flattened"} navel, you hold ${his} head there for a while, savoring the erotic sensation before pushing ${him} along to the rest of your expansive midriff.`);
				} else if (PC.belly >= 5000) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up your linea nigra. When ${he} reaches your ${PC.preg >= 22 ? "popped" : "flattened"} navel, you hold ${his} head there for a while, savoring the erotic sensation.`);
				} else if (PC.boobs >= 1400) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up the sweaty crevice between your enormous breasts. When ${he} reaches your nipples, you hold ${his} head there for a while, enjoying ${his} tongue.`);
				} else if (PC.boobs >= 1200) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up the sweaty crevice between your huge breasts. When ${he} reaches your nipples, you hold ${his} head there for a while, enjoying ${his} tongue.`);
				} else if (PC.boobs >= 1000) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up the sweaty crevice between your big breasts. When ${he} reaches your nipples, you hold ${his} head there for a while, enjoying ${his} tongue.`);
				} else if (PC.boobs >= 300) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up the sweaty crevice between your breasts. When ${he} reaches your nipples, you hold ${his} head there for a while, enjoying ${his} tongue.`);
				} else {
					t.push(`${He} settles for kissing and licking ${his} way up your abs, pecs, and`);
					if (PC.title === 0) {
						t.push(`non-existent tits. When ${he} reaches your nipples, you hold ${his} head there for a while, enjoying ${his} tongue.`);
					} else {
						t.push(`collarbone, before shyly sucking the line of sweat that runs down each of your temples when you perspire heavily off of you.`);
					}
				}
				t.push(`When you've enjoyed the tongue bath enough, you reach over and activate the shower, the warm water producing a hum from the slave. You coach ${him} towards your`);
				if (PC.dick === 0) {
					t.push(`cunt, and ${he} eats you out with enthusiasm`);
				} else {
					t.push(`stiff prick, and ${he} gives you an enthusiastic blowjob ${PC.vagina !== -1 ? `before turning ${his} oral attentions to your pussy` : ""}`);
				}
				t.push(`as the water plays over you both. After looking up and letting the water cascade down your face for a long moment, you quietly tell ${him} to masturbate before opening your mouth to drink from the downpour. With your eyes closed against the stream, your only indications that ${he}'s obeying the command is a slight increase in the force with which ${he} sucks, and a faint`);
				if (canDoVaginal(eventSlave)) {
					t.push("schlicking");
				} else if (eventSlave.dick > 0 && canAchieveErection(eventSlave) && !(eventSlave.chastityPenis)) {
					t.push("wanking");
				} else {
					t.push("rubbing");
				}
				t.push(`noise as ${he} jerks off. ${He} must find you quite attractive, since giving you oral in the shower while playing with ${himself} brings ${him} to orgasm with almost indecent speed.`);
				eventSlave.devotion += 4;
				seX(eventSlave, "oral", PC, "penetrative");
				return t;
			}
			return frag;
		}

		function released() {
			t = [];
			t.push(`You let ${him} go, and ${he} hurries off to go on with ${his} day. But ${his} attraction to you does not go away, and neither does the embarrassment of having made a fool of ${himself} in front of you. The experience leaves ${him} a bit worried about how life as your slave is affecting ${him}, but increasingly infatuated with you. Before long, love will conquer doubt.`);
			eventSlave.devotion += 4;
			eventSlave.trust -= 2;
			return t;
		}

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