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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canWalk,
				canTalk,
				canHear,
				s => s.devotion > 20,
				s => s.trust > 20,
				s => s.rules.speech !== "restrictive",
				s => s.choosesOwnClothes !== 1,
				s => s.assignment !== Job.QUARTER,
				s => getExposure(s) === 0,
			]
		];
	}

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

		let artDiv = document.createElement("div"); // named container so we can replace it later
		App.Events.drawEventArt(artDiv, eventSlave, "no clothing");
		node.appendChild(artDiv);
		const clothes = Spoken(eventSlave, eventSlave.clothes);
		const desc = SlaveTitle(eventSlave);

		let r = [];

		r.push(`Near the end of ${his} weekly inspection,`);
		r.push(contextualIntro(V.PC, eventSlave, true));
		r.push(`asks you a question. The inspection happens to have been at the start of ${his} day, and after you're done with ${him}, ${he}'ll be heading off to get dressed. ${He}'s naked for inspection, of course,`);
		if (eventSlave.fetishKnown && eventSlave.fetish === "humiliation") {
			r.push(`which has the humiliation fetishist ${desc} decently aroused.`);
		} else {
			r.push(`but ${he}'s a good ${desc}, and ${he} trusts you, so ${he} has no problem at all with being seen nude.`);
		}
		r.push(`In fact, that's what ${he} asks you about.`);
		App.Events.addParagraph(node, r);
		r = [];

		r.push(Spoken(eventSlave, `"${Master},"`), `${he} ${say}s,`, Spoken(eventSlave, `"may I please wear something a little more revealing, just for today?"`));
		if (eventSlave.trust > 95) {
			r.push(`${He} trusts you completely, enough to have confidence that you'll understand ${he} isn't questioning you.`);
		} else {
			r.push(`${He} bites ${his} lip, realizing that ${he} might have come across as questioning you.`);
		}
		switch (eventSlave.clothes) {
			case "a nice maid outfit":
				r.push(Spoken(eventSlave, `"Wearing a proper maid's outfit is nice,"`));
				break;
			case "a nice nurse outfit":
				r.push(Spoken(eventSlave, `"Wearing a proper nurse's outfit is nice,"`));
				break;
			case "nice business attire":
				r.push(Spoken(eventSlave, `"Wearing a suit is nice,"`));
				break;
			case "battledress":
				r.push(Spoken(eventSlave, `"Wearing a ${clothes} is nice,"`));
				break;
			default:
				r.push(Spoken(eventSlave, `"Wearing ${clothes} is nice,"`));
		}
		if (eventSlave.trust > 95) {
			r.push(`${he} allows.`);
		} else {
			r.push(`${he} hurries to add.`);
		}
		if (eventSlave.fetishKnown && eventSlave.fetish === "humiliation") {
			r.push(Spoken(eventSlave, `"It's not really embarrassing, though. It would be so sexy to be, um, falling out of my clothes.`));
		} else if (eventSlave.fetishKnown && eventSlave.fetish === "buttslut") {
			r.push(Spoken(eventSlave, `"But they cover my asshole.`));
		} else if (eventSlave.fetishKnown && eventSlave.fetish === "boobs") {
			r.push(Spoken(eventSlave, `"But they cover my boobs.`));
		} else if (eventSlave.fetishKnown && eventSlave.fetish === "pregnancy" && eventSlave.bellyPreg >= 1500) {
			r.push(Spoken(eventSlave, `"But it covers up my pregnancy.`));
		} else if (eventSlave.assignment === Job.WHORE) {
			r.push(Spoken(eventSlave, `"But I also like being a prostitute, ${Master}. It'd be fun to try looking like a total whore.`));
		} else if (eventSlave.assignment === Job.PUBLIC) {
			r.push(Spoken(eventSlave, `"But I also like being a public slut, ${Master}. It'd be fun to really flaunt it.`));
		} else {
			r.push(Spoken(eventSlave, `"But it'd be fun and different to wear something really naughty.`));
		}
		r.push(Spoken(eventSlave, `May I please try out something skimpier today?"`));

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`No`, no),
			new App.Events.Result(`Show ${him} how much you like ${his} usual outfit`, usual),
			new App.Events.Result(`Put ${him} in a string bikini`, bikini),
			new App.Events.Result(`Force uncomfortable straps on ${him}`, straps),
		]);

		function no() {
			eventSlave.trust += 2;
			return `You tell ${him} no. ${He}'s a good enough slave that making a simple request and having you return a straightforward negative without punishment makes ${him} just slightly more trusting. It's nice to be allowed to ask things.`;
		}

		function usual() {
			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, eventSlave, eventSlave.clothes);
			const frag = document.createDocumentFragment();
			let clothesDesc;
			switch (eventSlave.clothes) {
				case "a long qipao":
				case "a slutty qipao":
					clothesDesc = `qipao`;
					break;
				case "a penitent nuns habit":
					clothesDesc = `habit`;
					break;
				case "a slave gown":
				case "a ball gown":
					clothesDesc = `gown`;
					break;
				case "a comfortable bodysuit":
					clothesDesc = `bodysuit`;
					break;
				case "a nice nurse outfit":
					clothesDesc = `nurse outfit`;
					break;
				case "a schoolgirl outfit":
					clothesDesc = `school clothes`;
					break;
				case "a nice maid outfit":
					clothesDesc = `maid outfit`;
					break;
				case "a slutty maid outfit":
					clothesDesc = `skimpy maid outfit`;
					break;
				case "a biyelgee costume":
				case "a dirndl":
				case "a halter top dress":
				case "a mini dress":
				case "a maternity dress":
				case "an evening dress":
					clothesDesc = `dress`;
					break;
				case "a military uniform":
				case "a mounty outfit":
				case "a red army uniform":
				case "a schutzstaffel uniform":
				case "a slutty schutzstaffel uniform":
				case "a confederate army uniform":
					clothesDesc = `uniform`;
					break;
				case "spats and a tank top":
					clothesDesc = `spats`;
					break;
				case "a burkini":
				case "a monokini":
					clothesDesc = `swimsuit`;
					break;
				case "a chattel habit":
				case "a fallen nuns habit":
					clothesDesc = `slutty habit`;
					break;
				case "a succubus outfit":
					clothesDesc = `succubus getup`;
					break;
				case "a hijab and blouse":
				case "conservative clothing":
					clothesDesc = `conservative clothes`;
					break;
				default:
					clothesDesc = App.Data.clothes.get(eventSlave.clothes).name.toLowerCase();
			}

			r = [];
			r.push(`You tell ${him} to go get dressed as usual. ${His} face falls a little, but there was no condemnation in your tone, and ${he} hurries off,`);
			if (eventSlave.dick > 6) {
				r.push(`monstrous cock dangling.`);
			} else if (eventSlave.balls > 4) {
				r.push(`big balls dangling.`);
			} else if (eventSlave.bellyFluid >= 5000 || eventSlave.weight > 95) {
				r.push(`big belly jiggling.`);
			} else if (eventSlave.belly >= 5000) {
				r.push(`as fast as ${his} swollen belly will allow.`);
			} else if ((eventSlave.boobsImplant / eventSlave.boobs) >= .60) {
				r.push(`fake tits bouncing.`);
			} else if (eventSlave.butt > 4) {
				r.push(`${his} big booty jiggling.`);
			} else if (eventSlave.boobs > 2000) {
				r.push(`udders jiggling.`);
			} else {
				r.push(`giving you a nice view of ${his} naked rear.`);
			}
			r.push(`${He} returns quickly, in ${his} proper ${clothesDesc}.`);
			r.push(`You tell ${him} that you like how ${he} looks, and that ${he}'s pretty. ${He} wasn't expecting such a blunt compliment, and`);
			if (canSee(eventSlave)) {
				r.push(`${his} ${App.Desc.eyesColor(eventSlave)} flick down to`);
			} else {
				r.push(`${he} faces`);
			}
			r.push(`the ground for a moment as ${he} blushes.`, Spoken(eventSlave, `"T-thank you, ${Master},"`), `${he} stutters.`);
			App.Events.addParagraph(frag, r);
			r = [];

			r.push(`You add that ${he} looks so good that ${he} had better take ${his} nice clean`);
			r.push(`${clothesDesc} off again, because`);
			if (canDoVaginal(eventSlave) && eventSlave.vagina !== 0) {
				r.push(`you're going to`);
				if (V.PC.dick) {
					r.push(`fuck`);
					r.push(VCheck.Vaginal(eventSlave, 1));
				} else {
					r.push(`trib`);
					seX(eventSlave, "vaginal", V.PC, "vaginal");
					if (canFemImpreg(eventSlave, V.PC)) {
						knockMeUp(eventSlave, 10, 0, -1);
					}
				}
				r.push(`${him} senseless.`);
			} else if (canDoAnal(eventSlave) && eventSlave.anus !== 0) {
				if (eventSlave.prostate) {
					r.push(`you're going to fuck ${his} butt until ${he} cums.`);
				} else {
					r.push(`you're going to fuck ${his} butt.`);
				}
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(`${he}'s going to`);
				if (V.PC.dick) {
					r.push(`suck your dick until you cover ${him} in cum.`);
					seX(eventSlave, "oral", V.PC, "penetrative");
				} else {
					r.push(`eat you out until ${he}'s got your pussyjuice running down ${his} chin.`);
					seX(eventSlave, "oral", V.PC, "vaginal");
				}
			}
			r.push(`${He} giggles at the sudden lewdness, and quickly strips naked again, complimented and <span class="devotion inc">eager to be used.</span>`);
			App.Events.addParagraph(frag, r);
			eventSlave.devotion += 5;
			return frag;
		}

		function bikini() {
			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, eventSlave, "a string bikini");
			const belly = bellyAdjective(eventSlave);

			r = [];
			r.push(`You tell ${him} that the wardrobe's sorting system will present ${him} with a new outfit, just for today. ${He}'s to go try it on and come right back, to see how it fits.`);
			r.push(Spoken(eventSlave, `"Thanks, ${Master}!"`), `${he} ${say}s brightly, and hurries off to see what's in store for ${him}. ${He} might be a slave and a ${desc} but ${girl}s everywhere love trying on new clothes. ${He} makes an entrance when ${he} comes back, spinning around to show off. ${He}'s wearing the briefest possible string bikini. The top, rather than having patches of material to cover ${his} nipples, forms a string triangle around them, framing them but not covering them. The bottom is a single string in front,`);
			if (eventSlave.dick) {
				r.push(`which looks rather sad and alone, pushed aside by ${his} dick as it is.`);
			} else if (eventSlave.balls > 2) {
				r.push(`which allow ${his} balls to spill to either side.`);
			} else if (eventSlave.labia) {
				r.push(`and it's embraced completely by ${his} generous pussylips.`);
			} else {
				r.push(`and it threatens to disappear inside ${his} pussylips.`);
			}
			r.push(Spoken(eventSlave, `"This feels so hot, ${Master},"`), `${he} ${say}s, and`);
			if (eventSlave.fetishKnown && eventSlave.fetish === "humiliation") {
				r.push(`blushes cutely. ${He} looks up at you,`);
				if (canSee(eventSlave)) {
					r.push(`sees`);
				} else {
					r.push(`feels`);
				}
				r.push(`the way you're staring at ${him}, and hangs ${his} head, blushing even harder.`);
			} else if (eventSlave.fetishKnown && eventSlave.fetish === "buttslut") {
				r.push(`turns around again, bending a little and cocking ${his} hips to show off the way the string between ${his} buttocks totally fails to conceal ${his}`);
				if (eventSlave.anus > 2) {
					r.push(`huge soft asspussy.`);
				} else if (eventSlave.anus > 1) {
					r.push(`nice butthole.`);
				} else {
					r.push(`tight little anus.`);
				}
			} else if (eventSlave.fetishKnown && eventSlave.fetish === "boobs") {
				r.push(`bounces ${his}`);
				if (eventSlave.boobsImplant) {
					r.push(`fake tits.`);
				} else if (eventSlave.boobs > 8000) {
					r.push(`earth-shattering tits.`);
				} else if (eventSlave.boobs > 2000) {
					r.push(`huge boobs.`);
				} else if (eventSlave.boobs > 400) {
					r.push(`boobs.`);
				} else {
					r.push(`petite chest.`);
				}
				r.push(`Giggling, ${he} bounces harder, and ${his} nipples escape from ${his} top, such as it is.`);
			} else if (eventSlave.fetishKnown && eventSlave.fetish === "pregnancy" && eventSlave.bellyPreg >= 1500) {
				r.push(`and attempts to pull the strings over the front of ${his} belly. Without delay, they slide right back to the sides of the ${belly} dome, eliciting a giggle from the preggo slut.`);
			} else if (eventSlave.assignment === Job.WHORE || eventSlave.assignment === Job.PUBLIC) {
				r.push(`sneaks a hand under the string around ${his} waist, tugging ${his} bottom up`);
				if (eventSlave.vagina !== -1) {
					r.push(`until the string between ${his} legs is pulled up into the entrance of ${his} womanhood.`);
				} else {
					r.push(`and turning sideways to suggest ${his} ass.`);
				}
				if (eventSlave.assignment === Job.WHORE) {
					r.push(Spoken(eventSlave, `"Guys'll pay money for this,"`));
				} else {
					r.push(Spoken(eventSlave, `"Guys'll line up to fuck this,"`));
				}
				r.push(`${he} giggles.`);
			} else {
				r.push(`bounces a little, smiling.`, Spoken(eventSlave, `"I'm basically naked,"`), `${he} giggles.`);
				r.push(Spoken(eventSlave, `"Today is going to be fun. The other ${girl}s'll be jealous you wanted me to look so slutty. Love you, ${Master}."`));
			}
			r.push(`${He}'s happy you indulged ${him}, and <span class="trust inc">satisfied that you think ${he}'s cute</span> enough to have around (practically) nude.`);
			eventSlave.trust += 5;
			return r;
		}

		function straps() {
			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, eventSlave, "uncomfortable straps");
			const belly = bellyAdjective(eventSlave);
			r = [];

			r.push(`You tell ${him} that the wardrobe's sorting system will present ${him} with a new outfit, just for today. ${He}'s to go try it on and come right back, to see how it fits.`);
			r.push(Spoken(eventSlave, `"Thanks, ${Master}!"`), `${he} ${say}s brightly, and hurries off to see what's in store for ${him}. ${He} might be a slave and a ${desc} but ${girl}s everywhere love trying on new clothes. ${He}'s wrong to be so enthusiastic. ${He} comes obediently back, wearing a set of cruelly uncomfortable leather straps in the general shape of a bikini, but much tighter and more restrictive. It isn't at all what ${he} was expecting, but ${he} did ${his} best to obey. ${He}'s tightened ${his} own straps down until they're just short of cutting off circulation, in an obvious effort to please you. You ask ${him} how ${he} likes ${his} outfit.`);
			r.push(Spoken(eventSlave, `"It's nice, ${Master},"`), `${he} ${say}s, but ${he} sounds a little sad.`);
			if (eventSlave.fetishKnown && eventSlave.fetish === "humiliation") {
				r.push(Spoken(eventSlave, `"I'm just a worthless humiliation slut. I love having steel rings around my holes like this,"`), `${he} adds.`);
			} else if (eventSlave.fetishKnown && eventSlave.fetish === "buttslut") {
				r.push(`${He} turns to show you ${his} asshole, framed by a steel ring that spreads ${his} buttocks to keep it nice and defenseless.`);
				r.push(Spoken(eventSlave, `"I know my backpussy's the best thing about me,"`), `${he} adds.`);
			} else if (eventSlave.fetishKnown && eventSlave.fetish === "boobs") {
				r.push(`${He} does ${his} best to thrust out ${his} chest, making the straps creak.`);
				r.push(Spoken(eventSlave, `"I know I'm, I'm just, just a pair of boobs,"`), `${he} adds.`);
			} else if (eventSlave.fetishKnown && eventSlave.fetish === "pregnancy" && eventSlave.bellyPreg >= 1500) {
				r.push(`${He} does ${his} best to thrust out ${his} ${belly} belly, making the straps creak ominously.`);
				r.push(Spoken(eventSlave, `"I know I'm, I'm just, just a baby maker,"`), `${he} adds.`);
			} else if (eventSlave.assignment === Job.WHORE || eventSlave.assignment === Job.PUBLIC) {
				r.push(`${He} hangs ${his} head.`);
				r.push(Spoken(eventSlave, `"I feel like a worthless ${eventSlave.assignment === Job.WHORE ? `whore` : `bitch`},"`), `${he} adds.`, Spoken(eventSlave, `"Guess I am."`));
			} else {
				r.push(`${He} indicates the steel rings that frame ${his} holes and keep them defenseless.`);
				r.push(Spoken(eventSlave, `"I know I'm just a collection of fuckholes,"`), `${he} adds.`);
			}
			r.push(`${He} sounds like ${he}'s trying to convince ${himself}, but ${his} <span class="devotion inc">abasement is not feigned.</span>`);
			eventSlave.devotion += 5;
			eventSlave.trust -= 5;
			return r;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.assignment !== Job.QUARTER,
				s => s.devotion > 20,
				s => s.vaginaLube > 1,
				hasAnyArms,
				canDoVaginal,
			]
		];
	}

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

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

		let t = [];
		t.push("Just as you're about to give");
		t.push(contextualIntro(V.PC, eventSlave, true));
		t.push(`${his} weekly inspection, a minor business matter comes up and diverts your attention.`);
		t.push(`So, for about ten minutes, ${he} has nothing at all to do other than ${canStand(eventSlave) ? "stand" : hasAnyLegs(eventSlave) ? "kneel" : "sit"} in front of your desk in your office, ${canSee(eventSlave) ? "watching" : canHear(eventSlave) ? "listening to" : "feeling the subtle vibrations from"} you, ${(V.assistant.personality > 0) ? `${V.assistant.name}'s avatar,` : ""} the other slaves who come and go, and the general lewdness of the arcology, much of which is ${(canSee(eventSlave)) ? "visible" : canHear(eventSlave) ? "audible" : "apparent"} from right here.`);
		if ((eventSlave.attrXY > 50) && (V.PC.boobs < 300)) {
			t.push(`${He} finds your strong body attractive, and ${his} gaze rests most frequently ${canSee(eventSlave) ? "on" : "towards"} you.`);
		} else if ((eventSlave.attrXX > 50) && (V.PC.boobs >= 650)) {
			t.push(`${He} finds your prominent breasts attractive, and ${his} gaze rests most frequently ${canSee(eventSlave) ? "on" : "towards"} them.`);
		} else if (eventSlave.fetish === "pregnancy") {
			if (eventSlave.preg > eventSlave.pregData.normalBirth / 1.33) {
				t.push(`The combination of being hugely pregnant and a pregnancy fetishist keeps ${his} libido raging.`);
			} else if (V.PC.belly >= 10000) {
				t.push(`${He} finds your protruding pregnancy attractive, and ${his} gaze rests most frequently ${canSee(eventSlave) ? "on" : "towards"} it.`);
			}
		} else if (eventSlave.aphrodisiacs > 0 || eventSlave.inflationType === "aphrodisiac") {
			t.push(`The aphrodisiacs ${he}'s on never let ${his} libido rest for long.`);
		} else if (eventSlave.energy > 95) {
			t.push(`${His} nymphomania keeps ${him} perpetually ${canSee(eventSlave) ? "watchful for any sexual sights" : canHear(eventSlave) ? "listening for sexual acts" : "eager for sexual acts"}, especially any which promise ${his} participation.`);
		} else if (eventSlave.energy > 40) {
			t.push(`${His} healthy sex drive does its work, and with the constant coming and going ${he}'s not starved for things ${he} finds attractive.`);
		} else {
			t.push(`Despite ${his} weak libido, ${he}'s been a sex slave long enough that ${his} body knows that it may be called upon to render sexual service soon.`);
		}
		t.push(`The consequences of the special qualities of ${his} womanhood soon become apparent.`);
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`Your slaves are all in the very best of vaginal health, so the scent of ${his} female arousal is not strong. But ${his} cunt produces such copious natural lubricant that with nothing to do but ${canStand(eventSlave) ? "stand" : "rest"} there, ${his} ${eventSlave.counter.births > 0 ? "motherly" : eventSlave.weight > 30 ? "thick" : eventSlave.muscles > 30 ? "strong" : "feminine"} inner thighs are soon slick with a sheen of healthy pussyjuice. You notice a droplet of the stuff running down ${his} warm ${eventSlave.skin} skin.`);
		if (canAchieveErection(eventSlave) && eventSlave.chastityPenis !== 1) {
			t.push(`${His} ${eventSlave.dick > 3 ? "stiff prick" : "hard little dick"} is sticking up from atop ${his} pussy, leaving it nice and visible.`);
		} else if (eventSlave.dick > 0) {
			t.push(`${His} pussy is ${eventSlave.dick > 3 ? "entirely" : "partially"} concealed by ${his} limp dick, which is getting a good coating, since it's resting against the source.`);
		}
		if (eventSlave.labia > 0) {
			t.push(`${His} prominent labia is flushed and moist, and frame ${his} womanhood invitingly.`);
		}
		if (eventSlave.clit > 0) {
			t.push(`${His} clit is rapidly becoming visible as the blood rushes there from every other part of ${his} body.`);
		}
		if (eventSlave.bellyPreg >= 10000) {
			t.push(`${His} huge pregnancy heaves a little as ${he} starts to breathe a bit harder, and the visual connection between ${his} gravid belly and ${his} needy womanhood is inescapable.`);
		}
		t.push(`${He}'s a good ${SlaveTitle(eventSlave)}, and remains obediently before your desk, filling your office with ${his} subtle perfume as ${he} waits for you.`);

		App.Events.addParagraph(node, t);
		App.Events.addResponses(node, [
			new App.Events.Result(`Make love to ${his} ready cunt`, love, virginityWarningLove()),
			new App.Events.Result(`Pound ${his} wet pussy`, pound, virginityWarningPound()),
			new App.Events.Result(`Feed ${him} ${his} own pussyjuice`, feed),
		]);

		function love() {
			let container = document.createDocumentFragment();
			t = [];

			t.push(`${His} body is so perfectly made to be fucked that it's getting itself ready for you, without your even having to give the order.`);
			t.push(`Deciding not to bother with verbal commands, you approach ${him} and reach for one of ${his} hands; ${he} obediently extends it towards your grasp, and follows`);
			if ((eventSlave.energy > 40) || (eventSlave.aphrodisiacs > 0) || eventSlave.inflationType === "aphrodisiac") {
				t.push("eagerly");
			} else {
				t.push("willingly");
			}
			t.push(`as you pull ${him} in for a`);
			if (eventSlave.boobs > 5000) {
				t.push(`hug (cushioned by ${his} enormous udders),`);
			} else if (eventSlave.belly >= 10000) {
				t.push(`hug (quite a stretch thanks to ${his} ${belly} belly),`);
			} else if (eventSlave.dick > 5) {
				t.push(`hug (made rather lewd by ${his} enormous penis),`);
			} else {
				t.push(`hug,`);
			}
			t.push(`kiss ${him} deeply, and slide your arms down ${his}`);
			if (eventSlave.weight > 160) {
				t.push(`rippling`);
			} else if (eventSlave.weight > 95) {
				t.push(`soft`);
			} else if (eventSlave.muscles > 95) {
				t.push(`ripped`);
			} else if (eventSlave.muscles > 30) {
				t.push(`muscular`);
			} else if (eventSlave.muscles > 5) {
				t.push(`toned`);
			} else {
				t.push(`soft`);
			}
			t.push(`back to`);
			if (eventSlave.butt > 12) {
				t.push(`sink your arms into ${his} expansive`);
			} else if (eventSlave.butt > 6) {
				t.push(`heft ${his} monstrous`);
			} else if (eventSlave.butt > 3) {
				t.push(`squeeze ${his} healthy`);
			} else {
				t.push(`cup ${his} cute little`);
			}
			t.push(`buttocks. ${He} ${eventSlave.voice > 0 ? "coos" : "hums mutely"} at the feeling of your ${V.PC.title === 1 ? "strong" : "feminine"} hands on ${his} bottom, and presses ${himself} against you as you rotate the two of you until you can set ${his} butt on the edge of your desk and ${V.PC.dick !== 0 ? `slide your big dick into ${his} well-lubricated cunt.` : `assertively press your own pussy against ${his} wet cunt.`}`);
			App.Events.addParagraph(container, t);

			t = [];
			t.push(`${He} makes as if to lie back and take it, but you keep an arm around ${his} back and hug ${his}`);
			if (eventSlave.boobs > 2000 || eventSlave.belly >= 5000) {
				if (eventSlave.boobs > eventSlave.belly) {
					t.push(`as closely as ${his} big breasts will permit.`);
				} else {
					t.push(`as closely as ${his} ${belly} ${eventSlave.bellyPreg >= 3000 ? "pregnant belly" : "belly"} will permit.`);
				}
			} else if (V.PC.belly >= 5000) {
				t.push(`as closely as your pregnant belly will permit.`);
			} else {
				t.push(`closer than ever.`);
			}
			t.push(`You take your other hand and place a firm but loving grip under ${his} chin, lifting ${his} ${App.Desc.eyeColor(eventSlave)}-eyed gaze to meet yours before kissing ${him} again. All the while, you`);
			if (V.PC.dick !== 0) {
				t.push(`fuck ${him} powerfully, withdrawing your dick almost all the way and then hilting yourself in ${his} soaked slit.`);
				t.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				t.push(`trib ${him} with assurance, grinding your hips against ${hers} and making ${him} feel your heat.`);
				seX(eventSlave, "vaginal", V.PC, "penetrative");
			}
			t.push(`${He} clings to you, accepting the closeness to ${his} ${getWrittenTitle(eventSlave)} and enjoying the loving attention, even as the extreme wetness of ${his} cunt and your ${V.PC.dick !== 0 ? "powerful thrusting" : "hungry grinding"} begin to produce lewd noises from between you.`);
			t.push(`${His} generous natural lubrication lessens the friction and sensation a little, and you go for a long time before you both climax.`);
			t.push(`You lead ${him} into your office shower, since you're both coated in ${his} pussyjuice${V.PC.dick !== 0 ? ` and ${he}'s carrying a big load of your cum` : ", and your own"}.`);
			t.push(`Under the hot water, you don't even have to pull ${him} close; <span class="hotpink">${he} presses ${himself} into your arms on ${his} own.</span>`);
			if (eventSlave.sexualQuirk === "romantic") {
				t.push(`For an incorrigible romantic like ${him}, this encounter was perfect, and ${he} <span class="hotpink">loves you all the more for it.</span>`);
				eventSlave.devotion += 3;
			}
			eventSlave.devotion += 5;
			App.Events.addParagraph(container, t);

			return container;
		}

		function pound() {
			t = [];

			t.push(`${He}'s so generously lubricated that ${he}'s ready to take a good hard fuck, so you decide to give ${him} one.`);
			t.push(`You point at the ground, and you don't even have to tell ${him} to get down on all fours and get ready to take it.`);
			if (canSee(eventSlave)) {
				t.push(`Your gesture says it for you, and ${he} obediently gets down and gets in position to be bred like a bitch.`);
			} else {
				t.push(`The atmosphere of the room says it for you, and ${he} obediently gets down and gets in position to be bred like a bitch.`);
			}
			t.push(`${He} angles ${his} hips just right to offer ${his} cunt to you,`);
			if (eventSlave.belly >= 300000) {
				t.push(`an endeavor given the size of ${his} middle,`);
			} else if (eventSlave.belly >= 5000) {
				t.push(`while giving ${his} rounded middle room to hang,`);
			}
			t.push(`and even reaches down to spread ${his} ${eventSlave.labia > 1 ? "dangling labia" : "labia"} to invite you into ${his} pink channel.`);
			if (V.PC.dick !== 0) {
				if (eventSlave.vagina > 1) {
					t.push(`${He} can take your big dick without a twinge,`);
				} else {
					t.push(`Your big dick will fill ${his} tight cunt to its limits,`);
				}
				t.push(`but you grab ${his} hips and`);
			} else {
				t.push(`You select a strap-on that's right at the limits of ${his}`);
				if (eventSlave.vagina > 3) {
					t.push(`cavernous`);
				} else if (eventSlave.vagina > 2) {
					t.push(`big`);
				} else if (eventSlave.vagina > 1) {
					t.push(`open`);
				} else {
					t.push(`tight little`);
				}
				t.push(`cunt's capacity, don it, and`);
			}
			t.push(`mount ${him} with such force that your first stroke brings ${his} butt against your hips with an audible smack. There's also a deliciously lewd noise as ${V.PC.dick !== 0 ? "your invading penis" : "the invading phallus"} forces a little gush of pussyjuice out of ${him}.`);
			t.push(`${He} ${eventSlave.voice > 0 ? "shrieks, but it's a shriek" : "gasps, but it's a gasp"} of pleasure, and your rutting is so well-lubricated that ${he} has no trouble getting off on it. Wanting ${his} climax, you reach around ${him} and grab hold of ${his} pussy, feeling the slippery fluid between your fingers and the lewd thrusting motion as ${V.PC.dick !== 0 ? "your cock" : "the phallus"} pistons in and out of ${him}.`);
			t.push(`That bit of stimulation is enough to tip ${him} over, and you feel a gush of femcum against your hand as ${V.PC.dick !== 0 ? "your dickhead" : "the head of the strap-on"} forces an orgasm out of ${his} g-spot. ${He}'s so discombobulated that ${he} collapses into the puddle of pussyjuice ${he} left on the floor when you stand up and head off for a shower, but ${he} crawls after you as best ${he} can${hasBothLegs(eventSlave) ? " on rubbery legs." : "."}`);
			if (eventSlave.fetish === Fetish.SUBMISSIVE) {
				if (eventSlave.fetishKnown === 1) {
					t.push(`The ${SlaveTitle(eventSlave)} sub loves getting fucked like that, and`);
					if (eventSlave.fetishStrength > 95) {
						t.push(`<span class="lightsalmon">seems even more submissive</span>`);
						eventSlave.fetishStrength += 10;
					} else {
						t.push(`since ${he}'s fully confirmed in ${his} status as a sub, ${he} <span class="hotpink">glows with devotion</span>`);
						eventSlave.devotion += 3;
					}
					t.push(`as ${he} washes ${himself} in the shower with you.`);
				} else {
					t.push(`${He} seems utterly dissipated by the fucking ${he} just got, and may have just had the best sex of ${his} life. <span class="lightsalmon">${He}'s a submissive!</span>`);
					eventSlave.fetishKnown = 1;
				}
			}
			t.push(VCheck.Vaginal(eventSlave, 1));
			eventSlave.devotion += 5;
			return t;
		}

		function feed() {
			t = [];

			t.push(`You approach ${him} and`);
			if (eventSlave.dick > 0) {
				t.push(`reach under ${his} girldick for ${his}`);
			} else if (eventSlave.balls > 3) {
				t.push(`reach under ${his} dangling balls`);
			} else {
				t.push(`cup ${his}`);
			}
			t.push(`sopping pussy. ${He} gasps as ${he} feels your cool grasp.`);
			t.push(`Your possessive hand encompasses ${his} vulva, with your index and ring fingers sliding around either side of ${his} pubic mound to grip ${his} entire womanhood.`);
			if (eventSlave.vagina > 0) {
				if (eventSlave.vagina > 1) {
					t.push(`${His} relaxed pussy almost draws your middle finger inward and upward,`);
				} else {
					t.push(`${His} pussy welcomes your middle finger,`);
				}
				t.push(`and you hook it inside ${his} body, gathering a healthy amount of pussyjuice and brushing ${his} g-spot.`);
			} else {
				t.push(`You're careful not to penetrate ${his} virgin slit with your middle finger, but you draw it up the exterior of ${his} channel, gathering a healthy amount of pussyjuice.`);
			}
			t.push(`Then you remove your hand, though the horny ${SlaveTitle(eventSlave)} unconsciously tries to follow the withdrawing digits.`);
			if (canSee(eventSlave)) {
				t.push(`${He} stares at you, waiting to see what you're going to do, and a blush begins to rise on ${his} ${eventSlave.skin} cheeks as ${he} sees you reaching for ${his} mouth. ${His}`);
			} else if (canHear(eventSlave)) {
				t.push(`${He} listens carefully to your movements, waiting to see what you're going to do, and a blush begins to rise on ${his} ${eventSlave.skin} cheeks as ${he} feels you reaching for ${his} mouth. ${His}`);
			} else {
				t.push(`${He} stays as still as ${he} can, until ${his} ${eventSlave.skin} cheeks blush as ${he} feels you reaching for ${his} mouth. ${His}`);
			}
			if (eventSlave.lips > 95) {
				t.push(`facepussy`);
			} else if (eventSlave.lips > 40) {
				t.push(`pillow-like`);
			} else if (eventSlave.lips > 10) {
				t.push(`soft`);
			} else {
				t.push(`thin`);
			}
			t.push(`lips part and you insert all three of your fingers into ${his} hot mouth. ${He} quivers at the intimacy of the gesture, and the ${canTaste(eventSlave) ? "taste" : "feel"} of ${his} own juices. The tremor sends a delicious motion through ${his}`);
			if ((eventSlave.boobsImplant === 0) && (eventSlave.boobs > 300)) {
				t.push(`natural ${eventSlave.boobs > 2000 ? "udders." : "breasts."}`);
			} else if ((eventSlave.boobsImplant / eventSlave.boobs) >= 0.60) {
				t.push(`fake tits.`);
			} else if (eventSlave.weight > 160) {
				t.push(`fat folds.`);
			} else if (eventSlave.belly >= 5000) {
				if (eventSlave.bellyPreg >= 3000) {
					t.push(`gravidness.`);
				} else if (eventSlave.bellyImplant >= 3000) {
					t.push(`distended belly.`);
				} else {
					t.push(`${eventSlave.inflationType}-filled belly.`);
				}
			} else if (eventSlave.weight > 95) {
				t.push(`soft body.`);
			} else if (canAchieveErection(eventSlave) && !(eventSlave.chastityPenis)) {
				t.push(`stiff prick.`);
			} else if (eventSlave.scrotum > 4) {
				t.push(`dangling balls.`);
			} else if (eventSlave.dick > 0) {
				t.push(`limp bitchclit.`);
			} else if (eventSlave.weight > 30) {
				t.push(`chubbiness.`);
			} else {
				t.push(`body.`);
			}
			t.push(`You keep your fingers where they are until ${he}'s licked them really clean. ${His} hot tongue runs repeatedly between each of your fingers`);
			if (eventSlave.piercing.tongue.weight > 0) {
				t.push(`and the smooth hardness of ${his} tongue piercing brushes against them`);
			}
			t.push(t.pop() + ".");
			t.push(`${He} ${eventSlave.voice > 0 ? "moans whorishly" : "begins to pant"} when you go back for more, and the third time you harvest ${his} own pussyjuice to feed it to ${him}, ${he} orgasms, adding some femcum to ${his} next little meal licked off your fingers.`);
			t.push(`${His} ${canSee(eventSlave) ? "eyes shine" : "face is alight"} with <span class="mediumaquamarine">gratitude and trust.</span>`);
			eventSlave.trust += 5;
			return t;
		}

		function virginityWarningLove() {
			return (eventSlave.vagina === 0 && V.PC.dick !== 0) ? `This option will take ${his} virginity` : null;
		}

		function virginityWarningPound() {
			return eventSlave.vagina === 0 ? `This option will take ${his} virginity` : null;
		}
	}
};

repo_name: Ducati/fc

license: mit


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				canMove,
				hasAnyArms,
				s => s.muscles > 30,
				s => s.weight <= 10
			]
		];
	}

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

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

		let t = [];
		t.push(`Early one morning,`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		if (!canWalk(eventSlave)) {
			t.push(`crawls`);
		} else if (shoeHeelCategory(eventSlave) > 1) {
			t.push(`totters`);
		} else if (eventSlave.belly >= 10000) {
			t.push(`waddles`);
		} else {
			t.push(`walks`);
		}
		t.push(`past your door stark naked, with a towel thrown over ${his} shoulder. ${He}'s clearly moving from the gym to the showers after a hard workout; ${he}'s quite the iron pumper and gets up before anyone to protect ${his} gains. ${He} notices your gaze, so ${he} subtly flexes for your benefit. Cords of muscle ripple along ${his} massive thighs,`);
		if (eventSlave.bellyPreg >= 15000) {
			// no abs
		} else if (eventSlave.bellyPreg >= 10000) {
			t.push(`pregnancy ruined abs,`);
		} else if (eventSlave.belly >= 10000) {
			t.push(`hints of what were once abs across ${his} ${bellyAdjective(eventSlave)} taut middle,`);
		} else if (eventSlave.belly >= 1500) {
			t.push(`broadening abs,`);
		} else {
			t.push(`washboard abs,`);
		}
		t.push(`ripped biceps, and strapping lats.`);
		if (eventSlave.dick > 3) {
			t.push(`${His} massive cock completes the picture.`);
		}
		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result(`Reward ${him} for ${his} gains`, reward, fuckNote()),
			new App.Events.Result(`Take advantage of ${his} gains with a powerfuck`, powerfuck, fuckNote()),
			(isPlayerReceptive(eventSlave) && canPenetrate(eventSlave) && eventSlave.belly < 100000)
				? new App.Events.Result(`See if ${he} can put those gains to good use`, penetration, PCPenetrationWarning())
				: new App.Events.Result(),
			new App.Events.Result(`Compliment ${his} gains and send ${him} on ${his} way`, compliment),
		]);

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

		function reward() {
			let t = [];
			t.push(`You tell ${him} to spread ${his} towel on the floor and lie`);
			if (eventSlave.belly >= 5000) {
				t.push(`on ${his} side on it. You lie next to ${him} and`);
			} else {
				t.push(`face-down on it. You`);
			}
			t.push(`run your hands across ${his} sweaty ${V.seeRace === 1 ? eventSlave.race : ""} muscles before giving ${him} a thorough, skillful and very intense massage. ${He} moans and grunts as you work the lactic acid out of ${his} muscles, slowly reducing ${him} to a puddle of ripped sex slave. As you're rubbing ${him} down to finish the massage, ${he} meekly begs you to fuck ${him}.`);
			if (!canDoVaginal(eventSlave) && !canDoAnal(eventSlave)) {
				t.push(`You tell ${him} that's not an option and pull ${him} into a kiss instead. It's a strange sensation, this mass of muscle lying quietly still in your arms you, whimpering with delight as you gently make out with ${him}. Your wandering hands eventually tip ${him} over the edge; ${he} hugs you tight as ${he} shakes with orgasm. Once ${he} stops crushing you, you return to enjoying ${his} sweaty body.`);
			} else {
				t.push(`As ${he} lies still,`);
				if (V.PC.dick === 0) {
					t.push(`you lift one of ${his} legs and straddle yourself in to bring your groin against ${hers}. It's a strange sensation, this mass of muscle lying quietly still beneath you, whimpering with delight as you gently scissor yourself against ${him}. ${He} comes in no time at all. When ${he} does ${he} squeezes you between vice-like thighs, ${V.PC.vagina !== -1 ? "pressing your pussy deliciously and" : ""} bringing you to climax, too.`);
				} else {
					t.push(`you slowly push your cock into ${his}`);
					if (canDoVaginal(eventSlave)) {
						t.push(`pussy; ${he}'s so relaxed from the massage that it slides in easily.`);
						t.push(VCheck.Vaginal(eventSlave, 1));
						t.push(`It's a strange sensation, this mass of muscle lying quietly still beneath you, whimpering with delight as you gently penetrate ${him}. ${He} comes in no time at all. When ${he} does you happen to be halfway inside ${him}; ${he} wraps ${his} legs around you and pulls you into ${his} depths. You explode into ${him} as ${he} holds you in place with ${his} vice-like thighs.`);
					} else {
						t.push(`ass; ${he}'s so relaxed from the massage that it slides in easily.`);
						t.push(VCheck.Anal(eventSlave, 1));
						t.push(`It's a strange sensation, this mass of muscle lying quietly still beneath you, whimpering with delight as you gently take ${his} ass. ${He} comes in no time at all. When ${he} does you happen to be halfway inside ${him}; ${his} sphincter mercilessly squeezes your head while ${his} muscular buttocks clench your shaft between them. You explode into ${him}.`);
					}
				}
				if (eventSlave.dick > 0) {
					t.push(`As ${he} stands, ${his} now-softening penis drips cum.`);
				}
			}
			t.push(`<span class="devotion inc">${His} love for you has increased.</span>`);
			eventSlave.devotion += 4;
			return t;
		}

		function powerfuck() {
			let t = [];
			t.push(`It's time to see if ${he}'s got anything left in those sore ${V.seeRace === 1 ? eventSlave.race : ""} muscles. You push the towel off ${his} shoulder, take a lick of the delicious salty sweat along ${his} collarbone, and get to work. For the next hour, you put ${him} through a series of sexual positions that require ${him} to balance and support ${himself} in difficult positions. ${He} hangs from the ceiling, goes up on one tiptoe, and fucks in a handstand. ${He}'s as muscular inside as ${he} is outside.`);
			if (V.PC.dick === 0) {
				t.push(`You climax repeatedly, mixing your pussy juice with ${his} sweat all across ${his} body.`);
			} else {
				if (canDoVaginal(eventSlave)) {
					t.push(VCheck.Vaginal(eventSlave, 1));
					t.push(`You come repeatedly, and before long cum is dripping out of ${his} pussy as you continue.`);
				} else if (canDoAnal(eventSlave)) {
					t.push(VCheck.Anal(eventSlave, 1));
					t.push(`You come repeatedly, and before long cum is dripping out of ${his} ass as you continue.`);
				} else {
					t.push(`You come repeatedly, leaving ropes of your cum all across ${his} sweaty body.`);
				}
			}
			if (eventSlave.dick > 0) {
				t.push(`From position to position, ${his} erection adds its own fluids to the mess on the floor.`);
			}
			t.push(`By the end, ${he}'s shaking from muscle fatigue and panting ${his} gratitude. <span class="trust inc">${His} confidence in ${his} place has increased.</span>`);
			eventSlave.trust += 4;
			return t;
		}

		function penetration() {
			let t = [];
			t.push(`It's time to see if ${he}'s got anything left in those sore ${V.seeRace === 1 ? eventSlave.race : ""} muscles. You order ${him} to take you in a standing fuck${V.PC.belly >= 10000 ? ", a tall order given how pregnant you are" : ""}. Despite how exhausted ${he} is, ${he} manages to lift you and hilt ${himself} in your`);
			if (V.PC.vagina !== -1) {
				if (V.PC.vagina === 0){
					t.push(`virgin pussy, <span class="virginity loss">tearing through your hymen</span> in the way.`);
					V.PC.vagina++;
				} else {
					t.push("pussy.");
				}
			} else {
				if (V.PC.anus === 0){
					t.push(`untouched anus, <span class="virginity loss">taking your anal virginity</span> in the way.`);
					V.PC.anus++;
				} else {
					t.push("ass.");
				}
			}
			t.push(`You feel ${his} quivering trying to hold you up, so you permit ${him} to take you against the wall; a welcome respite for the`);
			if (eventSlave.belly >= 5000) {
				if (eventSlave.bellyPreg >= 3000) {
					if (eventSlave.belly >= 100000) {
						t.push("massively");
					} else if (eventSlave.belly >= 10000) {
						t.push("hugely");
					}
					t.push("pregnant");
				} else if (eventSlave.bellyFluid >= 5000) {
					t.push(`${eventSlave.inflationType}-filled`);
				} else {
					t.push(`${bellyAdjective(eventSlave)} bellied`);
				}
			}
			t.push("sweaty");
			if (eventSlave.physicalAge > 30) {
				t.push(`MILF.`);
			} else if (eventSlave.physicalAge > 17) {
				t.push(`slave${girl}.`);
			} else if (eventSlave.physicalAge > 12) {
				t.push(`teenager.`);
			} else {
				t.push(`kid.`);
			}
			t.push(`${He} dominantly fucks you, ${his} muscles flexing powerfully with every thrust. You're no slouch when it comes to muscles yourself, so when you feel ${him} tense with orgasm you wrap your legs around ${him} and hilt ${him} deep inside you. This only encourages ${him} to fuck you harder, quickly bring you to climax as well. ${He} gently carries you to your couch, where ${he} slides in behind you for a little post-coitus spooning. You definitely appreciate ${his} gains after such a good fuck. ${His} confidence in ${his} place has increased, as has ${his} love for you.`);
			eventSlave.trust += 4;
			eventSlave.devotion += 4;
			if (V.PC.vagina === -1) {
				seX(eventSlave, "penetrative", V.PC, "anal");
			} else {
				seX(eventSlave, "penetrative", V.PC, "vaginal");
			}
			if (canImpreg(V.PC, eventSlave)) {
				knockMeUp(V.PC, 50, 2, eventSlave.ID);
			}
			return t;
		}

		function compliment() {
			return `${He} finishes posing with an impressive display of ${his} obliques. ${He} walks powerfully to the shower, ${his} ripped buttocks delineating each step. The shower is glass-walled. As ${he} washes, several of your other slaves are waking up and starting their days. They can't help but stare as ${eventSlave.slaveName} soaps ${himself}. ${eventSlave.slaveName} enjoys the attention.`;
		}
	}
};


code:
App.Events.RESSMutinyAttempt = class RESSMutinyAttempt extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.PC.vagina > -1
		];
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canSee,
				canWalk,
				s => s.devotion <= 20,
				s => ((s.trust >= -20 && s.behavioralFlaw === "arrogant") || s.trust > 20),
				s => s.muscles > 30,
				s => s.health.condition > 20,
				s => s.energy > 50,
				canPenetrate
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself
		} = getPronouns(eventSlave);
		const hands = hasBothArms(eventSlave) ? "hands" : "hand";
		const dick = V.PC.dick !== 0 ? "dick" : "strap-on";

		App.Events.drawEventArt(node, eventSlave);
		let mutinyAttempted = true;

		let r = [];
		r.push(`Finishing your work, you lean back for a well-deserved break. Your peace is quickly disturbed by several loud smashes from down the penthouse hall. As you get up from your desk, you hear somebody running down the hallway, and before you know it,`);
		r.push(contextualIntro(V.PC, eventSlave, true));
		r.push(`is inside. ${He} is looking quite treacherous and`);
		if (eventSlave.skill.combat > 30) {
			r.push(`relatively confident.`);
		} else {
			r.push(`somewhat unsure.`);
		}
		r.push(`${He} quickly reaches in to grab you,`);
		if (V.PC.career === "gang") {
			if (V.personalArms !== 0) {
				r.push(`but when you point your handgun towards ${him}, ${he} stutters back with ${his} ${hands} pointing upwards.`);
			} else {
				r.push(`but you just have to reach for your trusty handgun to make the slave step back in fear.`);
			}
			mutinyAttempted = false;
		} else if (V.PC.career === "street urchin") {
			r.push(`but you slash at ${him} with your trusted knife, catching ${him} off guard and leaving a nasty gash. Before ${he} recovers ${his} senses, you make sure to have your knife to ${his} throat.`);
			mutinyAttempted = false;
			App.Medicine.Modification.addScar(eventSlave, either("left shoulder", "right shoulder", "back", "lower back", "belly", "left buttock", "right buttock"), "generic");
		} else if (V.PC.career === "mercenary" || V.PC.career === "recruit") {
			if (V.personalArms !== 0) {
				r.push(`but you quickly draw the weapon you always keep close at hand, forcing the slave to put ${his} ${hands} on the back of ${his} head.`);
			} else {
				r.push(`but you quickly grab ${his} arm, pull it towards you and lock it in ${his} back, pushing ${him} over the desk.`);
			}
			mutinyAttempted = false;
		} else if (isPCCareerInCategory("escort")) {
			r.push(`but you simply give ${him} a kick to the groin; ${he} wouldn't be the first person to try this shit on you.`);
			mutinyAttempted = false;
		} else if ((V.PC.career === "slaver" || V.PC.career === "slave overseer") || V.PC.skill.slaving >= 20) {
			r.push(`but you simply give ${him} a kick to the groin, a little trick you remember from your early days on how to deal with rebellious slaves.`);
			mutinyAttempted = false;
		} else if (V.PC.skill.warfare >= 20) {
			r.push(`but you have no problem grabbing ${him} and pushing ${him} to the ground, grabbing`);
			if (hasBothArms(eventSlave)) {
				r.push(`both of`);
			}
			r.push(`${his}`);
			if (hasBothArms(eventSlave)) {
				r.push(`arms`);
			} else {
				r.push(`arm`);
			}
			r.push(`to make sure ${he} doesn't try to step up.`);
			mutinyAttempted = false;
		} else if (V.PC.muscles >= eventSlave.muscles + 20 && canLift(eventSlave, V.PC)) {
			r.push(`but you are stronger, easily lifting ${him} into the air and slamming ${him} back to the ground.`);
			mutinyAttempted = false;
		} else if (V.PC.muscles >= eventSlave.muscles + 30) {
			r.push(`but you are far stronger; ${he}'s too big to lift, so you just overpower ${him} with sheer might.`);
			mutinyAttempted = false;
		} else {
			r.push(`and despite your attempts at fighting ${him} off, ${he} manages to get a hold on your body.`);
		}
		App.Events.addParagraph(node, r);

		r = [];
		if (mutinyAttempted) {
			r.push(`${He} doesn't seem to understand what ${he} is getting ${himself} into`);
			if (V.PC.boobs >= 300) {
				r.push(`as ${he} gropes your chest`);
			} else {
				r.push(`as ${he} runs ${his} ${hands} over your body`);
			}
			r.push(`in a desperate attempt at taking control.`);
			if (V.HeadGirlID !== 0) {
				const {
					he2, his2
				} = getPronouns(S.HeadGirl).appendSuffix("2");
				r.push(`You jump in surprise as ${S.HeadGirl.slaveName} tackles ${him} off you and to the floor`);
				if (S.HeadGirl.skill.combat > 60) {
					r.push(`where ${he2} twists ${his} arm in an arm hold until the rebellious slave stops struggling.`);
				} else {
					r.push(`where ${he2} settles ${his2} weight on the struggling rebel, lacking any better idea of what to do.`);
				}
				r.push(Spoken(S.HeadGirl, `"I'm sorry, ${getWrittenTitle(S.HeadGirl)}, ${he} tried to knock me out on ${his} way here. But as soon as I got up, I came running. I promise I saw nothing, but what should we do about ${him}?"`));
				mutinyAttempted = false;
			} else {
				r.push(`You try to fight ${him} off, but ${his} grip is stronger than you expected, so you will just have to bear with it, at least until an opening arises. If this gets out of the penthouse, your reputation as both arcology owner and as a slaver will be devastated.`);
			}
		}

		App.Events.addParagraph(node, r);
		let choices = [];
		let choices2 = [];
		if (mutinyAttempted) {
			choices.push(new App.Events.Result(`Fight ${him} off as much as you can`, fight));
			choices.push(new App.Events.Result(`Try to talk it out`, talk));
			choices.push(new App.Events.Result(`Fake playing along`, fake));
			App.Events.addResponses(node, choices);
		} else {
			App.Events.addParagraph(node, [`With the bitch restrained, you have all the time you need to devise ${his} punishment.`]);
			choices2.push(new App.Events.Result(`Lock ${his} dick in chastity`, lock));
			choices2.push(new App.Events.Result(`Flog ${him}`, flog));
			if (eventSlave.voice !== 0) {
				choices2.push(new App.Events.Result(`Mute ${him}`, mute, `This option will cost ${cashFormat(V.surgeryCost)}`));
			}
			choices2.push(new App.Events.Result(`Castrate ${him}`, castrate, `This option will cost ${cashFormat(V.surgeryCost)}`));
			if (eventSlave.vagina === -1) {
				choices2.push(new App.Events.Result(`Surgically alter ${his} gender`, genderbender, `This option will cost ${cashFormat(V.surgeryCost * 2)}`));
			} else {
				choices2.push(new App.Events.Result(`Remove ${his} male genitalia`, remove, `This option will cost ${cashFormat(V.surgeryCost * 2)}`));
			}
			choices2.push(new App.Events.Result(`Deny ${him} from ever having satisfying sex again`, deny, `This option will cost ${cashFormat(V.surgeryCost * 4)}`));
			App.Events.addResponses(node, choices2);
		}

		function fight(){
			const frag = document.createDocumentFragment();
			r = [];
			if (overpowerCheck(eventSlave, V.PC) >= random(1, 100)) {
				r.push(`You know your own body well, at least enough to be able to make it as difficult as possible for ${him} to use you. If ${he} were to loosen ${his} grip by a little, you'd be quick to shake ${him} off, but the position ${he}'s got you in doesn't leave much room to fight back. When you start to tire, ${he} pushes you to the wall and starts rubbing ${his}`);
				if (eventSlave.dick === 1) {
					r.push(`pathetic`);
				} else if (eventSlave.dick === 2) {
					r.push(`little`);
				} else if (eventSlave.dick === 3) { // empty
				} else if (eventSlave.dick === 4) {
					r.push(`big`);
				} else if (eventSlave.dick === 5) {
					r.push(`impressive`);
				} else if (eventSlave.dick === 6) {
					r.push(`huge`);
				} else if (eventSlave.dick === 7) {
					r.push(`gigantic`);
				} else if (eventSlave.dick === 8) {
					r.push(`titanic`);
				} else if (eventSlave.dick === 9) {
					r.push(`absurd`);
				} else if (eventSlave.dick === 10) {
					r.push(`inhuman`);
				} else {
					r.push(`hypertrophied`);
				}
				r.push(`dick on your lower body, thrusting blindly around your belly, before lodging ${himself} between your thighs. You have a hard time fighting against ${him} in your position, but you're not about to let ${him} dominate you either. You continue trying to shake ${him} off, making sure at the same time that your movements are as aggressive as possible to try and distract ${him} with pain or pleasure. You feel ${his} grip loosen as ${his} body tenses before pending orgasm, so you strongly push into ${him}, knocking ${him} off balance and to the floor. ${He} spills ${his} seed all over ${himself} and you as you wrestle ${him} into a chokehold. Now that you have ${him} restrained, it's time ${he} learned ${his} place.`);
			} else {
				r.push(`You know your own body well, but ${eventSlave.slaveName} is much stronger than you had thought. ${His} grip shows little sign of loosening despite your struggle, and ${he}'s got you in a position that allows for little other options to fight back. When you soon start to tire, ${he} pushes you to the wall, tears off your clothing, and starts rubbing ${his}`);
				if (eventSlave.dick === 1) {
					r.push(`pathetic`);
				} else if (eventSlave.dick === 2) {
					r.push(`little`);
				} else if (eventSlave.dick === 3) { // empty
				} else if (eventSlave.dick === 4) {
					r.push(`big`);
				} else if (eventSlave.dick === 5) {
					r.push(`impressive`);
				} else if (eventSlave.dick === 6) {
					r.push(`huge`);
				} else if (eventSlave.dick === 7) {
					r.push(`gigantic`);
				} else if (eventSlave.dick === 8) {
					r.push(`titanic`);
				} else if (eventSlave.dick === 9) {
					r.push(`absurd`);
				} else if (eventSlave.dick === 10) {
					r.push(`inhuman`);
				} else {
					r.push(`hypertrophied`);
				}
				r.push(`dick on your lower body, thrusting blindly around your belly, before suddenly lodging ${himself} in your pussy.`);
				if (V.PC.vagina === 0) {
					r.push(`Pain briefly floods your mind as ${he} robs you of your virginity. A short flash of surprise passes across ${eventSlave.slaveName}'s face before determination sets in again.`);
					V.PC.vagina = 1;
				}
				App.Events.addParagraph(frag, r);
				r = [];
				r.push(`You have an even harder time fighting against ${him} in this position, especially since your aggressive movements seem to send a pleasurable sensation to ${his} cock. You only manage to find an opportunity to free yourself when ${he} reaches orgasm, shooting ${his} seed deep inside you. As ${he} cums, you strongly push into ${him}, knocking ${him} off balance and to the floor. By sheer luck, ${his} head strikes a large paperweight that was thrown across the room in your struggle, knocking ${him} unconscious long enough for you to dislodge yourself and tie ${him} up. Now that you have ${him} restrained, it's time ${he} learned ${his} place.`);
				seX(eventSlave, "penetrative", V.PC, "vaginal");
				if (canImpreg(V.PC, eventSlave)) {
					r.push(knockMeUp(V.PC, 50, 0, eventSlave.ID));
				}
				V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
			}
			App.Events.addParagraph(frag, r);
			App.Events.addResponses(frag, choices2);
			return frag;
		}

		function talk() {
			const frag = document.createDocumentFragment();
			let r = [];
			r.push(`You start trying to talk ${him} down, hoping to persuade ${him} that you might reconsider your punishment if ${he} stopped this foolishness.`);
			if (V.PC.vagina === 0) {
				r.push(`You don't stoop to begging for your virginity, but you do remind ${him} that taking something so valuable from you will certainly not go unpunished.`);
			}
			r.push(`${He} doesn't seem too keen on`);
			if (canHear(eventSlave)) {
				r.push(`listening to`);
			} else {
				r.push(`acknowledging`);
			}
			r.push(`you, instead pushing you against a wall and tearing your clothes off. Ignoring your words, ${he} forces ${his}`);
			if (eventSlave.dick === 1) {
				r.push(`pathetic`);
			} else if (eventSlave.dick === 2) {
				r.push(`little`);
			} else if (eventSlave.dick === 3) { // empty
			} else if (eventSlave.dick === 4) {
				r.push(`big`);
			} else if (eventSlave.dick === 5) {
				r.push(`impressive`);
			} else if (eventSlave.dick === 6) {
				r.push(`huge`);
			} else if (eventSlave.dick === 7) {
				r.push(`gigantic`);
			} else if (eventSlave.dick === 8) {
				r.push(`titanic`);
			} else if (eventSlave.dick === 9) {
				r.push(`absurd`);
			} else if (eventSlave.dick === 10) {
				r.push(`inhuman`);
			} else {
				r.push(`hypertrophied`);
			}
			r.push(`dick in without a second thought.`);
			if (V.PC.vagina === 0) {
				r.push(`Pain briefly floods your mind as ${he} violently robs you of your virginity. It seems that reminding ${him} of your cunt's untouched status just added to ${his} motivation.`);
				V.PC.vagina = 1;
			} else {
				r.push(`You make sure to clamp down as hard as possible so the experience is not all that pleasant for ${him}, but ${he} continues to thrust in a daze.`);
			}
			if (canImpreg(V.PC, eventSlave)) {
				r.push(`You make one last plea for ${him} not to cum inside; it's a danger day. If anything, it only encourages ${him} to thrust deeper before painting the insides of your pussy with ${his} load.`);
				r.push(knockMeUp(V.PC, 100, 0, eventSlave.ID));
			}
			r.push(`Once spent, ${he} shoves you to the ground and crashes into your office chair. The moment ${he} lets down ${his} guard, you slam the heaviest object you can find into ${his} head. Now that you have ${him} controlled, it's time ${he} learned ${his} place — when ${he} wakes up, of course. It's more fun that way.`);
			seX(eventSlave, "penetrative", V.PC, "vaginal");
			V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
			App.Events.addParagraph(frag, r);
			App.Events.addResponses(frag, choices2);
			return frag;
		}

		function fake() {
			const frag = document.createDocumentFragment();
			let r = [];
			r.push(`You start removing your top and putting on a show of seducing your slave, dropping to your knees while looking doe-eyed at ${him}. By sucking ${him} off, you'll probably get ${him} to lower ${his} guard enough to get the upper hand. You take ${his}`);
			if (eventSlave.dick === 1) {
				r.push(`pathetic`);
			} else if (eventSlave.dick === 2) {
				r.push(`little`);
			} else if (eventSlave.dick === 3) { // empty
			} else if (eventSlave.dick === 4) {
				r.push(`big`);
			} else if (eventSlave.dick === 5) {
				r.push(`impressive`);
			} else if (eventSlave.dick === 6) {
				r.push(`huge`);
			} else if (eventSlave.dick === 7) {
				r.push(`gigantic`);
			} else if (eventSlave.dick === 8) {
				r.push(`titanic`);
			} else if (eventSlave.dick === 9) {
				r.push(`absurd`);
			} else if (eventSlave.dick === 10) {
				r.push(`inhuman`);
			} else {
				r.push(`hypertrophied`);
			}
			r.push(`dick inside your`);
			if (["escort", "prostitute", "child prostitute", "servant"].includes(V.PC.career)) {
				r.push(`expert`);
			}
			r.push(`mouth. You diligently suck until you feel ${him} begin to tense up; this is your chance. You clamp down on ${his} cock while simultaneously punching ${him} in the balls. ${He} howls in pain, until you headbutt ${him} in the stomach and knock the wind out of ${him}. You quickly pull ${him} into an arm lock and force ${him} over your desk. Now that you have ${him} restrained, it's time ${he} learned ${his} place — after you've gotten the taste of the slut out of your mouth, that is.`);
			App.Events.addParagraph(frag, r);
			App.Events.addResponses(frag, choices2);
			return frag;
		}

		function lock() {
			eventSlave.trust += 10;
			eventSlave.chastityPenis = 1;
			V.slaves.forEach(function(s) { if (s.devotion < -50) { s.trust += 5; } });
			return `You simply clamp a chastity cage onto ${his} limp dick; ${he}'ll be taking a little break from fucking girls for the time being. When ${he} comes to and finds ${himself} locked in chastity, ${he} immediately begins fiddling with it in an attempt to remove it. ${He} feels this punishment is laughable and only grows more defiant. Word spreads through your chattel that the only downside of trying to rape ${getWrittenTitle(eventSlave)} is getting locked in chastity, spreading defiance through your rebellious slaves.`;
		}

		function flog() {
			eventSlave.trust -= 15;
			healthDamage(eventSlave, 15);
			V.slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 5; } });
			return `You bind ${his} naked body to the wall in preparation for a good beating. Going against one's master is bad, but going against you is even worse. You thoroughly strike ${him}, showering extra attention to ${his} crotch, while making sure ${he} will be in pain for days to come. Such a beating leaves ${him} in agonizing pain and makes a clear example to ${him} and all your other rebellious slaves that you are not to be trifled with.`;
		}

		function mute() {
			eventSlave.trust += 5;
			eventSlave.devotion -= 15;
			eventSlave.voice = 0;
			V.slaves.forEach(function(s) { if (s.devotion < -50) { s.trust += 10; } });
			cashX(forceNeg(V.surgeryCost), "slaveSurgery", eventSlave);
			return `As you pull ${his} limp body to the remote surgery, you notice ${he} understands what ${he} has done and begs you to reconsider your decision; but your mind is set. ${He} tried to rape you, ${he} must be silenced. Restrained as ${he} is, the most ${he} can do is cry and beg. When ${he} awakens from surgery, ${he} realizes all you did was stop ${him} from talking; what stops ${him} from making another go at you? Your other rebellious slaves see this as a minor loss for a potentially huge gain and, if anything, become more defiant.`;
		}

		function castrate() {
			eventSlave.trust -= 20;
			eventSlave.devotion -= 10;
			eventSlave.balls = 0;
			eventSlave.scrotum = 0;
			V.slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 10; } });
			cashX(forceNeg(V.surgeryCost), "slaveSurgery", eventSlave);
			surgeryDamage(eventSlave, 10);
			return `As you pull ${his} limp body to the remote surgery, you notice ${he} understands what ${he} has done and begs you to reconsider your decision; but your mind is set. ${He} had the balls to try and rape you, and now ${he} won't. Restrained as ${he} is, the most ${he} can do is cry and beg. Once ${he} comes to after the surgery, ${he} faces ${his} new life; ${he}'ll never get hard again and ${he}'s the only one to blame for ${his} suffering. Every other rebellious slave is mortified by the example.`;
		}

		function genderbender() {
			eventSlave.trust -= 30;
			eventSlave.devotion -= 25;
			eventSlave.dick = 0;
			eventSlave.balls = 0;
			eventSlave.scrotum = 0;
			eventSlave.prostate = 0;
			eventSlave.dickAccessory = "none";
			eventSlave.vagina = 1;
			eventSlave.chastityPenis = 0;
			V.slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } });
			cashX(forceNeg(V.surgeryCost*2), "slaveSurgery", eventSlave);
			surgeryDamage(eventSlave, 20);

			let r = [];
			r.push(`You ask ${him} if ${he} enjoyed the last time ${he} used ${his} dick and if it was worth crossing you, because it will not happen again. Restrained as ${he} is, the most ${he} can do is cry and beg. Once ${he} comes to after the surgery, ${he} faces ${his} new body; ${he}'s now a shemale and ${he}'s the only one to blame for ${his} suffering. You waste no time in shoving ${him} against the wall and forcing your ${dick} into ${his} virgin pussy. You use ${him} until you are satisfied and toss ${him} to the floor to think about ${his} new life. Every other rebellious slave is horrified by the example.`);
			r.push(VCheck.Vaginal(eventSlave, 1));
			return r;
		}

		function remove() {
			eventSlave.trust -= 30;
			eventSlave.devotion -= 25;
			eventSlave.dick = 0;
			eventSlave.foreskin = 0;
			eventSlave.balls = 0;
			eventSlave.scrotum = 0;
			eventSlave.dickAccessory = "none";
			eventSlave.chastityPenis = 0;
			V.slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } });
			cashX(forceNeg(V.surgeryCost*2), "slaveSurgery", eventSlave);
			surgeryDamage(eventSlave, 20);
			return `You ask ${him} if ${he} enjoyed the last time ${he} used ${his} dick and if it was worth crossing you, because it will not happen again. Restrained as ${he} is, the most ${he} can do is cry and beg. Once ${he} comes to after the surgery, ${he} faces ${his} new body; ${he}'s now a surgical null and ${he}'s the only one to blame for ${his} suffering. Every other rebellious slave is horrified by the example.`;
		}

		function deny() {
			eventSlave.trust -= 50;
			eventSlave.devotion -= 30;
			eventSlave.dick = 0;
			eventSlave.prostate = 0;
			eventSlave.dickAccessory = "none";
			eventSlave.chastityPenis = 0;
			eventSlave.vagina = 0;
			eventSlave.ovaries = 0;
			eventSlave.clit = 0;
			eventSlave.labia = 0;
			eventSlave.vaginalAccessory = "none";
			eventSlave.vaginalAttachment = "none";
			eventSlave.chastityVagina = 0;
			V.slaves.forEach(function(s) { if (s.devotion < -50) { s.trust -= 15; } });
			cashX(forceNeg(V.surgeryCost*4), "slaveSurgery", eventSlave);
			surgeryDamage(eventSlave, 20);

			let r = [];
			r.push(`You ask ${him} if ${he} enjoyed ${his} last orgasm, because ${he} won't be getting any more. Restrained as ${he} is, the most ${he} can do is cry and beg. Once ${he} comes to after the surgery, ${he} faces ${his} new body; ${he}'s now a surgical null, though ${he} retains ${his} balls, and ${he}'s the only one to blame for ${his} suffering. You waste no time in shoving ${him} against the wall and forcing your ${dick} into ${his} anus. As ${his} arousal grows, ${he} realizes you not only took ${his} dick, but ${his} prostate as well. ${He} quickly finds ${himself} desperate for release but lacking any way to do so. You watch ${him} squirm in sexual frustration. This will be ${his} new life. Every other rebellious slave is horrified by the example.`);
			r.push(VCheck.Anal(eventSlave, 1));
			return r;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				canMove,
				s => s.rules.speech !== "restrictive",
				s => s.rules.release.master === 1,
				s => s.devotion >= -20,
				s => s.trust >= -20,
				s => s.energy > 75,
				s => ((canDoVaginal(s) && s.vagina > 0) || (canDoAnal(s) && s.anus > 0))
			]
		];
	}

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

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

		let r = [];
		r.push(`As you are retiring for the night,`);
		r.push(contextualIntro(V.PC, eventSlave, true));
		if (!canWalk(eventSlave)) {
			if (eventSlave.rules.mobility === "permissive") {
				r.push(`hobbles`);
			} else {
				r.push(`crawls`);
			}
		} else if (shoeHeelCategory(eventSlave) > 1) {
			r.push(`totters`);
		} else if (eventSlave.belly >= 10000) {
			r.push(`waddles`);
		} else {
			r.push(`walks`);
		}
		r.push(`into your bedroom and ${canStand(eventSlave) ? "stands" : "settles"} before you submissively. Since ${he}'s allowed to ask questions,`);
		if (!canTalk(eventSlave)) {
			r.push(`${he} begs you with gestures to have sex with ${him}.`);
		} else {
			if (eventSlave.lips > 70) {
				r.push(`${he} says meekly through ${his} massive dick-sucking lips,`);
			} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
				r.push(`${he} says meekly through ${his} inconvenient oral piercings,`);
			} else {
				r.push(`${he} says meekly,`);
			}
			r.push(Spoken(eventSlave, `"${capFirstChar(Master)}, would you please fuck me?"`));
		}

		App.Events.addParagraph(node, r);
		let choices = [];
		if (canDoVaginal(eventSlave) || canDoAnal(eventSlave)){
			choices.push(new App.Events.Result(`Fuck ${him} as ${he} asks`, fuck, (eventSlave.anus === 0 && canDoAnal(eventSlave)) || (eventSlave.vagina === 0 && canDoVaginal(eventSlave)) ? `This option will take ${his} virginity` : null));
			if (canDoVaginal(eventSlave)) {
				choices.push(new App.Events.Result(`Rape ${him}`, rape, (eventSlave.vagina === 0) ? `This option will take ${his} virginity` : null));
			}
			if (canDoAnal(eventSlave)) {
				choices.push(new App.Events.Result(`Assrape ${him}`, assrape, (eventSlave.anus === 0) ? `This option will take ${his} anal virginity` : null));
			}
		}
		choices.push(new App.Events.Result(`Play with ${him}`, play, (eventSlave.anus === 0 && canDoAnal(eventSlave)) || (eventSlave.vagina === 0 && canDoVaginal(eventSlave)) ? `This option will take ${his} virginity` : null));
		choices.push(new App.Events.Result(`Send ${him} away`, away));
		App.Events.addResponses(node, choices);

		function fuck(){
			r = [];
			r.push(`${He} almost sobs with joy as`);
			if (V.PC.dick === 0) {
				r.push(`your strap-on enters`);
			} else {
				r.push(`you enter`);
			}
			r.push(`${him}. The two of you have`);
			if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
				r.push(`passionate oral, vanilla, and finally anal sex`);
			} else if (canDoVaginal(eventSlave)) {
				r.push(`gentle vanilla sex`);
			} else {
				r.push(`gentle anal sex`);
			}
			r.push(`for the rest of the`);
			if (V.PC.vagina !== -1 && V.PC.dick !== 0) {
				r.push(`night; whenever you go soft for a moment, all ${he} has to do is eat you out, and you're rock hard again`);
			} else {
				r.push(`night.`);
			}
			r.push(`As you move from position to position,`);
			if (eventSlave.belly >= 5000) {
				r.push(`and exploring several unusual ones thanks to ${his} ${belly}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnancy,`);
				} else {
					r.push(`belly,`);
				}
			}
			r.push(`${he} twists to face you whenever ${he} can. When ${he} manages it, ${he} kisses you when ${he} can reach your lips, and ${he}`);
			if (canSee(eventSlave)) {
				r.push(`stares deeply into your eyes`);
			} else {
				r.push(`meets your face with ${his} own`);
			}
			r.push(`when ${he} cannot. ${His} trust in you <span class="trust inc">has increased.</span>`);
			eventSlave.trust += 4;
			if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
				r.push(VCheck.Both(eventSlave, 6));
			} else if (canDoVaginal(eventSlave)) {
				r.push(VCheck.Vaginal(eventSlave, 4));
			} else {
				r.push(VCheck.Anal(eventSlave, 4));
			}
			seX(eventSlave, "oral", V.PC, "penetrative", 3);
			return r;
		}

		function rape() {
			r = [];
			r.push(`You order ${him} to kneel. ${He} looks hopeful and complies, but ${his} anticipation of enjoyable sex vanishes with a pathetic little gasp when you`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`shove ${him} to the floor. With nothing more than the arousal ${he} came in with, you brutally rape ${him}, fucking ${his}`);
			if (V.seeRace === 1) {
				r.push(eventSlave.race);
			}
			r.push(`pussy to the limit of what you can get away with without damaging ${him}.`);
			if (((eventSlave.fetish === Fetish.SUBMISSIVE && (eventSlave.fetishStrength > 60 || eventSlave.energy > 95))) && (eventSlave.fetishKnown === 1)) {	// TODO: .energy should behave differently
				r.push(`${He}'s such a submissive that after a while pleasure overwhelms pain to the extent that ${he} manages a <span class="devotion inc">sobbing orgasm.</span>`);
			} else {
				r.push(`${He} gets the message: ${he}'s your property and ${his} desires are entirely subject to your will. ${His} submission to you and fear of you have both increased.`);
				eventSlave.trust -= 3;
			}
			eventSlave.devotion += 3;
			r.push(VCheck.Vaginal(eventSlave, 1));
			return r;
		}

		function assrape() {
			r = [];
			r.push(`You order ${him} to kneel. ${He} looks hopeful and complies, but ${his} anticipation of enjoyable sex vanishes with a pathetic little gasp when you`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			if (V.PC.vagina !== -1) {
				r.push(`use a couple of fingers to collect some of your pussyjuice for improvised lube.`);
			} else {
				r.push(`spit on ${his} butthole.`);
			}
			r.push(`With only a little saliva as lubrication, you brutally sodomize ${him}, fucking ${his}`);
			if (V.seeRace === 1) {
				r.push(eventSlave.race);
			}
			r.push(`ass to the limit of what you can get away with without damaging ${him}.`);
			if (((eventSlave.fetish === "buttslut" && eventSlave.fetishStrength > 60) || (eventSlave.energy > 95)) && (eventSlave.fetishKnown === 1)) {
				r.push(`${He} loves anal so much that after a while pleasure overwhelms pain to the extent that ${he} manages a <span class="devotion inc">sobbing orgasm.</span>`);
			} else {
				r.push(`${He} gets the message: ${he}'s your property and ${his} desires are entirely subject to your will. ${His} submission to you and fear of you have both increased.`);
				eventSlave.trust -= 3;
			}
			eventSlave.devotion += 3;
			r.push(VCheck.Anal(eventSlave, 1));
			return r;
		}

		function play() {
			// replace slave art
			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, eventSlave, "no clothing");

			r = [];
			if (canSee(eventSlave)) {
				r.push(`You get into bed and crook a finger, silently`);
			} else if (canHear(eventSlave)) {
				r.push(`You get into bed and growl sexually,`);
			} else {
				r.push(`You pull ${him} towards your bed and collapse onto it,`);
			}
			r.push(`ordering ${him} to join you. ${He}`);
			if (App.Data.clothes.get(eventSlave.clothes).exposure <= 3) {
				r.push(`hurries out of ${his} clothes and`);
			}
			r.push(`bounces over,`);
			if (eventSlave.chastityPenis === 1) {
				r.push(`${his} posture communicating the arousal that ${his} caged cock cannot.`);
			} else if (eventSlave.dick > 0 && eventSlave.hormoneBalance >= 100) {
				r.push(`${his} impotent dick already streaming watery precum.`);
			} else if (eventSlave.dick > 0 && eventSlave.balls === 0) {
				r.push(`${his} dick pathetically soft despite ${his} obvious arousal.`);
			} else if (eventSlave.dick > maxErectionSize(eventSlave) && !canAchieveErection(eventSlave)) {
				r.push(`${his} dick swollen with arousal yet too large to become erect.`);
			} else if (eventSlave.dick > 0 && !canAchieveErection(eventSlave)) {
				r.push(`${his} dick tipped with precum yet enable to get hard.`);
			} else if (eventSlave.dick > 4) {
				r.push(`${his} massive cock rock hard.`);
			} else if (eventSlave.dick > 2) {
				r.push(`${his} erection standing out stiffly.`);
			} else if (eventSlave.dick > 0) {
				r.push(`${his} tiny little dick poking out stiffly.`);
			} else if (eventSlave.clit > 0) {
				r.push(`${his} big clit visibly stiff.`);
			} else if (eventSlave.vagina === -1) {
				r.push(`already arching ${his} back to present ${his} bottom.`);
			} else {
				r.push(`${his} pussylips shining with arousal.`);
			}
			r.push(`As ${he}`);
			if (eventSlave.belly >= 10000 || eventSlave.weight > 130) {
				r.push(`hefts ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`gravid`);
				}
				r.push(`bulk`);
			} else {
				r.push(`climbs`);
			}
			r.push(`into bed you take ${his} ${eventSlave.skin} ${hasAnyArms(eventSlave) ? "hand" : "hips"} and guide ${him}`);
			if (V.PC.belly >= 10000 || V.PC.dick.isBetween(0, 3)) {
				r.push(`rear up and face down so you may mount ${him}.`);
			} else {
				r.push(`into your lap, facing away from you.`);
			}
			r.push(`${He} sighs happily and snuggles ${his}`);
			if (eventSlave.weight > 160) {
				r.push(`rippling`);
			} else if (eventSlave.weight > 95) {
				r.push(`soft`);
			} else if (eventSlave.muscles > 95) {
				r.push(`ripped`);
			} else if (eventSlave.muscles > 30) {
				r.push(`muscular`);
			} else if (eventSlave.muscles > 5) {
				r.push(`toned`);
			} else {
				r.push(`soft`);
			}
			r.push(`back`);
			if (V.PC.belly >= 10000) {
				r.push(`against the underside of your belly.`);
			} else {
				r.push(`into your chest.`);
			}
			r.push(`You`);
			if (eventSlave.belly >= 5000) {
				r.push(`embrace ${his} ${belly}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnant`);
				}
				r.push(`belly before you`);
			} else if (eventSlave.weight > 95) {
				r.push(`embrace ${his} plush body before you`);
			}
			if (eventSlave.boobs > 2000) {
				r.push(`run your hands across ${his} massive chest`);
			} else if (eventSlave.boobs > 800) {
				r.push(`heft ${his} heavy breasts`);
			} else {
				r.push(`massage ${his} pretty chest`);
			}
			r.push(`and tease ${his}`);
			if (eventSlave.nipples === "huge") {
				r.push(`ridiculous`);
			} else if (eventSlave.nipples === "flat") {
				r.push(`fat`);
			} else if (eventSlave.nipples === "puffy") {
				r.push(`puffy`);
			} else if (eventSlave.nipples === "inverted") {
				r.push(`shy`);
			} else if (eventSlave.nipples === "partially inverted") {
				r.push(`exposed`);
			} else if (eventSlave.nipples === "fuckable") {
				r.push(`deep`);
			} else {
				r.push(`erect`);
			}
			r.push(`nipples, as ${he} shimmies ${himself} back`);
			if (V.PC.dick === 0) {
				r.push(`so ${his} warmth is against yours, your legs spreading ${his}`);
			} else {
				r.push(`onto you so your cock is lodged between ${his}`);
			}
			if (eventSlave.butt > 10) {
				r.push(`unfathomable`);
			} else if (eventSlave.butt > 5) {
				r.push(`incredible`);
			} else if (eventSlave.butt > 2) {
				r.push(`healthy`);
			} else {
				r.push(`pert`);
			}
			r.push(`buttocks. When ${he}'s close to orgasm from all the stimulation, ${he} reflexively squeezes`);
			if (V.PC.dick === 0) {
				r.push(`your body between ${his} legs,`);
			} else {
				r.push(`your dick between ${his} asscheeks,`);
			}
			r.push(`bringing you to climax. At the feeling of your`);
			if (V.PC.dick === 0) {
				r.push(`juices`);
			} else {
				r.push(`warm cum`);
			}
			r.push(`between ${his}`);
			if (eventSlave.weight > 190) {
				r.push(`immense`);
			} else if (eventSlave.weight > 160) {
				r.push(`massive`);
			} else if (eventSlave.weight > 130) {
				r.push(`huge`);
			} else if (eventSlave.weight > 95) {
				r.push(`thick`);
			} else if (eventSlave.weight > 10) {
				r.push(`ample`);
			} else if (eventSlave.weight >= -10) {
				r.push(`trim`);
			}
			r.push(`thighs, ${he} tips over the edge and`);
			if (eventSlave.chastityPenis === 1) {
				r.push(`shivers with orgasm, ejaculate dribbling out of ${his} chastity cage.`);
			} else if (eventSlave.dick > 0 && eventSlave.hormoneBalance >= 100) {
				r.push(`cums weakly, ${his} soft dick twitching.`);
			} else if (eventSlave.dick > 0 && (eventSlave.balls === 0 || eventSlave.ballType === "sterile")) {
				r.push(`shivers with orgasm, ${his} soft dick twitching weakly.`);
			} else if (eventSlave.balls > 4) {
				r.push(`making a massive mess all over ${himself}.`);
			} else if (eventSlave.balls > 2) {
				r.push(`adding ${his} own load to the mess.`);
			} else if (eventSlave.balls > 0) {
				r.push(`adding ${his} own pathetic load to the mess.`);
			} else if (eventSlave.clit > 0) {
				r.push(`pitches forward convulsively, gasping with overstimulation at the sensation on ${his} huge clit.`);
			} else {
				r.push(`quivers in your grasp, gasping, before relaxing back into you in a puddle of satisfaction.`);
			}
			r.push(`${His} devotion to you <span class="devotion inc">has increased.</span>`);
			eventSlave.devotion += 4;
			if (canDoVaginal(eventSlave)) {
				r.push(VCheck.Vaginal(eventSlave));
			} else {
				r.push(VCheck.Anal(eventSlave));
			}
			return r;
		}

		function away() {
			eventSlave.devotion += 4;
			return `${He} tries to hide ${his} disappointment as ${he} turns to go, and as ${he} flees out the door you hear ${him} begin to cry. By the next morning, however, ${his} responses to your commands have become less flirtatious and much more attentive. ${His} obedience to you has increased.`;
		}
	}
};


code:
// cSpell:ignore splurts

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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				hasAnyLegs,
				s => s.aphrodisiacs > 0 || s.inflationType === "aphrodisiac",
				s => s.addict > 20,
				s => s.devotion > 20 || s.trust < -20
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let t = [];

		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`takes ${his} aphrodisiacs in pill form, with ${his} food. They're dispensed alongside ${his} nutrition in the kitchen. You happen to be passing by when ${he}'s being issued ${his} drugs, and you see ${him} ${canSee(eventSlave) ? "staring" : "gazing"} thoughtfully at the insignificant-looking little pill, just holding it in ${his} hand and considering it for a long time. When ${he} realizes you're watching, ${he} turns to you and you realize ${his} eyes are moist.`);
		if (canTalk(eventSlave)) {
			t.push(`${He} ${SlaveStatsChecker.checkForLisp(eventSlave) ? "lisps through huge, quivering lips" : "mutters"}, "${Master}, ${Spoken(eventSlave, "I hate this shit. I come and come and come but it's just physical. I haven't felt close to anyone ever since I've been on these fucking aphrodisiacs.")}" ${He} shrugs bitterly. ${Spoken(eventSlave, `"Still crave them though."`)}`);
		} else {
			t.push(`${He} uses trembling gestures to pour out dissatisfaction with life as an aphrodisiac addict. ${He} is emotionally unsatisfied with the mechanical orgasms ${he} gets on the drugs, but craves them intensely.`);
		}
		App.Events.addParagraph(node, t);
		t = [];

		App.Events.addResponses(node, [
			new App.Events.Result(`Make an example by forcing ${him} to take a massive dose`, forceful),
			canDoVaginal(eventSlave) || canDoAnal(eventSlave)
				? new App.Events.Result(`Have caring sex with ${him} before ${he} takes the aphrodisiacs`, caring, virginityCheck())
				: new App.Events.Result()
		]);

		function forceful() {
			t = [];

			if (hasAnyEyes(eventSlave)) {
				t.push(`You take ${him} by the shoulders, look into ${his} ${hasBothEyes(eventSlave) ? "eyes" : "eye"},`);
			} else {
				t.push(`You take ${him} by the shoulders`);
			}
			t.push(`and tell ${him} you'll fix things so ${he} doesn't mind so much. ${He} looks hopeful, even when you tell ${him} to take ${his} pill. ${He} does, and you hand ${him} another. And another. ${He}'s crying with dread by the fourth pill, knowing that this is ${his} punishment for complaining. ${His} pupils dilate, ${he} begins to breathe hard, and ${his} ${eventSlave.skin} skin flushes badly. ${He} tries to beg you to fuck ${him} but can't seem to find the words. ${He} begins to masturbate compulsively, so hard that ${he} collapses to the kitchen floor with ${his} first spastic orgasm.`);
			if (eventSlave.chastityPenis === 1) {
				t.push(`${His} cock is painfully compressed by ${his} chastity cage, but it does nothing to stop ${his} frantic efforts to come.`);
			} else if (canAchieveErection(eventSlave)) {
				if (eventSlave.dick > 9) {
					t.push(`${His} inhuman cock is as engorged as physically possible given its size, threatens to knock ${him} unconscious from the sheer amount of blood diverted into it, and doesn't shrink at all when cum weakly splurts from its tip.`);
				} else if (eventSlave.dick > maxErectionSize(eventSlave)) {
					t.push(`${His} monstrous cock is agonizingly erect, threatens to knock ${him} unconscious from the sheer amount of blood is takes ${him} to get hard, and doesn't soften at all when ${he} spatters ${his} own chest with cum.`);
				} else if (eventSlave.dick > 4) {
					t.push(`${His} huge cock is agonizingly erect and doesn't soften at all when ${he} spatters ${his} own chest with cum.`);
				} else if (eventSlave.dick > 3) {
					t.push(`${His} big cock is agonizingly erect and doesn't soften at all when ${he} spatters ${his} own chest with cum.`);
				} else if (eventSlave.dick > 1) {
					t.push(`${His} cock is agonizingly erect and doesn't soften at all when ${he} spatters ${his} own chest with cum.`);
				} else if (eventSlave.dick > 0) {
					t.push(`${His} pathetic dick is agonizingly erect and doesn't soften at all when ${he} weakly dribbles cum.`);
				}
			} else if (canDoVaginal(eventSlave)) {
				t.push(`${His} pussy is dripping with moisture and ${his} ragingly stiff clit doesn't soften at all when ${he} comes.`);
			} else if (canDoAnal(eventSlave)) {
				t.push(`${His} hungry asshole spasms with orgasm, but ${he} doesn't even pause ${his} anal masturbation.`);
			} else {
				t.push(`${His} whole body spasms with orgasm, but ${he} doesn't even pause ${his} efforts to draw out an orgasm by any means possible.`);
			}
			t.push(`For the hour or so it takes ${him} to pass out, slaves using the kitchen have to step over ${his} prostrate, orgasming body, lying in a pool of ${his} own drool, tears, sweat, and fluids. The next time you see ${him} in the kitchen, ${he} takes ${his} medicine like a good ${girl}. All your aphrodisiac addicts recognize the symptoms and the punishment, and avoid even thinking about resisting the system.`);

			V.slaves.forEach(function(s) { if (s.aphrodisiacs > 0 || s.inflationType === "aphrodisiac") { s.trust -= 5; } });
			return t;
		}

		function caring() {
			t = [];

			t.push(`You back ${him} up against the wall of the kitchen, kissing ${him}, touching ${his} body with care, and quietly shushing ${his} attempts to ask questions. You deftly extract the pill form ${his} hand and put it on the counter for later. With time and skill you bring ${him} to a fine state of arousal, not to mention emotional need; ${he} begins to kiss you back with almost frantic enthusiasm. When ${he}'s clearly ready, you lay ${him} across the kitchen table and ${PC.dick === 0 ? `work your groin up between ${his} legs` : `enter ${him}`}, drawing out a lusty moan. As the sex continues, however, ${he} begins to look doubtful, then distracted, and then to twitch occasionally. Finally ${he} bursts into tears.`);
			if (canTalk(eventSlave)) {
				t.push(`"I — I — fucking need my fix to come, ${Master}," ${he} sobs.`);
			} else {
				t.push(`${He} indicates through ${his} weeping that ${he} can't climax without the drugs.`);
			}
			t.push(`You pass ${him} the pill, and ${he} continues to weep inconsolably, apologizing all the while, until the drug takes away ${his} ability to care about anything but getting fucked. When you finish and extract ${PC.dick === 0 ? `yourself from between ${his} legs` : `your cock from ${his} well-used hole`}, though, you think you can detect a deep sadness in ${his} eyes that it cannot reach.`);
			if (canDoVaginal(eventSlave)) {
				t.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				t.push(VCheck.Anal(eventSlave, 1));
			}

			eventSlave.devotion += 4;
			return t;
		}

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


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				canTalk,
				canSee,
				s => s.behavioralFlaw === "bitchy",
				s => s.devotion > 20,
				s => s.trust >= -20
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let t = [];

		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`is a decent slave, pretty well broken to your will and generally obedient. However, ${he} retains a cutting tongue. Though ${he}'s learned to ${his} considerable cost not to direct ${his} cheek at you, ${he} still insults your other slaves, and worse, will be sarcastic to members of the public ${he} encounters. You've worked on it, but it remains unsolved. Today, however, ${he} crossed the line. You were doing business in your office with a respected female slave drug wholesaler. The woman is in her late forties, and though she's something of a plastic surgery addict she has permitted her hair to go a becoming steel grey. Passing your office, ${eventSlave.slaveName} audibly commented on how old she looked to`);
		if (canStand(eventSlave)) {
			t.push(`another slave.`);
		} else {
			t.push(`${his} aide.`);
		}
		t.push(`Anger flashes in the businesswoman's eyes.`);

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

		App.Events.addResponses(node, [
			new App.Events.Result("Beg her pardon and offer to loan the bitch to her", loan),
			new App.Events.Result("Offer to spitroast the bitch between the two of you", spitroast, analVirginWarning()),
			V.arcade > 0
				? new App.Events.Result(`Sentence ${him} to a month in the arcade`, arcade)
				: new App.Events.Result()
		]);

		function loan() {
			t = [];

			t.push(`The businesswoman's anger turns to malicious anticipation as you call ${eventSlave.slaveName} over and inform ${him} that you and the businesswoman have decided ${eventSlave.slaveName} will be spending the night with her. Now that you look at your business partner, she has certain signs of a sadist. ${eventSlave.slaveName} notices too, and begins to cry ${eventSlave.bellyPreg >= 1500 ? `and shield ${his} pregnancy` : ""} as the businesswoman promises that there will be "no permanent damage." ${eventSlave.slaveName} is unceremoniously returned in the early hours of the morning. ${His} back and buttocks have been meticulously flogged right up to the very edge of damage, leaving angry marks across ${his} ${eventSlave.skin} skin. ${His} mouth lolls open, as though ${he}'s been doing little but give cunnilingus.`);
			if (eventSlave.vagina !== -1) {
				t.push(`${His} pussy,`);
			} else if (eventSlave.dick === 0) {
				t.push(`${His} shamefully featureless groin with its tiny little hole,`);
			} else {
				t.push(`${His} dick,`);
			}
			t.push(`anus, ${eventSlave.belly >= 10000 ? "popped navel," : ""} and even ${his} nipples show signs of torture. Whenever ${he} thinks of a sharp remark in the future, ${he}'ll remember the pain and keep ${his} mouth shut.`);

			eventSlave.behavioralFlaw = "none";
			seX(eventSlave, "oral", "public", "penetrative", 5);

			return t;
		}

		function spitroast() {
			t = [];

			t.push(`The businesswoman grins slowly and reaches into ${his} purse as you inform ${eventSlave.slaveName} that you and the businesswoman will punish ${him} together. ${eventSlave.slaveName}'s eyes widen as the businesswoman fishes a massive strap-on out of ${his} bag. The surprise turns to fear as the businesswoman begins to slap it against ${eventSlave.slaveName}'s buttocks as you`);
			if (!isAmputee(eventSlave)) {
				if (eventSlave.belly >= 300000) {
					t.push(`push ${him} onto ${his} ${belly} belly.`);
				} else {
					t.push(`pull ${him} down on ${hasAllLimbs(eventSlave) ? "all fours." : "the ground."}`);
				}
			} else {
				t.push("arrange your bitchy little sex toy between you and your guest.");
			}
			t.push(`The businesswoman clearly wants ${his} ass, so you ${!canDoAnal(eventSlave) ? `quickly unfasten ${his} anal chastity. You` : ""} ${PC.vagina !== -1 ? `ride ${eventSlave.slaveName}'s face` : `facefuck ${eventSlave.slaveName}`} roughly as ${eventSlave.slaveName} takes a painful anal raping from the huge dildo. The businesswoman winks at you companionably and extracts squeals from ${eventSlave.slaveName} that feel especially delicious ${PC.vagina !== -1 ? "against your cunt" : "along your dick"}.`);
			if (canMove(eventSlave)) {
				t.push(`${eventSlave.slaveName} collapses ${eventSlave.belly >= 5000 ? `and rolls onto ${his} side` : ""} after a long punishment fuck;`);
			} else {
				t.push(`${eventSlave.slaveName} ends the day a sore toy;`);
			}
			t.push(`${his} <span class="hotpink">submission</span> to you and <span class="gold">fear of you</span> have both increased.`);

			if (eventSlave.anus === 0) {
				t.push(`The businesswoman considered ${his} <span class="lime">anal cherry</span> a <span class="green">respectable offer.</span>`);
				eventSlave.anus++;
				repX(500, "event", eventSlave);
			}

			eventSlave.devotion += 3;
			eventSlave.trust -= 3;
			seX(eventSlave, "anal", "public", "penetrative");
			seX(eventSlave, "oral", PC, "penetrative");
			return t;
		}

		function arcade() {
			t = [];

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

			assignJob(eventSlave, "be confined in the arcade");
			eventSlave.sentence = 4;
			return t;
		}

		function analVirginWarning() {
			if (eventSlave.anus === 0) {
				return "This option will take anal virginity and ignore anal chastity";
			}
		}
	}
};