code:
App.Events.RESSMeanGirls = class RESSMeanGirls extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.arcologies[0].FSDegradationist === "unset",
			() => V.arcologyUpgrade.drones === 1,
		];
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => s.assignment === Job.PUBLIC,
				hasAnyArms,
				canStand,
				canHear,
				s => s.boobs > 600,
				s => s.fetishKnown === 1,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, His, his, him, girl, himself
		} = getPronouns(eventSlave);
		const {hisA, heA, HeA} = getPronouns(assistant.pronouns().main).appendSuffix('A');

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

		function makeSlave() {
			const slave = GenerateNewSlave("XX", {
				minAge: 16,
				maxAge: 19,
				ageOverridesPedoMode: 1,
				nationality: "American",
				race: "nonslave",
				disableDisability: 1,
			});
			slave.origin = `You enslaved $him for abusing ${eventSlave.slaveName} while ${he} was serving the public.`;
			slave.career = "a student";
			slave.markings = "none";
			slave.weight = -20;
			slave.devotion = random(-80, -60);
			slave.trust = random(-20, -10);
			slave.muscles = random(0, 15);
			slave.boobsImplant = 200 * random(0, 3);
			slave.boobs += slave.boobsImplant;
			slave.boobsImplantType = "normal";
			slave.buttImplant = random(0, 2);
			slave.butt += slave.buttImplant;
			slave.buttImplantType = "normal";
			slave.butt += 1;
			slave.vagina = random(1, 2);
			slave.anus = 1;
			slave.face = random(20, 60);
			setHealth(slave, jsRandom(30, 50), 0, 0, 0, 0);
			slave.attrXY = random(60, 90);
			slave.attrXX = random(10, 20);
			slave.behavioralFlaw = either("arrogant", "bitchy");
			slave.clothes = either("a mini dress", "a t-shirt and jeans", "conservative clothing", "sport shorts and a t-shirt");
			return slave;
		}
		const newSlaves = [makeSlave(), makeSlave(), makeSlave()];
		const {He2, his2, him2, he2} = getPronouns(newSlaves[0]).appendSuffix('2');
		const {He3, his3} = getPronouns(newSlaves[1]).appendSuffix('3');
		App.Events.drawEventArt(artDiv, [eventSlave, ...newSlaves]);

		let r = [];
		r.push(`One evening, ${V.assistant.name} breaks in on your`);
		if (V.assistant.personality > 0) {
			r.push(`work, ${hisA} ${V.assistant.appearance} avatar looking uncharacteristically somber.`);
			r.push(`"${properMaster()}," ${heA} says, "a group of tourists are giving`);
			r.push(contextualIntro(V.PC, eventSlave, true));
			r.push(`a bad time." Before you can ask why the security drones haven't addressed the situation, ${heA} continues, "They're not abusing ${him} physically or anything. But, look." ${HeA}`);
		} else {
			r.push(`work, announcing that a group of visitors to the arcology are being verbally abusive to`);
			r.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), "."));
			r.push(`Before you can ask why ${heA}'s bothering you with this, ${heA} continues, "An enslavement opportunity may exist," and`);
		}
		r.push(`brings up a video feed.`);
		App.Events.addParagraph(node, r);
		r = [];

		r.push(`${eventSlave.slaveName} is doing ${his} job, standing in an area of the arcology that's busy at this time of night,`);
		if (eventSlave.energy > 95) {
			r.push(`eagerly`);
		} else if (eventSlave.devotion > 95) {
			r.push(`diligently`);
		} else if (eventSlave.devotion > 20) {
			r.push(`obediently`);
		} else {
			r.push(`reluctantly`);
		}
		r.push(`showing off ${his}`);
		if (eventSlave.bellyPreg >= 1500) {
			r.push(`pregnant`);
		} else if (eventSlave.bellyImplant >= 1500) {
			r.push(`gravid`);
		} else if (eventSlave.bellyFluid >= 1500) {
			r.push(`bloated`);
		}
		if (App.Data.clothes.get(eventSlave.clothes).exposure >= 4) {
			r.push(`nude body`);
		} else {
			r.push(`body in ${his} ${App.Data.clothes.get(eventSlave.clothes).name.toLowerCase()}`);
		}
		r.push(`and flirting with passersby. Or ${he} would be, if ${he} weren't surrounded by a hostile group of girls. They're very obviously inebriated, rich, vapid, and on vacation, and their rapid-fire bitchiness makes the cause clear.`);
		App.Events.addParagraph(node, r);
		r = [];

		r.push(Spoken(newSlaves[2], `"Why the fuck did you say that shit? We're not lesbians,"`), `says one.`);
		App.Events.addParagraph(node, r);
		r = [];

		r.push(Spoken(newSlaves[1], `"You're fucking gross,"`), `says another.`, Spoken(newSlaves[1], `"Like, ew. Even if it's free, why the fuck would we let you touch us?"`));
		App.Events.addParagraph(node, r);
		r = [];

		if (eventSlave.bellyPreg >= 750000) {
			r.push(Spoken(newSlaves[0], `"Holy shit, ${he}'s gonna blow! Bitch'll keep fucking till ${his} belly pops open and keep on fucking still,"`));
		} else if (eventSlave.belly >= 750000) {
			r.push(Spoken(newSlaves[0], `"That belly is disgusting, what did ${he} do? Fuck an elephant?"`));
		} else if (eventSlave.boobs > 25000) {
			r.push(Spoken(newSlaves[0], `"Those boobs are disgusting; look at ${him} struggle,"`));
		} else if (eventSlave.bellyPreg >= 450000) {
			r.push(Spoken(newSlaves[0], `"What a slut! I bet everyone in the arcology has a baby in ${him},"`));
		} else if (eventSlave.belly >= 450000) {
			r.push(Spoken(newSlaves[0], `"That belly is disgusting; what is that, a horse?"`));
		} else if (eventSlave.weight > 190) {
			r.push(Spoken(newSlaves[0], `"I've never seen someone <b>that</b> fat before. How can you live with yourself knowing you're such a whale?"`));
		} else if (eventSlave.butt > 10) {
			r.push(Spoken(newSlaves[0], `"That ass is disgusting; look how fat it is,"`));
		} else if (eventSlave.bellyFluid >= 5000) {
			r.push(Spoken(newSlaves[0], `"Look at that belly! Wait, is it just me or is it wobbling? Holy shit! ${He} must have sucked down, like, gallons of cum,"`));
		} else if (eventSlave.clit >= 3) {
			r.push(Spoken(newSlaves[0], `"Holy shit! That's no dick; it's some sort of freak clit,"`));
		} else if (eventSlave.boobs > 5000) {
			r.push(Spoken(newSlaves[0], `"Those boobs are disgusting,"`));
		} else if (eventSlave.belly >= 150000) {
			r.push(Spoken(newSlaves[0], `"Oh my god, I didn't know a ${girl} could get <b>that</b> pregnant,"`));
		} else if (eventSlave.dick > 6) {
			r.push(Spoken(newSlaves[0], `"That dick is so disgusting,"`));
		} else if (eventSlave.weight > 130) {
			r.push(Spoken(newSlaves[0], `"What a cow; how can you be so proud of being such a fat slob?"`));
		} else if (eventSlave.intelligence+eventSlave.intelligenceImplant < -15) {
			r.push(Spoken(newSlaves[0], `"${He}'s retarded,"`));
		} else if (eventSlave.lips > 40) {
			r.push(Spoken(newSlaves[0], `"Those lips make ${him} look like a cartoon,"`));
		} else if (eventSlave.belly >= 1500) {
			r.push(Spoken(newSlaves[0], `"Look at that belly; bet ${he} doesn't even know whose it is,"`));
		} else if (eventSlave.dick > 3) {
			r.push(Spoken(newSlaves[0], `"I bet ${he} never gets to stick that thing in anyone,"`));
		} else if (eventSlave.anus > 2) {
			r.push(Spoken(newSlaves[0], `"Holy shit, I can see ${his} asshole from here,"`));
		} else if (eventSlave.dick > 0) {
			r.push(Spoken(newSlaves[0], `"Oh, look, ${he} has a lame little dick,"`));
		} else if (eventSlave.visualAge > 30) {
			r.push(Spoken(newSlaves[0], `"What an ugly old slut,"`));
		} else if (eventSlave.weight > 30) {
			r.push(Spoken(newSlaves[0], `"What a fat pig, showing off ${his} belly like that,"`));
		} else if (eventSlave.face < 10) {
			r.push(Spoken(newSlaves[0], `"What a fugly slut,"`));
		} else {
			r.push(Spoken(newSlaves[0], `"What a dirty slut,"`));
		}
		r.push(`says a third.`, Spoken(newSlaves[0], `"No wonder people won't pay to have sex with you. I bet your Master put you out here because he hates you."`));

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Tolerating verbal abuse is part of a public servant's job`, verbal),
			new App.Events.Result(`Enslave them all`, enslave, `This option will cost ${cashFormat(25000)}`),
		]);

		function verbal() {
			r = [];

			r.push(`You inform your personal assistant that you aren't planning to take any action. If you took notice every time a citizen offered a slave on public duty any insult, you'd never be doing anything else. The only interesting part of the interaction was the possible value of the pretty girls, but enslaving them would likely have been difficult and expensive, given their families' probable wealth and influence. As for ${eventSlave.slaveName}, ${he}'s not deeply affected.`);
			if (eventSlave.energy > 95) {
				r.push(`${He}'s so horny that petty insults can't compete for ${his} attention with ${his} constant, oppressive need to get off.`);
			} else if (eventSlave.trust > 95 && eventSlave.devotion >= -20) {
				r.push(`${He}'s confident that ${he}'s a good slave, no matter what some visitors from outside the arcology say.`);
			} else if (eventSlave.trust > 95) {
				r.push(`It just gives ${him} more of a reason to work against you.`);
			} else if (eventSlave.devotion > 20) {
				r.push(`${He} tells ${himself} that they were wrong, and carries on.`);
			} else {
				r.push(`It's not like the unhappy slave doesn't tell ${himself} much worse things.`);
			}
			return r;
		}

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

			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, [eventSlave, ...newSlaves], [eventSlave.clothes, "no clothing", "no clothing", "no clothing"]);
			for (const slave of newSlaves) {
				newSlave(slave);
				cashX(forceNeg(8333), "slaveTransfer", slave);
			}

			r.push(`You seize a tablet and hurry out of your office, working furiously and using every feature of ${V.assistant.name} to the utmost. These bitches have offended you, and you quickly frame the structure of an appropriate revenge. By the time you get to where ${eventSlave.slaveName} is still being heckled by spoiled, drunken harpies, everyone else present in that arcology hall has mysteriously received urgent messages and gone elsewhere. ${eventSlave.slaveName}`);
			if (canSee(eventSlave)) {
				r.push(`sees you approach, and stares at you,`);
			} else {
				r.push(`recognizes your dominant footsteps approaching, and turns to face you,`);
			}
			r.push(`${his} sudden intense look alerting your vile little guests to your presence. One of them attempts to frame an insult for the interloper, but one of ${his2} friends pokes ${him2} in the side and whispers something in ${his2} ear and ${he2} goes silent, staring at you with wide eyes.`);
			if (V.PC.title !== 1) {
				r.push(`${He2} then winces, visibly realizing that you're likely aware that ${he2} called ${eventSlave.slaveName}'s owner ${his} "Master". Somehow, the mistake seems important to ${him2} now that you're standing here, effortlessly dominating the space for all your femininity.`);
			}
			App.Events.addParagraph(frag, r);
			r = [];
			r.push(`You hold the tablet out to them wordlessly. It's displaying security footage of the three of them, boarding a public VTOL transport for another arcology nearby. The prominent timestamp is thirty minutes in the future. The scene changes, showing them partying in one of that arcology's nightclubs. You clear your throat, dragging their attention away from the counterfeited footage, and describe in detail the other evidence — tickets, identification checks, biometrics — that will prove they left your arcology and visited two others before regrettably disappearing. One of them tries, with utter predictability, to threaten you with ${his2} father, but you tell ${him2} bluntly that if he does make the effort, he'll be looking in the wrong place.`);
			App.Events.addParagraph(frag, r);
			r = [];

			r.push(Spoken(newSlaves[1], `"We shouldn't have come here,"`), `one of them says dully. ${He3}'s wrong in that they would have had no trouble at all if they hadn't offended you, but right in that here, they put themselves entirely under your power. Tourists would never visit if this were widely known, but fortunately, you've been successful at concealing this. They begin to cry, and then to beg, and then the drones bag them and take them away.`);

			App.Events.addParagraph(frag, r);
			App.Events.addResponses(frag, [
				new App.Events.Result(`Let your public servant take revenge on them`, revenge),
			]);
			return frag;

			function revenge() {
				const frag2 = document.createDocumentFragment();
				r = [];

				r.push(`Although they don't know it, your trio of new captures escape the usual choice of introductions to life among your sex slaves. In order to ensure that their fate has been properly obscured, you keep them in confinement for a while. After that, the usual beautification your slaves undergo will eliminate any possibility of their being recognized, even on public duty. That doesn't mean they have it easy, though. You delegate ${eventSlave.slaveName} to break them in, letting ${him} visit each of them whenever ${he} wants and treat them however ${he} wants.`);
				if ((eventSlave.energy > 95) || (eventSlave.devotion > 50)) {
					r.push(`${He} approaches the task`);
					if (eventSlave.energy > 95) {
						r.push(`eagerly, seeing it as an opportunity to sate ${his} urges`);
					} else {
						r.push(`dutifully, seeing it as ${his} responsibility to break them well for you`);
					}
					r.push(`as well as to get some petty revenge.`);
					switch (eventSlave.fetish) {
						case "submissive":
							r.push(`${He}'s a sub, but this actually means that ${he} can do a reasonable dom impression when ${he} works at it. ${He} certainly has experience with what works, even if it's from the other side. The erstwhile rich girls are required to kiss ${his} feet, literally.`);
							break;
						case "cumslut":
							r.push(`As a cumslut, ${he} derives considerable enjoyment from seeing others drink ejaculate, too. In this case, ${he} enjoys forcing the erstwhile rich girls to choke down liters of the stuff.`);
							break;
						case "humiliation":
							r.push(`${He} can't publicly humiliate them, since that would defeat the whole purpose of sequestering them until the trail goes really cold. Unfortunately for them, that doesn't stop ${him} from humiliating them to each other, and ${he} forces them to perform various sex acts on ${him} while the others watch.`);
							seX(newSlaves[0], "oral", eventSlave, "penetrative", 10);
							seX(newSlaves[1], "oral", eventSlave, "penetrative", 10);
							seX(newSlaves[2], "oral", eventSlave, "penetrative", 10);
							V.oralTotal += 30;
							break;
						case "buttslut":
							r.push(`${He} has a one track mind, and that track is anal sex. So, ${he} assrapes them, enjoying their sobbed apologies while ${he}`);
							if (canPenetrate(eventSlave)) {
								r.push(`fills their backdoors with ${his} cum.`);
							} else {
								r.push(`uses a dildo on them.`);
							}
							seX(newSlaves[0], "anal", eventSlave, "penetrative", 10);
							seX(newSlaves[1], "anal", eventSlave, "penetrative", 10);
							seX(newSlaves[2], "anal", eventSlave, "penetrative", 10);
							break;
						case "boobs":
							r.push(`${He} forces them to`);
							if (eventSlave.nipples === "fuckable") {
								r.push(`eat out ${his} nipples,`);
							} else if (eventSlave.lactation > 0) {
								r.push(`nurse from ${him},`);
							} else {
								r.push(`suck ${his} nipples until ${he} orgasms,`);
							}
							r.push(`mostly for how much ${he} enjoys the sensation, but also for the revulsion it produces.`);
							seX(newSlaves[0], "oral", eventSlave, "mammary", 10);
							seX(newSlaves[1], "oral", eventSlave, "mammary", 10);
							seX(newSlaves[2], "oral", eventSlave, "mammary", 10);
							if (eventSlave.lactation > 0) {
								eventSlave.lactationDuration = 2;
								eventSlave.boobs -= eventSlave.boobsMilk;
								eventSlave.boobsMilk = 0;
							} else {
								r.push(induceLactation(eventSlave, 5));
							}
							break;
						case "pregnancy":
							r.push(`${He} doesn't have permission to impregnate them, but they don't know that, and ${he} lies shamelessly.`);
							if (canPenetrate(eventSlave)) {
								r.push(`They beg ${him} not to cum inside them, but ${he} does anyway,`);
							} else {
								r.push(`${He} uses a strap-on with a reservoir to fill them with cum,`);
							}
							r.push(`and they cry themselves to sleep every night.`);
							seX(newSlaves[0], "vaginal", eventSlave, "penetrative", 10);
							seX(newSlaves[1], "vaginal", eventSlave, "penetrative", 10);
							seX(newSlaves[2], "vaginal", eventSlave, "penetrative", 10);
							break;
						case "dom":
							r.push(`${He} prizes the opportunity to be dominant, and makes the most of it. Rather than doing something pedestrian like force them to fuck ${him}, ${he} forces them to fuck each other, punishing them for hesitation until they're eating each other out even while they cry.`);
							seX(newSlaves[0], "oral", eventSlave, "penetrative", 20);
							seX(newSlaves[1], "oral", eventSlave, "penetrative", 20);
							seX(newSlaves[2], "oral", eventSlave, "penetrative", 20);
							break;
						case "sadist":
							r.push(`Their tears aren't a means for ${him}; they're an end. ${He} extracts them with greed, enjoying the sensation of being`);
							if (eventSlave.dick > 0) {
								r.push(`sucked off`);
							} else if (eventSlave.vagina === -1) {
								r.push(`rimmed`);
							} else {
								r.push(`eaten out`);
							}
							r.push(`by one sobbing rich bitch while ${he} forces another to spank ${his3} friend's pussy.`);
							seX(newSlaves[0], "oral", eventSlave, "penetrative", 20);
							seX(newSlaves[1], "oral", eventSlave, "penetrative", 20);
							seX(newSlaves[2], "oral", eventSlave, "penetrative", 20);
							break;
						case "masochist":
							r.push(`As a masochist, ${he}'s naturally inclined to be on the receiving end, but in this case ${he} makes an exception for the sake of justice. And it's to ${his} victims' anguish that ${he} does, because ${he} knows pain like a lover, and inflicts it in excruciating crescendos without leaving a single mark.`);
							break;
					}
					r.push(`The horrible experience is certainly educational for your new slaves, and ${eventSlave.slaveName} is well pleased. Tolerating insults is part of being a public slave, but getting this opportunity to take ${his} pent-up frustrations out on some deserving targets is a trust building exercise for ${him}. It seems their insults really did upset ${him}.`);
					newSlaves[0].trust -= 4;
					newSlaves[1].trust -= 4;
					newSlaves[2].trust -= 4;
					eventSlave.devotion += 5;
					eventSlave.trust += 5;
				} else {
					r.push(`${He} obeys, but isn't so far gone into sexual slavery that ${he}'s willing to really throw ${himself} into the task. ${His} visits are terrifying enough, though. Simply seeing their own likely futures reflected in ${him} is usually enough to leave your new slaves crying themselves to sleep.`);
				}
				App.Events.addParagraph(frag2, r);
				return frag2;
			}
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				canMove,
				s => s.devotion >= -20,
				s => (canDoAnal(s) || canDoVaginal(s)),
				s => s.lactation > 1,
				s => s.boobs > 500
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let r = [];
		r.push(
			`${eventSlave.slaveName} is implanted with slow-release lactation drugs. ${His} lactation is dissimilar to that of a normal mother. It's the same stuff, but it's produced at a much, much higher volume. To stay comfortable,`,
			contextualIntro(V.PC, eventSlave, true),
			`has to use milkers every couple of`
		);
		if (eventSlave.assignment !== Job.MILKED) {
			r.push(`hours even though ${he} isn't assigned to give milk as ${his} primary job.`);
		} else {
			r.push(`hours.`);
		}
		r.push(`Any more than that, and ${he} gets painfully sore; any less than that, and`);
		if (eventSlave.nipples === "inverted" || eventSlave.nipples === "fuckable") {
			r.push(`${his} ${milkFlavor(eventSlave)}milk, backed up behind ${his} ${eventSlave.nipples} nipples, leaves ${him} in agony.`);
		} else {
			r.push(`${he} begins to spontaneously squirt cream whenever ${his} breasts are subjected to the slightest motion.`);
		}
		App.Events.addParagraph(node, r);

		r = [];
		r.push(`${He} constantly passes by your desk as you work, going back and forth between the milkers and ${his} other tasks. Even if you didn't know which was which, it would be easy to tell which way ${he} was going. One way, ${he}`);
		if (!canWalk(eventSlave)) {
			r.push(`crawls`);
		} else if (shoeHeelCategory(eventSlave) > 1) {
			r.push(`totters`);
		} else if (eventSlave.belly >= 10000) {
			r.push(`waddles`);
		} else {
			r.push(`walks`);
		}
		if (hasAnyArms(eventSlave)) {
			r.push(`gingerly, supporting ${his} udders with`);
			if (hasBothArms(eventSlave)) {
				r.push(`both hands`);
			} else {
				r.push(`${his} hand`);
			}
			if (eventSlave.belly >= 10000) {
				r.push(`and ${his} ${belly}`);
				if (eventSlave.belly >= 3000) {
					r.push(`pregnant`);
				} else {
					r.push(`rounded`);
				}
				r.push(`belly`);
			}
		} else {
			r.push(`gingerly, doing everything in ${his} limited capacity to keep them steady`);
		}
		r.push(r.pop() + ",");
		if (eventSlave.nipples === "inverted") {
			r.push(`wincing`);
		} else {
			r.push(`dribbling a little bit of ${milkFlavor(eventSlave)}milk`);
		}
		r.push(`as ${he} goes. The other way, ${he} has a distinctly relieved expression and ${his} breasts are much saggier.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Have some fun with ${him} once ${he}'s using the milkers`, fun, virginityWarning()),
			new App.Events.Result(`Delay ${his} milking and then fuck ${him} in public`, fuck, virginityWarning()),
			(eventSlave.nipples === "inverted" || eventSlave.nipples === "partially inverted" || eventSlave.nipples === "fuckable")
				? new App.Events.Result(`Delay ${his} milking and torture ${him} with the pressure`, torture, virginityWarning())
				: new App.Events.Result(),
		]);

		function fun() {
			r = [];
			r.push(`${eventSlave.slaveName} is face-down on a special bench much like one used for massages,`);
			if (eventSlave.belly >= 1500) {
				r.push(`though with a hole for ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnant belly`);
				} else if (eventSlave.bellyImplant >= 3000) {
					r.push(`implant-filled belly`);
				} else {
					r.push(`${eventSlave.inflationType}-filled belly`);
				}
				r.push(`to fit into,`);
			}
			r.push(`with ${his} breasts hanging down so the milkers can work away at ${his} nipples. As such, ${his} back and ass are on display as ${he} grunts and groans with relief. ${He} starts at your hand on ${his} back but`);
			if (eventSlave.devotion > 20) {
				r.push(`quickly`);
			} else {
				r.push(`slowly`);
			}
			r.push(`relaxes.`);
			if (canDoVaginal(eventSlave)) {
				r.push(`The stimulation of the milking has ${him} soaking wet, and ${he} whimpers with pleasure as you enter ${his} sopping pussy. ${He}'s so wet that ${his} plentiful vaginal secretions make it`);
				if (canDoAnal(eventSlave)) {
					r.push(`very easy for you to switch`);
					if (V.PC.dick === 0) {
						r.push(`your strap-on`);
					} else {
						r.push(`your dick`);
					}
					r.push(`to the cow's butt.`);
					r.push(VCheck.Both(eventSlave, 1));
				} else {
					r.push(`clear that ${he} needs a second round.`);
					r.push(VCheck.Vaginal(eventSlave, 2));
				}
			} else if (eventSlave.chastityVagina) {
				r.push(`This milk cow's vagina is protected by a chastity belt, but ${his} butthole isn't. You fuck it`);
				if (V.PC.dick === 0) {
					r.push(`with a strap-on`);
				}
				r.push(`instead as ${he} bucks and grinds against the chair.`);
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				r.push(`Perversely, this milk cow has no pussy, so you spit on ${his} ass and sodomize ${him}`);
				if (V.PC.dick === 0) {
					r.push(`with a strap-on`);
				}
				r.push(`instead as ${he} bucks and grinds against the chair.`);
				r.push(VCheck.Anal(eventSlave, 1));
			}
			r.push(`When ${he} comes, the milkers detect ${his} orgasm to your fucking and shunt the ${milkFlavor(eventSlave)}milk into different reservoirs. Though you've never been able to taste much difference, there's a belief out there that 'milk-cum', the squirts of milk a slave milk ${girl} produces when climaxing with ${his} ${getWrittenTitle(eventSlave)}, have special aphrodisiac powers. It can be sold at a special premium. Naturally, ${his} devotion to you has also increased.`);
			cashX(100, "event", eventSlave);
			eventSlave.devotion += 4;
			return r;
		}

		function fuck() {
			r = [];
			r.push(`${eventSlave.slaveName} obeys`);
			if (eventSlave.devotion > 20) {
				r.push(`without hesitation`);
			} else {
				r.push(`hesitantly`);
			}
			r.push(`when you order ${him} to kneel next to your desk the next time ${he} tries to go to the milkers. ${His} equanimity is severely tested over the next hours as you ignore ${him}. The occasional glance at ${him} shows ${him} growing increasingly frantic as ${his} breasts grow heavier and ${his} nipples`);
			if (eventSlave.nipples !== "fuckable") {
				r.push(`get prouder.`);
			} else {
				r.push(`begin to prolapse.`);
			}
			if (eventSlave.preg > eventSlave.pregData.normalBirth / 1.33) {
				r.push(`Soon, ${his}`);
				if (eventSlave.pregType > 1) {
					r.push(`children's`);
				} else {
					r.push(`child's`);
				}
				r.push(`kicking is forcing ${milkFlavor(eventSlave)}milk out of ${his} swollen breasts.`);
			}
			r.push(`Eventually, the slight rising and falling of ${his} ribcage as ${he} inhales and exhales induces enough motion in ${his} overfull breasts that ${milkFlavor(eventSlave)}milk spurts out of ${him} with each breath. Satisfied that ${he}'s ready, you`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`lead the whimpering, dripping slave out to a public street. Here, you hold ${him} upright so you can fuck ${him} standing. When ${he} finally comes through the pain of ${his} overfull udders, you reach forward and squeeze them. Making ${him} ${!canTalk(eventSlave) ? "silently" : ""} scream in pain and relief as ${he} sprays jets of ${milkFlavor(eventSlave)}milk. ${He} continually experiences aftershock orgasms as you continue pounding. You offer ${his} breasts to the growing crowd, many of whom come forward to taste ${his} cream.`);
			if (!canDoVaginal(eventSlave)) {
				r.push(`You fuck ${his} butt until they've sucked ${him} empty.`);
				r.push(VCheck.Anal(eventSlave, 1));
			} else {
				if (!canDoAnal(eventSlave)) {
					r.push(`You fuck ${his} pussy until they've sucked ${him} empty.`);
					r.push(VCheck.Vaginal(eventSlave, 1));
				} else {
					r.push(`You fuck ${his} pussy and ass, one after the other, until they've sucked ${him} empty.`);
					r.push(VCheck.Both(eventSlave, 1));
				}
			}
			r.push(`<span class="devotion inc">${His} submission to you has increased</span> and the <span class="reputation inc">public certainly appreciated the service.</span>`);
			eventSlave.devotion += 4;
			repX(500, "event", eventSlave);
			return r;
		}

		function torture() {
			r = [];
			r.push(`${eventSlave.slaveName} obeys`);
			if (eventSlave.devotion > 20) {
				r.push(`without hesitation`);
			} else {
				r.push(`hesitantly`);
			}
			r.push(`when you order ${him} to kneel next to your desk the next time ${he} tries to go to the milkers. ${His} devotion is severely tested over the next hours as you ignore ${him}. The occasional glance at ${him} shows ${him} growing increasingly frantic as ${his} breasts grow heavier and ${his} inverted nipples, which prevent any release of pressure without the strong suction of the`);
			if (eventSlave.nipples !== "fuckable") {
				r.push(`milkers to protrude them,`);
			} else {
				r.push(`milkers,`);
			}
			r.push(`grow more tender. Eventually, ${he} loses all composure and begins to beg you abjectly to give ${his} relief.`);
			if (canSee(eventSlave)) {
				r.push(`Your cruel smile`);
			} else if (canHear(eventSlave)) {
				r.push(`Your cruel snickers`);
			} else {
				r.push(`Your cruel prodding`);
			}
			r.push(`at the kneeling ${girl} with tears streaming down ${his} ${eventSlave.skin} cheeks fills ${him} with anticipatory horror. You tell ${him} to get on ${hasAnyArms(eventSlave) ? "all fours" : "the floor"} like the`);
			if (eventSlave.pregKnown === 1) {
				r.push(`pregnant`);
			}
			r.push(`cow ${he} is.`);
			if (eventSlave.belly >= 750000) {
				r.push(`${He} is so horribly`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnant`);
				} else {
					r.push(`bloated`);
				}
				r.push(`that it is a struggle just to shift onto ${his} ${belly} stomach in the hope that ${he} can even reach the floor with all ${hasAnyArms(eventSlave) ? "four" : `${his}`} limbs. Even worse, ${his} efforts are absolutely agonizing to ${his} engorged breasts; when ${he} finally does get onto the mass that is ${his} middle, the sudden shift of ${his} breasts causes ${him} to shriek with pain.`);
			} else if (eventSlave.belly >= 300000) {
				r.push(`${He} has to crawl onto ${his} ${belly} stomach to even get all ${hasAnyArms(eventSlave) ? "four" : `${his}`} limbs on the ground. The drastic shifting of ${his} breasts is agonizing and ${he} shrieks in spite of ${himself}.`);
			} else if (eventSlave.belly >= 100000) {
				r.push(`${He} slowly does, ${his} ${belly} stomach coming to rest on the floor beneath ${him}, but the simple movement is agonizing and seems to last forever causing ${him} to shriek in spite of ${himself}.`);
			} else if (eventSlave.belly >= 10000) {
				r.push(`${He} gingerly does, taking care to give ${his} ${belly} stomach room, but the simple movement is agonizing and seems to last forever causing ${him} to shriek in spite of ${himself}.`);
			} else {
				r.push(`${He} does, but the simple movement is agonizing and ${he} shrieks in spite of ${himself}.`);
			}
			r.push(`You slide`);
			if (V.PC.dick !== 0) {
				r.push(`your turgid cock`);
			} else {
				r.push(`a big strap-on`);
			}
			r.push(`into ${him} and seize ${him} by ${his}`);
			if (eventSlave.weight > 160) {
				r.push(`extremely well padded`);
			} else if (eventSlave.weight > 95) {
				r.push(`well padded`);
			} else if (eventSlave.weight > 30) {
				r.push(`chubby`);
			} else if (eventSlave.muscles > 30) {
				r.push(`muscular`);
			} else if (eventSlave.weight > 10) {
				r.push(`plush`);
			} else if (eventSlave.weight >= -30) {
				r.push(`trim`);
			} else {
				r.push(`skinny`);
			}
			r.push(`hips. ${He} knows what's coming and tries to ready ${himself}, but as you begin to pound ${him} without mercy, the motion of ${his} breasts forces a huge sobbing scream out of ${him}.`);
			if (canTalk(eventSlave)) {
				r.push(Spoken(eventSlave, `"Please, ${Master}! AAAH! It hurts! It AAAH hurtss- so b-baAAAH!"`));
			}
			r.push(`It hurts so badly, in fact, that ${he} doesn't seem to notice what you're doing to ${his} lower half, other than the motion it produces in ${his} upper half. Amused by the realization,`);
			if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
				r.push(`you pull your`);
				if (V.PC.dick !== 0) {
					r.push(`dick`);
				} else {
					r.push(`phallus`);
				}
				r.push(`out of ${him} and shove it up ${his} butthole without warning.`);
			} else {
				r.push(`you insert a couple of fingers alongside your`);
				if (V.PC.dick !== 0) {
					r.push(`dick.`);
				} else {
					r.push(`phallus.`);
				}
			}
			r.push(`${He} just goes on ${canTalk(eventSlave) ? "screaming" : "complaining"} about how much ${his} boobs hurt. Eventually, you tire of ${his} bellowing, so you reach around and pop`);
			if (eventSlave.nipples !== "fuckable") {
				r.push(`${his} nipples out one by one.`);
			} else {
				r.push(`finger into each nipple.`);
			}
			r.push(`The ${canTalk(eventSlave) ? "shrieking" : "whining"} reaches a paroxysm, but once they're`);
			if (eventSlave.nipples !== "fuckable") {
				r.push(`protruded,`);
			} else {
				r.push(`opened,`);
			}
			r.push(`the ${milkFlavor(eventSlave)}milk begins to jet out of ${him} in a pair of uninterrupted streams. ${He} collapses forward onto ${his} face, crying with relief as the pain in ${his} breasts recedes. As it does, ${he} finally begins to notice`);
			if (canDoAnal(eventSlave)) {
				r.push(`the pain in ${his} backdoor as you continue to abuse`);
				if (eventSlave.anus === 0) {
					eventSlave.anus++;
					r.push(`it, and that ${he} is <span class="virginity loss">no longer an anal virgin.</span>`);
				} else {
					r.push(`it.`);
				}
				if (canDoVaginal(eventSlave) && eventSlave.vagina === 0) {
					eventSlave.vagina++;
					r.push(`${He}'ll eventually realize that ${his} <span class="virginity loss">virginity was taken</span> while ${he} was distracted by ${his} breasts.`);
				}
				r.push(VCheck.Both(eventSlave, 1));
			} else {
				r.push(`the pain in ${his} cunt as you continue to abuse`);
				if (eventSlave.vagina === 0) {
					eventSlave.vagina++;
					r.push(`it, and that ${he} is <span class="virginity loss">no longer a virgin.</span>`);
				} else {
					r.push(`it.`);
				}
				r.push(VCheck.Vaginal(eventSlave, 1));
			}
			eventSlave.trust -= 4;
			return r;
		}

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

repo_name: Fanatey/fc

license: mit


code:
App.Events.RESSMindbrokenMorning = class RESSMindbrokenMorning extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.weatherToday.severity < 3
		]; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish === "mindbroken",
				canWalk,
				s => s.clothes !== "a Fuckdoll suit",
				isFaceVisible
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let r = [];

		r.push(`It's a sunny morning, with rare mild weather, and you're stuck at your desk, as usual. After the typical rush of slaves clears the kitchen after the breakfast hour, you see one peel off to stand out on a balcony for a moment with the light on ${his} face. You pay little attention to such a trifle, but then notice that it's`);
		r.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), "."));
		App.Events.addParagraph(node, r);
		r = [];

		r.push(`You head out and find that ${he}'s looking up at the sun with ${his} ${App.Desc.eyesColor(eventSlave)} closed, letting the warmth and light envelop ${his}`);
		if (eventSlave.face > 95) {
			r.push(`incredible`);
		} else if (eventSlave.face > 40) {
			r.push(`gorgeous`);
		} else if (eventSlave.face > 10) {
			r.push(`pretty`);
		} else {
			r.push(`homely`);
		}
		if (eventSlave.belly >= 5000) {
			r.push(`face and taut, ${belly} dome of a belly`);
		} else {
			r.push(`face.`);
		}
		r.push(`${He} hasn't gotten completely ready for ${his} day yet, and ${his} ${eventSlave.skin} skin is clean and quite bare. Despite ${his} small remaining mental capacity, it seems ${he}'s still capable of the minor pleasure of enjoying the sunlight. It is very probably the only enjoyable thing ${he}'ll register today.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Let ${him} be`, leave),
			(canDoVaginal(eventSlave) || canDoAnal(eventSlave))
				? new App.Events.Result(`See if an orgasm will cheer ${him} up`, orgasm, virginityWarning())
				: new App.Events.Result(),
		]);

		function leave() {
			if (eventSlave.relationship === -3) {
				if (eventSlave.kindness) {
					eventSlave.kindness += 2;
				} else {
					eventSlave.kindness = 2;
				}
			}
			return `Satisfied that there's no need for immediate intervention, you head back to your desk. A few minutes later, ${he} heads in to finish getting ready and get to work, saving ${V.assistant.name} the necessity of directing ${him}. As the broken slave passes your office, you think for a moment that you see a bit of moisture glinting in ${his} eyes, but soon correct yourself: it's just a reflection from the glass walls of the arcology. ${He} makes it to ${his} assignment on time, and no one notices anything unusual about ${him} today.`;
		}

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

		function orgasm() {
			r = [];
			r.push(`You`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`slide your hands around ${his}`);
			if (eventSlave.belly >= 150000) {
				r.push(`${belly} distended`);
			} else if (eventSlave.weight > 95) {
				r.push(`fat`);
			} else if (eventSlave.belly >= 5000) {
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnancy swollen`);
				} else if (eventSlave.bellyImplant >= 3000) {
					r.push(`implant swollen`);
				} else {
					r.push(`${eventSlave.inflationType}-bloated`);
				}
			} else if (eventSlave.weight > 30) {
				r.push(`pudgy`);
			} else if (eventSlave.waist < -95) {
				r.push(`cartoonishly narrow`);
			} else if (eventSlave.muscles > 30) {
				r.push(`ripped`);
			} else if (eventSlave.waist < -10) {
				r.push(`wasp`);
			} else if (eventSlave.weight > 10) {
				r.push(`soft`);
			} else if (eventSlave.muscles > 5) {
				r.push(`toned`);
			} else if (eventSlave.weight >= -10) {
				r.push(`trim`);
			} else {
				r.push(`skinny`);
			}
			r.push(`waist, feeling the warmth of ${his} skin, and gently step forward until ${he}'s between you and the balcony railing. ${He} is silently obedient, not reacting at all other than to obey your direction as to where ${he} should go. For example, when ${he} feels`);
			if (V.PC.dick === 0) {
				r.push(`the phallus`);
			} else {
				r.push(`your hardening dick`);
			}
			r.push(`pressing against ${him}, ${he}`);
			if (eventSlave.height >= 170) {
				r.push(`unconsciously bends forward a little and cocks ${his} hips to position ${himself}`);
			} else {
				r.push(`rises up on the balls of ${his} feet to bring ${his} short body up to the right height`);
			}
			if (canDoVaginal(eventSlave)) {
				r.push(`for penetration. ${His}`);
				if (eventSlave.vagina > 2) {
					r.push(`loose cunt`);
				} else if (eventSlave.vagina > 1) {
					r.push(`pussy`);
				} else {
					r.push(`tight little pussy`);
				}
				r.push(`is already moist in expectation, making entry easy.`);
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				r.push(`for anal. ${He} relaxes ${his}`);
				if (eventSlave.anus > 2) {
					r.push(`loose anus`);
				} else if (eventSlave.anus > 1) {
					r.push(`asshole`);
				} else {
					r.push(`tight little asshole`);
				}
				r.push(`completely, making entry easy.`);
				r.push(VCheck.Anal(eventSlave, 1));
			}
			r.push(`Your hands rove, teasing ${his} ${eventSlave.nipples} nipples,`);
			if (eventSlave.boobs > 1000) {
				r.push(`hefting ${his} heavy tits,`);
			} else if (eventSlave.boobs > 300) {
				r.push(`squeezing ${his} healthy breasts,`);
			} else {
				r.push(`pressing ${him} flat chest,`);
			}
			if (eventSlave.belly >= 1500) {
				r.push(`massaging ${his} rounded`);
				if (eventSlave.belly > 10000) {
					r.push(`belly and fondling ${his} popped navel.`);
				} else {
					r.push(`belly.`);
				}
			} else {
				r.push(`and`);
				if (eventSlave.weight > 130) {
					r.push(`groping ${his} huge gut.`);
				} else if (eventSlave.weight > 95) {
					r.push(`groping ${his} fat belly.`);
				} else if (eventSlave.muscles > 30) {
					r.push(`fondling ${his} abs.`);
				} else if (eventSlave.weight > 10) {
					r.push(`groping ${his} plush belly.`);
				} else {
					r.push(`fondling ${his} flat stomach.`);
				}
			}
			r.push(`${His} face is complacent and unaffected even as ${his} body responds,`);
			if (eventSlave.chastityPenis === 1) {
				r.push(`since ${his} body is used to its caged cock being neglected in favor of ${his}`);
				if (eventSlave.vagina > -1) {
					r.push(`pussy.`);
				} else {
					r.push(`asspussy.`);
				}
			} else if (eventSlave.dick > 0 && eventSlave.hormoneBalance >= 100) {
				r.push(`${his} useless dick sporting a drop of precum.`);
			} else if (eventSlave.dick > 0 && (eventSlave.balls === 0 || eventSlave.ballType === "sterile")) {
				r.push(`${his} soft dick twitching feebly.`);
			} else if (eventSlave.dick > 4) {
				r.push(`${his} giant penis protruding through a gap in the railing.`);
			} else if (eventSlave.dick > 2) {
				r.push(`${his} penis pressing hard against the railing.`);
			} else if (eventSlave.dick > 0) {
				r.push(`${his} pathetic hard-on barely protruding from between ${his} thighs.`);
			} else if (eventSlave.clit > 0) {
				r.push(`${his} huge clit stiff under a brush from your fingers.`);
			} else if (eventSlave.vagina === -1) {
				r.push(`${his} asspussy ready and relaxed under a brush from your fingers.`);
			} else {
				r.push(`${his} pussy warm and wet under a brush from your fingers.`);
			}
			r.push(`Even ${his} eventual orgasm is entirely mechanical, a simple tightening of ${his}`);
			if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina > 2) {
					r.push(`gaping cunt,`);
				} else if (eventSlave.vagina > 1) {
					r.push(`traveled pussy,`);
				} else {
					r.push(`tight vagina,`);
				}
			} else {
				if (eventSlave.anus > 2) {
					r.push(`gaping`);
				} else if (eventSlave.anus > 1) {
					r.push(`loosened`);
				} else {
					r.push(`tight`);
				}
				r.push(`sphincter,`);
			}
			r.push(`a gasp of air into ${his} lungs, and a slight shiver. There is a flaw at the corner of ${his} mouth that might be transitory pleasure, but a look`);
			if (canSee(eventSlave)) {
				r.push(`into ${his}`);
				if (hasBothEyes(eventSlave)) {
					r.push(`eyes`);
				} else {
					r.push(`eye`);
				}
			} else {
				r.push(`at ${his} face`);
			}
			r.push(`confirms that it is not so.`);
			return r;
		}
	}
};


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 !== "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":
					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":
					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 === "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;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.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 > 2) {
			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()),
			((eventSlave.toyHole === "dick" || V.policies.sexualOpenness === 1) && canPenetrate(eventSlave) && eventSlave.belly < 100000)
				? new App.Events.Result(`See if ${he} can put those gains to good use`, penetration, "This option will penetrate you")
				: 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) {
				t.push("pussy.");
			} 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, 0, 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.`;
		}
	}
};