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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				canWalk,
				canTalk,
				canHear,
				s => s.devotion > 20,
				s => s.trust > 20,
				s => s.actualAge > 35,
				s => (canDoAnal(s) || canDoVaginal(s)),
			]
		];
	}

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

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

		let r = [];
		r.push(`As another long week draws to a close,`);
		r.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), ","));
		r.push(`happens to`);
		if (eventSlave.belly >= 10000) {
			r.push("waddle");
		} else {
			r.push("walk");
		}
		r.push(`past your office toward bed. There's nothing inherently abnormal about ${his} actions, but you do notice as ${he} steps past the doorway that an expression of worry and concern adorns ${his} ${eventSlave.skin} face. When you call ${him} into your office, ${his} face visibly brightens up in an attempt to conceal ${his} obvious distress as ${he} comes before you. Notably, although ${he} stands still and patiently awaits further orders, you notice ${he}`);
		if (canSee(eventSlave)) {
			r.push(`never manages to meet your eyes.`);
		} else {
			r.push(`keeps ${his} sightless eyes downcast.`);
		}
		r.push(`When you ask ${him} what's troubling ${him}, ${his} face plainly falls.`);
		App.Events.addParagraph(node, r);
		r = [];

		if (!isParentP(PC, eventSlave)) {
			r.push(Spoken(eventSlave, `"${Master}, you're so young,"`));
			r.push(`${he} ${say}s penitently before smiling shyly in an attempt to insert some levity into ${his} confession.`);
			r.push(Spoken(eventSlave, `"It's just that I'm old enough to be your ${mother}, ${Master}. It's a little weird, isn't it?"`));
		} else {
			r.push(Spoken(eventSlave, `"${Master}, you're so`));
			if (PC.title === 1) {
				r.push(Spoken(eventSlave, `handsome,"`));
			} else {
				r.push(`beautiful,"`);
			}r.push(`${he} ${say}s penitently before smiling shyly in an attempt to insert some levity into ${his} confession.`);
			r.push(Spoken(eventSlave, `"It's just that you've become so attractive since`));
			if (PC.mother === eventSlave.ID) {
				r.push(Spoken(eventSlave, `I gave birth to you, I just can't compete,`));
			} else {
				r.push(Spoken(eventSlave, `your mother gave birth to you, I just can't compete, and I don't even come close to her looks,`));
			}
			r.push(Spoken(eventSlave, `${Master}. It's a little weird, isn't it, for such an old ${woman} to be graced with such a lovely ${Master}?"`));
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Gently acclimate ${him} to the age difference with some lovemaking`, lovemaking, virginityWarning(false)),
			new App.Events.Result(`Cruelly torment ${him} about the age difference`, torment, virginityWarning(false)),
			isFertile(eventSlave)
				? new App.Events.Result(`Give ${him} an afternoon off for some quality time with a local Frat House`, afternoon, virginityWarning(true))
				: new App.Events.Result(),

		]);

		function virginityWarning(knockedUp){
			if (knockedUp) {
				let t = `This option will render ${eventSlave.slaveName} pregnant`;
				if (canDoVaginal(eventSlave) && (eventSlave.vagina === 0)) {
					t += ` and take ${his} virginity`;
				} else if (!canDoVaginal(eventSlave) && (eventSlave.anus === 0)) {
					t += ` and take ${his} anal virginity`;
				}
				return t;
			} else if (canDoVaginal(eventSlave) && (eventSlave.vagina === 0)) {
				return `This option will take ${his} virginity`;
			} else if (!canDoVaginal(eventSlave) && (eventSlave.anus === 0)) {
				return `This option will take ${his} anal virginity`;
			}
		}

		function lovemaking() {
			r = [];
			r.push(`As you cross the breadth of your office to reach ${eventSlave.slaveName}, ${he} presents ${himself} for your sexual usage out of habit. However, you take ${him} by surprise by drawing ${him} into your arms, running the tips of your fingers`);
			if (eventSlave.hStyle.includes("bald") || eventSlave.bald === 1) {
				r.push(`across ${his} scalp,`);
			} else {
				r.push(`through ${his} ${eventSlave.hColor} hair,`);
			}
			r.push(`and looking into ${his} ${App.Desc.eyesColor(eventSlave)}.`);
			if (canSee(eventSlave)) {
				r.push(`${He} meets your gaze for a brief moment before blushing girlishly, as if forgetting how many years your senior ${he} is.`);
			} else {
				r.push(`${He} seems to feel the intensity of your gaze despite ${his} sightless eyes and blushes girlishly, as if forgetting how many years your senior ${he} is.`);
			}
			r.push(`In lieu of words, you lift ${his} chin with a single beckoning finger and steal ${his} breath from ${his} lips with a firm kiss. Once ${he}'s recovered ${his} wits ${he} clings to you with almost animalistic attachment. After a few moments ${he} moves to get down on ${his} knees, clearly defaulting to ${his} role as a sex slave in response to your unexpected intimacy. Instead, you`);
			if (eventSlave.belly >= 300000) {
				r.push(`help ${him} to ${his} feet and guide ${him} to bed, aiding the`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`child-laden`);
				} else {
					r.push(`tremendously swollen`);
				}
				r.push(`older ${woman} onto the sheets before gently mounting ${him}.`);
			} else { // check canLift() here!
				if (eventSlave.belly >= 5000) {
					r.push(`carefully`);
				}
				r.push(`lift ${him} up from ${his} low position beneath you and carry ${him} to bed, laying the flushed older ${woman} down on the sheets before gently positioning yourself on top of ${him}.`);
			}
			r.push(`Together, the two of you make fiercely intimate love, while you whisper romantic reassurances into ${his} ear, nip at ${his} neck,`);
			if (eventSlave.bellyPreg >= 300000) {
				r.push(`run your hands across ${his} squirming brood,`);
			} else if (eventSlave.preg > eventSlave.pregData.normalBirth / 2) {
				r.push(`stroke ${his} pregnant belly,`);
			} else if (eventSlave.belly >= 5000) {
				r.push(`caress the curve of ${his} ${belly} belly,`);
			}
			r.push(`and bring ${him} to climax again and again. After a final frantic orgasm together in ${his}`);
			if (canDoVaginal(eventSlave)) {
				r.push(`pussy`);
			} else {
				r.push(`anus`);
			}
			r.push(`${he}`);
			if (canSee(eventSlave)) {
				r.push(`looks`);
			} else {
				r.push(`gazes sightlessly`);
			}
			r.push(`up at you with <span class="devotion inc">adoration</span> and a new <span class="trust inc">trust</span> in ${his} young ${getWrittenTitle(eventSlave)}.`);
			eventSlave.devotion += 4;
			eventSlave.trust += 4;
			if (canDoVaginal(eventSlave)) {
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				r.push(VCheck.Anal(eventSlave, 1));
			}
			return r;
		}

		function torment() {
			const frag = document.createDocumentFragment();
			r = [];
			r.push(`As you close in on ${eventSlave.slaveName} predatorily, ${his} face blanches with visible regret at ${his} prior candidness. By the time you have ${him} bent over`);
			if (eventSlave.belly >= 300000) {
				r.push(`${his} ${belly} belly`);
			} else {
				r.push(`your desk`);
			}
			r.push(`and begun spanking ${his}`);
			if (eventSlave.butt > 12) {
				r.push(`absurd ass,`);
			} else if (eventSlave.butt > 6) {
				r.push(`massive behind,`);
			} else if (eventSlave.butt > 3) {
				r.push(`bountiful bottom,`);
			} else {
				r.push(`cute ass,`);
			}
			r.push(`${he} seems almost resigned to accept any of the standard punishments you've been known to dole out. When your lips lightly brush`);
			if (eventSlave.earShape !== "none" && eventSlave.earT !== "none") {
				r.push(`one of ${his} ears,`);
			} else {
				r.push(`where ${his} ear used to be,`);
			}
			r.push(`${he} flinches harder at the gentle touch than any of your harsh, disciplinary spanks. When you start whispering wicked reminders about ${his} sexual submission and subservience to so young a ${getWrittenTitle(eventSlave)}, ${he} begins to sob quietly`);
			if (eventSlave.belly >= 300000) {
				if (eventSlave.boobs > 600) {
					r.push(`into ${his} breasts.`);
				} else if (!hasAnyArms(eventSlave)) {
					r.push(`with no means to hide it.`);
				} else {
					r.push(`into ${his} hands.`);
				}
			} else {
				r.push(`against the hard surface of your desk.`);
			}
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`By the time you deign to`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`mount ${his} ass, ${he} seems catatonic at the revelation that ${his} body is owned by so cruel a ${Master}, nearly half ${his} age. Even when you accompany each brutal thrust with a harsh spank and a harsh jab at the dearth in years between the two of you, ${he} merely winces at the`);
			if (canDoVaginal(eventSlave)) {
				r.push(`force`);
			} else {
				r.push(`anal pain`);
			}
			r.push(`of your coupling. Judging by the`);
			if (!canSee(eventSlave)) {
				r.push(`exceptionally`);
			}
			r.push(`empty look in ${his} eyes that persists past ${his} dismissal from your office, ${he} might not feel any better about the age difference but you've definitely fucked ${him} into compliance.`);
			eventSlave.devotion += 4;
			eventSlave.trust -= 4;
			if (canDoVaginal(eventSlave)) {
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				r.push(VCheck.Anal(eventSlave, 1));
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function afternoon() {
			const frag = document.createDocumentFragment();
			App.Events.addParagraph(frag, [`You direct ${V.assistant.name} to clear ${eventSlave.slaveName}'s schedule and to find a local Frat House willing to 'host' a ${woman} of ${his} age and experience. Perhaps a group of virile college boys running a train on ${eventSlave.slaveName} might accustom ${him} to younger sexual partners. When ${eventSlave.slaveName} leaves the penthouse, ${he}'s dressed up to look like a frumpy old world ${woman === "woman" ? "MILF" : "DILF"} and is clearly skeptical about your age-play therapy.`]);

			r = [];
			r.push(`${eventSlave.slaveName} returns to the penthouse naked, disheveled, and absolutely covered in a thick coating of drying cum. Despite ${his} appearance, however, ${he} is practically beaming with happiness. It seems young cock agrees with ${him}, and by the state of ${his}`);
			if (eventSlave.mpreg === 1) {
				r.push(`cum-drenched asshole`);
			} else {
				r.push(`messy pussy`);
			}
			r.push(`${his} youthful partners particularly enjoyed filling ${him} with their potent seed. Unsurprisingly, at a routine check up later that week, ${eventSlave.slaveName} joyfully discovers that ${he} was impregnated during ${his} Frat House excursion. It seems that being bred by a bunch of horny college boys has eliminated ${his} prior worries about the importance of age and also caused ${him} to fetishize impregnation. ${He} has become more submissive to you for giving ${him} the means to broaden ${his} sexual horizons.`);
			eventSlave.devotion += 4;
			eventSlave.preg = 1;
			eventSlave.pregWeek = 1;
			eventSlave.pregKnown = 1;
			eventSlave.pregType = setPregType(eventSlave);
			WombImpregnate(eventSlave, eventSlave.pregType, 0, 1);
			eventSlave.fetish = "pregnancy";
			eventSlave.fetishKnown = 1;
			eventSlave.fetishStrength = 10;
			if (eventSlave.mpreg === 1) {
				seX(eventSlave, "anal", "public", "penetrative", 10);
				if (eventSlave.anus === 0) {
					eventSlave.anus++;
				}
			} else {
				seX(eventSlave, "vaginal", "public", "penetrative", 10);
				if (eventSlave.vagina === 0) {
					eventSlave.vagina++;
				}
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.RESSAmpResting = class RESSAmpResting 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.assignment === Job.REST || s.rules.rest === "mandatory"),
				isAmputee,
			]
		];
	}

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

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

		let r = [];
		r.push(`You're working at your desk late at night when the arcology's systems discreetly highlight significant movement in the slave quarters.`);
		r.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), "'s"));
		r.push(`limbless torso is in bed, asleep but struggling in discomfort. Without arms or legs, it seems the sheet has become wrapped around ${him}. ${He}'s dreaming of something sexual;`);
		if (eventSlave.chastityPenis === 1) {
			r.push(`${his} cock is caged, but precum is`);
			if (eventSlave.prostate > 1) {
				r.push(`flowing`);
			} else if (eventSlave.prostate > 0 ) {
				r.push(`leaking`);
			} else {
				r.push(`barely dripping`);
			}
			r.push(`out of the chastity.`);
		} else if (eventSlave.dick > 0 && !canAchieveErection(eventSlave)) {
			r.push(`${he} can't maintain an erection but ${his} limp dick`);
			if (eventSlave.prostate > 1) {
				r.push(`is soaking ${his} sheets with precum.`);
			} else if (eventSlave.prostate > 0 ) {
				r.push(`sports a drop of precum.`);
			} else {
				r.push(`sports a meager droplet of precum.`);
			}
		} else if (eventSlave.dick > 0) {
			const erection = eventSlave.dick > 4 ? "massive erection" : eventSlave.dick > 2 ? "erection" : "pathetic little erection";
			r.push(`${his} ${erection} is tenting the`);
			if (eventSlave.prostate > 1) {
				r.push(`sheet, leaving a large spot from ${his} excessive precum`);
			} else {
				r.push(`sheet.`);
			}
		} else if (eventSlave.vagina === -1) {
			r.push(`${he}'s humping the sheet as though ${he} still had genitals`);
			if (eventSlave.prostate > 1) {
				r.push(`genitals, leaving a large splotch from ${his} excessive precum.`);
			} else {
				r.push(`genitals.`);
			}
		} else {
			r.push(`${his} pussy has left a moist spot on the sheet.`);
		}
		r.push(`As you watch, ${his} sleeping body struggles against the sheet`);
		if (eventSlave.boobs >= 800) {
			r.push(r.pop() + ",");
			r.push(`${his} smothering tits`);
		}
		if (eventSlave.belly >= 10000) {
			r.push(r.pop() + ",");
			r.push(`${his} ${belly}`);
			if (eventSlave.bellyPreg >= 8000) {
				r.push(`pregnant`);
			}
			r.push(`belly`);
		}
		if (eventSlave.butt > 5) {
			r.push(r.pop() + ",");
			r.push(`${his} gigantic ass`);
		}
		r.push(`and ${his} limblessness finally leave ${him} lying naked on ${his} ${eventSlave.rules.living === "spare" ? "pad" : "bed"}. After a few moments, ${he} begins to shiver convulsively.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Check on ${him}`, check),
			new App.Events.Result(`Keep ${him} warm`, warm),
			new App.Events.Result(`Leave ${him} be`, leave),
		]);

		function check() {
			r = [];
			r.push(`Since ${he}'s limbless`);
			if (eventSlave.health.illness > 0) {
				if (eventSlave.pregKnown === 1) {
					r.push(r.pop() + ",");
				} else {
					r.push(`and`);
				}
				r.push(`ill`);
			}
			if (eventSlave.pregKnown === 1) {
				r.push(`and pregnant`);
			}
			r.push(r.pop() + ",");
			r.push(`${his} health is more fragile than most slaves'. You look in on ${him}, and when ${he} continues to shiver, you pull the sheets back around ${him}, tucking ${him} in in such a way that ${he} can lie comfortably. In the morning ${he} doesn't understand why ${he}'s so snug and well-rested, but ${his} health improves with decent sleep.`);
			improveCondition(eventSlave, 10);
			return r;
		}

		function warm() {
			r = [];
			r.push(`You spoon ${him} gently from behind, spending the night sleeping with ${his}`);
			if (eventSlave.bellyPreg >= 5000) {
				r.push(`pregnant`);
			} else {
				r.push(`limbless`);
			}
			r.push(`torso cradled in your arms. ${He} snuggles against you in ${his} sleep, enjoying the animal warmth. When ${he} wakes in the morning, ${he} is surprised to`);
			if (canSee(eventSlave)) {
				r.push(`see`);
			} else {
				r.push(`find`);
			}
			r.push(`that it's you keeping ${him} company, but after a few moments' confusion ${he} accepts the unlooked-for comfort and goes back to sleep. ${He} has become more trusting of you.`);
			eventSlave.trust += 4;
			return r;
		}

		function leave() {
			healthDamage(eventSlave, 10);
			return `In the morning, ${his} lips are blue and ${he}'s nearly unresponsive. Your other slaves get ${him} working again, but <span class="health dec">${his} health has been damaged.</span>`;
		}
	}
};

repo_name: Ducati/fc

license: mit


code:
App.Events.RESSArcadeSadist = class RESSArcadeSadist extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => App.Entity.facilities.arcade.established,
			() => App.Entity.facilities.arcade.hasEmployees,
		]; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish === "sadist",
				s => s.fetishStrength > 20,
				s => s.fetishKnown === 1,
				hasAnyArms,
				canMove,
				canTalk,
				canHear,
				s => s.devotion > 50,
				s => s.trust >= -20,
				s => s.belly < 300000,
			]
		];
	}

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

		let artDiv = document.createElement("div"); // named container so we can replace it later
		App.Events.drawEventArt(artDiv, eventSlave);
		node.appendChild(artDiv);

		let r = [];
		r.push(`You happen to come across`);
		r.push(contextualIntro(V.PC, eventSlave, true));
		r.push(`during one of ${his} rest periods. ${He}'s lying on a couch in the slave areas,`);
		if (canSee(eventSlave)) {
			r.push(`staring at the ceiling above ${him}`);
		} else {
			r.push(`leaning back`);
		}
		r.push(`with a dreamy expression on ${his} face. ${He}'s`);
		if (eventSlave.rules.release.masturbation === 1) {
			r.push(`touching ${himself} idly.`);
		} else {
			r.push(`not allowed to touch ${himself}, but ${he}'s extremely aroused.`);
		}
		r.push(`Whatever's on ${his} mind, it's so absorbing that ${he} doesn't realize you're there until you're standing over ${him}.`);
		App.Events.addParagraph(node, r);
		r = [];

		r.push(Spoken(eventSlave, `"Sorry, ${Master},"`), `he ${say}s apologetically,`);
		if (eventSlave.belly >= 10000 || eventSlave.weight > 160) {
			r.push(`struggling`);
		} else {
			r.push(`scrambling`);
		}
		r.push(`to ${his} feet.`);
		r.push(Spoken(eventSlave, `"I didn't notice you there."`));
		if (canSee(eventSlave)) {
			r.push(`Seeing your questioning look,`);
		} else {
			r.push(`Hearing your lack of response,`);
		}
		r.push(`${he} explains ${himself} further.`);
		r.push(Spoken(eventSlave, `"I was just thinking about, um, my favorite place. I can almost get off just by thinking about it."`));
		r.push(`There's a wild, perverted gleam`);
		if (canSee(eventSlave)) {
			r.push(`in ${his} ${App.Desc.eyesColor(eventSlave)}.`);
		} else {
			r.push(`on ${his} face.`);
		}
		r.push(`${He}'s a confirmed sadist, so whatever ${his} favorite mental masturbation is probably quite strong.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Ask ${him} about ${his} fantasy`, fantasy),
			new App.Events.Result(`Just fuck ${him}`, fuck),
		]);

		function fantasy() {
			const frag = document.createDocumentFragment();
			r = [];

			const {hisU, heU} = getNonlocalPronouns(V.seeDicks).appendSuffix("U");

			r.push(`You order ${him} to explain further.`);
			r.push(Spoken(eventSlave, `"${Master},"`), `${he} ${say}s carefully,`, Spoken(eventSlave, `"it's ${V.arcadeName}. There's a specific place there, and, well, I can't describe it. It's in the service area under ${V.arcadeName}. Can I show you what I mean?"`));
			r.push(`Intrigued, you order ${him} to show you the place ${he}'s talking about, and lead ${him} to ${V.arcadeName} through the access hallway. ${He} points to the service tunnel under one of the rows of inmates, which allows trusted slaves to clean up and perform maintenance.`);
			if (eventSlave.belly >= 100000 || eventSlave.weight > 160) {
				r.push(`Once you've managed to shove the massive slut`);
			} else if (eventSlave.belly >= 5000) {
				r.push(`Once you've helped the`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`gravid`);
				} else {
					r.push(`bloated`);
				}
				r.push(`${girl} fit`);
			} else {
				r.push(`Once you've led ${him}`);
			}
			r.push(`in there, ${he} stops and ${hasSight ? 'watches' : 'listens'}`);
			if (V.PC.belly >= 100000 || V.PC.weight > 130) {
				r.push(r.pop() + `as you struggle to join ${him} in the increasingly cramped space.`);
			} else if (V.PC.belly >= 5000) {
				r.push(r.pop() + `as you gently slip your motherly body in after ${him}.`);
			} else {
				r.push(r.pop() + ".");
			}
			r.push(`Inside the industrial access corridor, above you both, is a row of bodies. The slaves' faces and hips are pressed against the apertures that present their holes to customers, but the rest of them is visible from here.`);
			App.Events.addParagraph(frag, r);
			r = [];

			r.push(`There is little noise; the slaves are closely restrained. Indeed, you have to look closely to see that they're being fucked at all. Here and there, though, there are signs. When someone fucks a slave's face, ${hisU} throat bulges, and ${heU} often gags and struggles a little within the restraints. When their`);
			if (App.Entity.facilities.arcade.employees().some(s => s.vagina > 0)) {
				r.push(`pussies`);
			} else {
				r.push(`assholes`);
			}
			r.push(`get fucked, there's also some involuntary struggling, and if the phallus being thrust into them is particularly large, a rhythmic bulging of their abdomens can be discerned.`);
			if (V.arcadeUpgradeInjectors === 1) {
				r.push(`The bodies frequently jerk as electrostimulation is applied to force them to tighten their holes.`);
			} else if (V.arcadeUpgradeInjectors === 2) {
				r.push(`The quiet hissing of the drug injectors adds a menacing undertone, and the bodies frequently jerk as electrostimulation is applied to force them to tighten their holes.`);
			}
			if (V.arcadeUpgradeCollectors === 1) {
				r.push(`The pumping collectors attached to the slaves' breasts`);
				if (App.Entity.facilities.arcade.employees().some(s => s.dick > 0)) {
					r.push(`and cocks`);
				}
				r.push(`carry the white fluid away to be processed elsewhere.`);
			}
			r.push(`The overall effect is subtle, but powerful. There's a sense of total servitude, overlaid with a certain feeling, or perhaps even a scent, of mindless despair. There's no wonder ${eventSlave.slaveName} likes it; there's an infinite supply of uncomplicated human anguish here.`);

			App.Events.addParagraph(frag, r);
			App.Events.addResponses(frag, [ // TODO: Why the fuck are you crawling around random access shafts?
				(V.PC.belly < 5000 && eventSlave.belly < 5000)
					? new App.Events.Result(`Fuck ${him} here`, here)
					: new App.Events.Result(null, null, `Fucking ${him} here would be interesting; unfortunately, there just isn't enough room for two mothers-to-be.`),
				new App.Events.Result(`Teach ${him} about true sadism`, truShit),
			]);
			return frag;

			function here() {
				r = [];

				r.push(`You reach out for ${eventSlave.slaveName}, not taking your eyes off the mesmerizing sight above. ${He}'s enjoying the spectacle too, and is so aroused that your rough handling of ${his} breasts almost brings ${him} to an immediate orgasm.`);
				if (eventSlave.nipples !== "fuckable") {
					r.push(`Pinching`);
				} else {
					r.push(`Hooking`);
				}
				r.push(`${his} ${eventSlave.nipples} nipples to stop ${him} from getting off too soon, you`);
				if (V.PC.dick === 0) {
					r.push(`hug ${him} to your chest and start playing with ${his}`);
					if (canDoVaginal(eventSlave)) {
						r.push(`pussy,`);
						seX(eventSlave, "vaginal", V.PC, "penetrative");
					} else if (eventSlave.dick > 0 && eventSlave.chastityPenis === 0) {
						r.push(`dick,`);
					} else {
						r.push(`body,`);
					}
					r.push(`commanding ${him} to reach around and do the same for you.`);
					seX(V.PC, "vaginal", eventSlave, "penetrative");
				} else if (canDoVaginal(eventSlave) && eventSlave.vagina > 0) {
					r.push(`pull ${him} up to the right height and slide your dick inside ${him}, keeping both of you on your feet so you can take ${him} standing.`);
					r.push(VCheck.Vaginal(eventSlave, 1));
				} else if (canDoAnal(eventSlave) && eventSlave.anus > 0) {
					r.push(`shove your cock roughly up ${his} asshole, letting ${him} struggle a little as ${he} finds the right angle to take standing anal here.`);
					r.push(VCheck.Anal(eventSlave, 1));
				} else {
					r.push(`slide your stiff prick up between the virgin's thighs for some intercrural sex.`);
				}
				if (eventSlave.belly >= 5000 || V.PC.belly >= 5000 || V.PC.weight > 160 || V.PC.boobs > 40000 || V.PC.butt > 10 || eventSlave.weight > 160 || eventSlave.boobs > 40000 || eventSlave.butt > 10) {
					r.push(`As you fuck in the cramped corridor, ${his}`);
				} else {
					r.push(`As you fuck, ${his}`);
				}
				if (canSee(eventSlave)) {
					r.push(`gaze flicks up and down along the row`);
				} else {
					r.push(`ears perk up at the subtle sounds`);
				}
				r.push(`of suffering bodies. ${He} climaxes again and again, shuddering at each new subtle sign that another one of the slaves here is being degraded by yet another cock inserted into yet another of ${hisU} defenseless holes. By the time you're satisfied, ${he}'s so exhausted that ${his} legs are trembling uncontrollably as ${he} struggles to remain standing with you. You drop ${him}, leaving ${him} to find ${his} own way out of this place. You look back from the entrance, seeing that ${he}'s`);
				if (canWalk(eventSlave)) {
					r.push(`following you on shaky legs,`);
				} else {
					r.push(`steadily pushing ${himself} along,`);
				}
				r.push(`${hasSight ? 'staring at' : 'facing'} you with a profound look of mixed trust for your understanding of ${his} horrible sadism, and deep unease that this is what truly gets ${him} off.`);
				eventSlave.trust += 5;
				return r;
			}

			function truShit() {
				r = [];
				const randomArcadeSlave = App.Entity.facilities.arcade.employees().random();
				const {he2, His2, his2} = getPronouns(randomArcadeSlave).appendSuffix("2");
				// replace slave art
				$(artDiv).empty();
				App.Events.drawEventArt(artDiv, [eventSlave, randomArcadeSlave], [eventSlave.clothes, "no clothing"]);

				r.push(`${He} seems to be focusing on the purely physical aspects of the degradation here. The true meaning of this place is so much more, and you decide to share it with ${him}. You call ${his} name, tearing ${his} attention away from the spectacle mere`);
				r.push(`${V.showInches === 2 ? 'inches' : 'centimeters'} over your heads, and ${hasSight ? 'point' : `direct ${him}`}`);
				r.push(`to a particular slave. You tell ${eventSlave.slaveName} that this particular Arcade inmate's name is ${SlaveFullName(randomArcadeSlave)}.`);
				if (randomArcadeSlave.career !== "a slave") {
					r.push(`You tell ${him} that ${he2} is ${randomArcadeSlave.actualAge} years old, that ${he2} is ${randomArcadeSlave.nationality}, and that ${he2} was once ${convertCareer(randomArcadeSlave)}.`);
				} else {
					r.push(`You tell ${him} that ${he2} is ${randomArcadeSlave.actualAge} years old and ${randomArcadeSlave.nationality}.`);
				}
				r.push(`You list more details of ${his2} life before ${he2} was placed here to be fucked endlessly. ${eventSlave.slaveName}'s eyes widen as you recite the details of the prior life of this piece of human sexual equipment and the sheer weight of the intellectual sadism smashes into ${him}. Then the slave above you both jerks a little.`);
				if (eventSlave.dick === 0) {
					r.push(`There's no visible sign ${his2} pussy's being fucked, so it must be`);
				} else {
					r.push(`${His2} cock hardens involuntarily, indicating that it's`);
				}
				r.push(`going into ${his2} ass. You resume, mentioning that ${he2}'s been buttfucked ${randomArcadeSlave.counter.anal} times.`);
				r.push(`${eventSlave.slaveName} jerks suddenly,`);
				if (canAchieveErection(eventSlave)) {
					r.push(`shooting ${his} cum onto the floor.`);
				} else if (eventSlave.dick > 0) {
					r.push(`dribbling a little.`);
				} else if (eventSlave.vaginaLube > 0 || eventSlave.balls > 0) {
					r.push(`squirting onto the floor.`);
				} else {
					r.push(`orgasming.`);
				}
				r.push(`${He} came without being touched. ${He} ${hasSight ? 'stares at' : 'faces'}`);
				r.push(`the mess ${he} made just by being in the presence of the arcology's undisputed preeminent sadist; ${he} shudders at the sheer gothic glory of it. ${He} has a new moment to think of when ${he} feels like indulging ${his} own sadism.`);
				eventSlave.devotion += 5;
				eventSlave.fetishStrength = Math.clamp(eventSlave.fetishStrength + 10, 0, 100);
				return r;
			}
		}

		function fuck() {
			r = [];

			r.push(`You're not particularly interested in what ${he} dreams about when ${he} gets the chance, and you tell ${him} so. Whatever sadistic little fantasies ${he} keeps locked away to bring out when ${he}'s got a moment to satiate ${his} perversions is less interesting to you than the prospect of`);
			if (V.PC.dick === 0) {
				r.push(`${his} mouth on your cunt. So, you shove ${him} down to sit on the couch and straddle ${his} face, cutting off any further whimsies by pressing your wet pussy against ${his} lips. ${He} eats you out obediently, accepting`);
				seX(eventSlave, "oral", V.PC, "vaginal");
			} else if (canDoVaginal(eventSlave) && (eventSlave.vagina > 0)) {
				r.push(`giving it to ${him}. So, you shove ${him} down to sit on the couch, nudge ${his} legs apart, kneel between them, and pound ${his} pussy. You fuck ${him} so hard that ${he} doesn't have the attention for further whimsies, and ${he} accepts`);
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else if (canDoAnal(eventSlave) && (eventSlave.anus > 0)) {
				r.push(`fucking ${his} butt. So, you shove ${him} down to`);
				if (hasAnyLegs(eventSlave)) {
					r.push(`kneel`);
				} else {
					r.push(`get`);
				}
				r.push(`on the couch facing away from you, and ram your cock up ${his} asshole. You assfuck ${him} so hard that ${he} doesn't have the attention for further whimsies, and ${he} accepts`);
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(`${him} sucking your dick. So, you shove ${him} down to sit on the couch and give ${him} your cock to keep ${his} mouth occupied, cutting off any further whimsies. ${He} blows you obediently, accepting`);
				seX(eventSlave, "oral", V.PC, "penetrative");
			}
			r.push(`the implicit message that <span class="devotion inc">${he}'s your slut</span> in the real world, whatever thoughts ${he} may find appealing in the privacy of ${his} own mind.`);
			eventSlave.devotion += 3;
			return r;
		}
	}
};


code:
// cSpell:ignore frot

App.Events.RESSBedSnuggle = class RESSBedSnuggle 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 => [Job.CONCUBINE, Job.FUCKTOY, Job.MASTERSUITE].includes(s.assignment),
				s => s.devotion > 50,
				s => s.trust > 50,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, His, his, him, woman, girl, himself
		} = getPronouns(eventSlave);
		const {say} = getEnunciation(eventSlave);
		const {hisA, girlA, womanA, loliA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
		const belly = bellyAdjective(eventSlave);

		let womanTerm = "kid";
		if (eventSlave.physicalAge > 30) {
			womanTerm = woman;
		} else if (eventSlave.physicalAge > 18) {
			womanTerm = girl;
		} else if (eventSlave.physicalAge > 12) {
			womanTerm = "teen";
		}

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

		let r = [];
		r.push(`${capFirstChar(V.assistant.name)} wakes you in the morning,`);
		if (V.assistant.personality <= 0) {
			r.push(`${hisA} voice`);
		} else {
			switch (V.assistant.appearance) {
				case "monstergirl":
					r.push(`${hisA} monster${girlA} avatar's sultry voice`);
					break;
				case "shemale":
					r.push(`${hisA} shemale avatar's syrupy voice`);
					break;
				case "amazon":
					r.push(`${hisA} amazon avatar's powerful voice`);
					break;
				case "businesswoman":
					r.push(`${hisA} business${womanA} avatar's confident voice`);
					break;
				case "fairy":
				case "pregnant fairy":
					r.push(`${hisA} fairy avatar's adorable voice`);
					break;
				case "schoolgirl":
					r.push(`${hisA} school${girlA} avatar's bubbly voice`);
					break;
				case "loli":
				case "preggololi":
					r.push(`${hisA} ${loliA} avatar's childish voice`);
					break;
				case "angel":
					r.push(`${hisA} angel avatar's heavenly voice`);
					break;
				case "cherub":
					r.push(`${hisA} cherub avatar's cheerful voice`);
					break;
				case "incubus":
					r.push(`${hisA} incubus avatar's forceful voice`);
					break;
				case "succubus":
					r.push(`${hisA} succubus avatar's sultry voice`);
					break;
				case "imp":
					r.push(`${hisA} imp avatar's mischievous voice`);
					break;
				case "witch":
					r.push(`${hisA} witch avatar's cocky voice`);
					break;
				case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
					r.push(`${hisA} avatar's piecemeal voice`);
					break;
				default:
					r.push(`${hisA} voice`);
			}
		}
		r.push(`gently calling your name. As you regain consciousness, you become aware of a weight on your`);
		if (V.PC.boobs >= 1400) {
			r.push(`chest other than your heavy tits.`);
		} else {
			r.push("chest.");
		}
		r.push(contextualIntro(V.PC, eventSlave, true, false, true));
		r.push(`has snuggled up against you in ${his} sleep. ${He}'s nude, and so are you; everyone sleeps naked in your penthouse. The sheet is down at your hips, leaving your upper bodies bare.`);
		if (!hasAnyArms(eventSlave)) {
			r.push(`${He}'s wormed ${his}`);
			if (isAmputee(eventSlave)) {
				r.push(`limbless`);
			} else {
				r.push(`armless`);
			}
			r.push(`torso under your arm,`);
		} else {
			r.push(`${He} has one arm across your`);
			if (V.PC.boobs >= 300) {
				r.push(`chest, just below your breasts,`);
			} else if (V.PC.title === 1) {
				r.push(`manly chest`);
			} else {
				r.push(`flat chest,`);
			}
		}
		r.push(`and is using your shoulder as a pillow. You can feel ${his} warm breath across`);
		if (V.PC.boobs >= 300 || V.PC.title === 0) {
			r.push(`your nipple on that side, and it hardens slowly under your gaze.`);
		} else {
			r.push(`your well-developed pectorals.`);
		}
		if (eventSlave.boobs > 4000) {
			r.push(`${His} incredible tits are resting to either side of your ribcage, with one of them a heavy mass on your chest and the other trapped under ${his}`);
		} else if (eventSlave.boobs > 1200) {
			r.push(`${His} big boobs form a warm, soft mass between you`);
		} else {
			r.push(`${His} soft chest rests warmly against your ribcage`);
		}
		if (eventSlave.belly >= 10000) {
			r.push(r.pop() + `, beneath them, ${his} ${belly}`);
			if (eventSlave.bellyPreg >= 8000) {
				r.push(`pregnant`);
			}
			r.push(`belly rests`);
			if (V.PC.belly >= 1500) {
				r.push(`against your own baby bump,`);
			} else {
				r.push(`upon your flat stomach,`);
			}
		}
		r.push(`and farther down, there's another source of warmth where ${he}'s`);
		if (!hasAnyLegs(eventSlave)) {
			r.push(`got ${his} legless pelvis resting against your ${eventSlave.height <= V.PC.height ? "hip" : "thigh"}.`);
		} else {
			r.push(`straddling your thigh.`);
		}
		App.Events.addParagraph(node, r);
		r = [];

		r.push(`"${properTitle()}," ${V.assistant.name} calls again, "you`);
		if (V.assistant.personality <= 0) {
			r.push(`set a wake-up for this time.`);
		} else {
			r.push(`asked me to wake you at this time.`);
		}
		r.push(`You have a business meeting that starts shortly." You begin to slide out from under ${eventSlave.slaveName}, but the ${womanTerm} clings to you in ${his} sleep as the warmth of your body begins to move away from ${him}.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result("Make the meeting", meeting),
			new App.Events.Result("Call in from where you are", call),
			new App.Events.Result("Go back to sleep", sleep),
			new App.Events.Result("Spend the day in bed", bed),
		]);

		function meeting() {
			r = [];

			let meetingBonus = Math.trunc(V.cash / 10000 * 1000);
			if (meetingBonus > 5000) {
				meetingBonus = 5000;
			} else if (meetingBonus < 1000) {
				meetingBonus = 1000;
			}
			r.push(`You finish the motion and get on with your day. ${He} burrows into the warm place on the bed where your body lay, which is actually an excellent sign of ${his} mental state. It suggests that ${his} dreaming mind is quite comfortable with your`);
			if (canSmell(eventSlave)) {
				r.push(`presence, and even smell.`);
			} else {
				r.push(`presence.`);
			}
			r.push(`You make the meeting, consoling yourself with the thought that you're hardly lacking for opportunities to`);
			if (V.PC.dick !== 0) {
				r.push(`stick your dick in`);
			} else {
				r.push(`have sex with`);
			}
			r.push(`${eventSlave.slaveName}. The business opportunity turns out to be <span class="cash inc">quite profitable;</span> you're glad you didn't pass it up.`);
			cashX(meetingBonus, "event", eventSlave);
			return r;
		}

		function call() {
			r = [];

			let meetingBonus = Math.trunc(V.cash / 10000) * 1000;
			if (meetingBonus > 5000) {
				meetingBonus = 5000;
			} else if (meetingBonus < 1000) {
				meetingBonus = 1000;
			}
			r.push(`You tell ${V.assistant.name} to inform your business contacts that you'll be attending the meeting by telepresence. A camera mounted above you focuses tightly on your face, making it look like you're relaxing, but concealing the fact that you have a naked ${womanTerm} draped across you. The meeting is long enough that your interlocutors eventually realize that something unusual is going on, especially once ${he} wakes up and starts sleepily`);
			if (V.PC.dick !== 0) {
				r.push(`sucking your dick`);
				if (V.PC.vagina !== -1) {
					r.push(`and`);
				}
				seX(eventSlave, "oral", V.PC, "penetrative");
			}
			if (V.PC.vagina !== -1) {
				r.push(`eating you out`);
				seX(eventSlave, "oral", V.PC, "vaginal");
			}
			r.push(r.pop() + `, out of frame. They're slightly annoyed, since having sex during meetings is still considered a minor faux pas, but you close the deal, and ${eventSlave.slaveName} is very pleased that you would rearrange your affairs to make time for`);
			if (V.PC.dick !== 0) {
				r.push(`one of ${his} blowjobs.`);
			} else {
				r.push(`oral sex with ${him}.`);
			}

			cashX(meetingBonus, "event", eventSlave);
			repX(forceNeg(50), "event", eventSlave);
			eventSlave.devotion += 4;
			return r;
		}

		function sleep() {
			r = [];
			const frag = document.createDocumentFragment();
			let didAnal = false;
			let didVaginal = false;

			r.push(`You tell ${V.assistant.name} to cancel the appointment, plant a kiss atop your bedmate's sleeping head, and go back to sleep yourself, with the peerless comfort of a warm, naked ${womanTerm} cuddled up beside you. ${capFirstChar(V.assistant.name)} lowers the temperature in the room and directs another slave to quietly put a couple of warm blankets over you and ${eventSlave.slaveName}. When you finally wake, several hours later, the effect is magical. You're ensconced in a little island of warmth and comfort, a tiny universe of relaxation populated only by yourself and your slave. ${He} woke before you did, but remained still to avoid disturbing you.`);
			if (canSee(eventSlave)) {
				r.push(`From the lazy, contented look in ${his} ${App.Desc.eyesColor(eventSlave)} as ${he} meets your waking gaze, ${he} did not mind waiting. ${He} was already looking at your face when you opened your eyes.`);
			} else {
				r.push(`From the serene expression on ${his} face as ${he} meets your waking gaze, ${he} did not mind waiting. ${He} was already looking at your face, lost in the soothing ${canHear(eventSlave) ? "sounds" : "motions"} of your breathing, when you opened your eyes.`);
			}
			App.Events.addParagraph(frag, r);
			r = [];

			r.push(`Since you're awake, ${he} rolls onto ${his} face and then further, to place ${his} back and`);
			if (eventSlave.butt > 5) {
				r.push(`massive ass`);
			} else if (eventSlave.butt > 2) {
				r.push(`healthy rear`);
			} else {
				r.push(`butt`);
			}
			r.push(`against you, making sure to drag ${his} ${eventSlave.nipples} nipples against you the whole way. You accept the invitation and spoon ${him},`);
			// PC height stuff here!
			if (eventSlave.height >= 185) {
				r.push(`your bodies lining up well, since ${he}'s as tall as you are.`);
			} else if (eventSlave.height >= 160) {
				r.push(`${his} body fitting neatly within the embrace of your larger frame.`);
			} else {
				r.push(`${his} small body fitting entirely within your embrace.`);
			}
			if (eventSlave.muscles > 30) {
				r.push(`${His} muscles`);
			} else {
				r.push(`${His} softness`);
			}
			r.push(`and warmth awaken your desire, and ${he} feels`);
			if (V.PC.dick !== 0) {
				r.push(`your stiffening cock beginning to press against`);
				if (!hasBothLegs(eventSlave)) {
					r.push(`${his} perineum. ${He} shifts to slide ${himself} along its`);
					if (V.PC.vagina !== -1) {
						r.push(`shaft and down to where your pussy begins.`);
					} else {
						r.push("shaft.");
					}
				} else {
					r.push(`the place between ${his} thighs. ${He} shifts to let your dick slide between them, and reaches down to massage its head.`);
				}
			} else {
				r.push(`heat building against ${his} butt.`);
				if (!hasAnyArms(eventSlave)) {
					r.push(`${He} does ${his} best to grind against you, since ${he} can't caress you without hands.`);
				} else {
					r.push(`${He} snakes a hand behind ${himself} to caress your womanhood, and begins to gently`);
					if (hasBothArms(eventSlave)) {
						r.push(`masturbate with the other.`);
					} else {
						r.push(`grind against you.`);
					}
				}
			}
			if (V.PC.dick !== 0) {
				if (eventSlave.vagina > 0 && eventSlave.anus > 0 && canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
					r.push(`${He} begins to shift farther forward and back along your dick, causing its head to press against ${his} anus and then slide forward to nestle between ${his} pussylips. In response to ${his} wordless question, you nibble ${his} ear and tell ${him} that it's ${his} choice. ${He} turns ${his} upper torso to`);
					if (canSee(eventSlave)) {
						r.push(`stare at you in surprise`);
					} else {
						r.push(`so that you may see ${his} surprise`);
					}
					r.push(`for a moment, and then smiles and gives you a peck on the cheek.`);
					if ((eventSlave.fetish === "buttslut") && (eventSlave.fetishKnown === 1)) {
						r.push(`${He} hikes ${himself} up a bit, and then slides ${his} anal sphincter slowly around and down your cock until you're resting all the way up ${his} ass. You share loving anal`);
						didAnal = true;
					} else {
						r.push(`${He} hikes ${himself} up to give your dickhead a last teasing press against ${his} butt before cocking ${his} hips and sliding your cock into ${his} soaking cunt. You make love`);
						didVaginal = true;
					}
				} else if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) {
					r.push(`${He} cocks ${his} hips and so that your cock is pressing against ${his} soaked cunt. In response to ${his} wordless question, you nibble ${his} ear and tell ${him} that it's ${his} choice. ${He} turns ${his} upper torso to`);
					if (canSee(eventSlave)) {
						r.push(`stare at you in surprise`);
					} else {
						r.push(`so that you may see ${his} surprise`);
					}
					r.push(`for a moment, and then smiles and gives you a peck on the cheek.`);
					if (eventSlave.fetish === "pregnancy" && eventSlave.fetishKnown === 1 && isFertile(eventSlave)) {
						r.push(`${He} pushes against you until you are fully inserted into ${his} pussy. ${He}'s ripe for impregnation and needs your baby in ${him}. You make love`);
					} else if (eventSlave.vagina > 2) {
						r.push(`${He} easily slides your cock into ${his} loose pussy. You make love`);
					} else {
						r.push(`${He} hikes ${himself} up a bit, and then gently slides your cock into ${his} tight pussy. You make love`);
					}
					didVaginal = true;
				} else if (eventSlave.anus > 0 && canDoAnal(eventSlave)) {
					r.push(`${He} begins to shift farther forward along your dick, causing its head to press against ${his} anus. In response to ${his} wordless question, you nibble ${his} ear and tell ${him} that it's ${his} choice. ${He} turns ${his} upper torso to`);
					if (canSee(eventSlave)) {
						r.push(`stare at you in surprise`);
					} else {
						r.push(`so that you may see ${his} surprise`);
					}
					r.push(`for a moment, and then smiles and gives you a peck on the cheek.`);
					if (eventSlave.fetish === "buttslut" && eventSlave.fetishKnown === 1) {
						r.push(`${He} hikes ${himself} up a bit, and then slides ${his} anal sphincter slowly around and down your cock until you're resting all the way up ${his} ass. You share loving anal`);
						didAnal = true;
					} else if (eventSlave.anus > 2) {
						r.push(`${He} hikes ${himself} up a bit, and then easily slides your cock into ${his} loose rectum. You share loving anal`);
						didAnal = true;
					} else {
						r.push(`${He} decides against buttsex, and`);
						if (!hasBothLegs(eventSlave)) {
							r.push(`contents ${himself} with grinding`);
						} else {
							r.push(`presses ${his} thighs together so you can frot ${him}.`);
						}
						r.push(`After making love`);
					}
				} else {
					r.push(`You`);
					if (!hasBothLegs(eventSlave)) {
						r.push(`grind against ${him}`);
					} else {
						r.push(`frot ${him}`);
					}
				}
			} else {
				r.push(`You reach around ${him} and attend to a nipple with each hand, spreading your attention to the whole breast once`);
				if (eventSlave.nipples !== "fuckable") {
					r.push(`they're perfectly stiff.`);
				} else {
					r.push(`they've tightened around your fingers.`);
				}
				r.push(`After sharing gentle lovemaking`);
			}
			r.push(`for a while, until you sense that ${he}'s on the edge of climax. Without warning, you lift the edge of the blankets and send a gust of cool air down ${his} front and`);
			if (eventSlave.dick > 0) {
				r.push(`right onto ${his} cock.`);
			} else {
				r.push(`across ${him}`);
				if (eventSlave.nipples !== "fuckable") {
					r.push(`hard`);
				} else {
					r.push(`engorged`);
				}
				r.push(`nipples.`);
			}
			r.push(`${He} gasps at the sudden overstimulation and then orgasms very strongly, jerking against you`);
			if (!canTalk(eventSlave)) {
				r.push(`and panting in lieu of an exclamation.`);
			} else {
				r.push(`and ${say}ing "oh" over and over again.`);
			}
			if (V.PC.dick !== 0) {
				r.push(`${He} clenches against your dick,`);
				if (V.PC.vagina !== -1) {
					r.push(`so hard that you can feel the rush of blood into your cunt,`);
				}
			} else {
				r.push(`${He} works your pussy harder,`);
			}
			r.push(`getting you off in turn, and then rolls over to plant a whole-hearted kiss on your lips.`);
			eventSlave.devotion += 4;
			if (didAnal) {
				r.push(VCheck.Anal(eventSlave, 1));
			} else if (didVaginal) {
				r.push(VCheck.Vaginal(eventSlave, 1));
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function bed() {
			r = [];
			let didAnal = false;
			let didVaginal = false;

			r.push(`What's the point of becoming a wealthy tycoon in an anarcho-libertarian paradise if you have to obey the rules all the time? You tell ${V.assistant.name} to cancel the appointment. Then, you wake your bedmate, and`);
			if (V.PC.dick !== 0) {
				r.push(`get a blowjob`);
				seX(eventSlave, "oral", V.PC, "penetrative");
				if (V.PC.vagina !== -1) {
					r.push(`and some attention for your pussy`);
					seX(eventSlave, "oral", V.PC, "vaginal");
				}
			} else {
				r.push(`have ${him} eat you out`);
				seX(eventSlave, "oral", V.PC, "vaginal");
			}
			r.push(`under the sheet while you enjoy the lurid sunrise through the glass wall of your bedroom. When the sun is up and you've`);
			if (V.PC.dick !== 0) {
				r.push(`shot your load down ${his} throat,`);
			} else {
				r.push(`climaxed twice,`);
			}
			r.push(`you pull the bemused ${girl} up alongside you again, bring the sheets up over you both, switch on a wallscreen, and ask ${him} if there's anything ${he}'d like to`);
			if (canSee(eventSlave)) {
				r.push(`watch.`);
			} else if (canHear(eventSlave)) {
				r.push(`listen to.`);
			} else {
				r.push(`put on.`);
			}
			r.push(`${He} smiles incredulously, but after you encourage ${him} ${he} finds ${his} confidence and admits that there's a Free Cities serial drama about slave life that ${he} enjoys. You put it on and watch three episodes with ${him}. It's terribly insipid, but there's a lot of explicit sex to liven things up, and all the actresses are nice enough to look at. ${eventSlave.slaveName} cuddles comfortably with you the entire time,`);
			if (canSee(eventSlave)) {
				r.push(`watching raptly`);
			} else if (canHear(eventSlave)) {
				r.push(`listening intently`);
			} else {
				r.push(`enjoying your company`);
			}
			r.push(`and doing ${his} best to explain the wretchedly trite plot you've missed. You have a meal delivered,`);
			if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) {
				r.push(`fuck ${him},`);
				didVaginal = true;
			} else if (eventSlave.anus > 0 && canDoAnal(eventSlave)) {
				r.push(`fuck ${his} butt,`);
				didAnal = true;
			} else {
				r.push(`fuck ${him},`);
				seX(eventSlave, "oral", V.PC, "penetrative");
			}
			r.push(`and then share a shower and a nap. Thus invigorated, you decide to tour the arcology's nightlife, and tell ${him} ${he}'ll accompany you. ${He} hurries to get ready, filled with excitement. A lovely day.`);
			eventSlave.trust += 4;
			if (didAnal) {
				r.push(VCheck.Anal(eventSlave, 1));
			} else if (didVaginal) {
				r.push(VCheck.Vaginal(eventSlave, 1));
			}
			return r;
		}
	}
};


code:
App.Events.RESSBirthday = class RESSBirthday extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.seeAge !== 0,
		]; // 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.rules.speech !== "restrictive",
				s => s.birthWeek >= 51,
				s => V.week - s.weekAcquired > 50, // I need a better way to determine a slave has been a slave for a long time outside of the player's ownership.
				s => s.tankBaby === 0
			]
		];
	}

	get weight() {
		return 8;
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let r = [];
		r.push(
			`You come across`,
			contextualIntro(V.PC, eventSlave, true),
			`in the kitchen. ${He} has a normal slave meal on a plate in front of ${him}, but also has a pack of hot wax candles from your sex gear. Oddly, ${he} has a candle upright in the food and is trying to light it. You ask what ${he}'s doing, and ${he} explains meekly,`,
			Spoken(eventSlave, `"I don't know, ${Master}. I've been a slave so long. I just`)
		);
		if (canSee(eventSlave)) {
			r.push(Spoken(eventSlave, `saw`));
		} else if (canHear(eventSlave)) {
			r.push(Spoken(eventSlave, `heard`));
		} else {
			r.push(Spoken(eventSlave, `realized`));
		}
		r.push(
			Spoken(eventSlave, `the date today and this seemed like the right thing to do. I'm sorry."`),
			`It's probably ${his} birthday. Apparently ${he}'s losing ${his} grasp on the concept.`
		);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Bake ${him} a cake`, cake, virginityWarning()),
			new App.Events.Result(`Teach ${him} a new meaning of birthdays`, meaning),
			new App.Events.Result(`Punish ${him} for making a mess`, punish),

		]);

		function cake() {
			r = [];
			r.push(`You bake a simple cake while patiently explaining birthdays. ${He} slowly remembers, and`);
			if (canSee(eventSlave)) {
				r.push(`looks repeatedly at the date display`);
			} else {
				r.push(`focuses intently on the date as ${he} repeats it to ${himself}`);
			}
			r.push(`to ingrain ${his} birthday back in ${his} mind. When the cake is done, you quickly dust it with confectionary sugar, stand a hot wax candle in the middle of it, and invite ${him} to think of a wish and blow it out. ${He} sits on your lap and the two of you take turns feeding each other warm cake. When the cake is gone ${he} gets up to do the dishes and you turn to go. As you go, ${he} asks`);
			if (eventSlave.lips > 70) {
				r.push(`through ${his} massive dick-sucking lips,`);
			} else if ((eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2)) {
				r.push(`through ${his} inconvenient oral piercings,`);
			}
			r.push(Spoken(eventSlave, `"${Master}, may I tell you what my wish was?"`));
			if (isPlayerReceptive(eventSlave) && canPenetrate(eventSlave)) {
				r.push(
					`You nod, and ${he} slowly turns around with ${his} eyes closed and dick erect,`,
					Spoken(eventSlave, `"To feel your warmth embracing me, ${Master}."`)
				);
				if (V.PC.vagina > 0) {
					r.push(`You push ${him} back on the couch, straddle ${him}, and spear yourself on ${his} cock, gently riding ${him} to orgasm.`);
					seX(eventSlave, "penetrative", V.PC, "vaginal");
					if (canImpreg(V.PC, eventSlave)) {
						knockMeUp(V.PC, 20, 0, eventSlave.ID);
					}
				} else if (V.PC.anus > 0) {
					r.push(`You push ${him} back on the couch, straddle ${him}, and gently push ${his} hard cock into your ass, riding ${him} to orgasm.`);
					seX(eventSlave, "penetrative", V.PC, "anal");
					if (canImpreg(V.PC, eventSlave)) {
						knockMeUp(V.PC, 20, 1, eventSlave.ID);
					}
				} else {
					r.push(`You push ${him} back on the couch, kneel over ${his} face, and take ${his} hard cock in your mouth, sucking ${him} to completion as ${he} gets you off with ${his} mouth in turn.`);
					seX(eventSlave, "penetrative", V.PC, "oral");
				}
			} else {
				r.push(`You nod, and ${he} kneels on the kitchen chair with ${his} eyes closed,`);
				if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
					r.push(`${his} ${hands} spreading ${his} buttocks; ${his} pussy moist and inviting and ${his} anus begging for penetration. "Take me, ${Master}."`);
					r.push(VCheck.Both(eventSlave, 1));
				} else if (canDoVaginal(eventSlave)) {
					r.push(`${his} ${hands} spreading ${his} buttocks; ${his} pussy moist and inviting. "Take me, ${Master}."`);
					r.push(VCheck.Vaginal(eventSlave, 1));
				} else if (canDoAnal(eventSlave)) {
					r.push(
						`${his} ${hands} spreading ${his} buttocks, and ${his} mouth open.`,
						Spoken(eventSlave, `"Buttsex, ${Master}."`)
					);
					r.push(VCheck.Anal(eventSlave, 1));
				} else {
					r.push(
						`${hands} to ${his} breasts, and mouth wide open.`,
						Spoken(eventSlave, `"To ${canTaste(eventSlave) ? `taste you` : `have you inside me`}, ${Master}."`)
					);
					seX(eventSlave, "oral", V.PC, "penetrative");
				}
			}
			r.push(`${He} feels so much <span class="devotion inc">closer to you</span> than before.`);
			eventSlave.devotion += 4;
			return r;
		}

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

		function meaning() {
			eventSlave.devotion += 4;
			return `You explain at length that ${he} will feel this way once a year, and that this day is special. On the day that makes ${him} feel this way, ${he} is to cover ${his} nipples with whipped cream, add a pattern with chocolate syrup, garnish each with a cherry, and present ${himself} to ${his} ${getWrittenTitle(eventSlave)}. ${He} nods in understanding and gets to work. When ${he}'s done, you help ${him} reach the confection on ${his} left breast ${himself} while you eat the one on ${his} right. When you're done, ${he} kisses you impulsively. ${He} tastes like whipped cream and chocolate.`;
		}

		function punish() {
			eventSlave.devotion -= 5;
			return `${He} begs your forgiveness and quickly cleans up the food and candles. ${He} can't seem to shake the feeling that <span class="devotion dec">something is wrong with this.</span>`;
		}
	}
};


code:
App.Events.RESSBondageGear = class RESSBondageGear 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.devotion < -20,
				s => s.trust >= -20,
				s => s.clothes === "uncomfortable straps",
				canMove,
			]
		];
	}

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

		let t = [];
		t.push(`One day, you catch sight of`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		if (!canWalk(eventSlave)) {
			t.push(`crawling`);
		} else if (shoeHeelCategory(eventSlave) > 1) {
			t.push(`tottering`);
		} else if (eventSlave.belly >= 10000) {
			t.push(`waddling`);
		} else {
			t.push(`walking`);
		}
		t.push(`around stark naked. This is unacceptable, as ${he} has been ordered to wear humiliating and uncomfortable bondage gear. When confronted,`);
		if (!canTalk(eventSlave)) {
			if (!hasAnyArms(eventSlave)) {
				t.push(`${he} tries to communicate ${his} reluctance to wear the clothing as best as ${he} can with various head movements and facial`);
				if (eventSlave.bellyPreg >= 5000) {
					t.push(`expressions, including several nods towards ${his} rounded middle.`);
				} else {
					t.push("expressions.");
				}
			} else {
				t.push(`${he} uses gestures to communicate ${his} embarrassment with ${his} clothing, covering ${his} nipples, crotch, and anus with ${his} ${hands} one after the other, and begging for clothes that do the same.`);
				if (eventSlave.bellyPreg >= 5000) {
					t.push(`${He} also gestures to ${his} rounded belly with a look of concern.`);
				}
			}
		} else {
			t.push(`${he} ${say}s fearfully,`);
			if (eventSlave.bellyPreg >= 5000) {
				t.push(Spoken(eventSlave, `"I'm sorry, ${Master}, but those things are just so embarrassing! I'm also worried for my ${eventSlave.pregType > 1 ? "babies'" : "baby's"} safety."`));
			} else {
				t.push(Spoken(eventSlave, `"I'm sorry, ${Master}, but those things are just so embarrassing!"`));
			}
		}

		App.Events.addParagraph(node, t);
		App.Events.addResponses(node, [
			new App.Events.Result(`Let ${him} go naked`, naked),
			new App.Events.Result(`Force ${him} to choose between ${his} straps and public nudity`, publicNude),
			(eventSlave.buttplug === "none" && (eventSlave.vagina < 0 || (eventSlave.vaginalAccessory === "none" && eventSlave.vaginalAttachment === "none")))
				? new App.Events.Result(`Add dildos to ${his} gear`, dildos, (eventSlave.anus === 0 && canDoAnal(eventSlave)) || (eventSlave.vagina === 0 && canDoVaginal(eventSlave)) ? `This option will take ${his} virginity` : null)
				: new App.Events.Result(),
			(V.arcade > 0)
				? new App.Events.Result(`Sentence ${him} to a month in the arcade`, arcade)
				: new App.Events.Result(),

		]);

		function naked() {
			t = [];
			if (!canWalk(eventSlave)) {
				t.push(`${He} cheerfully leaves your office,`);
			} else {
				t.push(`${He} skips away happily,`);
			}
			t.push(`overjoyed to be free of the clothing you ordered ${him} to wear. ${His} obedience to you <span class="devotion dec">has decreased,</span> as has <span class="trust inc">${his} fear</span> of you.`);
			eventSlave.devotion -= 5;
			eventSlave.trust += 4;
			return t;
		}

		function publicNude() {
			t = [];
			t.push(`You tell ${him} that you understand, and that ${he} can go naked; ${he} looks thrilled until you ${canHear(eventSlave) ? "tell" : "inform"} ${him} ${he}'ll be ${canWalk(eventSlave) ? "walking" : `dragging ${himself} down`} every hallway in ${V.arcologies[0].name} today, nude. Before ${he} can protest, you add that ${his} only other option is to put ${his} proper clothes back on and be a good little bitch.`);
			if (eventSlave.fetish === "humiliation") {
				t.push(`${He} <span class="devotion inc">happily accepts the alternative,</span>`);
				if (canAchieveErection(eventSlave) && !(eventSlave.chastityPenis)) {
					t.push(`${his} dick hardening`);
				} else if (eventSlave.dick > 0) {
					t.push(`${his} dick leaking precum`);
				} else if (eventSlave.vagina > 0) {
					t.push(`${his} pussy moistening`);
				} else {
					t.push(`${his} nipples`);
					if (eventSlave.nipples !== "fuckable") {
						t.push(`hardening`);
					} else {
						t.push(`swelling`);
					}
				}
				t.push(`with anticipation.`);
				eventSlave.devotion += 4;
				eventSlave.clothes = "no clothing";
				if (eventSlave.fetishKnown === 0) {
					t.push(`That was not the response you expected; turns out ${he} has a <span class="fetish gain">humiliation fetish.</span>`);
					eventSlave.fetishKnown = 1;
				}
			} else {
				t.push(`${He} shudders and <span class="trust dec">hurries to get ${his} straps back on.</span>`);
				eventSlave.trust -= 5;
			}
			return t;
		}

		function dildos() {
			t = [];
			t.push(`You tell ${him} that you understand, and that you will get ${him} some new clothing. ${He} is thrilled, but ${his} pleasure turns to horror when ${he} ${canSee(eventSlave) ? "sees" : "finds"} that the new clothes are a version of the same slave bondage gear, just with inward-facing dildos for ${his}`);
			if (eventSlave.vagina > -1) {
				t.push(`pussy and`);
			}
			t.push(`asshole.`);
			if (eventSlave.anus === 0 && eventSlave.vagina === 0 && canDoAnal(eventSlave) && canDoVaginal(eventSlave)) {
				t.push(`You pause before getting ${him} dressed; there's little reason to waste virginities on plugs. You`);
				if (V.PC.dick !== 0) {
					t.push(`stroke yourself to erection`);
				} else {
					t.push(`don a strap-on`);
				}
				t.push(`and bend ${him} over, opting to start with ${his} tight pussy.`);
				t.push(VCheck.Both(eventSlave, 1));
			} else if (eventSlave.anus === 0 && canDoAnal(eventSlave)) {
				t.push(`You pause before getting ${him} dressed; there's little reason to waste ${his} anal virginity on a plug. You `);
				if (V.PC.dick !== 0) {
					t.push(`stroke yourself to erection`);
				} else {
					t.push(`don a strap-on`);
				}
				t.push(`and bend ${him} over before working your way into ${his} tight anus.`);
				t.push(VCheck.Anal(eventSlave, 1));
			} else if (eventSlave.vagina === 0 && canDoVaginal(eventSlave)) {
				t.push(`You pause before getting ${him} dressed; there's little reason to waste ${his} virginity on a plug. You`);
				if (V.PC.dick !== 0) {
					t.push(`stroke yourself to erection`);
				} else {
					t.push(`don a strap-on`);
				}
				t.push(` and bend ${him} over before working your way into ${his} tight pussy.`);
				t.push(VCheck.Vaginal(eventSlave, 1));
			}
			t.push(`For the rest of the week, ${he} ${canWalk(eventSlave) ? "walks" : "crawls"} around awkwardly, unable to find a comfortable position`);
			if (eventSlave.belly >= 1500) {
				t.push(`between`);
			} else {
				t.push(`since`);
			}
			t.push(`${his}`);
			if (V.seeRace === 1) {
				t.push(`${eventSlave.race}`);
			}
			t.push(`body`);
			if (eventSlave.belly < 1500) {
				t.push(`is`);
			}
			if (eventSlave.belly >= 1500) {
				t.push(`being penetrated by ${his} own clothing and the straps digging into ${his} ${belly} rounded belly`);
			} else {
				t.push(`being penetrated by ${his} own clothing.`);
			}
			t.push(`<span class="devotion inc">${He} has become more submissive.</span>`);
			eventSlave.devotion += 4;
			return t;
		}

		function arcade() {
			t = [];
			t.push(`${eventSlave.slaveName} ${canTalk(eventSlave) ? "screams and " : ""}begs when ${he} realizes what ${his} punishment is, but you are obdurate.`);
			if (eventSlave.muscles > 30) {
				t.push(`${His} powerful form has to be sedated for immurement in the arcade.`);
			} else if (eventSlave.weight >= 190) {
				t.push(`${He} is so massively fat that immuring ${him} in the arcade is a struggle, even when ${he} isn't trying to.`);
			} else if (eventSlave.belly >= 120000) {
				t.push(`${He} is so enormously gravid that immuring ${him} in the arcade is a hassle, even though ${his} ${belly} middle limits ${his} ability to struggle.`);
			} else if (eventSlave.weight >= -10) {
				t.push(`${His} desperate struggles make immuring ${him} in the arcade difficult.`);
			} else if (eventSlave.belly >= 1500) {
				t.push(`${His}`);
				if (eventSlave.bellyPreg >= 3000) {
					t.push(`pregnant`);
				} else {
					t.push(belly);
				}
				t.push(`body makes it slightly difficult to fit ${him} properly into the restraints for immurement in the arcade.`);
			} else if (eventSlave.muscles < -15) {
				t.push(`${His} weak body makes immuring ${him} in the arcade pathetically easy.`);
			} else {
				t.push(`${His} thin form makes immuring ${him} in the arcade pathetically easy.`);
			}
			t.push(`After ${he}'s properly confined, the only sign of ${his} discomfiture is a slight movement of ${his} ${eventSlave.skin} butt as ${he} wriggles desperately against ${his} restraints.`);
			assignJob(eventSlave, "be confined in the arcade");
			eventSlave.sentence = 4;
			return t;
		}
	}
};


code:
App.Events.RESSBreedingBull = class RESSBreedingBull extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.PC.vagina > -1,
			() => V.PC.preg === 0,
			() => canGetPregnant(V.PC)
		]; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish === Fetish.MINDBROKEN,
				s => s.career === "a breeding bull",
				s => canImpreg(V.PC, s),
				s => s.assignment === Job.MASTERSUITE,
				canPenetrate,
				s => s.dick >= 5,
				hasAllLimbs,
				s => (s.muscles > 30 || s.weight > 30)
			]
		];
	}

	get weight() {
		let weight = 1;
		if (V.PC.drugs === "fertility supplements" || V.PC.diet === "fertility") {
			weight += 2;
		}
		if (V.PC.forcedFertDrugs > 0) {
			weight += 2;
		}
		return weight;
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let r = [];
		r.push(`You are awakened from a sound sleep by a pair of strong hands pinning your shoulders. Struggling to get your bearings, you come face to face with the drooling`);
		r.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), "."));
		r.push(`You had nothing planned this morning, so you've been allowed to sleep in undisturbed, and try as you might, you cannot slip your arms from under ${his} weight. ${He} hastily shifts ${his} weight around, almost giving you the chance to break free, but you freeze when something big, heavy and wet slaps against your stomach.`);
		App.Events.addParagraph(node, r);
		App.Events.addParagraph(node, [`${He} is fully erect and dripping precum: ${he} is going to breed you!`]);

		App.Events.addResponses(node, [
			new App.Events.Result(`Push ${him} off of you`, push),
			new App.Events.Result(`Wait for a chance to escape`, wait),
			new App.Events.Result(`Call out for help`, help),
			new App.Events.Result(`Take it like a good ${girlP}`, good),
			new App.Events.Result(`Enjoy it as much as possible`, enjoy),
		]);

		function push(){
			const frag = document.createDocumentFragment();
			r = [];
			if (overpowerCheck(eventSlave, V.PC) >= random(1, 100)) {
				r.push(`You struggle underneath ${his} grip and manage to wriggle your arms free. You grab the amorous bull and effortlessly flip ${him} off of you. ${He} might be strong, but you are`);
				if (FutureSocieties.isActive('FSPhysicalIdealist')) {
					if (V.PC.title === 0) {
						r.push(`a chiseled goddess.`);
					} else {
						r.push(`a chiseled god.`);
					}
				} else {
					r.push(`far stronger.`);
				}
				App.Events.addParagraph(frag, r);
				App.Events.addResponses(frag, [
					canDoAnal(eventSlave)
						? new App.Events.Result(`Show ${him} who's in charge`, charge, eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null)
						: new App.Events.Result(),
					new App.Events.Result(`Just get ${him} out of here`, out),
				]);
			} else {
				r = [];
				r.push(`You struggle underneath ${his} grip and manage to wriggle your arms free. You push at the amorous bull and attempt to lift the heavy ${girl} off you. ${eventSlave.slaveName} takes this poorly and rams ${his} gigantic dick straight into your vagina`);
				if (V.PC.vagina === 0) {
					r.push(`<span class="virginity loss">destroying your hymen,</span>`);
					V.PC.vagina++;
				}
				r.push(`and through your cervix. You pass out from the pain.`);
				App.Events.addParagraph(frag, r);
				App.Events.addParagraph(frag, [`You awaken some time later, your crotch extremely sore and your belly slightly bloated. Most of ${his} deposit has flowed back out of you, but you still feel a fair amount sloshing inside you. You sigh to yourself, knowing you have nobody to blame but yourself for this. ${He}'s a breeding bull and you a fertile ${womanP}. ${He} only did what ${he} was conditioned for; the fault is on you for ignoring the warning signs and not taking the proper precautions. Still, there is no doubt in your mind that you're pregnant with ${his} child.`]);
				knockMeUp(V.PC, 100, 0, eventSlave.ID);
				seX(eventSlave, "penetrative", V.PC, "vaginal", 4);
				V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
			}
			return frag;

			function charge() {
				r = [];
				r.push(`You`);
				if (V.PC.dick === 0) {
					r.push(`grab your biggest strap-on`);
				} else {
					r.push(`stroke your growing erection`);
				}
				r.push(`as ${eventSlave.slaveName} struggles to right ${himself}, catching ${his} hips as ${he} tries to escape. You show no mercy as you force yourself into ${his}`);
				if (eventSlave.anus === 0) {
					r.push(`virgin`);
				}
				r.push(`ass and viciously fuck ${him} like ${he} intended to do to you. You savor the sight of your every thrust against ${his} prostate forcing spurts of precum out ${his} gigantic, throbbing erection. You pick up the pace as ${he} climaxes, soaking the sheets beneath ${him}; ${he}'s not getting out of this until you are satisfied. By the end of things, the master suite reeks of fresh cum and ${eventSlave.slaveName}'s twitching body is the center piece of ${his} semen puddle. The sheets will definitely need a changing, you note, as ${his} semi-erect cock twitches and a thick rope of jism sprays forth.`);
				r.push(VCheck.Anal(eventSlave, 5));
				return r;
			}

			function out() {
				healthDamage(eventSlave, 10);
				return `You grab ${eventSlave.slaveName} by the scruff of ${his} neck as ${he} struggles to right ${himself} and literally throw ${him} out of your room and into the hallway, where ${he} lands with a painful-sounding crash. You decide to deal with getting that mess cleaned up later; for now, you're going back to bed.`;
			}
		}

		function wait(){
			const frag = document.createDocumentFragment();
			r = [];
			r.push(`${He} is far stronger than you expected and has you trapped in a compromising position. You've seen ${eventSlave.slaveName} fuck before; ${he}'s a quick shot, only in it to get ${his} mate pregnant. ${He} cums so hard ${he} nearly blacks out; that will be your best chance to escape ${him}. You question your choice as ${his} gigantic dick pokes at your crotch, eager to find the egg at the end of the tunnel. ${He} lacks even the basic understanding of foreplay, you realize, as ${he} drives ${his} cock deep into your`);
			if (V.PC.vagina === 0) {
				r.push(`pussy, <span class="virginity loss">destroying your hymen on the way.</span>`);
				V.PC.vagina++;
			} else {
				r.push(`pussy.`);
			}
			r.push(`You groan with pain at the sheer size of the rod stretching out your poor hole and struggle to hold back the tears once ${he} starts thrusting. There is no pleasure for you here as ${he} batters your cervix; should ${he} force through it, you may not be able to throw ${him} off. With a loud grunt, ${he} does just that. ${He} may be deep seated now, but you aren't going to give up. You feel ${him} tense up; now's your chance! As ${he} climaxes, you slip a leg around ${his} side and push ${him} with all your might. ${He} flops over, pulling out as ${he} spurts ${his} massive load and nailing you right in the face. You spit the jism out of your mouth and quickly restrain the dribbling bull.`);
			App.Events.addParagraph(frag, r);
			App.Events.addParagraph(frag, [`Panting, you look over the damage: Your pussy is gaping, there is semen everywhere, and given the steady flow from you, ${he} likely got some of that ejaculation in you. You sigh to yourself, knowing you have nobody to blame but yourself for this. ${He}'s a breeding bull and you, a fertile ${womanP}. ${He} only did what ${he} was conditioned for; the blame is on you for ignoring the warning signs and not taking the proper precautions. Still, ${he} knew you were fertile and went right for the prize; it would be wise to assume you've been impregnated.`]);
			knockMeUp(V.PC, 20, 0, eventSlave.ID);
			seX(eventSlave, "penetrative", V.PC, "vaginal");
			V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
			return frag;
		}

		function help(){
			r = [];
			r.push(`${He} is far stronger than you expected and has you trapped in a compromising position; you shout out for`);
			if (S.Bodyguard) {
				r.push(S.Bodyguard.slaveName);
			} else if (S.Concubine && canWalk(S.Concubine)) {
				r.push(S.Concubine.slaveName);
			} else {
				r.push(`somebody`);
			}
			r.push(`to help you. You've seen ${eventSlave.slaveName} fuck before; ${he}'s a quick shot, only in it to get ${his} mate pregnant. You question if anyone is coming as ${his} gigantic dick pokes at your crotch, eager to find the egg at the end of the tunnel. ${He} lacks even the basic understanding of foreplay, you realize, as ${he} drives ${his} cock deep into your`);
			if (V.PC.vagina === 0) {
				r.push(`pussy, <span class="virginity loss">destroying your hymen on the way.</span>`);
				V.PC.vagina++;
			} else {
				r.push(`pussy.`);
			}
			V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
			r.push(`You groan with pain at the sheer size of the rod stretching out your poor hole and struggle to hold back the tears once ${he} starts thrusting. There is no pleasure for you here as ${he} batters your cervix; you barely stop yourself from screaming out as ${he} slams through your final defense`);
			if (S.Bodyguard) {
				const {his2} = getPronouns(S.Bodyguard).appendSuffix("2");
				r.push(`and gets tackled off of you by ${S.Bodyguard.slaveName}. After a quick tussle, the amorous cow is restrained and leaking cum on your floor. You sigh to yourself, knowing you have nobody to blame but yourself for this. ${He}'s a breeding bull and you a fertile ${womanP}. ${He} only did what ${he} was conditioned for; the fault is on you for ignoring the warning signs and not taking the proper precautions. ${S.Bodyguard.slaveName} is visibly disturbed by an assault on you happening within ${his2} defensive perimeter and vows to not allow it to happen again.`);
				S.Bodyguard.devotion += 2;
			} else if (S.Concubine && canWalk(S.Concubine)) {
				r.push(`and gets tackled off of you by ${S.Concubine.slaveName}. After a violent struggle, the amorous cow is restrained and leaking cum on your floor. You sigh to yourself, knowing you have nobody to blame but yourself for this. ${He}'s a breeding bull and you a fertile ${womanP}. ${He} only did what ${he} was conditioned for; the fault is on you for ignoring the warning signs and not taking the proper precautions. ${S.Concubine.slaveName} is visibly shaken by the assault and was badly beaten by the muscular slave during the fight.`);
				S.Concubine.trust -= 5;
				healthDamage(S.Concubine, 40);
			} else {
				r.push(`and cums directly into your exposed womb. ${He} backs off, possibly startled by the shouting, giving you the chance to slip away to safety. You sigh to yourself, knowing you have nobody to blame but yourself for this. ${He}'s a breeding bull and you a fertile ${womanP}. ${He} only did what ${he} was conditioned for; the fault is on you for ignoring the warning signs and not taking the proper precautions. Still, ${he} knew you were fertile and went right for the prize; it would be wise to assume ${he}'s done ${his} job well.`);
				r.push(knockMeUp(V.PC, 50, 0, eventSlave.ID));
				seX(eventSlave, "penetrative", V.PC, "vaginal");
			}
			return r;
		}

		function good(){
			const frag = document.createDocumentFragment();
			r = [];
			r.push(`${He} is far stronger than you expected and has you trapped in a compromising position. You've seen ${eventSlave.slaveName} fuck before; ${he}'s a quick shot, only in it to get ${his} mate pregnant. You question what you are thinking as ${his} gigantic dick pokes at your crotch, eager to find the egg at the end of the tunnel. ${He} lacks even the basic understanding of foreplay, you realize, as ${he} drives ${his} cock deep into your`);
			if (V.PC.vagina === 0) {
				r.push(`pussy, <span class="virginity loss">destroying your hymen on the way.</span>`);
				V.PC.vagina++;
			} else {
				r.push(`pussy.`);
			}
			r.push(`You groan with pain at the sheer size of the rod stretching out your poor hole and struggle to hold back the tears once ${he} starts thrusting. There is no pleasure for you here as ${he} batters your cervix; you barely stop yourself from screaming out as ${he} slams through your final defense and cums directly into your exposed womb`);
			App.Events.addParagraph(frag, r);
			r = [];
			r.push(`You immediately realize you've made a mistake; you feel full already and ${he}'s still cumming. You watch in horror as your belly steadily swells with seed, unable to flow out thanks to your obstructed cunt. ${eventSlave.slaveName} grunts as ${he} pushes out the last of ${his} load before pulling out and releasing you. You try to get up, but the experience has left you drained, so you are left hoping that ${his} instincts tell ${him} ${he}'s done ${his} job. ${He} lowers ${his}`);
			if (canSmell(eventSlave)) {
				r.push(`nose to your violated pussy and sniffs`);
			} else {
				r.push(`face to your violated pussy to feel the heat emanating from it`);
			}
			r.push(`unsatisfied, ${he} moves back into position to properly seed you this time. You black out as ${his} second load joins the first, only to awaken sometime later`);
			if (S.Concubine && S.Concubine.fetish !== Fetish.MINDBROKEN) {
				const {his2, He2, him2} = getPronouns(S.Concubine).appendSuffix("2");
				r.push(`with ${S.Concubine.slaveName} trying ${his2} best to drain your swollen belly.`);
				if (canTalk(S.Concubine)) {
					r.push(Spoken(S.Concubine, `"I'm so sorry ${Master}... I stepped out for a minute and this happens."`));
					r.push(`You ask what happened to ${eventSlave.slaveName}.`);
					r.push(Spoken(S.Concubine, `"${He}'s bound and gagged now, ${he} won't hurt you anymore. But what are you going to do with that belly? I won't tell anyone what happened, but we've got to get rid of it."`));
				} else {
					r.push(`${He2} gestures ${his2} apologies and points to the bound and gagged ${eventSlave.slaveName}, before expressing ${his2} concerns about your visible state.`);
				}
				r.push(`You do your best to calm ${him2} down; this is your fault after all. ${eventSlave.slaveName}'s a breeding bull and you a fertile ${womanP}. ${He} only did what ${he} was conditioned for; the blame is on you for ignoring the warning signs and not taking the proper precautions. Still, there is no doubt in your mind that you're pregnant with ${his} child. As for the belly, it'll go down soon, you're sure.`);
			} else if (S.Bodyguard) {
				const {his2, He2, him2} = getPronouns(S.Bodyguard).appendSuffix("2");
				r.push(`with ${S.Bodyguard.slaveName} sobbing over your swollen belly.`);
				if (canTalk(S.Bodyguard)) {
					r.push(Spoken(S.Bodyguard, `"I'm so sorry ${Master}... I stepped out for a minute and this happens."`));
					r.push(`You ask what happened to ${eventSlave.slaveName}.`);
					r.push(Spoken(S.Bodyguard, `"${He}'s bound and gagged now, ${he} won't hurt you again."`));
					r.push(`${He2} sniffles,`);
					r.push(Spoken(S.Bodyguard, `"But please punish me too. This is all my fault."`));
				} else {
					r.push(`${He2} gestures ${his2} apologies and points to the bound and gagged ${eventSlave.slaveName}, before begging you to punish ${him2} too for ${his2} failures as your guardian.`);
				}
				r.push(`You do your best to calm ${him2} down; this is your fault after all. ${eventSlave.slaveName}'s a breeding bull and you, a fertile ${womanP}. ${He} only did what ${he} was conditioned for; the blame is on you for ignoring the warning signs and not taking the proper precautions. Still, there is no doubt in your mind that you're pregnant with ${his} child.`);
			} else {
				r.push(`to ${eventSlave.slaveName} snoring beside you, ${his} massive cock soft and slightly drooling cum. Most of ${his} deposit has flowed back out of you, but you're still heavy with sperm. You sigh to yourself, knowing you have nobody to blame but yourself for this. ${He}'s a breeding bull and you a fertile ${womanP}. ${He} only did what ${he} was conditioned for; the fault is on you for ignoring the warning signs and not taking the proper precautions. Still, there is no doubt in your mind that you're pregnant with ${his} child.`);
			}
			knockMeUp(V.PC, 100, 0, eventSlave.ID);
			seX(eventSlave, "penetrative", V.PC, "vaginal", 4);
			App.Events.addParagraph(frag, r);
			V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
			return frag;
		}

		function enjoy(){
			const frag = document.createDocumentFragment();
			r = [];
			r.push(`You know what is going to happen and your breath quickens as you already anticipate the good and proper breeding ${he} is going to grant you. You're going to get pregnant and you want it. Your hands on your side, you're pinned under a breeding bull and ${he} has the tool to fill you and the sperm to fertilize your every ready egg. You're a human with almost unlimited power, yet all you crave now is the cock entering you and the babies you're going to have. You scream out in pain at first as ${eventSlave.slaveName} slams ${his} shaft into you with full force`);
			if (V.PC.vagina === 0) {
				r.push(`<span class="virginity loss">destroying your hymen on the way,</span>`);
				V.PC.vagina++;
			}
			r.push(`and begins pounding right away. Eager to get as much enjoyment out of it as you can you start bucking back almost immediately, screaming out loud your pleasure and pain at the same time. Miraculously, your pussy moistens as on cue, lessening your discomfort to a minimum and granting you as much pleasure as is physically possible in a state you're in. The sounds of brutal flesh on flesh slapping fill the room as the breeding bull claims ${his} cow completely, until at last ${he} is ready to seed you, having long penetrated your cervix. ${He} starts filling your womb as you quiver and moan in pleasure, pain and anticipation.`);
			App.Events.addParagraph(frag, r);
			r = [];
			r.push(`Tears stream down your face from the pain your body is experiencing, from having your wish for a pregnancy filled so suddenly and so violently and of the pleasure you're feeling. ${eventSlave.slaveName} is still cumming in you and you smile as you feel your womb expanding from the amount of ejaculate being pumped into you. ${He} is grunting and huffing as ${he} pushes the last spurts of cum into you.`);
			r.push(`You don't want to let ${him} go yet and planting tender kisses on ${his} lips you manage to gather enough energy to start massaging ${his} dick with your pussy. ${eventSlave.slaveName} takes the queue and starts pounding you again, as you ravish ${his} mouth with your lips and moan lewdly and loudly to grunt your approval. This continues for a while until ${eventSlave.slaveName} hilts ${himself} in you, penetrates your cervix again to deposit another load into your womb. What started a half an hour ago like an assault has turned into a ferocious fucking session between you and your breeding bull, if anyone saw you now, they wouldn't even guess it wasn't you who initiated it. As ${he} starts cumming once more, you finally black out, exhausted and in bliss as ${he} deposits god knows how many more massive loads into you while you're unconscious.`);
			App.Events.addParagraph(frag, r);
			r = [];
			r.push(`When you finally wake up, your arm and leg are draped over ${eventSlave.slaveName}. The breeding bull is snoring loudly, ${his} cock still stuck between your folds, you both laying on the bed, cuddling after this fierce lovemaking. Nobody has disturbed you though and after checking that you're not in queue for anything you decide to exact a sweet and juicy revenge on ${eventSlave.slaveName}, you move your hips towards ${him} to catch ${his} attention. Before you can even start to realize what you might have done, ${eventSlave.slaveName} pounces on you again and stuffs ${his} massive brick into you with one smooth and powerful thrust. This time you start fucking ${him} in earnest and after a while you're both cumming. You scream out loud and long in pleasure as another massive load fills your womb to its limit and cum gushes out between your pussy lips and ${eventSlave.slaveName}'s cock. You're completely filled and there's no room for more.`);
			r.push(`You know full well by now that ${eventSlave.slaveName} the breeding bull has done ${his} job properly, sensed that you're a fertile ${womanP} and claimed you. You sigh deeply and contentedly as you work to come to terms with the fact that you're pregnant with ${eventSlave.slaveName}'s child. In the end, sleep overtakes you and you rest for a couple of hours.`);
			r.push(`Later when you wake, you snuggle up closer to the mindless fuckbeast and through the haze of the rough pounding you received a few hours ago and the cum still sloshing within your womb, you try to wrap your brain around the fact that you practically got raped by a fucktoy and enjoyed it. At least if anyone is going to have anything to say about your and ${eventSlave.slaveName}'s offspring, you can confidently say that in the end you granted your full approval to this impregnation, regardless of who was on the top.`);
			knockMeUp(V.PC, 100, 0, eventSlave.ID);
			seX(eventSlave, "penetrative", V.PC, "vaginal", 10);
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};