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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				hasAnyArms,
				hasAnyLegs,
				s => [Job.PUBLIC, Job.WHORE].includes(s.assignment),
				s => s.vagina !== 0,
				s => s.anus !== 0,
				canDoAnal,
				s => s.devotion <= 50,
			]
		];
	}

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

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

		let r = [];
		r.push(
			`At the end of a long day, you take a moment to watch the comings and goings of your arcology to decompress. While doing so, you notice someone who's clearly had a longer day than you.`,
			contextualIntro(PC, eventSlave, true),
			`is`
		);
		if (eventSlave.belly >= 5000) {
			r.push(`slowly waddling, one hand under ${his} ${belly}`);
			if (eventSlave.bellyPreg >= 3000) {
				r.push(`pregnant`);
			}
			r.push(`belly and the other on the small of ${his} back,`);
		} else {
			r.push(`making`);
		}
		r.push(`${his} tired way back to the kitchen for a meal and then bed after a long day of sex work. ${He}'s stripped off ${his} soiled clothes already, and is clearly too tired to care about nudity at all.`);
		App.Events.addParagraph(node, r);

		r = [];
		r.push(`${He} comes around the corner and`);
		if (PC.belly >= 100000) {
			r.push(`slams into your massively distended belly, nearly knocking you over.`);
		} else if (PC.belly >= 10000) {
			r.push(`bumps into your heavily gravid middle.`);
		} else if (PC.belly >= 5000) {
			r.push(`bumps into your rounded middle.`);
		} else if (PC.balls >= 14) {
			r.push(`nearly knees your prominent testicles.`);
		} else if (PC.boobs >= 800) {
			r.push(`runs into your prominent rack.`);
		} else {
			r.push(`almost runs into you.`);
		}
		r.push(`${He} stops and`);
		if (canSee(eventSlave)) {
			r.push(`stares,`);
		} else {
			r.push(`faces you,`);
		}
		r.push(`struggling to find the appropriate thing to say or do, but too exhausted to manage it. Even though ${he}'s been obediently cleaning ${himself} between fucks, ${he} looks used up. ${His} ${eventSlave.skin} skin is reddened here and there.`);
		if (eventSlave.belly >= 750000) {
			r.push(`${His} ${belly} belly is heavily bruised, the super-stretched skin nearly at its limit from the weight put on it and the forces pushing against it.`);
		} else if (eventSlave.belly >= 600000) {
			r.push(`${His} ${belly} belly is deep red and heavily bruised; it's clear that at least one client roughly fucked ${him} over it.`);
		} else if (eventSlave.belly >= 450000) {
			r.push(`${His} ${belly} belly looks extremely painful, it's obvious ${he} got fucked over it.`);
		} else if (eventSlave.belly >= 300000) {
			r.push(`${His} ${belly} belly is black and blue, it's obvious ${he} got fucked over it.`);
		} else if (eventSlave.belly >= 150000) {
			r.push(`${His} ${belly} belly is heavily chafed from rubbing the floor as ${he} struggled to keep ${his} weight off it.`);
		} else if (eventSlave.belly >= 100000) {
			r.push(`${His} ${belly} belly is heavily chafed from rubbing against the floor.`);
		} else if (eventSlave.belly >= 10000) {
			r.push(`The tip of ${his} huge belly is chafed from rubbing against the floor.`);
		}
		if (canDoVaginal(eventSlave)) {
			r.push(`${His}`);
			if (eventSlave.labia > 1) {
				r.push(`generous`);
			} else {
				r.push(`poor`);
			}
			r.push(`pussylips are puffy, and you have no doubt ${his} vagina is quite sore.`);
		}
		if (canDoAnal(eventSlave)) {
			r.push(`The awkward way ${he}'s standing suggests that ${his}`);
			if (eventSlave.anus > 2) {
				r.push(`gaping`);
			} else if (eventSlave.anus > 1) {
				r.push(`big`);
			} else {
				r.push(`tight`);
			}
			r.push(`asshole has had more than one dick up it recently.`);
		}
		if (eventSlave.nipples !== "fuckable") {
			r.push(`Even ${his} nipples are pinker than usual, having been cruelly pinched`);
			if (eventSlave.lactation > 0) {
				r.push(`and milked`);
			}
			r.push(r.pop() + `.`);
			if (eventSlave.lactation > 0) {
				eventSlave.lactationDuration = 2;
				eventSlave.boobs -= eventSlave.boobsMilk;
				eventSlave.boobsMilk = 0;
			} else {
				r.push(induceLactation(eventSlave, 2));
			}
		} else {
			r.push(`Even ${his} nipples show signs of wear, having prolapsed slightly from heavy use.`);
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Use ${him} anyway`, anyway),
			new App.Events.Result(`Manipulate ${him} into asking to suck you off`, manipulate),
			new App.Events.Result(`Just talk with ${him}`, talk),
		]);

		function anyway() {
			r = [];
			r.push(`You reach out, grab ${his} shoulder, and shove ${him} against the wall.`);
			if (!canTalk(eventSlave)) {
				r.push(`${He} manages to use a gesture to beg you not to,`);
			} else {
				r.push(
					`${He} manages to beg,`,
					Spoken(eventSlave, `"Please no, ${Master}—"`)
				);
			}
			r.push(`before you give ${him} a hard warning slap on the ass to shut ${him} up. ${He}'s quiet, but starts to sob a little when ${he} feels`);
			if (PC.dick === 0) {
				r.push(`the head of a strap-on`);
			} else {
				r.push(`your cock`);
			}
			r.push(`against ${his}`);
			if (canDoAnal(eventSlave)) {
				r.push(`anus.`);
				if (eventSlave.anus > 2) {
					r.push(`It's gaped before you even touch it, but it's clearly sore enough that ${he} dreads anal anyway.`);
				} else if (eventSlave.anus > 1) {
					r.push(`It's been fucked loose, but it's clearly sore enough that ${he} dreads anal anyway.`);
				} else {
					r.push(`It's somehow not gaped yet, and ${he} dreads having it stretched yet again.`);
				}
				if (eventSlave.height >= 185) {
					r.push(`${He}'s tall enough that the angle isn't that uncomfortable for ${him}.`);
				} else if (eventSlave.anus > 0) {
					r.push(`${He} hikes ${himself} desperately up on ${his} tiptoes to make the angle less uncomfortable for ${him}.`);
				} else {
					r.push(`${He} hikes ${himself} desperately up on ${his} tiptoes, but ${he}'s so short the angle is desperately uncomfortable for ${him}.`);
				}
				r.push(`${He} decides to try begging one last time, and`);
				if (canDoVaginal(eventSlave)) {
					if (!canTalk(eventSlave)) {
						r.push(`signs to ask you to use ${his} pussy instead`);
					} else {
						r.push(
							`whines,`,
							Spoken(eventSlave, `"Just use my pussy, please!"`)
						);
					}
				} else {
					if (!canTalk(eventSlave)) {
						r.push(`signs to ask you to let ${him} suck you off instead`);
					} else {
						r.push(
							`whines,`,
							Spoken(eventSlave, `"Let me suck you off, please!"`)
						);
					}
				}
				r.push(`as you shove`);
				if (PC.dick === 0) {
					r.push(`the strap-on`);
				} else {
					r.push(`yourself`);
				}
				r.push(`up ${his} butt. ${He} reflexively tries to get away into the wall,`);
				if (eventSlave.belly > 100000) {
					r.push(`${his} ${belly} belly squashing out to either side.`);
				} else if (eventSlave.boobs > 2000) {
					r.push(`${his} enormous boobs squashing out to either side.`);
				} else if (eventSlave.boobs > 1000) {
					r.push(`${his} big boobs squashing out to either side.`);
				} else if (eventSlave.boobs > 300) {
					r.push(`${his} boobs crashing into it.`);
				} else {
					r.push(`${his} sore nipples giving ${him} a jerk as ${he} does.`);
				}
				r.push(`After some continued whining through ${his} tears, ${he} gives up and just <span class="trust dec">lets you</span> rape ${his} sore ass.`);
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(`pussy lips.`);
				if (eventSlave.vagina > 2) {
					r.push(`It's gaped before you even touch it, but it's clearly sore enough that ${he} dreads penetration anyway.`);
				} else if (eventSlave.vagina > 1) {
					r.push(`It's been fucked loose, but it's clearly been used enough that ${he} dreads penetration anyway.`);
				} else {
					r.push(`It's somehow not loose yet, and ${he} dreads having it stretched yet again.`);
				}
				if (eventSlave.height >= 185) {
					r.push(`${He}'s tall enough that the angle isn't that uncomfortable for ${him}.`);
				} else if (eventSlave.anus > 0) {
					r.push(`${He} hikes ${himself} desperately up on ${his} tiptoes to make the angle less uncomfortable for ${him}.`);
				} else {
					r.push(`${He} hikes ${himself} desperately up on ${his} tiptoes, but ${he}'s so short the angle is desperately uncomfortable for ${him}.`);
				}
				r.push(`${He} decides to try begging one last time, and`);
				if (!canTalk(eventSlave)) {
					r.push(`signs to ask you to let ${him} suck you off instead`);
				} else {
					r.push(
						`whines,`,
						Spoken(eventSlave, `"Let me suck you off, please!"`)
					);
				}
				r.push(`as you shove`);
				if (PC.dick === 0) {
					r.push(`the strap-on`);
				} else {
					r.push(`yourself`);
				}
				r.push(`up ${his} cunt. ${He} reflexively tries to get away into the wall,`);
				if (eventSlave.belly > 100000) {
					r.push(`${his} ${belly} belly squashing out to either side.`);
				} else if (eventSlave.boobs > 2000) {
					r.push(`${his} enormous boobs squashing out to either side.`);
				} else if (eventSlave.boobs > 1000) {
					r.push(`${his} big boobs squashing out to either side.`);
				} else if (eventSlave.boobs > 300) {
					r.push(`${his} boobs crashing into it.`);
				} else {
					r.push(`${his} sore nipples giving ${him} a jerk as ${he} does.`);
				}
				r.push(`After some continued whining through ${his} tears, ${he} gives up and just <span class="trust dec">lets you</span> rape ${his} sore vagina.`);
				r.push(VCheck.Vaginal(eventSlave, 1));
			}
			r.push(`When you finally`);
			if (PC.dick !== 0) {
				r.push(`fill ${his}`);
				if (canDoAnal(eventSlave)) {
					r.push(`butt`);
				} else {
					r.push(`pussy`);
				}
				r.push(`with your ejaculate and pull out,`);
				if (PC.vagina !== -1) {
					r.push(`the motion releasing a waft of the combined cum and pussyjuice smell of a satisfied futa,`);
				}
			} else {
				r.push(`shudder with orgasm and withdraw your strap-on,`);
			}
			r.push(`${he} slumps and turns to go, looking a bit sad for some reason.`);
			eventSlave.trust += 4;
			return r;
		}

		function manipulate() {
			r = [];
			r.push(`You reach out, grab ${his} shoulder, and shove ${him} against the wall.`);
			if (!canTalk(eventSlave)) {
				r.push(`${He} manages to use a gesture to beg you not to,`);
			} else {
				r.push(
					`${He} manages to beg,`,
					Spoken(eventSlave, `"Please no, ${Master}—"`)
				);
			}
			r.push(`before you give ${him} a hard warning slap on the ass to shut ${him} up. ${He}'s quiet, but starts to sob a little when ${he} feels`);
			if (PC.dick === 0) {
				r.push(`the head of a strap-on`);
			} else {
				r.push(`an invading`);
				if (PC.vagina !== -1) {
					r.push(`futa`);
				}
				r.push(`cockhead`);
			}
			r.push(`against ${his}`);
			if (canDoAnal(eventSlave)) {
				r.push(`anus.`);
				if (eventSlave.anus > 2) {
					r.push(`It's gaped before you even touch it, but it's clearly sore enough that ${he} dreads anal anyway.`);
				} else if (eventSlave.anus > 1) {
					r.push(`It's been fucked loose, but it's clearly sore enough that ${he} dreads anal anyway.`);
				} else {
					r.push(`It's somehow not gaped yet, and ${he} dreads having it stretched yet again.`);
				}
			} else {
				r.push(`pussy lips.`);
				if (eventSlave.vagina > 2) {
					r.push(`It's gaped before you even touch it, but it's clearly sore enough that ${he} dreads penetration anyway.`);
				} else if (eventSlave.vagina > 1) {
					r.push(`It's been fucked loose, but it's clearly been used enough that ${he} dreads penetration anyway.`);
				} else {
					r.push(`It's somehow not loose yet, and ${he} dreads having it stretched yet again.`);
				}
			}
			r.push(`${He}`);
			if (!canTalk(eventSlave)) {
				r.push(`signs let ${him} suck you off instead.`);
			} else {
				r.push(
					`whines,`,
					Spoken(eventSlave, `"Let me suck you off, please!"`)
				);
			}
			r.push(`Having gotten ${him} to beg for what you wanted all along, you spin ${him} so ${his}`);
			if (eventSlave.weight > 160) {
				r.push(`rippling`);
			} else if (eventSlave.weight > 95) {
				r.push(`fat`);
			} else if (eventSlave.muscles > 95) {
				r.push(`powerful`);
			} else if (eventSlave.muscles > 30) {
				r.push(`strong`);
			} else if (eventSlave.muscles > 5) {
				r.push(`toned`);
			} else {
				r.push(`feminine`);
			}
			r.push(`back hits the wall with a smack and shove ${him} down it until ${his}`);
			if (eventSlave.lips > 70) {
				r.push(`massive`);
			} else if (eventSlave.lips > 40) {
				r.push(`pillowlike`);
			} else if (eventSlave.lips > 20) {
				r.push(`girlish`);
			} else if (eventSlave.lips > 10) {
				r.push(`average`);
			} else {
				r.push(`minuscule`);
			}
			r.push(`lips are level with your`);
			if (PC.dick === 0) {
				r.push(`fake dick,`);
			} else {
				r.push(`dick,`);
			}
			if (eventSlave.belly >= 100000) {
				r.push(`straddle ${his} ${belly} belly,`);
			}
			r.push(`and push it into ${his} mouth without waiting for ${him} to get ready. ${He} gags, but does ${his} best to work ${his} tired mouth. When you're finally satisfied and you let ${him} up, you aim another slap at ${his}`);
			if (eventSlave.butt > 12) {
				r.push(`inhuman ass`);
			} else if (eventSlave.butt > 5) {
				r.push(`massive ass`);
			} else if (eventSlave.butt > 2) {
				r.push(`big butt`);
			} else if (eventSlave.butt > 0) {
				r.push(`nice ass`);
			} else {
				r.push(`flat ass`);
			}
			r.push(`and let ${him} see it coming; ${he} <span class="devotion inc">accepts</span> the spank due to fright at what you might do if ${he} dodged before fleeing.`);
			eventSlave.devotion += 4;
			seX(eventSlave, "oral", PC, "penetrative");
			return r;
		}

		function talk() {
			const frag = document.createDocumentFragment();
			r = [];
			r.push(`You take ${him} by the hand, lead ${him} to a nearby couch, and sit down with ${him}, letting ${him} seat ${himself} beside you so ${he} can`);
			if (eventSlave.belly >= 5000) {
				r.push(`rest ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`gravid`);
				}
				r.push(`bulk against you`);
			} else {
				r.push(`lean against you`);
			}
			r.push(`without putting too much weight on ${his} poor overused butthole. You ask ${him} about ${his} day.`);
			if (!canTalk(eventSlave)) {
				r.push(`${He} uses gestures to recount it through ${his} tears. Apparently while one guy was using ${his} anus, another thought it was hot and waited for him to be done before using ${him} in turn, without letting ${him} rest or clean ${himself}. It took four cocks total for another slave to notice and rescue ${him}.`);
			} else {
				r.push(
					`${He} ${say}s, a little tearfully,`,
					Spoken(eventSlave, `"${Master}, this guy wanted to use my butt in public. So of course I let him, and he made me sit in his lap to do it, and held my ${hasBothLegs(eventSlave) ? `legs` : "leg"} back so everyone could see! And then another guy thought it was hot and waited, and then fucked me in my ass too. Another slave finally noticed and rescued me after four cocks, ${Master}. I'm really sore."`)
				);
			}
			r.push(`${He}`);
			if (canSee(eventSlave)) {
				r.push(`looks up at you with big ${App.Desc.eyesColor(eventSlave)}`);
			} else {
				r.push(`gazes at you`);
			}
			r.push(`for a long moment, a final tear leaking down ${his} ${eventSlave.skin} cheek, before ${he} suddenly`);
			if (!canTalk(eventSlave)) {
				r.push(`shakes with mute laughter.`);
			} else {
				r.push(`giggles.`);
			}
			r.push(`${He} explains ${himself} after a while: it's not what ${he} thought ${he}'d be doing with ${his} life,`);
			switch (eventSlave.career) {
				case "a bioreactor":
				case "a breeder":
				case "a breeding bull":
				case "a dairy cow":
				case "a dairy slave":
				case "a Fuckdoll":
				case "a Futanari Sister":
				case "a slave":
				case "a slave since birth":
				case 0:
					r.push(`once upon a time.`);
					break;
				default:
					r.push(`back when ${he} was ${convertCareer(eventSlave)}.`);
			}
			if (!canTalk(eventSlave)) {
				r.push(`${He} points to ${himself} and uses both hands to mimic sodomy, as though to suggest that's all ${he} is, before giving you a rueful smile.`);
			} else {
				r.push(
					Spoken(eventSlave, `"${eventSlave.slaveName} the butthole ho, that's me,"`),
					`${he} ${say}s sadly, before giving you a rueful smile.`
				);
			}
			r.push(`${He} kisses you on the cheek and <span class="trust inc">thanks you</span> for listening instead of raping ${him}.`);
			eventSlave.trust += 4;

			App.Events.addParagraph(frag, r);
			App.Events.addResponses(frag, [
				new App.Events.Result(`Kiss ${him} back`, kiss),
				new App.Events.Result(`Rape ${him}`, rape),
			]);
			return frag;

			function kiss() {
				r = [];
				r.push(`You turn to kiss ${him} back, on the lips this time. ${He}`);
				if (canSee(eventSlave)) {
					r.push(`sees`);
				} else {
					r.push(`feels`);
				}
				r.push(`your intention and <span class="trust inc">complies trustingly,</span> closing ${his} eyes and tilting ${his} head slightly so your lips lock perfectly.`);
				if (eventSlave.lips > 70) {
					r.push(`${His} ridiculous, pillowlike lips part softly.`);
				} else if (eventSlave.teeth === "pointy") {
					r.push(`${He} opens ${his} jaw wide, careful to keep ${his} shark's teeth well clear of you.`);
				} else if (eventSlave.teeth === "fangs") {
					r.push(`${He} keeps ${his} jaw steady so you may work around ${his} fangs easier.`);
				} else if (eventSlave.teeth === "fang") {
					r.push(`You try your best to work around ${his} lone fang.`);
				}
				r.push(`After a few seconds, ${he} realizes you aren't planning to break the kiss anytime soon, and softens, ${his}`);
				if (eventSlave.bellyPreg >= 1500) {
					r.push(`pregnant`);
				}
				r.push(`body relaxing against yours. ${He} scoots closer to you, bringing ${his} legs up under ${him} on the couch cushions so ${he} can face you comfortably. ${He} leans one`);
				if (eventSlave.weight > 160) {
					r.push(`extremely well padded`);
				} else if (eventSlave.weight > 95) {
					r.push(`well padded`);
				} else if (eventSlave.muscles > 30) {
					r.push(`muscular`);
				} else if (eventSlave.weight > 10) {
					r.push(`plush`);
				} else if (eventSlave.hips > -1) {
					r.push(`pretty`);
				}
				r.push(`hip against your leg, hiking ${himself} half onto your lap so ${he} can make out with you without having to sit with any weight on ${his} sore butthole.`);
				eventSlave.trust += 2;
				return r;
			}

			function rape() {
				r = [];
				r.push(`But ${he}'s wrong to place that kind of faith in you. As ${he} withdraws from the kiss, you snake a betraying hand between ${his} butt and the couch, and shove`);
				if (eventSlave.anus <= 1) {
					r.push(`two rude fingers up ${his} sore little anus.`);
				} else if (eventSlave.anus === 2) {
					r.push(`three rude fingers up ${his} sore anus.`);
				} else {
					r.push(`all four of your fingers and your thumb, formed into a point, as far up ${his} loose butt as they will go.`);
				}
				r.push(`${He} lets out a pained "oh," and then goes silent. For such a little sound, it bears a great weight of betrayed trust. You insert your fingers to the knuckle, making ${him} writhe with discomfort, and then turf ${him} off the couch to land`);
				if (eventSlave.belly >= 300000) {
					r.push(`across ${his} ${belly} stomach`);
				} else {
					r.push(`face first`);
				}
				r.push(`on the floor in front of you. ${He} tries to spread ${his} butt and angle ${his} hips like a good ${girl}, but you slap ${his} hands away and push your`);
				if (PC.dick === 0) {
					r.push(`strap-on`);
				} else {
					r.push(`cock`);
				}
				r.push(`inside ${him} without regard for ${his} poor anus. ${He} shudders and begins to cry, and keeps crying as you ravage ${his} asshole. When you climax and pull out, ${he} continues to weep, but stumbles off to wash. When ${he} comes back, ${he}'s still sniffling, but without being prompted,`);
				if (eventSlave.belly >= 300000) {
					r.push(`<span class="devotion inc">${he} leans over ${his} belly and offers you ${his} sore butthole again.</span>`);
				} else {
					r.push(`<span class="devotion inc">${he} gets down on ${his} knees and offers you ${his} sore butthole again.</span>`);
				}
				eventSlave.trust -= 4;
				eventSlave.devotion += 5;
				r.push(VCheck.Anal(eventSlave, 1));
				return r;
			}
		}
	}
};


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

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

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

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

		let r = [];
		r.push(
			`One morning, despite the fact that ${he} is not allowed to speak without being spoken to,`,
			contextualIntro(V.PC, eventSlave, true),
		);
		if (canSee(eventSlave)) {
			r.push(`looks you directly in the eye`);
		} else {
			r.push(`faces you`);
		}
		r.push(`and asks`);
		if (SlaveStatsChecker.checkForLisp(eventSlave)) {
			r.push(`boldly through ${his}`);
			if (eventSlave.lips > 70) {
				r.push(`massive dick-sucking lips,`);
			} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
				r.push(`inconvenient oral piercings,`);
			} else {
				r.push(`lisp,`);
			}
			r.push(
				Spoken(eventSlave, `"I'm tired, can I have the day off?"`),
				`${He} didn't even call you ${getWrittenTitle(eventSlave)}.`
			);
		} else {
			r.push(
				`boldly,`,
				Spoken(eventSlave, `"I'm tired, can I have the day off, ${rudeTitle}?"`)
			);
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Give ${him} a rough spanking`, spanking, virginityWarning()),
			(canDoAnal(eventSlave) || canDoVaginal(eventSlave))
				? new App.Events.Result(`Sentence ${him} to public use`, sentence, virginityWarning())
				: new App.Events.Result(),
			new App.Events.Result(`Give ${him} the day off`, off),
		]);

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

		function spanking() {
			r = [];
			if (hasAnyLegs(eventSlave)) {
				r.push(`You tie the protesting slave to your desk`);
				if (eventSlave.belly >= 5000) {
					r.push(`with ${his} chest against the top of the desk with ${his} ${belly}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnant`);
					}
					r.push(`belly hanging of the side, so that`);
				} else {
					r.push(`so that ${his} chest is against the top of the desk and`);
				}
				r.push(`${he}'s standing upright with ${his} ass in the air.`);
			} else {
				if (eventSlave.belly >= 300000) {
					r.push(`You carefully balance the protesting, defenseless torso atop ${his} own ${belly}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy.`);
					} else {
						r.push(`stomach.`);
					}
				} else if (eventSlave.belly >= 5000) {
					r.push(`You place the protesting, defenseless torso on your lap, face-down with ${his} ${belly}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnant`);
					}
					r.push(`belly between your legs.`);
				} else {
					r.push(`You place the protesting, defenseless torso on your desk, face-down.`);
				}
			}
			r.push(`You spank ${him} severely, leaving ${his} buttocks bright pink. ${He} must count the strokes or have ${his} punishment start over. Sobbing, ${he} counts`);
			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, `"Six, AAGHHH, seven, AAGHHH, seven"`),
				`and then realizes ${his} mistake and begs for mercy — in vain, of course. You finish ${him} off with a rough`
			);
			if (canDoVaginal(eventSlave)) {
				r.push(`fuck, with ${him} jerking against ${his} restraints every time you stroke into ${his} sore buttocks.`);
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else if (canDoAnal(eventSlave)) {
				r.push(`assfuck, with ${him} jerking against ${his} restraints every time you stroke into ${his} sore buttocks.`);
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(`throatfuck, with ${him} jerking against ${his} restraints every time you hilt yourself and slap ${his} ass.`);
				seX(eventSlave, "oral", V.PC, "penetrative");
			}
			r.push(`<span class="trust dec">${He} learns from the experience.</span>`);
			eventSlave.trust -= 5;
			return r;
		}

		function sentence() {
			r = [];
			r.push(`When ${he}`);
			if (canSee(eventSlave)) {
				r.push(`sees ${he}'s being taken to a sex booth,`);
			} else if (canHear(eventSlave)) {
				r.push(`hears the sounds of a public sex parlor,`);
			} else {
				r.push(`finally figures out ${his} destination,`);
			}
			r.push(`${he} begins to cry. ${He} begs`);
			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,`);
			} else {
				r.push(`through ${his} tears,`);
			}
			r.push(
				Spoken(eventSlave, `"Please, no, ${Master}, I'll be good —"`),
				`but is cut off when the machine closes around ${his} head. It will offer ${his}`
			);
			if (canDoAnal(eventSlave) && canDoVaginal(eventSlave)) {
				r.push(`ass and pussy`);
			} else if (canDoAnal(eventSlave)) {
				r.push(`ass`);
			} else {
				r.push(`pussy`);
			}
			r.push(`to anyone who pays for the rest of the week, and keep ${his} fed and cleaned. ${His} world will become nothing but silent, featureless darkness and dick. You earn some money off ${him}, and by the end of the night ${his}`);
			if (canDoAnal(eventSlave) && canDoVaginal(eventSlave)) {
				r.push(`holes get`);
			} else {
				r.push(`hole gets`);
			}
			if ((canDoAnal(eventSlave) && eventSlave.anus === 0) || (canDoVaginal(eventSlave) && eventSlave.vagina === 0)) {
				r.push(`well stretched.`);
			} else {
				r.push(`<span class="lime">well stretched.</span>`);
			}
			r.push(`<span class="devotion inc">${He} learns from the experience.</span>`);
			if (canDoAnal(eventSlave) && canDoVaginal(eventSlave)) {
				if (eventSlave.vagina === 0 && eventSlave.anus === 0) {
					r.push(`<span class="virginity loss">${He}'s lost both ${his} virginity and anal cherry.</span>`);
				} else if (eventSlave.vagina === 0) {
					r.push(`<span class="virginity loss">${He}'s lost ${his} virginity.</span>`);
				} else if (eventSlave.anus === 0) {
					r.push(`<span class="virginity loss"> ${He}'s lost ${his} anal cherry.</span>`);
				}
				eventSlave.vagina++;
				eventSlave.anus++;
				seX(eventSlave, "vaginal", "public", "penetrative", 10);
				seX(eventSlave, "anal", "public", "penetrative", 10);
				if (eventSlave.eggType === "human" && canGetPregnant(eventSlave)) {
					r.push(knockMeUp(eventSlave, 25, 2, -2));
				}
			} else if (canDoAnal(eventSlave)) {
				if (eventSlave.anus === 0) {
					r.push(`<span class="virginity loss"> ${He}'s lost ${his} anal cherry.</span>`);
				}
				eventSlave.anus++;
				seX(eventSlave, "anal", "public", "penetrative", 5);
				if (eventSlave.eggType === "human" && canGetPregnant(eventSlave)) {
					r.push(knockMeUp(eventSlave, 50, 1, -2));
				}
			} else {
				if (eventSlave.vagina === 0) {
					r.push(`<span class="virginity loss">${He}'s lost ${his} virginity.</span>`);
				}
				eventSlave.vagina++;
				seX(eventSlave, "vaginal", "public", "penetrative", 20);
				if (eventSlave.eggType === "human" && canGetPregnant(eventSlave)) {
					r.push(knockMeUp(eventSlave, 50, 0, -2));
				}
			}
			eventSlave.devotion += 4;
			cashX(50, "event", eventSlave);
			return r;
		}

		function off() {
			eventSlave.devotion -= 5;
			return `${He} skips away happily and spends the rest of the day lounging around. ${His} obedience to you <span class="devotion dec">has decreased.</span>`;
		}
	}
};

repo_name: CloudyCoffee/fc

license: mit


code:
App.Events.RESSWetDreams = class RESSWetDreams extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.seeAge === 1,
		];
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				(s) => s.fetish !== "mindbroken",
				hasAnyArms,
				hasAnyLegs,
				(s) => s.actualAge < 18,
				(s) => s.devotion > 20,
				canPenetrate,
				(s) => s.balls > 0,
				(s) => s.pubertyXY === 0,
				(s) => (s.physicalAge + s.birthWeek / 52 >= s.pubertyAgeXY - 0.5),

			]
		];
	}

	get weight() {
		return 10;
	}

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

		App.Events.drawEventArt(node, slave);
		App.Events.addParagraph(node, [
			App.UI.DOM.slaveDescriptionDialog(slave),
			`appears in the door of your office early in the morning, hesitating before stepping in. You question why ${he} has come to see you and ${he} gingerly approaches your desk.`
		]);

		if (canTalk(slave)) {
			r.push(
				Spoken(slave, `"I'm sorry, ${Master},"`),
				`${he} ${say}s apologetically.`,
				Spoken(slave, `"I keep wetting my bed at night, and it feels so good too."`)
			);
		} else {
			r.push(`${He} uses gestures to point to ${his} crotch, and explains that ${he} has accidentally started wetting ${his} bed.`);
		}
		r.push(`You check ${his} records for any potential health issues that could be causing this annoyance when it dawns on you. ${slave.slaveName} is likely becoming potent, and now is the perfect time to cement ${his} sexuality.`);
		slave.pubertyXY = 1;
		App.Events.addParagraph(node, r);

		const choices = [];
		choices.push(new App.Events.Result(`Explain ${he}'s just growing up`, justGrowing));
		choices.push(new App.Events.Result(`Teach ${him} ${his} place`, teachHisPlace, (slave.vagina === 0) ? `This option will take ${his} virginity` : null));
		if (V.PC.vagina > 0) {
			choices.push(new App.Events.Result(`Let me teach you how to use it`, howToUse, `This option will penetrate you`));
		}
		choices.push(new App.Events.Result(`Tell ${him} it doesn't matter, ${he} won't be using it`, noMatter, (slave.anus === 0) ? `This option will take ${his} anal virginity` : null));
		if (V.seeExtreme === 1 && slave.indentureRestrictions <= 0) {
			choices.push(new App.Events.Result(`Geld ${him} to render ${him} impotent again`, geld));
		}

		App.Events.addResponses(node, choices);

		function justGrowing() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You tell ${him} that ${his} body is preparing to be able to impregnate girls, and that what happens at night happens to all boys. Though as a slave, ${he} should consider ${himself} lucky to be allowed to keep ${his} male genitalia.`);
			if (canTalk(slave)) {
				r.push(
					Spoken(slave, `"I-I can get girls pregnant now? ${Master}, that m-means I'll have to be more careful."`),
					`${He} trails off.`
				);
			} else {
				r.push(`${He} brings ${his} hands to ${his} growing erection, a bubble of precum forming on its tip. ${He} fondles ${himself} as ${he} ponders ${his} new potency.`);
			}
			r.push(`You tell ${him} to keep ${his} dick in check or risk losing it, before continuing to read off the other various changes that will occur in ${him}. ${slave.slaveName} appreciates you taking the time to explain ${his} developing body.`);
			slave.trust += 5;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function teachHisPlace() {
			const frag = new DocumentFragment();
			let r = [];
			if (V.PC.dick === 0) {
				r.push(`You tell ${him} that ${he} is just becoming a potent ${woman}, and as such, ${he} will need to learn that you are the dominant force in ${his} life.`);
				if (canTalk(slave)) {
					r.push(Spoken(slave, `"What does that mean, ${Master}?"`));
				} else {
					r.push(`${His} expression shifts to confusion.`);
				}
				r.push(`You quickly approach and catch ${him}, forcing ${his}`);
				if (slave.belly >= 1500) {
					if (slave.bellyPreg >= 1500) {
						r.push(`gravid`);
					} else {
						r.push(`distended`);
					}
				}
				r.push(`body face-up onto the couch. ${He}`);
				if (canSee(slave)) {
					r.push(`watches you carefully`);
				} else if (canHear(slave)) {
					r.push(`listens to your movements`);
				} else {
					r.push(`waits with trepidation`);
				}
				r.push(`as you size up ${his} fully erect`);
				if (slave.dick === 1) {
					r.push(`tiny dick.`);
				} else if (slave.dick === 2) {
					r.push(`cute dick.`);
				} else if (slave.dick === 3) {
					r.push(`dick.`);
				} else if (slave.dick === 4) {
					r.push(`big dick.`);
				} else if (slave.dick === 5) {
					r.push(`impressive dick.`);
				} else if (slave.dick === 6) {
					r.push(`huge dick.`);
				} else if (slave.dick === 7) {
					r.push(`gigantic dick`);
				} else if (slave.dick === 8) {
					r.push(`titanic dick`);
				} else if (slave.dick === 9) {
					r.push(`absurd dick`);
				} else if (slave.dick === 10) {
					r.push(`inhuman dick`);
				} else {
					r.push(`hypertrophied dick`);
				}
				r.push(`You push ${him} back down as you straddle ${his}`);
				if (slave.belly >= 1500) {
					r.push(belly);
					if (slave.bellyPreg >= 1500) {
						r.push(`pregnant`);
					}
					r.push(`belly`);
				} else if (slave.boobs > 2000) {
					r.push(`huge tits`);
				} else {
					r.push(`chest`);
				}
				r.push(`planting your moistening pussy over the ${girl}'s face. You lean forward, teasing ${his} twitching cock, as you grind against ${his} face. As ${he} begins to moan with lust, you quickly bind the base of ${his} penis, denying ${his} release. You grind your cunt into ${his} face, telling ${him} that YOU are the one who'll be orgasming here, not ${him}. Only once you have taught ${him} ${his} place by soaking ${his} face in your cum do you release ${his} dick and lean back to avoid the coming blast. Just undoing the binding is enough to set ${him} over the edge, coating ${his}`);
				if (slave.bellyPreg >= 1500) {
					r.push(`pregnancy`);
				} else {
					r.push(`belly`);
				}
				r.push(`in ${his} virile sperm. You turn around and order the exhausted ${girl} to clean ${himself} up and go back to ${his} assignment; ${he} complies meekly, understanding that having a potent penis is meaningless in ${his} position.`);
				if (slave.fetish === "none") { // TODO: was coral, should probably be fetish gain.
					r.push(`The next time ${he} walks past your office, you can't help notice the growing erection ${he} carries. <span class="fetish dec"> Your dominating display has left ${him} craving domination.</span>`);
					slave.fetish = "submissive";
					slave.fetishStrength = 10;
				}
				slave.devotion += 5;
			} else {
				r.push(`You tell ${him} that ${he} is just becoming a potent ${woman}, and as such, ${he} will need to learn that you are the dominant force in ${his} life.`);
				if (canTalk(slave)) {
					r.push(Spoken(slave, `"What does that mean, ${Master}?"`));
				} else {
					r.push(`${His} expression shifts to confusion.`);
				}
				r.push(`You quickly approach and catch ${him}, forcing ${his}`);
				if (slave.belly >= 1500) {
					if (slave.bellyPreg >= 1500) {
						r.push(`gravid`);
					} else {
						r.push(`distended`);
					}
				}
				r.push(`body face-down onto the couch${(slave.belly >= 100000) ? ` as best you can` : ``}. ${He}`);
				if (canSee(slave)) {
					r.push(`watches you carefully`);
				} else {
					r.push(`listens to your movements`);
				}
				r.push(`as you size up ${his} fully erect`);
				if (slave.dick === 1) {
					r.push(`tiny dick.`);
				} else if (slave.dick === 2) {
					r.push(`cute dick.`);
				} else if (slave.dick === 3) {
					r.push(`dick.`);
				} else if (slave.dick === 4) {
					r.push(`big dick.`);
				} else if (slave.dick === 5) {
					r.push(`impressive dick.`);
				} else if (slave.dick === 6) {
					r.push(`huge dick.`);
				} else if (slave.dick === 7) {
					r.push(`gigantic dick`);
				} else if (slave.dick === 8) {
					r.push(`titanic dick`);
				} else if (slave.dick === 9) {
					r.push(`absurd dick`);
				} else if (slave.dick === 10) {
					r.push(`inhuman dick`);
				} else {
					r.push(`hypertrophied dick`);
				}
				r.push(`You push ${his} face into the cushions as you mount ${his}`);
				if (slave.butt > 6) {
					r.push(`ridiculous`);
				} else if (slave.butt > 5) {
					r.push(`gigantic`);
				} else if (slave.butt > 4) {
					r.push(`enormous`);
				} else if (slave.butt > 3) {
					r.push(`huge`);
				} else if (slave.butt > 2) {
					r.push(`big`);
				} else if (slave.butt > 1) {
					r.push(`plump`);
				} else if (slave.butt > 0) {
					r.push(`small`);
				} else {
					r.push(`flat`);
				}
				r.push(`butt, sinking your cock deep into ${his}`);
				if (slave.anus === 0) {
					r.push(`virgin`);
				}
				r.push(`asspussy. You lean forward, running your hands across ${his} nipples`);
				if (slave.belly >= 5000) {
					r.push(`and ${belly}`);
					if (slave.belly >= 3000) {
						r.push(`pregnant`);
					}
					r.push(`belly`);
				}
				r.push(`as you move to tease ${his} stiff prick. Between your dick in ${his} ass and your hand on ${his} cock, ${he} rapidly approaches ${his} peak. Quickly, you bind the base of ${his} penis, denying ${his} release and eliciting a long moan from the pent-up ${girl}. You begin thrusting hard, telling ${him} that YOU are the one who'll be orgasming here, not ${him}. Only once you have taught ${him} ${his} place by filling ${his} asspussy with your cum do you allow ${his} release. Just undoing the binding is enough to set ${him} over the edge, coating the cushions`);
				if (slave.belly >= 5000) {
					r.push(`and the bottom of ${his} ${belly}`);
					if (slave.belly >= 3000) {
						r.push(`pregnant`);
					}
					r.push(`belly`);
				}
				r.push(`in ${his} virile sperm. You dismount and order the exhausted ${girl} to clean ${himself} and the couch up before going back to ${his} assignment; ${he} complies meekly, understanding that having a potent penis is meaningless in ${his} position.`);
				if (slave.fetish === "none") {
					r.push(`The next time ${he} walks past your office, you can't help notice the growing erection ${he} carries. <span class="fetish gain">Your dominating display has left ${him} craving domination.</span>`);
					slave.fetish = "submissive";
					slave.fetishStrength = 10;
				}
				slave.devotion += 5;
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function howToUse() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You tell ${him} that ${he} is just becoming a potent ${woman}, and as such, ${he} will need to learn how to please ${his} partners.`);
			if (canTalk(slave)) {
				r.push(Spoken(slave, `"What's that mean, ${Master}?"`));
			} else {
				r.push(`${His} expression shifts to confusion.`);
			}
			r.push(`You quickly approach and catch ${him}, forcing ${his}`);
			if (slave.belly >= 1500) {
				if (slave.bellyPreg >= 1500) {
					r.push(`gravid`);
				} else {
					r.push(`distended`);
				}
			}
			r.push(`body face-up onto the couch. ${He}`);
			if (canSee(slave)) {
				r.push(`watches you carefully`);
			} else if (canHear(slave)) {
				r.push(`listens to your movements`);
			} else {
				r.push(`waits with trepidation`);
			}
			r.push(`as you size up ${his} fully erect`);
			if (slave.dick === 1) {
				r.push(`tiny dick.`);
			} else if (slave.dick === 2) {
				r.push(`cute dick.`);
			} else if (slave.dick === 3) {
				r.push(`dick.`);
			} else if (slave.dick === 4) {
				r.push(`big dick.`);
			} else if (slave.dick === 5) {
				r.push(`impressive dick.`);
			} else if (slave.dick === 6) {
				r.push(`huge dick.`);
			} else if (slave.dick === 7) {
				r.push(`gigantic dick.`);
			} else if (slave.dick === 8) {
				r.push(`titanic dick.`);
			} else if (slave.dick === 9) {
				r.push(`absurd dick.`);
			} else if (slave.dick === 10) {
				r.push(`inhuman dick.`);
			} else {
				r.push(`hypertrophied dick.`);
			}
			r.push(`You push ${him} back down as you straddle ${his} cock, lining it up before lowering`);
			if (V.PC.belly >= 1500) {
				r.push(`your pregnant body until ${he} delightfully penetrates you.`);
			} else {
				r.push(`yourself onto ${his} needy prick.`);
			}
			r.push(`You slowly ride ${his} dick, instructing ${him} the proper way to thrust into you and how to adequately support your weight. Once ${he} gets the hand of things, you dismount and lie down on the couch, legs spread, beckoning ${him} into you. ${He} gingerly inserts ${his} cock`);
			if (slave.belly >= 100000) {
				r.push(`while you do your best to manage ${his} ${belly} stomach`);
			}
			r.push(`and begins thrusting, slowly at first, before getting the hang of things and speeding up${(V.PC.dick !== 0)? `, your own neglected dick bobbing along to ${his} thrusts` : ``}. As soon as you feel ${his} beginning to tense you`);
			if (V.PC.pregKnown === 1) {
				r.push(`tell ${him} it's safe to cum in you, you're already pregnant.`);
			} else {
				r.push(`order ${him} to pull out.`);
			}
			r.push(`The poor ${girl} is so caught up in ${his} lust, ${he} can't stop thrusting. Before you can rectify this, ${he} pushes you over the edge and gushes deep into you as you climax`);
			if (V.PC.dick !== 0) {
				r.push(`and spray your own cum`);
				if (V.PC.belly >= 5000 && slave.belly >= 5000) {
					r.push(`into the cramped space between your swollen bodies.`);
				} else if (slave.belly >= 100000) {
					r.push(`across your belly and the underside of ${hers}.`);
				} else {
					r.push(`across ${his} chest.`);
				}
			}
			r.push(`${He} gingerly pulls ${himself} from you, apologizes meekly for losing control, and snuggles up next to you. Cumming in ${his} ${getWrittenTitle(slave)}'s pussy as ${his} first time builds a special bond with you.`);

			if (V.PC.preg === 0 && V.PC.pregWeek === 0) {
				r.push(`You aren't on contraceptives right now; ${his} first time may be more fruitful than ${he} realizes.`);
			}
			slave.devotion += 10;
			slave.trust += 20;
			seX(slave, "penetrative", V.PC, "vaginal");
			if (canImpreg(V.PC, slave)) {
				r.push(knockMeUp(V.PC, 60, 0, slave.ID));
			}

			App.Events.addParagraph(frag, r);
			return frag;
		}

		function noMatter() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`In one swift motion, one pull out a chastity cage and lock it onto ${him}. ${He} gasps as ${he} feels it hug close to ${his} struggling erection. You explain that ${he} has just become potent, and thus, will be restricted until you feel differently.`);
			if (canTalk(slave)) {
				r.push(Spoken(slave, `"You don't want me to use my penis, ${Master}?"`));
			} else {
				r.push(`${He} rubs a hand across ${his} caged dick.`);
			}
			r.push(`You bring ${him} over to the couch, set ${him} on your lap, and teasingly call ${him} a buttslut. Every so often you graze a finger around ${his} chastity cage, torturing ${his} dick and balls, but you only make it the center of attention once the poor over-aroused slave`);
			if (canTalk(slave)) {
				r.push(
					`begs,`,
					Spoken(slave, `"I can't take it any more, ${Master}! Please fuck me!"`)
				);
			} else {
				r.push(`begins to use piteous gestures to beg you abjectly to penetrate ${him}.`);
			}
			r.push(`You snicker, but remind ${him} that ${he} has no say in ${his} release. You line up and insert your`);
			if (V.PC.dick === 0) {
				r.push(`strap-on`);
			} else {
				r.push(`cock`);
			}
			r.push(`up ${his} ass and begin slowly fucking ${him}, making sure to stimulate ${his} prostate. When ${he} finally orgasms`);
			if (V.PC.dick === 0) {
				r.push(`${his} unabashed enjoyment`);
			} else {
				r.push(`the strength of ${his} spasming sphincter`);
			}
			r.push(`sends you over as well. ${He}'s left in a confused haze; ${his} body tells ${him} to fuck, but you tell ${him} to get fucked. ${He} sides with your decision and vows to be the one taking dick for you.`);
			if (slave.fetish === "none") {
				r.push(`<span class="fetish dec">Overcoming ${his} urges to become a father via anal cause ${him} to become a buttslut.</span>`);
				slave.fetish = "buttslut";
				slave.fetishStrength = 10;
			}
			slave.devotion += 5;
			slave.chastityPenis = 1;
			r.push(VCheck.Anal(slave, 1));

			App.Events.addParagraph(frag, r);
			return frag;
		}

		function geld() {
			slave.balls = 0;
			slave.trust -= 20;
			surgeryDamage(slave, 10);
			return `You bluntly tell ${him} ${he} is becoming potent, and that is something you can't allow to roam unchecked amongst your fertile slaves. You drag ${him} to the remote surgery and strap ${him} face-down with ${his} legs spread${(slave.belly >= 5000) ? `${his} ${belly} rounded belly forcing ${his} rear into the air` : ``}. ${He} doesn't understand what's happening, since the anesthetics totally deprive ${him} of any sensation. ${He}'s so drugged and drowsy with surgical recovery that it takes a while for ${him} to figure out what's happened. When ${he} does, ${his} poor mind scarcely processes the horror of what's happened. ${He} numbly carries on, terrified.`;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => (s.assignment === Job.QUARTER || s.assignment === Job.HOUSE),
				s => s.devotion <= 50,
				hasAnyArms,
				canWalk
			]
		];
	}

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

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

		let r = [];
		r.push(`${V.arcologies[0].name} is well fitted with automated cleaning systems. However,`);
		r.push(contextualIntro(V.PC, eventSlave, true));
		r.push(`is acting as a servant to your other slaves, so whenever ${he} has nothing else to do the cleaners are deactivated and ${he} is made to clean by hand. After all, there is no sense in leaving ${him} idle, when ${he} could be scrubbing floors.`);
		App.Events.addParagraph(node, r);

		r = [];
		r.push(`Which, incidentally, is what ${he}'s doing now. ${He} has standing orders to change into a sturdy apron when doing such work, which ${he} is not pleased to follow, since the apron has no back at`);
		if (eventSlave.belly >= 100000) {
			r.push(`all, and with ${his} ${belly}`);
			if (eventSlave.bellyPreg > 0) {
				r.push(`pregnancy,`);
			} else {
				r.push(`belly,`);
			}
			r.push(`absolutely no side coverage either.`);
		} else if (eventSlave.weight > 190) {
			r.push(`all, and with ${his} hanging gut, no side coverage either.`);
		} else if (eventSlave.belly >= 10000) {
			r.push(`all, and with ${his}`);
			if (eventSlave.bellyPreg >= 8000) {
				r.push(`advanced pregnancy`);
			} else if (eventSlave.bellyImplant >= 8000) {
				r.push(`${belly} belly`);
			}
			r.push(r.pop() + ",");
			r.push(`no side coverage either.`);
		} else if (eventSlave.weight > 130) {
			r.push(`all, and with ${his} gut, no side coverage either.`);
		} else if (eventSlave.weight > 95) {
			r.push(`all, and with ${his} fat belly, no side coverage either.`);
		} else if (eventSlave.belly >= 5000) {
			r.push(`all, and with ${his}`);
			if (eventSlave.bellyPreg >= 3000) {
				r.push(`growing pregnancy`);
			} else if (eventSlave.bellyImplant >= 3000) {
				r.push(`bulging belly`);
			}
			r.push(r.pop() + ",");
			r.push(`no side coverage either.`);
		} else {
			r.push(`all.`);
		}
		r.push(`${He}'s working diligently on the floor, though, down on`);
		if (hasAllLimbs(eventSlave)) {
			r.push(`all fours,`);
		} else {
			r.push(`the ground,`);
		}
		if (eventSlave.belly >= 150000) {
			r.push(`struggling to work with ${his}`);
			if (eventSlave.bellyPreg >= 8000) {
				r.push(`pregnancy`);
			} else if (eventSlave.bellyImplant >= 8000) {
				r.push(`middle`);
			}
			r.push(`forcing ${him} off the ground, desperately trying to reach the floor with ${his} scrub brush.`);
		} else if (eventSlave.belly >= 100000) {
			r.push(his);
			if (eventSlave.bellyPreg >= 8000) {
				r.push(`pregnancy`);
			} else if (eventSlave.bellyImplant >= 8000) {
				r.push(`middle`);
			}
			r.push(`pushing uncomfortably into the floor, trying to use`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} whole arm`);
			}
			r.push(`to work a scrub-brush back and forth.`);
		} else if (eventSlave.weight > 190) {
			r.push(`${his} gut dragging along under ${him}, using`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} whole arm`);
			}
			r.push(`to work a scrub-brush back and forth.`);
		} else if (eventSlave.belly >= 10000) {
			r.push(his);
			if (eventSlave.bellyPreg >= 8000) {
				r.push(`pregnancy`);
			} else if (eventSlave.bellyImplant >= 8000) {
				r.push(`distended middle`);
			}
			r.push(`barely off the ground, using both hands to work a scrub-brush back and forth.`);
		} else if (eventSlave.weight > 130) {
			r.push(`fours, ${his} gut barely off the ground, using`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} whole arm`);
			}
			r.push(`to work a scrub-brush back and forth.`);
		} else if (eventSlave.weight > 95) {
			r.push(`${his} fat belly nearly sagging to the ground, using`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} whole arm`);
			}
			r.push(`to work a scrub-brush back and forth.`);
		} else {
			r.push(`using`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} whole arm`);
			}
			r.push(`to work a scrub-brush back and forth.`);
		}
		r.push(`${His} bare ass bobs back and forth as though ${he} were doing it doggy style with an invisible man.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			canDoAnal(eventSlave)
				? new App.Events.Result(`Use ${his} butt to help ${him} scrub`, scrub, eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null)
				: new App.Events.Result(),
			canDoVaginal(eventSlave)
				? new App.Events.Result(`Avail yourself to ${his} pussy`, pussy, eventSlave.vagina === 0 ? `This option will take ${his} virginity` : null)
				: new App.Events.Result(),
			canDoAnal(eventSlave) || canDoVaginal(eventSlave)
				? new App.Events.Result(`Give ${him} a bigger mess to deal with`, mess, virginityWarning())
				: new App.Events.Result(),
			new App.Events.Result(`Enjoy the view`, view),
		]);

		function responseIntro(){
			r = [];
			r.push(`In accordance with the rules, ${he}`);
			if (eventSlave.weight > 190 || eventSlave.belly >= 100000) {
				r.push(`struggles`);
			} else {
				r.push(`scrambles hurriedly`);
			}
			r.push(`to ${his} feet when you enter and asks`);
			if (!canTalk(eventSlave)) {
				r.push(`in gestures how ${he} can serve you.`);
			} else {
				if (eventSlave.lips > 70) {
					r.push(`meekly through ${his} massive dick-sucking lips,`);
				} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
					r.push(`meekly through ${his} inconvenient oral piercings,`);
				} else {
					r.push(`meekly,`);
				}
				r.push(Spoken(eventSlave, `"${Master}, how may I serve you?"`));
			}
			return r;
		}

		function scrub() {
			r = [];
			r.push(...responseIntro());
			r.push(`You instruct ${him} to go back to what ${he} was doing.`);
			if (eventSlave.belly >= 150000) {
				r.push(`${He} leans back over ${his} ${belly} stomach,`);
			} else {
				r.push(`${He} gets back to ${his} ${eventSlave.skin} knees,`);
			}
			r.push(`puzzled, and then gasps when ${he} finds`);
			if (V.PC.dick === 0) {
				r.push(`your fingers`);
			} else {
				r.push(`your cockhead`);
			}
			r.push(`pressing against ${his} rosebud. You instruct ${his} imperiously to get on with it, and ${he} soon understands your intent. ${He} scrubs back and forth, panting and moaning, as you buttfuck ${him} in time with ${his}`);
			if (V.PC.dick === 0) {
				r.push(`labors, using your other hand to look after yourself`);
			} else if (V.PC.vagina !== -1) {
				r.push(`labors, using your other hand to schlick your pussy while you pound ${him}`);
			} else {
				r.push("labors.");
			}
			r.push(`You even carefully scoot along with ${him} when ${he} needs to reach new spots. By the time ${he}'s done ${his}`);
			if (hasBothArms(eventSlave)) {
				r.push(`arms`);
			} else {
				r.push(`arm`);
			}
			r.push(`and ${his} anus are very tired. ${His} submission to you <span class="devotion inc">has increased.</span>`);
			r.push(VCheck.Anal(eventSlave, 1));
			eventSlave.devotion += 4;
			return r;
		}

		function pussy() {
			r = [];
			r.push(...responseIntro());
			r.push(`You instruct ${him} to go back to what ${he} was doing.`);
			if (eventSlave.belly >= 150000) {
				r.push(`${He} leans back over ${his} ${belly} stomach,`);
			} else {
				r.push(`${He} gets back to ${his} ${eventSlave.skin} knees,`);
			}
			r.push(`puzzled, and then gasps when ${he} finds`);
			if (V.PC.dick === 0) {
				r.push(`your fingers`);
			} else {
				r.push(`your cockhead`);
			}
			r.push(`tracing ${his} pussy lips. You instruct ${him} imperiously to get on with it, and ${he} soon understands your intent. ${He} scrubs back and forth, panting and moaning, as you fuck ${him} in time with ${his}`);
			if (V.PC.dick === 0) {
				r.push(`labors, using your other hand to look after yourself`);
			} else if (V.PC.vagina !== -1) {
				r.push(`labors, using your other hand to schlick your pussy while you pound ${him}`);
			} else {
				r.push(`labors.`);
			}
			r.push(`You even carefully scoot along with ${him} when ${he} needs to reach new spots. By the time ${he}'s done ${his}`);
			if (hasBothArms(eventSlave)) {
				r.push(`arms are`);
			} else {
				r.push(`arm is`);
			}
			r.push(`very tired and ${his}`);
			if (hasBothLegs(eventSlave)) {
				r.push(`legs are`);
			} else {
				r.push(`leg is`);
			}
			r.push(`struggling to hold ${him}. ${His} submission to you <span class="devotion inc">has increased.</span>`);
			r.push(VCheck.Vaginal(eventSlave, 1));
			eventSlave.devotion += 4;
			return r;
		}

		function mess() {
			// replace slave art
			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, eventSlave, "body oil");

			r = [];
			r.push(...responseIntro());
			r.push(`You instruct ${him} to strip off ${his} apron and lay ${his} ${eventSlave.skin} back against the ground. ${He} does, and you empty a bottle of lubricant across ${his} entire body. ${He} gasps from the cold fluid. You slide around on the floor with ${him}, playfully scrubbing ${his}`);
			if (V.seeRace === 1) {
				r.push(`${eventSlave.race}`);
			}
			r.push(`body around in the pool of lube, playing with ${his} wet breasts`);
			if (eventSlave.belly >= 5000) {
				r.push(r.pop() + ",");
				r.push(`${his} rounded`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnancy,`);
				} else {
					r.push(`stomach,`);
				}
			}
			r.push(`and ${his} lubricated thighs before`);
			if (V.PC.dick === 0) {
				r.push(`wrestling the slick slave onto ${his} back so you can ride ${his} face while reaching down to spread ${his} legs and molest ${his}`);
				if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
					r.push(`pussy and ass.`);
				} else if (canDoVaginal(eventSlave)) {
					r.push(`pussy.`);
				} else {
					r.push(`ass.`);
				}
			} else {
				r.push(`sinking your cock into ${his}`);
				if (!canDoVaginal(eventSlave)) {
					r.push(`now-slick butthole`);
				} else {
					r.push(`now-slick pussy`);
					if (canDoAnal(eventSlave)) {
						r.push(`and then ${his} relaxing butthole`);
					}
				}
				if (V.PC.vagina !== -1) {
					r.push(r.pop() + ",");
					r.push(`followed by some grinding to coat ${his} face in your pussyjuice`);
				}
				r.push(r.pop() + ".");
			}
			r.push(`${He} had fun, though, and ${his} <span class="trust inc">trust in you has increased.</span>`);
			r.push(VCheck.Both(eventSlave, 1));
			eventSlave.trust += 4;
			return r;
		}

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

		function view() {
			r = [];
			r.push(...responseIntro());
			r.push(`You instruct ${him} to return to work as you pull up a seat to enjoy the view of ${his}`);
			if (eventSlave.butt > 6) {
				r.push(`ridiculous`);
			} else if (eventSlave.butt > 5) {
				r.push(`gigantic`);
			} else if (eventSlave.butt > 4) {
				r.push(`enormous`);
			} else if (eventSlave.butt > 3) {
				r.push(`huge`);
			} else if (eventSlave.butt > 2) {
				r.push(`big`);
			} else if (eventSlave.butt > 1) {
				r.push(`plump`);
			} else if (eventSlave.butt > 0) {
				r.push(`small`);
			} else {
				r.push(`flat`);
			}
			r.push(`ass wiggling as ${he} cleans. It doesn't take long for the sight to leave you eager for some sexual attention, so you call the uncomfortable slave over to service you.`);
			if (!canTalk(eventSlave)) {
				r.push(`${He} begins to sign but is cut short by you`);
			} else {
				r.push(Spoken(eventSlave, `"${Master}, what would you —"`), `${he} begins to ${say} but is cut short by you gesturing to`);
			}
			if (V.PC.belly >= 10000) {
				r.push(`your swollen belly and commenting on how its ever growing surface could use a good polishing.`);
				if (eventSlave.fetish === "pregnancy") {
					if (eventSlave.fetishKnown === 1) {
						r.push(`${He} wastes no time in rushing over to your firm dome and bringing ${his} tongue to your navel. ${He} happily massages your middle with surprising gusto, becoming intensely aroused as your child`);
						if (V.PC.pregType > 1) {
							r.push(`ren begin`);
						} else {
							r.push(`begins`);
						}
						r.push(`to kick with excitement and even reaching orgasm just by being allowed to touch your belly. ${He} feels closer to ${his} lovely, gravid, owner after being permitted to shower attention on the thing ${he} loves most.`);
						eventSlave.trust += 5;
					} else {
						r.push(`${He} wastes no time in rushing over to your firm dome and bringing ${his} tongue to your navel. ${He} happily massages your middle with surprising gusto, becoming visibly aroused as your child`);
						if (V.PC.pregType > 1) {
							r.push(`ren begin`);
						} else {
							r.push(`begins`);
						}
						r.push(`to kick with excitement. Once ${he} finishes ${his} first lap and returns to your belly button, ${he} spasms with an intense orgasm. ${He} clearly adores pregnant women.`);
						eventSlave.fetishKnown = 1;
					}
				} else {
					r.push(`${He} does so diligently, making sure to not miss`);
					if (V.showInches === 2) {
						r.push(`an inch`);
					} else {
						r.push(`a centimeter`);
					}
					r.push(`while keeping your enjoyment above all else.`);
				}
			} else if (V.PC.dick !== 0) {
				r.push(`your erect dick and commenting on how it could use a good cleaning. ${He} carefully takes your cock into ${his} mouth, doing ${his} best to bring you to a quick orgasm so ${he} can escape your gaze. After downing your cum, ${he} attempts to pull back, but you hold ${him} down, clearly ${he} has more work to do here.`);
				seX(eventSlave, "oral", V.PC, "penetrative");
			} else if (V.PC.vagina !== -1) {
				r.push(`your soaked pussy and commenting on how someone needs to clean up after it, preferably with their tongue. ${He} carefully ${his} tongue to your clit, doing ${his} best to bring you to a quick orgasm so ${he} can escape your gaze. After bring you to a rather unsatisfying climax, ${he} attempts to pull back, but you grab ${him} and force ${him} to lick the depths of your pussy.`);
				seX(eventSlave, "oral", V.PC, "vaginal");
			}
			r.push(`By the time you are satisfied with ${his} efforts, ${he} <span class="devotion inc">has become more submissive to you.</span>`);
			eventSlave.devotion += 4;
			return r;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.assignment === Job.PUBLIC,
				s => canDoAnal(s) || canDoVaginal(s),
				s => s.devotion > 50,
				s => s.fetish !== "mindbroken",
				hasAnyArms,
				canTalk,
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let t = [];

		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`is a real public servant. This morning, ${he} rose early, did ${his} chores, and looked after ${himself}.`);
		if (canWalk(eventSlave) || (canMove(eventSlave) && eventSlave.rules.mobility === "permissive")) {
			t.push(`${He} heads out`);
		} else {
			t.push(`${He}'s being escorted`);
		}
		t.push(`past your desk toward the arcology's lower floors to offer ${himself} freely to everyone ${he} meets.`);

		App.Events.addParagraph(node, t);
		t = [];
		t.push(`As ${he} goes, you notice that`);
		if (eventSlave.chastityPenis === 1) {
			t.push(`precum is starting to dribble out of ${his} chastity cage.`);
		} else if (eventSlave.dick > 0 && canAchieveErection(eventSlave)) {
			t.push(`${his} cock is so hard it's standing out, perfectly straight.`);
		} else if (eventSlave.dick > 0 && eventSlave.balls > 0 && !canAchieveErection(eventSlave)) {
			t.push(`${his} semi-hard cock is dribbling precum, a sure sign of a bitch who wants to be buttfucked.`);
		} else if (eventSlave.dick > 0 && !canAchieveErection(eventSlave)) {
			t.push(`${his} pathetically soft cock is streaming precum, a sure sign of a bitch who wants to be buttfucked.`);
		} else if (eventSlave.clit > 0) {
			t.push(`${his} big clit is obviously engorged.`);
		} else if (eventSlave.vaginaLube > 0) {
			t.push(`${his} pussy is already soaking wet.`);
		} else {
			t.push(`${his} cheeks are flushed and ${he}'s panting a little.`);
		}
		t.push(`Apparently, ${he} can't wait to`);
		if (eventSlave.fetish === "submissive") {
			t.push(`play the submissive.`);
		} else if (eventSlave.fetish === "humiliation") {
			t.push(`be publicly degraded.`);
		} else if (eventSlave.fetish === "masochist") {
			t.push(`be roughly handled.`);
		} else if (eventSlave.fetish === "dom") {
			t.push(`play the dom.`);
		} else if (eventSlave.fetish === "sadist") {
			t.push(`find a willing masochist.`);
		} else if (eventSlave.fetish === "pregnancy" && eventSlave.preg > eventSlave.pregData.normalBirth / 4) {
			t.push(`have ${his} pregnancy fondled.`);
		} else if (eventSlave.fetish === "pregnancy") {
			t.push(`pretend to get knocked up.`);
		} else if (eventSlave.fetish === "boobs") {
			t.push(`have ${his} tits fondled.`);
		} else if (eventSlave.fetish === "cumslut") {
			t.push(`gorge ${himself} on cum.`);
		} else if (eventSlave.fetish === "buttslut") {
			t.push(`spend all day getting pounded in the ass.`);
		} else if (eventSlave.attrXX > 65) {
			t.push(`enjoy all the women.`);
		} else if (eventSlave.attrXY > 65) {
			t.push(`enjoy all the men.`);
		} else {
			t.push(`be a complete slut.`);
		}
		t.push(`If you went with ${him}, you could certainly show off a little.`);

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

		App.Events.addResponses(node, [
			(canDoAnal(eventSlave))
				? new App.Events.Result(`Share ${his} body with the public`, share, virginityWarning())
				: new App.Events.Result(),
			new App.Events.Result(`Give ${him} some aftercare`, aftercare, virginityWarning()),
			new App.Events.Result(`Chat about ${his} day`, chat),
		]);

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

		function share() {
			let frag = document.createDocumentFragment();
			t = [];
			if (canWalk(eventSlave) || (canMove(eventSlave) && eventSlave.rules.mobility === "permissive")) {
				t.push(`${eventSlave.slaveName} is surprised to find you walking beside ${him}, but obediently falls in behind you as a proper slave should.`);
			} else if (canMove(eventSlave)) {
				t.push(`${eventSlave.slaveName} is surprised to find you swapping places with ${his} assistant to support ${his} weight.`);
			} else { // strength/height check here!
				t.push(`You scoop ${eventSlave.slaveName}'s ${isAmputee(eventSlave) ? "limbless" : "immobile"} form up and carry ${him} out.`);
			}
			t.push(`You take ${him} to a lovely open balcony and seat yourself on a bench surrounded by the lush greenery and flowing water of ${V.arcologies[0].name}'s food systems. You pull ${his} ass down onto your`);
			if (V.PC.dick === 0) {
				t.push(`strap-on`);
			} else {
				t.push(`rigid cock`);
			}
			t.push(`so ${he} can offer everything else to the public.`);
			if (V.PC.vagina !== -1 && V.PC.dick !== 0) {
				t.push(`They know not to presume to use the pussy located beneath your thrusting cock.`);
			}
			t.push(VCheck.Anal(eventSlave, 5));

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

			if (canDoVaginal(eventSlave)) {
				t.push(`For several hours, citizens come and go, most choosing to fuck ${his} wet and available pussy. You climax repeatedly from the`);
				if (V.PC.dick === 0) {
					t.push(`titillating nature of`);
				} else {
					t.push(`extra fullness of ${his} butt during`);
				}
				t.push(`double penetration, and by the time you're finished ${he}'s dripping ejaculate from both ${his} holes.`);
			} else if (eventSlave.belly >= 120000) {
				t.push(`Since`);
				if (eventSlave.bellyPreg >= 3000) {
					t.push(`${he}'s so enormously pregnant that ${his} ${belly} stomach blocks ${his} crotch`);
				} else {
					t.push(`${his} ${belly} stomach is so massive that is blocks ${his} crotch`);
				}
				t.push(`and you're wearing ${his} backdoor around your`);
				t.push(V.PC.dick === 0 ? "strap-on," : "cock,");
				t.push(`${his} mouth is all that's left. ${He} gives so many blowjobs by the time you're finished that ${his} face, hair, chest and belly are liberally spattered with cum.`);
			} else if (eventSlave.chastityVagina) {
				t.push(`Since ${he}'s wearing a chastity belt and you're wearing ${his} backdoor around your`);
				t.push(V.PC.dick === 0 ? "strap-on," : "cock,");
				t.push(`${his} mouth is all that's left. ${He} gives so many blowjobs by the time you're finished that ${his} face, hair, chest and`);
				if (eventSlave.belly >= 5000) {
					if (eventSlave.bellyPreg >= 3000) {
						t.push(`pregnant`);
					} else {
						t.push(belly);
					}
					t.push(`belly`);
				} else {
					t.push(`even stomach`);
				}
				t.push(`are liberally spattered with cum.`);
			} else {
				t.push(`With your cock pumping ${his} butt as much as you can manage with ${him} seated in your lap, ${his}`);
				if (eventSlave.dick !== 0 && eventSlave.belly >= 5000) {
					t.push(`dick flops up and down against the bottom of ${his} rounded stomach,`);
				} else if (eventSlave.dick !== 0) {
					t.push(`dick flops up and down,`);
				} else {
					t.push(`tiny front hole begins to glisten with the promise of a messy little orgasm,`);
				}
				t.push(`lewdly advertising ${his} sexual availability. ${He} gives so many blowjobs by the time you're finished that ${his} face, hair, chest and`);
				if (eventSlave.belly >= 5000) {
					if (eventSlave.bellyPreg >= 3000) {
						t.push(`pregnant`);
					} else {
						t.push(belly);
					}
					t.push(`belly`);
				} else {
					t.push(`even stomach`);
				}
				t.push(`are liberally spattered with cum.`);
			}
			t.push(`The public is sure to remember this spectacle; <span class="green">your reputation has increased.</span>`);
			repX(500, "event", eventSlave);
			if (canDoVaginal(eventSlave)) {
				seX(eventSlave, "vaginal", "public", "penetrative", 5);
				if (eventSlave.vagina === 0) {
					t.push(`They have also <span class="lime">broken in ${eventSlave.slaveName}'s virgin pussy.</span>`);
					eventSlave.vagina = 1;
				}
				if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
					t.push(knockMeUp(eventSlave, 10, 0, -2));
				}
			} else {
				seX(eventSlave, "oral", "public", "penetrative", 5);
			}
			App.Events.addParagraph(frag, t);
			t = [];
			return [frag];
		}

		function aftercare() {
			t = [];
			t.push(`${eventSlave.slaveName} returns many hours later. ${He} carefully took breaks for ${his} own safety,`);
			if (eventSlave.preg > eventSlave.pregData.normalBirth / 1.33) {
				t.push(`especially so given ${his} advanced pregnancy,`);
			}
			t.push(`and cleaned ${himself} periodically, so there isn't much evidence, but ${he}'s obviously bone tired. When you meet ${him} at the entrance to your penthouse ${he}'s surprised to`);
			t.push(canSee(eventSlave) ? "see" : "find");
			t.push(`you, but ${he} gives you a little smile anyway. You give ${him} a strong massage and put ${him} to bed. Afterward you turn to be about your business, but ${he} wordlessly offers ${himself} to you as you do.`);
			if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina === 0) {
					t.push(`${His} virgin pussy is certainly tempting.`);
				} else if (eventSlave.vagina === 1) {
					t.push(`${His} tight pussy is certainly tempting.`);
				} else if (eventSlave.vagina === 2) {
					t.push(`${His} soft pussy is certainly tempting.`);
				} else if (eventSlave.labia > 0) {
					t.push(`${His} generous petals are certainly tempting.`);
				} else if (eventSlave.clit > 0) {
					t.push(`${His} prominent clit is certainly eye-catching.`);
				} else if (eventSlave.vagina === -1) {
					t.push(`${His} relaxed anus is certainly inviting.`);
				} else {
					t.push(`${His} capacious pussy is certainly inviting.`);
				}
			} else {
				if (eventSlave.anus === 0) {
					t.push(`${His} virgin asshole is certainly tempting.`);
				} else if (eventSlave.anus === 1) {
					t.push(`${His} tight asshole is certainly tempting.`);
				} else if (eventSlave.anus === 2) {
					t.push(`${His} experienced asshole is certainly tempting.`);
				} else {
					t.push(`${His} capacious asshole is certainly inviting.`);
				}
			}
			t.push(`${He}'s sore, so you spoon`);
			if (eventSlave.belly >= 5000) {
				if (eventSlave.bellyPreg >= 3000) {
					t.push(`${his} gravid`);
				} else {
					t.push(`${his} rounded`);
				}
				t.push(`body`);
			} else {
				t.push(him);
			}
			t.push(`gently in bed, fucking ${him} slowly to sleep.`);
			if (canDoVaginal(eventSlave)) {
				t.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				t.push(VCheck.Anal(eventSlave, 1));
			}
			t.push(`${He} falls asleep with a serene expression on ${his} face. <span class="mediumaquamarine">${His} trust in you has increased.</span>`);
			eventSlave.trust += 4;
			return t;
		}

		function chat() {
			t = [];
			t.push(`${eventSlave.slaveName} returns many hours later. ${He}'s obviously bone tired. When you meet ${him} at the entrance to your penthouse ${he}'s surprised to`);
			t.push(canSee(eventSlave) ? "see" : "find");
			t.push(`you, but ${he} gives you a little smile anyway. You bring ${him} back to your office, and ${he}'s clearly expecting to get fucked, so ${he}'s surprised when you hand ${him} a hot beverage and sit down on the couch with ${him}. ${He} relaxes quickly and chats with you about ${his} day, gossiping about all the private doings of all the prominent citizens who fucked ${his}`);
			if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) {
				t.push(`cunt`);
			} else if (eventSlave.anus > 0 && canDoAnal(eventSlave)) {
				t.push(`asshole`);
			} else {
				t.push(`mouth`);
			}
			t.push(`today.`);
			if (eventSlave.intelligence + eventSlave.intelligenceImplant > 50) {
				t.push(`${He}'s witty and holds up ${his} end of the conversation without straying from ${his} role as a slave.`);
			} else if (eventSlave.intelligence + eventSlave.intelligenceImplant >= -15) {
				t.push(`${He} has a few juicy items to share, and even while gossiping, ${he}'s mindful of ${his} role as a slave.`);
			} else {
				t.push(`${He} may be an idiot, but ${his} babble is amusing enough.`);
			}
			t.push(`Time flies, and when you finally stand up to continue with your evening, ${he} thanks you prettily for listening to ${him}`);
			if (eventSlave.belly >= 10000) {
				t.push(`as you help ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					t.push(`pregnant`);
				} else {
					t.push(`heavy`);
				}
				t.push(`body off the couch`);
			}
			t.push(t.pop() + ".");
			t.push(`<span class="hotpink">${His} devotion to you has increased.</span>`);
			eventSlave.devotion += 4;
			return t;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => App.Utils.hasFamilySex(s) || s.rules.release.slaves === 1,
				s => s.clit > 2
			]
		];
	}

	execute(node) {
		/** @type {Array<App.Entity.SlaveState>} */
		let [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, His, his, him
		} = getPronouns(eventSlave);
		const {
			heU, hisU, himU, himselfU
		} = getNonlocalPronouns(0).appendSuffix('U');
		const PC = V.PC;

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

		let t = [];

		t.push(`Through the glass walls of your office, you see`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		t.push(`fucking another slave. Odd, since ${he} doesn't have a penis: it seems the other slave likes ${him} enough to try to make clitoral penetration work. ${eventSlave.slaveName}'s ${V.seeRace === 1 ? eventSlave.race : ""} clit is certainly big enough to make it possible. Since you gave ${him} orders that permit ${him} to fuck your other slaves, ${he}'s been having as much sex with them as ${he} can. The other slave is enjoying ${himselfU} even though the clit in ${hisU} pussy is a little disappointing compared to a real cock.`);
		App.Events.addParagraph(node, t);
		t = [];

		App.Events.addResponses(node, [
			new App.Events.Result("The slave taking it has a free anus, so use that", bottom),
			canDoAnal(eventSlave)
				? new App.Events.Result("The slave giving it has a free anus, so use that", topAnal, virginWarning("anal"))
				: new App.Events.Result(),
			canDoVaginal(eventSlave)
				? new App.Events.Result("The slave giving it has a free pussy, so use that", topVaginal, virginWarning("vaginal"))
				: new App.Events.Result()
		]);

		function bottom() {
			t = [];

			t.push(`Since the other slave is riding ${eventSlave.slaveName}'s huge clit, it's a trivial matter to ${PC.dick === 0 ? "don a strap-on," : ""} come up behind the fucking slaves, stop the other slave's riding for a moment, and insert yourself into ${hisU} anus. The other slave gasps as your ${PC.dick === 0 ? "strap-on" : "big dick"} complements the clit in ${hisU} pussy. The poor slave rides out the sexual storm as you and ${eventSlave.slaveName} fuck ${himU}. ${eventSlave.slaveName} flirts outrageously with you over the other slave's shoulder whenever ${he} can. ${He} has become more trusting of you.`);

			eventSlave.trust += 4;
			seX(eventSlave, "penetrative", "slaves", "anal");
			return t;
		}

		function topAnal() {
			t = [];

			t.push(`Since ${eventSlave.slaveName} is on top, it's a trivial matter to ${PC.dick === 0 ? "don a strap-on," : ""} come up behind the fucking slaves, stop ${his} thrusting for a moment, and insert yourself into ${his} anus.`);
			if (eventSlave.fetish === "buttslut" && eventSlave.fetishKnown === 1) {
				t.push(`${He} shivers with delight as ${he} feels ${his} anal ring stretch to accommodate your ${PC.dick === 0 ? "strap-on" : "dick"}.`);
				eventSlave.devotion += 1;
			}
			t.push(VCheck.Anal(eventSlave, 1));
			t.push(`Fucking a slave with ${eventSlave.prostate > 0 ? "prostate" : ""} stimulation from your ${PC.dick === 0 ? "phallus" : "cock"} in ${his} ass makes ${him} cum with indecent speed. You let ${him} slide down so ${he} can finish the other slave with ${his} mouth while you continue using ${his} anus. The other slave definitely enjoys ${eventSlave.slaveName}'s moaning into ${hisU} pussy as you use ${eventSlave.slaveName}'s ass. The hard buttfucking ${eventSlave.slaveName} is getting keeps ${his} clit hard all the way through. ${His} submission to you has increased.`);

			eventSlave.devotion += 4;
			seX(eventSlave, "penetrative", "slaves", "anal");
			return t;
		}

		function topVaginal() {
			t = [];

			t.push(`Since ${eventSlave.slaveName} is on top, it's a trivial matter to< ${PC.dick === 0 ? "don a strap-on," : ""} come up behind the fucking slaves, stop ${his} thrusting for a moment, and insert yourself into ${his} pussy. ${He} obediently stops fucking so you can maneuver into ${him}.`);
			t.push(VCheck.Vaginal(eventSlave, 1));
			t.push(`Having a ${PC.dick === 0 ? "strap-on" : "dick"} in ${his} pussy reduces ${his} ability to use ${his} engorged clit like a penis a little, so the slave beneath ${him} helps ${his} penetration as much as ${heU} can. It's not the most convenient of fucks, but that's to be expected when a ${properMaster()} and two slaves successfully have two separate instances of vaginal intercourse running at once. ${His} orgasm is general and intense. ${His} devotion to you has increased.`);

			eventSlave.devotion += 4;
			seX(eventSlave, "penetrative", "slaves", "vaginal");
			return t;
		}

		function virginWarning(type) {
			if (type === "anal" && eventSlave.anus === 0) {
				return `This option will take ${his} anal virginity`;
			} else if (type === "vaginal" && eventSlave.vagina === 0) {
				return `This option will take ${his} vaginal virginity`;
			}
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				hasAnyArms,
				hasAnyLegs,
				canPenetrate,
				s => App.Utils.hasFamilySex(s) || s.rules.release.slaves === 1
			]
		];
	}

	execute(node) {
		/** @type {Array<App.Entity.SlaveState>} */
		let [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, His, his, him
		} = getPronouns(eventSlave);
		const {
			heU, hisU, himU, himselfU
		} = getNonlocalPronouns(0).appendSuffix('U');
		const PC = V.PC;

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

		let t = [];

		t.push(`Through the glass walls of your office, you see`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		t.push(`fucking another slave with ${his}`);
		if (eventSlave.dick <= 2) {
			t.push(`small penis.`);
		} else if (eventSlave.dick <= 4) {
			t.push(`long cock.`);
		} else if (eventSlave.dick > 4) {
			t.push(`huge, horse-like phallus.`);
		}
		t.push(`Since you gave ${him} orders that permit ${him} to fuck your other slaves, ${he}'s been fucking them whenever ${he} can. The other slave is`);
		if (eventSlave.dick <= 2) {
			t.push(`enjoying ${himselfU} even though the ${V.seeRace === 1 ? eventSlave.race : ""} dick in ${hisU} pussy is a little disappointing.`);
		} else if (eventSlave.dick <= 4) {
			t.push(`enjoying the sex.`);
		} else {
			t.push(`enjoying the big ${V.seeRace === 1 ? eventSlave.race : ""} dick, even if ${heU} does wince from time to time.`);
		}
		if (eventSlave.scrotum > 0) {
			if (eventSlave.balls > 3) {
				t.push(`As ${eventSlave.slaveName} pounds, ${his} big balls slap against ${his} partner.`);
			} else if (eventSlave.balls > 1) {
				t.push(`As ${eventSlave.slaveName} pounds, ${his} balls tighten, preparing to empty themselves.`);
			}
		}
		App.Events.addParagraph(node, t);
		t = [];

		App.Events.addResponses(node, [
			new App.Events.Result("Fuck the bottom", bottom),
			canDoAnal(eventSlave)
				? new App.Events.Result("Fuck the top", topAnal, virginWarning("anal"))
				: new App.Events.Result(),
			canDoVaginal(eventSlave)
				? new App.Events.Result("The slave giving it has a free pussy, so use that", topVaginal, virginWarning("vaginal"))
				: new App.Events.Result()
		]);

		function bottom() {
			t = [];

			t.push(`Since the other slave is riding ${eventSlave.slaveName}'s ${V.seeRace === 1 ? eventSlave.race : ""} dick, it's a trivial matter to ${PC.dick === 0 ? "don a strap-on," : ""} come up behind the fucking slaves, stop the other slave's riding for a moment, and insert yourself into ${hisU} anus. The other slave`);
			if (eventSlave.dick <= 2) {
				t.push(`gasps as your ${PC.dick === 0 ? "strap-on complements the small dick" : "big dick complements the small one"} in ${his} pussy.`);
			} else if (eventSlave.dick < 4) {
				t.push(`shrieks as ${heU} feels ${hisU} holes stretched by ${PC.dick === 0 ? "a strap-on and a cock" : "two cocks"}.`);
			} else {
				t.push(`struggles and begs for mercy as ${hisU} holes are brutally stretched.`);
			}
			t.push(`The poor slave rides out the sexual storm as you and ${eventSlave.slaveName} fuck ${PC.vagina !== -1 ? `${himU}, your pussy sliding against the base of ${eventSlave.slaveName}'s thrusting shaft` : `${himU}`}. ${eventSlave.slaveName} flirts outrageously with you over the other slave's shoulder whenever ${he} can. <span class="mediumaquamarine">${He} has become more trusting of you.</span>`);

			eventSlave.trust += 4;
			seX(eventSlave, "penetrative", "slaves", "anal");
			seX(PC, "penetrative", "slaves", "anal");
			return t;
		}

		function topAnal() {
			t = [];

			t.push(`Since ${eventSlave.slaveName} is on top, it's a trivial matter to ${PC.dick === 0 ? "don a strap-on," : ""} come up behind the fucking slaves, stop ${his} thrusting for a moment, and penetrate ${his} butthole.`);
			if (eventSlave.fetish === "buttslut" && eventSlave.fetishKnown === 1) {
				t.push(`${He} shivers with delight as ${he} feels ${his} anal ring stretch to accommodate your ${PC.dick === 0 ? "strap-on" : "dick"}.`);
				eventSlave.devotion += 1;
			}
			t.push(VCheck.Anal(eventSlave, 1));
			t.push(`Fucking a slave with ${eventSlave.prostate > 0 ? "prostate" : ""} stimulation from your ${PC.dick === 0 ? "phallus" : "dick"} in ${his} ${V.seeRace === 1 ? eventSlave.race : ""} ass makes ${him} cum with indecent speed. You let ${him} slide down so ${he} can finish the other slave with ${his} mouth while you continue using ${his} anus. The other slave definitely enjoys ${eventSlave.slaveName}'s moaning into ${hisU} pussy as you use ${eventSlave.slaveName}'s ass. The hard buttfucking ${eventSlave.slaveName} is getting keeps ${his} dick stiff all the way through. ${His} submission to you has increased.`);

			eventSlave.devotion += 4;
			seX(eventSlave, "penetrative", "slaves", "anal");
			seX(eventSlave, "anal", PC, "penetrative");
			return t;
		}

		function topVaginal() {
			t = [];

			t.push(`${eventSlave.slaveName}'s hermaphroditic genitalia is a little crammed together; it's busy down there. ${He} obediently stops fucking so you can maneuver into ${him}.`);
			t.push(VCheck.Vaginal(eventSlave, 1));
			t.push(`Having a ${PC.dick === 0 ? "strap-on" : "dick"} in ${his} pussy reduces ${his} erection a little, so the slave beneath ${him} helps ${his} penetration as much as ${heU} can. It's not the most convenient of fucks, but that's to be expected when a ${properMaster()} and two slaves successfully have two separate instances of vaginal intercourse running at once. ${PC.vagina !== -1 && PC.dick !== 0 ? "You add a third by grabbing a free hand and guiding it to your own pussy; its owner gets the idea and strokes it as best they can." : ""} ${eventSlave.slaveName}'s orgasm is general and intense. ${His} devotion to you has increased.`);

			eventSlave.devotion += 4;
			seX(eventSlave, "penetrative", "slaves", "vaginal");
			return t;
		}

		function virginWarning(type) {
			if (type === "anal" && eventSlave.anus === 0) {
				return `This option will take ${his} anal virginity`;
			} else if (type === "vaginal" && eventSlave.vagina === 0) {
				return `This option will take ${his} vaginal virginity`;
			}
		}
	}
};


code:
App.Events.RESSSuppositoryResistance = class RESSSuppositoryResistance extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.suppository !== 0
		];
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				canStand,
				hasAnyArms,
				s => s.drugs !== "none",
				s => s.devotion <= 20 && s.devotion >= -50,
				s => s.trust >= -20,
				s => s.fetish !== "buttslut"
			]
		];
	}

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

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

		let t = [];

		t.push(`As you're starting your day, ${V.assistant.name} pauses ${hisA} review of business matters to report that`);
		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`is not accepting ${his} drugs from the phallic feeders in the kitchen. With nothing else urgent, you head down to address the situation. ${eventSlave.slaveName} is standing in front of the place where ${he}'s supposed to take ${his} drugs. It's a little pad on the ground on which ${he}'s supposed to kneel, with a fuckmachine positioned to penetrate ${his} anus once ${he} does so. ${He}'s not completely awake yet, and is just standing there, ${canSee(eventSlave) ? "viewing" : "feeling"} the setup with a vague look of distaste. ${He}'s facing it, and has ${his}`);
		if (eventSlave.butt > 6) {
			t.push("massive behind");
		} else if (eventSlave.butt > 3) {
			t.push("beautiful bottom");
		} else {
			t.push("cute butt");
		}
		t.push("pointed very much away from the machine that's supposed to be fucking it.");

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

		t.push(`${He} turns to you as you enter, and ${canSee(eventSlave) ? "seeing" : "realizing"} that it's you, ${he}`);
		if (canTalk(eventSlave)) {
			t.push(
				`mumbles unhappily,`,
				Spoken(eventSlave, `"Please, ${Master}, can I just take a shot? Assrape from, you know, people, is, um, bad enough."`)
			);
		} else {
			t.push(`uses hesitant gestures to beg you to let ${him} take ${his} drugs normally. ${He} tries to use gestures to explain that ${he} thinks ${he} gets enough anal from humans, without being buttfucked by a machine every morning.`);
		}

		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result(`Talk ${him} through it`, talk),
			new App.Events.Result(`Punish ${him} with a bigger phallus`, bigPhallus),
			new App.Events.Result(`Double penetrate ${his} ass for insolence`, penetrate)
		]);

		function talk() {
			t = [];

			t.push(`You put as much quiet authority into your ${canHear(eventSlave) ? "voice" : "words"} as you can, and explain to ${him} that ${he} is required to take ${his} drugs up ${his} ass. You do not explain any of the actual reasons why you require slaves to submit to daily machine anal, but couch your quiet explanation in terms of ${his} life as a slave. You tell ${him} that taking a solid buttfuck from a machine first thing in the morning is something you've ordered ${him} to do. ${He} needs to do it. If ${he} does, ${he}'ll be treated well; if ${he} does not, that will oblige you to punish ${him}. You tell ${him} that you would like ${him} to be a good slave, and that it would be disappointing if you had to punish ${him}. You put just a hint of steel into the last sentence, and ${he} stiffens a little at it. Hesitantly, ${he}`);
			if (eventSlave.belly >= 300000) {
				t.push(`shifts onto ${his} ${belly} belly, uses ${his} ${hasBothArms(eventSlave) ? "hands" : "hand"} to brace ${himself} against the impending pounding, and scoots towards the phallus.`);
			} else {
				t.push(`gets to ${his} ${hasBothLegs(eventSlave) ? "knees" : "knee"}, using ${his} ${hasBothArms(eventSlave) ? "hands" : "hand"} to spread ${his} cheeks for the phallus.`);
			}
			t.push(`Sensing that it's being offered an anus, it gently pushes inside ${his} rectum. Its strokes get longer and faster,`);
			if (eventSlave.anus > 2) {
				t.push(`until ${he}'s groaning under the sodomy despite ${his} loose ass.`);
			} else if (eventSlave.anus > 1) {
				t.push(`quickly gaping ${his} big butthole and making ${him} groan.`);
			} else {
				t.push(`making ${him} gasp as it stretches ${his} poor little asshole.`);
			}

			if (V.cockFeeder !== 0) {
				t.push(`${He} doesn't manage to groan for long, though, since the kitchen extends another phallus to feed ${him} ${his} breakfast. Before long, ${he}'s being spitroasted by machines.`);
			}
			t.push(`Once ${he}'s fully awake, ${he}'s mostly <span class="mediumaquamarine">relieved</span> that you let ${him} get away with hesitation about obedience and took the time to talk ${him} through it.`);

			eventSlave.trust += 4;
			return t;
		}

		function bigPhallus() {
			t = [];

			t.push(`You give the kitchen an order by voice command. ${canHear(eventSlave) ? "It's technical" : `${He} can't hear it`}, so ${he} doesn't understand it, but the meaning becomes clear soon enough. The phallus aiming meaningfully at the place where ${he}'s supposed to kneel and offer up ${his} butthole is withdrawn, and ${he}'s halfway through a shocked thank you when it's replaced by another, noticeably larger. You tell ${him} in deceptively mild tones that you'll keep increasing the size of ${his} phallus until ${he} decides to get down and take it like a good little ${desc}, or you run out of size options and are forced to strap ${him} down and apply two at once. At that point, ${his} ass might be able to take it; then again, it might not. ${He} begins to cry, but is so frightened by the threat that ${he} doesn't let ${his} tears distract ${him} from a delectable scramble to`);
			if (eventSlave.belly >= 300000) {
				t.push(`throw ${himself} onto ${his} ${belly} belly and`);
			} else {
				t.push(`get down on ${his} ${hasBothLegs(eventSlave) ? "knees" : "knee"} and`);
			}
			if (eventSlave.butt > 6) {
				t.push(`heave ${his} huge buttocks apart.`);
			} else if (eventSlave.butt > 3) {
				t.push(`spread ${his} broad buttocks.`);
			} else {
				t.push(`spread ${his} cute ass wide.`);
			}

			if (V.cockFeeder !== 0) {
				t.push(`Once it's got its phallus sliding in and out of ${his} asshole, the kitchen gives ${him} another, to suck off for ${his} breakfast. Fortunately for ${him}, ${he} doesn't object, and only gets facefucked by the normal dildo.`);
			}
			t.push(`${He} keeps the threat in mind, and has a slightly sore ass to <span class="hotpink">help ${him} remember to obey without question.</span>`);

			eventSlave.trust -= 2;
			eventSlave.devotion += 2;
			return t;
		}

		function penetrate() {
			t = [];

			t.push(`You step forward and take gentle hold of the slave's throat, telling ${him} to get down on ${his} knees like a good little ${desc}. You make no threat, but give ${him} the order in a voice of brass. ${He} knows what you can do to ${him}, and hurries to obey, terribly frightened. ${His} fear is justified. You announce that ${he}'s avoided serious punishment, but ${he} still needs correction for ${his} hesitation and insolence. ${He}'s concerned when ${he}`);
			if (canSee(eventSlave)) {
				t.push("sees you");
			} else if (canHear(eventSlave)) {
				t.push("hears you");
			} else {
				t.push("feels you");
			}

			if (PC.dick !== 0) {
				t.push(`get your dick ${PC.vagina !== -1 ? "and pussy" : ""} out,`);
			} else {
				t.push("don a strap-on,");
			}
			t.push(`though ${he}'s distracted by the rapidly accelerating buttfuck ${he}'s getting from the machine. ${He} tries to offer you ${his} throat, but ${his} hopes are dashed when you walk around behind ${him}, swing a leg over the machine pistoning in and out of ${his} asshole, and command it to stop for a moment. Then you work ${PC.dick !== 0 ? "yourself" : "your own dildo"} up ${his} ass alongside the phallus that already fills it. The drugs are delivered with lubricant, and you do fit, but only after a nice long session of sobbing, spasming, and finally crying resignation. Then you order the machine to go back to what it was doing, and the resignation vanishes, replaced with anal pain as ${eventSlave.slaveName} takes double penetration up ${his}`);
			if (eventSlave.anus > 2) {
				t.push("gaping anus.");
			} else if (eventSlave.anus === 2) {
				t.push("big butthole.");
			} else {
				t.push("poor, abused little butt.");
			}

			if (V.cockFeeder !== 0) {
				t.push(`When you grow tired of the whining, you order the kitchen to give the bitch breakfast. It extends a feeding phallus and fills ${his} throat, muffling the noise somewhat.`);
			}

			t.push(VCheck.Anal(eventSlave, 1));

			eventSlave.trust -= 4;
			return t;
		}
	}
};