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

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

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

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

		let t = [];

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

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

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

		App.Events.addParagraph(node, t);

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

		function talk() {
			t = [];

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

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

			eventSlave.trust += 4;
			return t;
		}

		function bigPhallus() {
			t = [];

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

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

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

		function penetrate() {
			t = [];

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

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

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

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

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


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

	actorPrerequisites() {
		return [
			/** @param {FC.SlaveState} s */
			[
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canWalk,
				canTalk,
				s => s.dietCum > 0,
				s => s.diet === "fattening",
				s => s.trust >= -50,
				s => s.fetish !== "cumslut",
				s => s.weight < -30,
				s => s.health.condition > -80,
				s => s.behavioralFlaw !== "anorexic",
				s => s.sexualFlaw !== "self hating",
				s => (s.fetishStrength <= 60 || s.fetishKnown !== 1),
			]
		];
	}

	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 belly = bellyAdjective(eventSlave);

		App.Events.drawEventArt(node, eventSlave);

		let t = [];
		t.push(`You are in your office, tending to the tedious business of requisition orders for your penthouse when you see`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		t.push(`appear outside your door. ${He} hovers outside in the hall, peeking ${his} head around the entry-way, looking very unsure about disturbing you. You stop what you're doing and call ${him} in. ${He}'s reticent at first, but then ${he} obediently steps into your office. ${He} is`);
		if (App.Data.clothes.get(eventSlave.clothes).exposure >= 4) {
			t.push(`forced to remain naked at all times, and the most striking thing about ${his} body is how`);
		} else {
			t.push(`forced to wear ${eventSlave.clothes} all day, but even through ${his} outfit, it's easy to see how`);
		}
		if (eventSlave.belly >= 100000) {
			if (eventSlave.bellyPreg >= 3000) {
				t.push(`${his} ${belly} pregnancy utterly dwarfs ${his} skinny body.`);
			} else {
				t.push(`${his} ${belly} distended belly utterly dwarfs ${his} skinny body.`);
			}
		} else if (eventSlave.belly >= 15000) {
			if (eventSlave.bellyPreg >= 3000) {
				t.push(`${his} heavy pregnancy completely dominates ${his} skinny body.`);
			} else {
				t.push(`${his} hugely distended belly completely dominates ${his} skinny body.`);
			}
		} else if (eventSlave.belly >= 10000) {
			if (eventSlave.bellyPreg >= 3000) {
				t.push(`${his} advanced pregnancy dominates ${his} skinny body.`);
			} else {
				t.push(`${his} hugely distended belly dominates ${his} skinny body.`);
			}
		} else if (eventSlave.belly >= 5000) {
			if (eventSlave.bellyPreg >= 3000) {
				t.push(`massive ${his} pregnant belly is compared to ${his} skinny body.`);
			} else {
				t.push(`massive ${his} distended belly is compared to ${his} skinny body.`);
			}
		} else if (eventSlave.belly >= 1500) {
			if (eventSlave.bellyPreg > 0) {
				t.push(`noticeable ${his} growing pregnancy is against ${his} skinny body.`);
			} else {
				t.push(`noticeable the curve of ${his} belly is against ${his} skinny body.`);
			}
		} else if (eventSlave.belly >= 150) {
			if (eventSlave.bellyPreg > 0) {
				t.push(`noticeable ${his} early pregnancy is against ${his} skinny body.`);
			} else {
				t.push(`noticeable the curve of ${his} implant is against ${his} skinny body.`);
			}
		} else {
			t.push(`skinny ${he} is.`);
		}
		if (eventSlave.weight > -80) {
			t.push(`${He}'s not exclusively skin and bones, but ${he}'s close. ${His}`);
		} else {
			t.push(`${He}'s so thin that ${he} doesn't look entirely healthy. ${His}`);
		}

		if (eventSlave.boobs < 600) {
			t.push(eventSlave.boobs < 300 ? `tiny` : `small`);
			t.push("boobs are barely noticeable");
			t.push(eventSlave.belly >= 5000 ? `above ${his} bloated` : `against ${his} concave`);
			if (FutureSocieties.isActive('FSSlimnessEnthusiast')) {
				t.push(`tummy, and that can be a very appealing look given the predilection your arcology has for slim ${girl}s.`);
			} else {
				t.push(`tummy, and to most clients, this makes ${him} a less appealing whore.`);
			}
		} else {
			t.push(eventSlave.boobs < 900 ? "large" : "massive");
			t.push(`tits are a sharp contrast to ${his}`);
			t.push(eventSlave.belly >= 150 ? "thin, bloated frame," : "concave belly");
			t.push(`and although impressive, they seem to especially stick out on a ${girl} who, in all other ways, seems`);
			t.push(eventSlave.weight > -80 ? "slightly" : "alarmingly");
			t.push(`malnourished. ${His} ${eventSlave.faceShape} face is clearly conflicted, and`);
		}
		t.push(canSee(eventSlave) ? `${his} ${App.Desc.eyesColor(eventSlave)} shift` : `${he} glances about`);
		t.push(`with nervous energy. ${He} is clearly unsure whether ${he} should say what ${he} came here to say.`);
		App.Events.addParagraph(node, t);
		t = [];
		t.push(`When you finally ask ${him} what ${he} wants, ${he} hesitates for a moment and then suddenly seems to gain ${his}`);
		if (eventSlave.accent > 1) {
			t.push(`courage, speaking in an atrociously thick accent.`);
		} else if (eventSlave.accent > 0) {
			t.push(`courage, speaking in a cute little accent.`);
		} else {
			t.push("courage.");
		}
		t.push(Spoken(eventSlave, `"Please ${Master}, I'm so hungry! It seems like all I get to eat is cum. It's disgusting! Please! I have to eat so much of it. Can I be allowed to eat regular food again? Please ${Master}, I'm so hungry. I need real food!"`));
		App.Events.addParagraph(node, t);
		t = [];
		t.push(`It's true, cum`);
		t.push(eventSlave.dietCum === 1 ? "supplemented" : "based");
		t.push(`food can be hard on ${girl}s`);
		t.push(`who are not fully habituated to being toys for sexual amusement — particularly when you've ordered them to gain weight on it. You look at the`);
		if (eventSlave.belly >= 1500) {
			t.push(`gravid,`);
		}
		t.push(`skinny whore and consider your options.`);

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

		App.Events.addResponses(node, [
			(eventSlave.chastityAnus === 1)
				? new App.Events.Result(`Give the poor ${girl} a break and take ${him} off ${his} cum diet so ${he} can safely get to a healthier weight`, safely)
				: new App.Events.Result(),
			(canDoAnal(eventSlave))
				? new App.Events.Result(`Give the emaciated slut your answer in the form of a rough butt-fuck`, buttfuck, virginityWarning())
				: new App.Events.Result(),
			new App.Events.Result(`Use aphrodisiacs and positive reinforcement to make ${his} cum diet more palatable`, aphrodisiac),
		]);

		function virginityWarning() {
			if ((eventSlave.anus === 0) && (eventSlave.dietMilk === 1)) {
				return `This option will take ${his} anal virginity and remove milk from ${his} diet.`;
			} else if (eventSlave.anus === 0) {
				return `This option will take ${his} anal virginity`;
			} else if (eventSlave.dietMilk === 1) {
				return `This option will remove milk from ${his} diet.`;
			}
			return null;
		}

		function safely() {
			t = [];
			t.push(`You silently appraise ${eventSlave.slaveName}'s desperate face and lean forward in your chair to check your terminal. You confirm that`);
			if (eventSlave.dietCum === 1) {
				t.push(`${his} food is supplemented with cum for flavor.`);
			} else {
				t.push(`${he} is being fed significant amounts of ejaculate.`);
			}
			t.push(`While ${his}`);
			if (eventSlave.dietCum === 2) {
				t.push(`extreme`);
			}
			t.push(`diet is still engineered to`);
			if (eventSlave.dietCum === 2) {
				t.push(`barely`);
			}
			t.push(`provide the nutrition ${he} needs, if ${he} can't hold the stuff down, ${he} can't gain`);
			if (eventSlave.pregKnown === 1 && eventSlave.preg > eventSlave.pregData.normalBirth / 4) {
				t.push(`weight, especially with ${his} growing`);
				if (eventSlave.pregType > 1) {
					t.push(`children taking whatever nutrients they can.`);
				} else {
					t.push(`child taking whatever nutrients it can.`);
				}
			} else {
				t.push("weight.");
			}
			t.push(`With a few taps on the keyboard you change ${his} orders so that ${he} will be fed a much more nutritionally rich diet that is free of ejaculate. However, you make sure to warn ${him} that ${V.assistant.name} will be monitoring ${him}, and you may change your mind once ${he} reaches a more attractive weight. ${He} thanks you profusely,`);
			if (eventSlave.vagina !== 0) {
				t.push(`even attempting to offer ${his} body for use in gratitude,`);
			}
			t.push(`but you simply send ${him} away. You find yourself concerned that you are becoming soft by allowing slaves to dictate what they will and won't eat, but your benevolent decision has already had a positive effect on ${his} attitude. ${He} trusts you a little more too.`);
			eventSlave.trust += 2;
			eventSlave.devotion += 2;
			eventSlave.dietCum = 0;
			return t;
		}

		function buttfuck() {
			t = [];
			let frag = document.createDocumentFragment();
			t.push(`You stand up behind your desk. ${He} flinches, but holds ${his} ground, ${his} lip quivering slightly. You slowly walk toward ${him}, appraising ${his}`);
			t.push(eventSlave.belly >= 100 ? `bloated,` : `smooth,`);
			t.push(`skinny body, touching ${his} shoulder as you disappear behind ${him}. ${He} starts to cry as you`);
			if (V.PC.dick === 0) {
				t.push(`pull a massive rubber dong attachment off the wall and hook it to your strap-on.`);
			} else {
				t.push(`unbuckle your pants and ${him} feel your warm dick harden against ${his} tight, bony thigh.`);
			}
			t.push(`Without word or ceremony, you shove ${him} forward so that ${he} is bent over and crushed against your desk. The tears start to flow out of ${him} as ${he} feels your`);
			t.push(V.PC.dick === 0 ? `massive rubber dong` : `hard, thick cock`);
			t.push(`pressing against ${his} unprotected anus.`);
			App.Events.addParagraph(frag, t);

			t = [];
			t.push(`When you offer ${him} the opportunity to revise ${his} request, ${he} does.`);
			t.push(Spoken(eventSlave, `"Please, ${Master} I'm sorry! Please don't fuck my ass! I'll eat all the cum you want! Please!"`));
			t.push(`${He} screams`);
			if (eventSlave.accent > 1) {
				t.push(`in ${his} thick accent`);
			}
			t.push(`as you force your`);
			if (V.PC.dick === 0) {
				t.push(`strap-on`);
			} else {
				t.push(`self`);
			}
			t.push(`inside ${his} butthole and subdue ${his} weak, struggling body against your unforgiving desk. Horrified tears stream down ${his} face with each brutal thrust as you speak into ${his} ear and remind ${him} that slaves are not allowed to dictate their needs to their owners. You know what's best for ${him}, and right now, ${his} proper role is as an eager little depository for the products of the free cities' ejaculate market. It's ${his} job to suck down cum at the whim of ${his} owner, plain and simple, until ${he}'s told otherwise. You buttfuck the cum-fed slag until ${he} simply lays there and accepts ${his} corrective assrape.`);
			if (eventSlave.anus === 0) {
				t.push(`<span class="virginity loss">${His} ${eventSlave.butt < 5 ? 'skinny' : 'plump'} little ass is now broken in.</span>`);
			}
			t.push(`${He} sobs quietly with each thrust of your hips, and when you finally`);
			if (V.PC.dick !== 0) {
				t.push(`make yet another cum deposit into ${his}`);
				t.push(eventSlave.weight < -80 ? `emaciated body and` : `bony body and`);
			}
			t.push(`pull out, you instruct`);
			if (eventSlave.dietCum === 1) {
				t.push(`${V.assistant.name} to dramatically increase the amount of cum in ${his} diet from now on. You won't have a slave telling you what ${he} eats. ${eventSlave.slaveName}`);
				if (canHear(eventSlave)) {
					t.push(`hears your instructions`);
				} else {
					t.push(`correctly guesses the meaning behind your body language`);
				}
				t.push(`and whimpers before rubbing ${his} sore bottom while heading`);
			} else {
				t.push(`another slave to drag the broken slut to the kitchen, where ${he}'s to receive an additional feeding of thick, creamy ejaculate-based nutrients before proceeding`);
			}
			t.push(`to ${his} next assignment.`);
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`${He}'s learned a valuable lesson about what it truly means to be a slave today, and it's one ${he} <span class="devotion dec">won't soon forget.</span>`);
			eventSlave.devotion -= 5;
			eventSlave.trust -= 5;
			if (eventSlave.anus === 0) {
				eventSlave.anus += 1;
			}
			VCheck.Anal(eventSlave, 1);
			if (eventSlave.dietCum === 1) {
				eventSlave.dietCum = 2;
				eventSlave.dietMilk = 0;
			}

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

		function aphrodisiac() {
			t = [];
			let frag = document.createDocumentFragment();
			t.push(`You do a quick check at your terminal. ${He} is indeed being fed`);
			if (eventSlave.dietCum === 1) {
				t.push(`food that is supplemented with cum for flavor.`);
			} else {
				t.push(`large amounts of human ejaculate.`);
			}
			t.push(`You tell ${him} that it can't be helped. When you assign a slave ${his} diet, it's for a reason, and in ${eventSlave.slaveName}'s case, you are using ${his} diet to make ${him} into a better whore. By the look on ${his} distressed face, you can tell ${he} doesn't understand or appreciate your perspective, but you tell ${him} you have just the thing to help change ${his} outlook.`);
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`You pull out a heavy dose of aphrodisiacs from the drawer in your desk. They are expensive, but powerful drugs that can be used in a brute force way to manipulate the sexual urges and tastes of even the most frigid sluts. The mild dose included in every slave's food is usually enough to affect a slow, inevitable change in attitude for resistant slaves, but sometimes a more acute dose can be an amusing way to turn disgust into dependence.`);
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`${eventSlave.slaveName} shivers as you reassure ${him} and inject ${his}`);
			t.push(eventSlave.weight < -80 ? `bony` : `tiny`);
			t.push(`body with the powerful drugs. You know they are working when ${he} begins to perspire a little, and`);
			if (eventSlave.vagina > -1) {
				t.push(`${he} starts to leak fresh girl-juice down ${his} shivering thighs.`);
			} else if (eventSlave.dick === 0) {
				t.push(`starts to turn instinctively to offer you ${his} only hole.`);
			} else {
				t.push(`${his} dick starts to come to attention.`);
			}
			t.push(`You then book ${him} to be the main attraction at a corporate office party that afternoon, where ${he} will be the target of a blow-bang and bukkake. You see that ${he}'s dosed heavily with the drugs every day this week, and then book the rest of ${his} afternoons for similar duties, making sure ${he} still tends to ${his} regular assignments as well. In the meantime, you also instruct the kitchen that ${he} is to eat as much cum-based food from the dispensers as ${he} can suck down in order to fuel up for these exhausting escapades.`);
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`By the end of the week, the aphrodisiacs and ${his} slide into an inescapable routine of cum immersion have done their job, and ${he} has begun to view cum as an inevitable component of ${his} daily life. ${He} also manages to gain a little weight. Thanks to your manipulation of ${his} Pavlovian responses through extreme drug therapy, ${his} health has suffered a bit, but ${he} is also more dependent on you thanks to ${his}`);
			if (eventSlave.addict === 0) {
				t.push(`<span class="cyan">new</span>`);
			} else {
				t.push(`<span class="cyan">developing</span>`);
			}
			t.push(`<span class="cyan">addiction to aphrodisiacs.</span>`);
			eventSlave.devotion += 5;
			eventSlave.weight += 10;
			eventSlave.fetish = "cumslut";
			eventSlave.fetishKnown = 1;
			eventSlave.fetishStrength = 10;
			eventSlave.addict += 1;
			seX((eventSlave), "oral", "public", "penetrative", 50);
			healthDamage((eventSlave), 10);

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

repo_name: Nithhogg/fc

license: mit


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				canHear,
				canWalk,
				hasAnyArms,
				hasAnyLegs,
				s => s.devotion > 20 && s.devotion <= 50,
				s => s.trust > 20 && s.trust <= 50,
				s => s.weight > 20 && s.weight <= 30,
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let t = [];
		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`has spent the last half-hour pacing up and down the hall before your office, clearly lost in thought. While ${he} has nowhere to be at the moment, it is beginning to become a detriment to your work, so you call ${him} in to get to the bottom of the matter.`);
		App.Events.addParagraph(node, t);

		t = [];
		if (canTalk(eventSlave)) {
			t.push(`"${Master}," ${he} mumbles,`);
			t.push(Spoken(eventSlave, `"am I looking a little heavier?"`));
		} else {
			t.push(`${He} gestures at ${his} middle and`);
		}
		switch (eventSlave.clothes) {
			case "a slutty maid outfit":
			case "a nice maid outfit":
			case "a military uniform":
			case "a schutzstaffel uniform":
			case "a slutty schutzstaffel uniform":
			case "a mounty outfit":
			case "lederhosen":
			case "a red army uniform":
			case "a police uniform":
			case "battlearmor":
			case "Imperial Plate":
			case "a biyelgee costume":
			case "battledress":
			case "a gothic lolita dress":
			case "a hanbok":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"This outfit feels tight around my middle, I feel like it fit last week..."`));
					t.push(He);
				}
				t.push(`adjusts ${his} clothing, clearly uncomfortable.`);
				break;
			case "a cheerleader outfit":
			case "cutoffs and a t-shirt":
			case "a slutty outfit":
			case "conservative clothing":
			case "a nice nurse outfit":
			case "a bimbo outfit":
			case "stretch pants and a crop-top":
			case "a schoolgirl outfit":
			case "leather pants and a tube top":
			case "a t-shirt":
			case "a t-shirt and thong":
			case "a t-shirt and panties":
			case "sport shorts and a t-shirt":
			case "a t-shirt and jeans":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"These clothes feel tighter than I remember, I mean, look how much of me is spilling out of them..."`));
					t.push(He);
				}
				t.push(`pinches ${his} belly, clearly grabbing hold of more of ${himself} than ${he} wants to.`);
				break;
			case "a huipil":
			case "a chattel habit":
			case "harem gauze":
			case "a slutty nurse outfit":
			case "a burkini":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"I feel really exposed, like the this used to cover more of me..."`));
					t.push(He);
				}
				t.push(`tugs at ${his} clothing, clearly uncomfortable.`);
				break;
			case "a slutty qipao":
			case "a halter top dress":
			case "an evening dress":
			case "a ball gown":
			case "a long qipao":
			case "a mini dress":
			case "a maternity dress":
			case "a courtesan dress":
			case "a Santa dress":
			case "a slave gown":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"I swear this fit me last week, but I feel like a sausage right now..."`));
					t.push(He);
				}
				t.push(`tugs at ${his} dress, clearly uncomfortable.`);
				break;
			case "attractive lingerie":
			case "kitty lingerie":
			case "attractive lingerie for a pregnant woman":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"This lingerie feels tight all over, I feel like they fit better last week..."`));
					t.push(He);
				}
				t.push(`adjusts ${his} panties, clearly uncomfortable.`);
				break;
			case "a succubus outfit":
			case "a fallen nuns habit":
			case "a dirndl":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"I swear I was able to lace this just last week..."`));
					t.push(He);
				}
				t.push(`pinches ${his} belly, clearly grabbing hold of more of ${himself} than ${he} wants to.`);
				break;
			case "slutty business attire":
			case "Western clothing":
			case "nice business attire":
			case "a confederate army uniform":
			case "a button-up shirt and panties":
			case "a button-up shirt":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"I feel like this fit me fine last week, yet now..."`));
					t.push(He);
				}
				t.push(`attempts to button ${his} top, before exhaling and giving up.`);
				break;
			case "a toga":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"This feels really tight, I mean, look how much of me is spilling out of it..."`));
					t.push(He);
				}
				t.push(`adjusts ${his} toga, clearly uncomfortable.`);
				break;
			case "restrictive latex":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"I know it's supposed to be tight, but I feel like a sausage..."`));
					t.push(He);
				}
				t.push(`tugs at the restrictive latex, clearly uncomfortable for reasons outside their intent.`);
				break;
			case "a penitent nuns habit":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"I know it's supposed to be tight, but I feel like a sausage..."`));
					t.push(He);
				}
				t.push(`gingerly tugs at ${his} coarse habit, clearly uncomfortable for reasons other than the chafing.`);
				break;
			case "a scalemail bikini":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"This feels really tight, I mean, look how much of me is spilling out of it..."`));
					t.push(He);
				}
				t.push(`picks at ${his} scalemail, clearly uncomfortable.`);
				break;
			case "clubslut netting":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"This feels really tight, I mean, look how much of me is spilling out all over it..."`));
					t.push(He);
				}
				t.push(`pokes at the flesh bulging through the mesh, clearly uncomfortable.`);
				break;
			case "spats and a tank top":
			case "a comfortable bodysuit":
			case "a latex catsuit":
			case "a cybersuit":
			case "a tight Imperial bodysuit":
			case "a kimono":
			case "a burqa":
			case "an oversized t-shirt and boyshorts":
			case "an oversized t-shirt":
			case "a sweater":
			case "a sweater and cutoffs":
			case "a sweater and panties":
			case "a nice pony outfit":
			case "a slutty pony outfit":
			case "a hijab and abaya":
			case "a niqab and abaya":
			case "a klan robe":
			case "a slutty klan robe":
			case "a hijab and blouse":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"This outfit is showing off more of me than I remember, and I swear I wasn't so bulgy last week..."`));
					t.push(He);
				}
				t.push(`pokes at ${his} belly, clearly doubting ${himself}.`);
				break;
			case "an apron":
			case "overalls":
			case "a monokini":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"There's just so much of me hanging out of it, and I'm pretty sure this didn't shrink in the wash..."`));
					t.push(He);
				}
				t.push(`pinches ${his} belly, clearly grabbing hold of more of ${himself} than ${he} wants to.`);
				break;
			case "a bunny outfit":
			case "a leotard":
			case "a one-piece swimsuit":
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"There's just so much of me poking out of it, I swear it fit right last week..."`));
					t.push(He);
				}
				t.push(`pinches at the folds of flesh peeking out around ${his} outfit, clearly bothered by it.`);
				break;
			default:
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"I feel like I wasn't this soft last week..."`));
					t.push(He);
				}
				t.push(`pinches ${his} belly, clearly grabbing hold of more of ${himself} than ${he} wants to.`);
		}
		t.push(`The ${SlaveTitle(eventSlave)} is`);
		if (eventSlave.diet === "fattening") {
			t.push(`purposefully being fattened up, so it really shouldn't come as a surprise to ${him}.`);
		} else if (eventSlave.behavioralFlaw === "gluttonous") {
			t.push(`a known stress eater, so perhaps somebody has been sneaking food again.`);
		} else if (eventSlave.behavioralFlaw === "anorexic") {
			t.push(`a known anorexic, so ${he}'s likely overreacting.`);
		} else {
			t.push(`certainly a little chubby, so perhaps this is a good time to get a handle on things.`);
		}
		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result(`Yes`, uFatGirl),
			new App.Events.Result(`No`, uThinGirl),
			new App.Events.Result(`Encourage ${him} to get bigger`, encourage),
			new App.Events.Result(`Send ${him} to the gym`, gym),
			(canDoAnal(eventSlave) || canDoVaginal(eventSlave))
				? new App.Events.Result(`Help ${him} burn some calories`, sex, virginityWarning())
				: new App.Events.Result(),
			/* ((eventSlave.toyHole === "dick" || V.policies.sexualOpenness === 1) && canPenetrate(eventSlave) && (eventSlave.belly + V.PC.belly < 5000) && ((eventSlave.height >= V.PC.height * 1.5) || eventSlave.muscles > 70))
				? new App.Events.Result(`Take ${him} for a jog`, jogging, "This option will penetrate you")
				: new App.Events.Result(),*/
			new App.Events.Result(`Send ${him} on ${his} way`, shoo),
		]);

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

		function uFatGirl() {
			let t = [];
			if ((eventSlave.diet === "fattening" || eventSlave.dietMilk > 0) && eventSlave.intelligence + eventSlave.intelligenceImplant > 15) {
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"So the diet is working well, ${Master}? That's good, I suppose. I'm just a bit shocked at how honest you were; people usually try to dodge that question or outright lie."`));
				} else {
					t.push(`${He} smiles before explaining ${he} knows you want ${him} plumper and that ${he} accepts it, but is surprised by your honesty to such a question.`);
				}
				t.push(`${He} leaves your office <span class="trust inc">slightly more trusting</span> for someone whose life is now entirely out of their hands.`);
				eventSlave.trust++;
			} else if (eventSlave.behavioralFlaw === "gluttonous") {
				if (canTalk(eventSlave)) {
					t.push(`${His} eyes begin to water as ${he} struggles not to sob.`);
					t.push(Spoken(eventSlave, `"But... I can't help it, why would you say that?"`));
					t.push(`${He} breaks done completely and hastily flees your sight, likely to the cafeteria, jiggling in all the wrong places.`);
				} else {
					t.push(`${His} eyes begin to water as ${he} struggles not to sob, but ${he} quickly loses composure and hastily flees your gaze, likely to the cafeteria.`);
				}
				t.push(`${He} may have run out of your office in tears, but ${he}'ll quickly come to terms with all that matters is your judgment, not ${hers}. Even more so when ${he} realizes the resulting stress eating only filled ${him} out more.`);
				eventSlave.devotion += 7;
				eventSlave.trust -= 5;
				eventSlave.weight += 5;
			} else if (eventSlave.behavioralFlaw === "anorexic") {
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"I'm so disgusting, ${Master}, I'm glad you see it too. I was so certain you'd lie to me... Sorry to have wasted your time."`));
					t.push(He);
				} else {
					t.push(`${His} face lightens at your ${canHear(eventSlave) ? "words" : "affirmation"}. It seems you told ${him} just what ${he} wanted to hear${!canHear(eventSlave) ? ", so to speak" : ""}. ${He} gives ${his} thanks and`);
				}
				t.push(`leaves your office with <span class="devotion inc">slightly more faith</span> in ${his} ${getWrittenTitle(eventSlave)}.`);
				eventSlave.devotion += 5;
			} else {
				if (canTalk(eventSlave)) {
					t.push(`${His} eyes begin to water as ${he} struggles not to sob.`);
					t.push(Spoken(eventSlave, `"But... But... I'm not... Why would you say that?"`));
					t.push(`${He} breaks done completely and hastily flees your sight, jiggling in all the wrong places.`);
				} else {
					t.push(`${His} eyes begin to water as ${he} struggles not to sob, but ${he} quickly loses composure and hastily flees your gaze.`);
				}
				t.push(`${He} may have run out of your office <span class="trust dec">in tears,</span> but ${he}'ll quickly come to terms with all that matters is <span class="devotion inc">your judgment, not ${hers}.</span>`);
				eventSlave.devotion += 5;
				eventSlave.trust -= 5;
			}
			return t;
		}

		function uThinGirl() {
			let t = [];
			if ((eventSlave.diet === "fattening" || eventSlave.dietMilk > 0) && eventSlave.intelligence + eventSlave.intelligenceImplant > 15) {
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"I know you want me to gain weight, ${Master}, so you don't need to spare my feelings. It's a nice gesture, though."`));
				} else {
					t.push(`${He} frowns before explaining ${he} knows you want ${him} plumper and that ${he} accepts it, but does appreciate the thought.`);
				}
				t.push(`${He} leaves your office in <span class="devotion inc">a good mood</span> for someone being forced to gain weight.`);
				eventSlave.devotion++;
			} else if (eventSlave.behavioralFlaw === "gluttonous") {
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"It's okay ${Master}, you don't have to lie to me. I know this is my fault, but thank you for trying to cheer me up."`));
				} else {
					t.push(`${He} frowns before explaining ${he} has only ${himself} to blame for ${his} weight, but does appreciate the thought.`);
				}
				t.push(`${He} leaves your office in <span class="devotion inc">good spirits</span> for nearly no effort.`);
				eventSlave.devotion++;
			} else if (eventSlave.behavioralFlaw === "anorexic") {
				if (canTalk(eventSlave)) {
					t.push(Spoken(eventSlave, `"Don't lie to me, ${Master}! You really think I don't know I'm a bloated hog!?"`));
				} else {
					t.push(`${His} face contorts into a vicious glare; it seems you choose the wrong thing to say.`);
				}
				t.push(`${He} runs out of your office <span class="devotion dec">in tears.</span> It's likely that ${he}'ll <span class="trust dec">dwell on your response</span> for some time.`);
				eventSlave.devotion -= 10;
				eventSlave.trust -= 10;
			} else {
				t.push(`Of course ${he} hasn't gained any weight. ${He} ponders your response for a moment before replying`);
				if (canTalk(eventSlave)) {
					t.push(`"Thank you, ${Master}"`);
				} else {
					t.push(`with a smile`);
				}
				t.push(`and leaving your office with a <span class="devotion inc">happy spring in ${his} step.</span> Crisis averted.`);
				eventSlave.devotion++;
			}
			return t;
		}

		function encourage() {
			let t = [];
			t.push(`${He}'s left standing there blankly, uncertain on just how to respond to such a bold statement. ${He}'s even less certain when you invite ${him} to join you for lunch in the cafeteria for the rest of the week. You want chubby and what ${he} is barely comes close.`);
			if (eventSlave.behavioralQuirk === "insecure") {
				t.push(`${He} enjoys you watching ${him} stuff ${himself} and quivers with delight as you measure the progress of ${his} waistline. By week's end, you're treated to the lovely sight of ${his} new belly jiggling as ${he} passes by your office.`);
				eventSlave.weight += 10;
			} else if (eventSlave.behavioralFlaw === "gluttonous") {
				t.push(`${He} thoroughly enjoys being permitted to stuff ${his} face for your amusement, even if your lunch is in jeopardy for the duration of the week. There is no denying the results, however, as you savor the sight of the chubby ${girl} jiggling past your office when it's over.`);
				eventSlave.weight += 20;
			} else if (eventSlave.behavioralFlaw === "anorexic") {
				t.push(`${He} appreciates having someone to eat lunch with, but that's not really why you are eating with ${him}. While ${he} doesn't make any real gains, you can't help but notice ${he} kept ${his} food down all week. You broke ${him} of ${his} eating disorder!`);
				eventSlave.behavioralFlaw = "none";
			} else {
				t.push(`${He} spends the week obediently eating for you. You are not disappointed when you see the results, however, nor when you get a good grip on ${his} soft belly. ${He} may still have other hidden problems, but this is not longer one of them, at least for the time being.`);
				eventSlave.weight += 10;
			}
			if (eventSlave.behavioralQuirk === "insecure" || eventSlave.behavioralFlaw === "gluttonous") {
				eventSlave.devotion += 5;
			} else {
				eventSlave.devotion += 3;
			}
			return t;
		}

		function gym() {
			let t = [];
			t.push(`${His} face ${eventSlave.behavioralQuirk === "fitness" ? "brightens" : "sours"} as you instruct ${him} to spend ${his} free time on the treadmill if ${he} is so bothered by it,`);
			if (eventSlave.behavioralQuirk === "fitness") {
				t.push(`and by week's end, ${he}'s <span class="devotion inc">in a fantastic mood.</span>`);
			} else {
				t.push(`but by week's end, ${he}'s singing a different tune.`);
			}
			t.push(`Not only is ${he} several sizes smaller than ${his} expectations, but ${he} looks and feels great, something ${he} just can't help but show off as ${he} struts past your office.`);
			if (eventSlave.behavioralQuirk === "fitness") {
				eventSlave.devotion += 10;
				eventSlave.trust += 10;
			} else {
				eventSlave.devotion += 5;
				eventSlave.trust += 5;
			}
			eventSlave.weight -= 10;
			return t;
		}

		function sex() {
			let frag = document.createDocumentFragment();
			let t = [];
			t.push(`${He}'s dismayed when you agree, but that fades quickly into hope when you continue, suggesting there's a way to start fixing the problem. ${He} just needs some exercise; to shed off those pounds with some hard physical work. The couch, you think aloud, will do perfectly, as you move around your desk to stretch out on the inviting surface, hands linked behind your head in a powerful display of your body. It's enough to make ${him} press ${his} thighs together, but you make no move for ${him}${V.PC.dick === 0 ? ", a strap-on," : ""} or even your clothing. You let ${him} puzzle and suffer for a few moments more before you make your intentions clear; if ${he} wants to burn calories, then it should be ${him} that does all the work.`);
			App.Events.addParagraph(frag, t);

			t = [];
			if (eventSlave.behavioralQuirk === "fitness") {
				t.push(`${He} brightens, catching on immediately and nodding ${his} head with understanding`);
				if (V.PC.dick === 0) {
					t.push(`before quickly ${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `shedding ${his} clothes and` : ""} retrieving an appropriate dildo, eager for the workout.`);
				} else {
					t.push(`${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? "before" : ""} quickly ${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `shedding ${his} clothes` : ""}, eager for the workout.`);
				}
			} else {
				t.push(`${He} catches on quickly, nodding ${his} head with understanding`);
				if (V.PC.dick === 0) {
					t.push(`before ${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `shedding ${his} clothes and` : ""} retrieving an appropriate dildo, glad for the opportunity.`);
				} else {
					t.push(`${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `before shedding ${his} clothes` : ""}, glad for the opportunity.`);
				}
			}
			t.push(`${His} hips settle close to yours, moving seductively while ${he} makes a show of undressing you. ${His} fingers smooth`);
			if (V.PC.dick === 0) {
				t.push(`around your hips, fastening the straps under and around your raised ass`);
				if (V.PC.butt <= 3) {
					t.push(`ass,`);
				} else if (V.PC.butt <= 4) {
					t.push(`with some effort,`);
				} else {
					t.push(`with a struggle,`);
				}
				t.push(`adjusting the attached toy`);
			} else {
				t.push(`over your half hard cock before drawing it out, pumping it`);
			}
			t.push(`until it's standing tall, ready for ${him} to spread ${his} legs over.`);
			if (eventSlave.behavioralQuirk === "fitness") {
				t.push(`${He} barely hesitates`);
			} else {
				t.push(`${He} spends a moment hovering`);
			}
			t.push(`before ${he} sinks ${his}`);
			if (canDoVaginal(eventSlave)) {
				t.push(`pussy`);
			} else {
				t.push(`asshole`);
			}
			t.push(`down onto the stiff rod with a moan, drawing back up almost immediately and starting an intense`);
			if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina === 0) {
					t.push(`pace, despite having been a <span class="lime">virgin</span> moments before.`);
				} else {
					t.push(`pace.`);
				}
				t.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				if (eventSlave.anus === 0) {
					t.push(`pace, despite having been a <span class="lime">virgin</span> moments before.`);
				} else {
					t.push(`pace.`);
				}
				t.push(VCheck.Anal(eventSlave, 1));
			}
			App.Events.addParagraph(frag, t);

			t = [];
			t.push(`Riding certainly is exhausting, especially if you don't offer any assistance. With no hands on ${his} hips to keep ${him} steady, ${his} hand${hasBothArms(eventSlave) ? "s" : ""} find themselves on your`);
			if (V.PC.belly < 5000) {
				if (V.PC.boobs < 300) {
					t.push(`chest,`);
				} else if (V.PC.boobs >= 300) {
					t.push(`tits,`);
				} else {
					t.push(`stomach,`);
				}
			} else {
				if (V.PC.bellyPreg > 2000 || V.PC.bellyImplant > 2000) {
					t.push(`gravid swell,`);
				} else {
					t.push(`${V.PC.inflationType}-stuffed belly,`);
				}
			}
			t.push(`fingers curling as ${his} orgasm approaches and a delighted ${canTalk(eventSlave) ? "shout" : "shudder"}`);
			if (eventSlave.balls !== 0) {
				t.push(`and a`);
				if (eventSlave.prostate === 3) {
					t.push(`flood of cum`);
				} else if (eventSlave.prostate === 2) {
					t.push(`splatter of cum`);
				} else if (eventSlave.prostate === 1) {
					t.push(`splurt of cum`);
				} else {
					t.push(`dribble of fluid`);
				}
			}
			t.push(`announcing it. ${He}'s`);
			if (eventSlave.behavioralQuirk === "fitness") {
				t.push(`a little loopy from the rush, but a buck of your hips informs ${him} ${he}'s not finished yet. Delighted,`);
			} else {
				t.push(`panting from the exertion, but a buck of your hips informs ${him} ${he}'s not finished yet. It's not as hard and fast this time, but`);
			}
			t.push(`${he} pounds ${himself} diligently, only breaking momentarily for increasingly worn out gasps and moans, coating your couch ${eventSlave.balls !== 0 && eventSlave.prostate !== 0 ? "and clothing" : ""} with a mix of fluids each time. Only when ${his} legs refuse to support ${him} anymore and ${his} hips can barely shift do you let ${him} stop, admiring the sweat drenched spent slave draped over your`);
			if (V.PC.belly < 5000) {
				t.push(`chest.`);
			} else {
				t.push(`belly.`);
			}
			App.Events.addParagraph(frag, t);

			t = [];
			t.push(`You stretch before gathering ${him} up,`);
			if (V.PC.belly < 10000) {
				t.push(`carrying`);
			} else {
				t.push(`coaxing`);
			}
			t.push(`${him} to the shower to clean ${him} off, teasing another orgasm out of ${him} before you're finished as a reward. ${His} smile is tired but delighted when you lay ${him} down on clean cushions, pleased that ${he}`);
			if (eventSlave.behavioralQuirk === "fitness") {
				t.push(`got such a great workout,`);
			} else {
				t.push(`did such a good job,`);
			}
			t.push(`before drifting off. ${He}'s earned a nap before ${he} returns to`);
			switch (eventSlave.assignment) {
				case Job.REST:
					t.push(`the dorm,`);
					break;
				case Job.HOUSE:
					t.push(`${his} chores,`);
					break;
				case Job.MILKED:
					t.push(`getting milked,`);
					break;
				case Job.PUBLIC:
					t.push(`${his} slutting,`);
					break;
				case Job.FUCKTOY:
					t.push(`servicing you,`);
					break;
				case Job.WHORE:
					t.push(`selling ${himself},`);
					break;
				case Job.CLASSES:
					t.push(`studying,`);
					break;
				case Job.CONFINEMENT:
					t.push(`${his} solitude,`);
					break;
				case Job.GLORYHOLE:
					t.push(`being used,`);
					break;
				case Job.SUBORDINATE:
					t.push(`serving ${his} superior,`);
					break;
				case Job.QUARTER:
					t.push(`${his} work as a servant,`);
					break;
				case Job.CONCUBINE:
					t.push(`your bed to await another set,`);
					break;
				case Job.MASTERSUITE:
					t.push(`the other fucktoys,`);
					break;
				default:
					t.push(`${his} post,`);
			}
			t.push(`especially if ${he} hopes to walk there after <span class="lime">burning so many calories.</span>`);
			if (eventSlave.behavioralQuirk === "fitness") {
				eventSlave.devotion += 7;
				eventSlave.trust += 7;
			} else {
				eventSlave.devotion += 3;
				eventSlave.trust += 3;
			}
			eventSlave.weight -= 5;
			App.Events.addParagraph(frag, t);

			return frag;
		}

		function shoo() {
			let t = [];
			t.push(`All that ${he} should be worried about is serving you, not inconsequential changes to ${his} body.`);
			if (eventSlave.behavioralQuirk === "insecure") {
				t.push(`That's all ${he} needed to ${canHear(eventSlave) ? "hear" : "know"}. <span class="devotion inc">All's well and good</span> if ${getWrittenTitle(eventSlave)} says so.`);
				eventSlave.devotion += 3;
			} else {
				t.push(`${He} nods in acceptance and silently heads on ${his} way; ${his} thoughts on your indifference is <span class="trust dec">written across ${his} face.</span>`);
				eventSlave.trust -= 5;
			}
			return t;
		}
	}
};


code:
App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.universalRulesConsent === 0,
		];
	}

	actorPrerequisites() {
		return [
			[ // event slave /domslave
				s => s.fetish !== Fetish.MINDBROKEN,
				s => s.fuckdoll === 0,
				hasAnyArms,
				canMove,
				canTalk,
				canHear,
				s => s.assignment !== Job.QUARTER,
				s => s.devotion > 20,
				s => ["buttslut", "sadist", "dom"].includes(s.fetish),
				s => (s.chastityPenis !== 1 || s.dick === 0),
				s => s.rules.release.slaves === 1,
				s => s.belly < 30000,
			],
			[ // and subslave
				s => s.fetish !== Fetish.MINDBROKEN,
				s => s.fuckdoll === 0,
				canWalk,
				canTalk,
				s => (canSee(s) || canHear(s)),
				isSlaveAvailable,
				s => (s.devotion >= -20 && s.devotion <= 60),
				s => s.fetish !== "buttslut",
				s => (canDoAnal(s) && s.anus !== 0),
				s => s.belly < 30000,
			]
		];
	}

	execute(node) {
		const [eventSlave, subSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, his, him, himself
		} = getPronouns(eventSlave);
		const hands = hasBothArms(eventSlave) ? "hands" : "hand";
		const {say, title: master} = getEnunciation(eventSlave);
		const {
			He2, he2, His2, his2, him2, girl2, himself2
		} = getPronouns(subSlave).appendSuffix("2");
		const {say: say2, title: master2} = getEnunciation(subSlave);

		App.Events.drawEventArt(node, [eventSlave, subSlave], "no clothing");
		const canP = canPenetrate(eventSlave);
		const clitP = eventSlave.clit > 3;
		const cock = canP ? "cock" : "clit";
		let t = [];

		t.push(`As you approach your office returning from an unexpected but minor matter, you hear the unmistakable sounds of sexual congress. Reviewing your schedule as you cover the last few ${V.showInches === 2 ? "feet" : "meters"} you see that indeed,`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		t.push(`is due to be inspected. It seems likely that while waiting for your return, ${he} called a fellow slave who was passing your office in to keep ${him} company. And as you enter, you see that this is true.`);
		App.Events.addParagraph(node, t);
		t= [];

		t.push(`${He}'s sitting on the end of the couch, though only ${his} legs, crotch, and ${hands} are immediately visible. This is because ${he} has`);
		t.push(contextualIntro(eventSlave, subSlave, true));
		t.push(`on top of ${him}, impaled on`);
		if (canP) {
			t.push(`${his} cock.`);
		} else if (clitP) {
			t.push(`${his} phallus-like clit.`);
		} else {
			t.push(`a strap-on ${he}'s wearing.`);
		}
		t.push(`${subSlave.slaveName} is bent`);
		if (eventSlave.belly >= 5000 && subSlave.belly >= 5000) {
			t.push(`at an awkward angle.`);
		} else {
			t.push(`almost double.`);
		}
		t.push(`${eventSlave.slaveName} has ${his} ${eventSlave.skin}`);
		if (hasBothArms(eventSlave)) {
			t.push(`hands up on the backs of ${subSlave.slaveName}'s ${subSlave.skin} knees, holding ${his2} legs`);
		} else {
			t.push(`hand up on ${subSlave.slaveName}'s ${subSlave.skin} back, forcing ${him2} to keep ${his2} legs`);
		}
		if (eventSlave.belly >= 5000) {
			t.push(`to either side of ${his}`);
			if (eventSlave.preg > eventSlave.pregData.normalBirth/8) {
				t.push(`pregnancy,`);
			} else {
				t.push(`belly,`);
			}
			if (!hasBothArms(eventSlave)) {
				t.push(`and`);
			}
		}
		t.push(`up against ${his2}`);
		if (subSlave.boobs > 2000) {
			t.push(`inconveniently big boobs.`);
		} else {
			t.push(`shoulders.`);
		}
		t.push(`${subSlave.slaveName} is completely helpless, and ${he2}'s being fucked hard:`);
		if (canP || clitP) {
			let sizeRatio;
			if (canP) {
				sizeRatio = eventSlave.dick - subSlave.anus;
			} else {
				sizeRatio = eventSlave.clit - subSlave.anus - 2;
			}
			if (sizeRatio > 2) {
				t.push(`${eventSlave.slaveName}'s ${cock} is very big,`);
				if (subSlave.anus > 2) {
					t.push(`even for ${subSlave.slaveName}'s loose anus,`);
				} else if (subSlave.anus > 1) {
					t.push(`even for ${subSlave.slaveName}'s experienced anus,`);
				} else {
					t.push(`especially for ${subSlave.slaveName}'s tight anus,`);
				}
				t.push(`so ${eventSlave.slaveName} is bouncing ${his} anal bottom up and down only a little way, allowing ${him} to do so fast.`);
			} else if (sizeRatio > 0) {
				t.push(`${eventSlave.slaveName}'s ${cock} is a good fit for ${subSlave.slaveName}'s`);
				if (subSlave.anus > 2) {
					t.push(`loose`);
				} else if (subSlave.anus > 1) {
					t.push(`welcoming`);
				} else {
					t.push(`tight`);
				}
				t.push(`anus, so ${eventSlave.slaveName} is bouncing ${his} anal bottom up and down fast.`);
			} else {
				t.push(`${eventSlave.slaveName}'s ${cock} barely stretches ${subSlave.slaveName}'s`);
				if (subSlave.anus > 2) {
					t.push(`loose`);
				} else if (subSlave.anus > 1) {
					t.push(`welcoming`);
				} else {
					t.push(`tight`);
				}
				t.push(`anus, so ${eventSlave.slaveName} is bouncing ${his} anal bottom up and down as fast as ${he} possibly can.`);
			}
		} else {
			t.push(`${eventSlave.slaveName} is using the biggest dildo ${subSlave.slaveName}'s`);
			if (subSlave.anus > 2) {
				t.push(`loose`);
			} else if (subSlave.anus > 1) {
				t.push(`welcoming`);
			} else {
				t.push(`tight`);
			}
			t.push(`anus can handle, and ${he}'s bouncing ${his} anal bottom up and down fast.`);
		}
		t.push(`Surprisingly, the slave on top doesn't seem too unhappy with this. ${He2}'s no slavishly devoted buttslut, but`);
		if ((subSlave.chastityPenis === 1) && canAchieveErection(subSlave)) {
			t.push(`${he2}'s taking it well, and even looking a little uncomfortable as the beginnings of a hard-on press against ${his2} chastity cage.`);
		} else if (subSlave.belly >= 10000) {
			t.push(`${he2}'s taking it well,`);
			if (subSlave.bellyPreg >= 8000) {
				t.push(`though ${his2}`);
				if (subSlave.pregType > 1) {
					t.push(`children seem to be expressing their own thoughts`);
				} else {
					t.push(`child seems to be expressing its own thought`);
				}
				t.push(`as ${he2} rubs ${his2} pregnant belly.`);
			} else if (subSlave.bellyImplant >= 8000) {
				t.push(`${his2} implant rounded belly bobbing with each thrust into ${him2}.`);
			} else {
				t.push(`though looking a little uncomfortable as ${he2} soothes ${his2} ${subSlave.inflationType}-filled belly.`);
			}
		} else if (canAchieveErection(subSlave)) {
			t.push(`${his2} cock is proudly erect, sticking straight up as ${he2} reclines against ${eventSlave.slaveName} beneath ${him2}, wiggling a little with the rhythm of the pounding.`);
		} else if (subSlave.bellyFluid >= 2000) {
			t.push(`${his2} ${subSlave.inflationType}-filled belly wobbling lewdly with the motion of the pounding.`);
		} else if (subSlave.dick > 0) {
			t.push(`${he2} looks aroused, though ${his2} flopping dick can't show it.`);
		} else if (subSlave.vaginaLube > 0) {
			t.push(`${his2} cunt is gushing female lubricant as the pistoning phallus pushes against the back of ${his2} vaginal wall.`);
		} else if (subSlave.labia > 0) {
			t.push(`${his2} generous petals move gently with the motion of the pounding, and they're far from dry.`);
		} else if (subSlave.vagina === -1) {
			t.push(`${he2}'s taking it up ${his2} only hole just fine.`);
		} else {
			t.push(`${his2} cunt glistens as the pistoning phallus alternately pushes and pulls at ${his2} vaginal wall from behind.`);
		}
		t.push(`"H-h-hi-i`);
		if (subSlave.custom.title) {
			t.push(`${Spoken(subSlave, `${subSlave.custom.title},`)}"`);
		} else if (V.PC.customTitle) {
			t.push(`${Spoken(subSlave, `${V.PC.customTitle},`)}"`);
		} else if (V.PC.title !== 0) {
			t.push(`${Spoken(subSlave, `M-m-ma-a-st-t-ter,`)}"`);
		} else {
			t.push(`${Spoken(subSlave, `M-m-mi-i-is-st-r-r-e-es-s-s,`)}"`);
		}
		t.push(`${he2} ${say2}s breathlessly, doing ${his2} best to greet you properly despite the bouncing.`);
		App.Events.addParagraph(node, t);
		t= [];

		t.push(`${eventSlave.slaveName} stops thrusting, and ${his}`);
		if (eventSlave.face > 95) {
			t.push(`gorgeous`);
		} else if (eventSlave.face >= -10) {
			t.push(`pretty`);
		} else {
			t.push(`homely`);
		}
		t.push(`face instantly appears, craning out from behind ${subSlave.slaveName}'s back to see. ${Spoken(eventSlave, `"Oh, hi, ${master}!"`)} ${he} ${say}s with a cheerful smile,`);
		if (eventSlave.muscles > 30) {
			t.push(`not breathing hard at all despite bouncing a ${girl2} off ${his} crotch.`);
		} else if (eventSlave.muscles > 5) {
			t.push(`barely out of breath despite the effort.`);
		} else {
			t.push(`completely out of breath.`);
		}
		t.push(Spoken(eventSlave, `"I ${canSee(eventSlave) ? "saw" : "heard"} ${him2} going by, and I thought ${he2}'d look cute with ${canP ? "my dick" : (clitP ? "my clit" : "a strap-on")} up ${his2} butthole, so I ${V.universalRulesConsent === 0 ? `told ${him2} to get in here and take it.` : `asked ${him2} to get in here and ${he2} did!`}"`));
		t.push(`${He} shrugs.`);
		if (eventSlave.fetish === "sadist") {
			t.push(Spoken(eventSlave, `"I thought ${he2} was going to whine and struggle, but ${he2}'s kinda disappointing."`));
		} else if (eventSlave.fetish === "pregnancy" && subSlave.belly >= 10000) {
			if (subSlave.bellyPreg >= 8000) {
				t.push(Spoken(eventSlave, `"${He2} was so pregnant, I just had to fuck ${him2}. I'm surprised ${he2}'s enjoying it so much."`));
			} else {
				t.push(Spoken(eventSlave, `"${His2} belly's so round, I just had to fuck ${him2}. I just wish ${he2} was pregnant."`));
			}
		} else if (eventSlave.fetish === "buttslut") {
			t.push(Spoken(eventSlave, `"I like buttsex so much, it's good to give back."`));
		} else {
			t.push(Spoken(eventSlave, `"I thought ${he2} was going to be unhappy about it, but ${he2}'s actually taking it really well."`));
		}
		t.push(`${He} clearly held off on climaxing in case you wanted ${his} libido undiminished for the inspection, and is obediently waiting for your orders, with the bemused ${subSlave.slaveName} perched motionless atop ${him}.`);

		App.Events.addParagraph(node, t);
		App.Events.addResponses(node, [
			new App.Events.Result(`Make sure ${he} looks after ${his} bottom`, bottom),
			new App.Events.Result("Dominate the slave on top", dominate),
		]);

		function bottom() {
			t = [];

			t.push(`You tell ${him} you'll inspect ${him} after ${he}'s done, but add that ${subSlave.slaveName} is clearly being a very good little anal slut, and ${he2} deserves to be rewarded.`);
			t.push(`${canHear(subSlave) ? "Hearing" : "Learning"} this, ${subSlave.slaveName} <span class="hotpink">looks at you very gratefully,</span> and mouths a quiet thanks.`);
			t.push(Spoken(subSlave, `"Yes, ${master2}!"`));
			t.push(`comes the response. ${eventSlave.slaveName} shifts ${his} bitch to one side, and cranes ${his} head upward to make out with the compliant slave. ${subSlave.slaveName} kisses ${him} back with gusto, surprising ${eventSlave.slaveName} again. ${He} recoils in shock at how much tongue ${subSlave.slaveName} gives ${him}, but moans aggressively and gets ${his} revenge by dropping one of ${subSlave.slaveName}'s knees and`);
			if (subSlave.chastityPenis) {
				t.push(`playing with one of ${his2} nipples.`);
			} else if (canAchieveErection(subSlave)) {
				t.push(`jacking ${him2} off.`);
			} else if (subSlave.dick > 0) {
				t.push(`playing with ${his2} soft cock.`);
			} else if (subSlave.clit > 2) {
				t.push(`rubbing ${his2} ridiculous clit.`);
			} else if (subSlave.labia > 0) {
				t.push(`fingering ${his2} glorious labia.`);
			} else if (subSlave.vagina === -1) {
				t.push(`fingering ${his2} anus.`);
			} else {
				t.push(`fingering ${his2} clit.`);
			}
			t.push(`Jerking at the stimulation, ${subSlave.slaveName} urges ${his2} butt down against ${eventSlave.slaveName}'s hips, physically begging for a resumption of the sodomy. ${eventSlave.slaveName} applies ${himself}, forcing a growing whine out of ${subSlave.slaveName} as ${his2} asspussy is mercilessly fucked.`);
			if (subSlave.chastityPenis) {
				t.push(`${His2} chastity cage prevents ${him2} from orgasming, but when ${eventSlave.slaveName} climaxes and lets ${him2} up,`);
			} else if (canAchieveErection(subSlave)) {
				t.push(`${He2} cums all over ${his2} own`);
				if (subSlave.belly >= 5000) {
					if (subSlave.bellyPreg >= 3000) {
						t.push(`pregnant`);
					} else {
						t.push(`rounded`);
					}
				} else {
					t.push(`chest and`);
				}
				t.push(`belly, the droplets of semen oozing down ${him2} as ${eventSlave.slaveName} reaches ${his} own climax. When ${eventSlave.slaveName} lets ${him2} up,`);
			} else if (subSlave.vagina === -1) {
				t.push(`${He2} cums weakly, the droplets of watery ejaculate running down ${him2} as ${eventSlave.slaveName} reaches ${his} own climax. When ${eventSlave.slaveName} lets ${him2} up,`);
			} else if (subSlave.vaginaLube > 0) {
				t.push(`${He2} orgasms powerfully, femcum squirting out of ${his2} pussy as ${eventSlave.slaveName} reaches ${his} own climax. When ${eventSlave.slaveName} lets ${him2} up,`);
			} else {
				t.push(`${He2} orgasms powerfully, ${his2} abs tightening. When ${eventSlave.slaveName} lets ${him2} up,`);
			}
			t.push(`${he2} looks pleased with ${himself2}, and <span class="mediumaquamarine">a little more confident,</span> too.`);
			subSlave.devotion += 2;
			subSlave.trust += 2;
			seX(subSlave, "anal", eventSlave, "penetrative");
			if (canImpreg(subSlave, eventSlave)) {
				knockMeUp(subSlave, 5, 1, eventSlave.ID);
			}
			return t;
		}
		function dominate() {
			const frag = document.createDocumentFragment();
			t = [];

			t.push(`You make no reply, but`);
			if (V.PC.dick !== 0) {
				t.push(`advance on the couch, stripping down to reveal a raging erection.`);
				if (V.PC.vagina !== -1) {
					t.push(`and ready cunt.`);
				}
			} else {
				t.push(`move to a side table, selecting a formidable strap-on.`);
			}
			if (canSee(eventSlave)) {
				t.push(`Seeing`);
			} else {
				t.push(`Hearing`);
			}
			t.push(`this, ${eventSlave.slaveName} <span class="hotpink">giggles with anticipation,</span> and pulls`);
			if (hasBothArms(eventSlave)) {
				t.push(`${subSlave.slaveName}'s knees back farther.`);
			} else {
				t.push(`${subSlave.slaveName} even closer.`);
			}
			t.push(`The slave whines at the stretch, and then gasps as the invading phallus pops free of ${his2} asshole. ${His2} anus`);
			if (subSlave.anus > 2) {
				t.push(`gapes lewdly, its sphincter so well stretched that it stays invitingly open,`);
			} else if (subSlave.anus > 1) {
				t.push(`gapes slightly, its sphincter remaining just barely open,`);
			} else {
				t.push(`closes up again immediately once it's no longer being penetrated. Its rosebud is`);
			}
			if (canP) {
				t.push(`glistening with lube and precum from ${eventSlave.slaveName}'s cock`);
			} else {
				t.push("glistening with lube.");
			}
			t.push(`But you decide to be more circumspect. Pressing your`);
			if (V.PC.dick !== 0) {
				t.push(`dickhead`);
			} else {
				t.push(`phallus`);
			}
			t.push(`into ${subSlave.slaveName}'s mouth, you tell ${him2} to be thorough with ${his2}`);
			if (V.PC.vagina !== -1) {
				t.push(`saliva and not to worry about your pussy.`);
			} else {
				t.push("saliva.");
			}
			t.push(`${His2} eyes widen at the implication, and ${he2} starts to suck lushly.`);
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`Suddenly, ${he2} jerks and squeals into your`);
			if (V.PC.dick !== 0) {
				t.push(`dick.`);
			} else {
				t.push(`crotch.`);
			}
			t.push(`With you standing there, ${eventSlave.slaveName} can't really`);
			if (canSee(eventSlave)) {
				t.push(`see much,`);
			} else {
				t.push(`feel around down there,`);
			}
			t.push(`and ${he} can't`);
			if (hasBothArms(eventSlave)) {
				t.push(`drop ${subSlave.slaveName}'s legs`);
			} else {
				t.push(`relax ${his} grip on ${subSlave.slaveName}`);
			}
			t.push(`without throwing everything into confusion. So, ${he}'s reduced to blind jabs to get ${his}`);
			if (canP) {
				t.push(`cock`);
			} else if (clitP) {
				t.push(`clit`);
			} else {
				t.push(`strap-on`);
			}
			t.push(`back up the poor slave's butt. It takes ${him} quite a while to manage it, and when ${he}'s finally seated, ${subSlave.slaveName} gives as huge a sigh as ${he2} can manage with a phallus down ${his2} throat. ${His2} relief is short lived, however, because soon afterward, you withdraw, leaving a string of spit between ${his2} wet lips and the`);
			if (V.PC.dick !== 0) {
				t.push(`head of your turgid cock.`);
			} else {
				t.push(`massive head of your strap-on.`);
			}
			App.Events.addParagraph(frag, t);
			t = [];
			if (canDoVaginal(subSlave) && subSlave.vagina > 0) {
				t.push(`With ${eventSlave.slaveName} occupying ${subSlave.slaveName}'s rear hole, your next step is obvious to everyone involved, and ${he2} groans with fullness as ${he2} feels ${his2} cunt accommodate you. ${eventSlave.slaveName} matches ${his} rhythm to yours, and`);
				if (canP || clitP) {
					t.push(`orgasms promptly, since ${he}'s less accustomed than you are to the delectable sensation of a ${girl2} tightened by a phallus in ${his2} other hole.`);
				} else {
					t.push(`climaxes quickly despite having no sensation in ${his} fake dick, since ${he} finds the situation so arousing.`);
				}
				if (canImpreg(subSlave, V.PC)) {
					knockMeUp(subSlave, 5, 0, -1);
				}
				if (canP && canImpreg(subSlave, eventSlave)) {
					knockMeUp(subSlave, 5, 1, eventSlave.ID);
				}
				seX(subSlave, "vaginal", V.PC, "penetrative");
			} else if (subSlave.anus > 2) {
				t.push(`${subSlave.slaveName}'s rear hole is such a loose slit that double anal shouldn't be too much trouble for ${him2}. It isn't, though ${his2} breath definitely quickens as ${he2} feels a second rod push its way past ${his2} stretched sphincter. ${eventSlave.slaveName}`);
				if (canP || clitP) {
					t.push(`orgasms promptly, unable to prolong sex when ${he}'s feeling ${his} ${cock} slide against you inside another slave's anus.`);
				} else {
					t.push(`climaxes quickly despite having no sensation in ${his} fake dick, since ${he} finds the situation so arousing.`);
				}
				if (canImpreg(subSlave, V.PC)) {
					knockMeUp(subSlave, 5, 1, -1);
				}
				if (canP && canImpreg(subSlave, eventSlave)) {
					knockMeUp(subSlave, 5, 1, eventSlave.ID);
				}
				seX(subSlave, "anal", V.PC, "penetrative");
			} else {
				t.push(`${subSlave.slaveName}'s rear hole is a bit tight for double anal, and ${he2}'s already quite dominated; you mean to use ${him2} thoroughly, not destroy ${him2}. So, you and ${eventSlave.slaveName} switch off: you use ${subSlave.slaveName}'s butt while ${eventSlave.slaveName} pins ${him2} for you, and then you go back to ${subSlave.slaveName}'s mouth for a while and let ${eventSlave.slaveName} take over sodomizing duties. ${He}`);
				if (canP || clitP) {
					t.push(`orgasms promptly, since ${he} finds a hole warm from your use very hot.`);
				} else {
					t.push(`climaxes quickly despite having no sensation in ${his} fake dick, since ${he} finds the situation so arousing.`);
				}
				if (canImpreg(subSlave, V.PC)) {
					knockMeUp(subSlave, 5, 1, -1);
				}
				if (canP && canImpreg(subSlave, eventSlave)) {
					knockMeUp(subSlave, 5, 1, eventSlave.ID);
				}
				seX(subSlave, "anal", V.PC, "penetrative");
			}
			t.push(`When ${subSlave.slaveName} has stumbled off to the shower, ${eventSlave.slaveName} presents ${himself} for inspection, smelling of sex and <span class="mediumaquamarine">smiling trustingly.</span>`);
			eventSlave.devotion += 2;
			eventSlave.trust += 2;
			seX(subSlave, "anal", eventSlave, "penetrative");
			App.Events.addParagraph(frag, t);
			return frag;
		}
	}
};


code:
// cSpell:ignore againnn, nooo, fffuck

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

	actorPrerequisites() {
		return [
			[
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canWalk,
				canTalk,
				canHear,
				s => s.assignment !== Job.QUARTER,
				s => s.devotion > 20,
				s => s.trust > 20,
				s => s.boobs > 3000,
				s => (s.attrXX >= 50 || (s.fetish === "boobs" && s.fetishStrength > 95))
			],
			[ // and subslave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canStand,
				canTalk,
				canHear,
				isSlaveAvailable,
				s => s.devotion > 20,
				s => s.boobs > 3000,
			]
		];
	}

	execute(node) {
		const [eventSlave, subSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, his, him, himself, woman, girl, loli
		} = getPronouns(eventSlave);
		const {say, title} = getEnunciation(eventSlave);
		const {
			him2, girl2, his2, he2, He2, woman2, hers2, loli2
		} = getPronouns(subSlave).appendSuffix("2");
		const {title: title2, say: say2} = getEnunciation(subSlave);

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

		let t = [];

		t.push(`You pass by the slave quarters during a busy time. Slaves are hurrying back and forth, rushing to bathe, eat, and get dressed. In a particular hurry is`);
		t.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), ","));
		t.push(`${his}`);
		if (eventSlave.belly >= 10000) {
			if (eventSlave.bellyPreg >= 8000) {
				t.push(`heavy pregnancy`);
			} else {
				t.push(`heavy belly`);
			}
			t.push(`and`);
		}
		if (eventSlave.boobs > 8000) {
			t.push(`gargantuan tits hampering ${him} badly`);
		} else {
			t.push(`huge boobs getting in the way`);
		}
		t.push(`as ${he} rushes around. Returning from the shower to the sleeping area, ${he} turns a corner and runs hard into`);
		t.push(App.UI.DOM.combineNodes(contextualIntro(eventSlave, subSlave, true), "."));
		t.push(`Both slaves are nude, and the collision of their massive breasts makes an audibly painful smack. ${eventSlave.slaveName} has enough momentum that ${he} overbears the top-heavy ${subSlave.slaveName} entirely. The poor`);
		if (subSlave.physicalAge > 30) {
			t.push(woman2);
		} else {
			t.push(girl2);
		}
		t.push(`crashes backwards, ${his2}`);
		if (subSlave.butt > 8) {
			t.push(`monstrous bottom`);
		} else if (subSlave.butt > 4) {
			t.push(`big behind`);
		} else {
			t.push(`hind end`);
		}
		t.push(`hitting the floor with a slap. ${eventSlave.slaveName} lands on top of ${him2}, the fall and the sudden weight of ${eventSlave.slaveName} on top of ${him2} driving the wind out of ${subSlave.slaveName} with a whoosh.`);
		App.Events.addParagraph(node, t);
		t = [];
		t.push(Spoken(eventSlave, `"Sorry! I'm so sorry,"`));
		t.push(`apologizes ${eventSlave.slaveName}. ${He} starts to try to disentangle ${himself} as ${subSlave.slaveName} struggles to get ${his2} breath back, but you see ${eventSlave.slaveName}'s back stiffen. ${He} stops trying to get up. As the discomfort of the collision fades, ${he} notices the warmth of ${subSlave.slaveName} underneath ${him}, and the way their nipples are pressed against one another. Impulsively, ${he} kisses ${subSlave.slaveName} full on the lips,`);
		if (eventSlave.boobs+subSlave.boobs > 20000) {
			t.push(`even though the mass of boob between them is so massive that ${he} has to struggle to bring ${his} mouth down to meet ${subSlave.slaveName}'s.`);
		} else if (eventSlave.belly >= 5000 && subSlave.belly >= 5000) {
			t.push(`even though their combined`);
			if (eventSlave.bellyPreg >= 5000) {
				t.push(`pregnancies`);
			} else {
				t.push(`bellies`);
			}
			t.push(`and breasts complicate things.`);
		} else if (eventSlave.belly >= 120000 || subSlave.belly >= 120000) {
			t.push(`even though`);
			if (eventSlave.belly >= 120000) {
				t.push(`${his} massive `);
				if (eventSlave.bellyPreg >= 5000) {
					t.push(`pregnancy`);
				} else {
					t.push(`belly`);
				}
				t.push(`complicates reaching ${subSlave.slaveName}'s.`);
			} else {
				t.push(`${subSlave.slaveName}'s massive`);
				if (eventSlave.bellyPreg >= 5000) {
					t.push(`pregnancy`);
				} else {
					t.push(`belly`);
				}
				t.push(`complicates reaching ${hers2}.`);
			}
		} else {
			t.push(`squashing their boobs together hard so ${he} can reach despite the mass of soft flesh between them.`);
		}
		App.Events.addParagraph(node, t);
		t = [];
		t.push(`"H-hey," ${subSlave.slaveName} gasps when ${eventSlave.slaveName} finally breaks the lip lock, but ${he2}'s clearly not that displeased. ${eventSlave.slaveName}, who has clearly forgotten running into the other slave entirely and now has other things on ${his} mind, begins to grind against ${him2}. When ${subSlave.slaveName} smiles back at the horny`);
		if (eventSlave.physicalAge > 30) {
			t.push(woman);
		} else if (eventSlave.physicalAge >= 18) {
			t.push(girl);
		} else if (eventSlave.physicalAge >= 13) {
			t.push(`teenager`);
		} else {
			t.push(loli);
		}
		t.push(`on top of ${him2}, ${eventSlave.slaveName}`);
		if (canPenetrate(eventSlave)) {
			if (!canDoVaginal(subSlave)) {
				if (subSlave.anus === 0 || !canDoAnal(subSlave)) {
					t.push(`reaches down to seat ${his} rapidly hardening dick between ${subSlave.slaveName}'s thighs for a bit of frottage.`);
					actX(eventSlave, "penetrative"); // frottage is not recorded
				} else if (eventSlave.dick > 4) {
					t.push(`pushes ${subSlave.slaveName}'s legs apart to rotate ${his2} hips, reaches down, and`);
					if (subSlave.anus > 2) {
						t.push(`rubs a little saliva on ${his} cock before shoving it up ${subSlave.slaveName}'s anus.`);
					} else {
						t.push(`carefully pushes ${his} cock up the whimpering ${subSlave.slaveName}'s tight butt.`);
					}
					seX(subSlave, "anal", eventSlave, "penetrative");
					if (canImpreg(subSlave, eventSlave)) {
						knockMeUp(subSlave, 5, 1, eventSlave.ID);
					}
				} else {
					t.push(`pushes ${subSlave.slaveName}'s legs apart to rotate ${his2} hips, reaches down, and`);
					if (subSlave.anus > 2) {
						t.push(`shoves ${his} cock up ${subSlave.slaveName}'s anus, which is loose enough that ${he} doesn't need much lubrication.`);
					} else {
						t.push(`pushes ${his} cock up the ${subSlave.slaveName}'s willing butt.`);
					}
					seX(subSlave, "anal", eventSlave, "penetrative");
					if (canImpreg(subSlave, eventSlave)) {
						knockMeUp(subSlave, 5, 1, eventSlave.ID);
					}
				}
			} else {
				if (subSlave.vagina === 0) {
					t.push(`reaches down to seat ${his} rapidly hardening dick between ${subSlave.slaveName}'s thighs for a bit of frottage.`);
				} else if (eventSlave.dick > 4) {
					t.push(`reaches down`);
					if (subSlave.vagina > 1) {
						t.push(`to insert ${his} huge cock into ${subSlave.slaveName}'s loose wet cunt.`);
					} else {
						t.push(`and carefully pushes ${his} cock into the whimpering ${subSlave.slaveName}'s tight pussy.`);
					}
					seX(subSlave, "vaginal", eventSlave, "penetrative");
					if (canImpreg(subSlave, eventSlave)) {
						knockMeUp(subSlave, 5, 0, eventSlave.ID);
					}
				} else {
					t.push(`reaches down`);
					if (subSlave.vagina > 1) {
						t.push(`and inserts ${his} dick into ${subSlave.slaveName}'s loose wet cunt.`);
					} else {
						t.push(`to put ${his} dick inside ${subSlave.slaveName}'s tight pussy.`);
					}
					seX(subSlave, "vaginal", eventSlave, "penetrative");
					if (canImpreg(subSlave, eventSlave)) {
						knockMeUp(subSlave, 5, 0, eventSlave.ID);
					}
				}
			}
		} else if (canAchieveErection(eventSlave) && !(eventSlave.chastityPenis) && eventSlave.dick >= 8) {
			t.push(`reaches down to seat ${his} rapidly hardening monster of a cock between ${subSlave.slaveName}'s thighs for a bit of frottage.`);
		} else if (eventSlave.dick > 0 && !(eventSlave.chastityPenis)) {
			t.push(`starts to rub ${his} soft bitchclit against ${subSlave.slaveName}'s ${genitalDesc(false, true)}.`);
		} else if (eventSlave.dick > 0 && (eventSlave.chastityPenis === 1)) {
			t.push(`starts to rub ${his} chastity cage against ${subSlave.slaveName}'s ${genitalDesc(true, true)}.`);
		} else if (eventSlave.chastityVagina) {
			t.push(`starts to rub ${his} chastity belt against ${subSlave.slaveName}'s ${genitalDesc(true, true)}.`);
		} else if (eventSlave.vagina === -1) {
			t.push(`starts to rub ${his} soft groin against ${subSlave.slaveName}'s ${genitalDesc(false, false)}.`);
		} else {
			t.push(`starts to rub ${his} wet pussy against ${subSlave.slaveName}'s ${genitalDesc(false, false)}.`);
		}

		function genitalDesc(doubleChastity, pussy) {
			if (subSlave.chastityVagina) {
				if (doubleChastity) {
					return "own belt, a rather pathetic display";
				}
				return "chastity belt";
			} else if (subSlave.dick > 0) {
				return "dick";
			} else if (subSlave.vagina === -1) {
				return "asspussy";
			} else {
				if (pussy) { // Why??
					return "pussy";
				} else {
					return "mons";
				}
			}
		}

		t.push(`Once ${he}'s gotten ${himself} positioned, ${subSlave.slaveName} reaches around ${eventSlave.slaveName}'s ${eventSlave.skin} body to grab ${his} ass. ${He2} holds ${eventSlave.slaveName} against ${him2} as ${eventSlave.slaveName} starts humping gently, and cranes ${his2} neck up to kiss ${him}.`);

		App.Events.addParagraph(node, t);
		App.Events.addResponses(node, [
			new App.Events.Result("Fuck them", fuck),
			(eventSlave.anus > 0 && canDoAnal(eventSlave))
				? new App.Events.Result("Dominate the clumsy slave's ass", dominate)
				: new App.Events.Result(),
			((eventSlave.relationship === 0 || eventSlave.relationship === -1) && (subSlave.relationship === 0 || subSlave.relationship === -1))
				? new App.Events.Result("What a cute couple", couple)
				: new App.Events.Result(),
		]);

		function fuck() {
			t = [];

			t.push(`You approach the fucking slaves, kneeling next to them and running a possessive hand over ${eventSlave.slaveName}'s butt. The slave doesn't even have to look, recognizing you by your grip, and greets you cheerfully: "Hi ${title}!" ${subSlave.slaveName} giggles and cranes around to`);
			if (canSee(subSlave)) {
				t.push(`see.`);
			} else {
				t.push(`greet you.`);
			}
			t.push(`"Hi ${title2}," ${he2} choruses. ${eventSlave.slaveName} wiggles ${his} bottom under your hand, <span class="trust inc">trusting your judgment,</span> and ${subSlave.slaveName}`);
			if (canSee(subSlave)) {
				t.push(`watches`);
			} else {
				t.push(`waits`);
			}
			t.push(`to see what you'll do <span class="trust inc">with anticipation.</span>`);
			if (V.PC.dick === 0) {
				t.push(`You decide to make use of the position the slaves have gotten themselves into. Once naked, you get on all fours ahead of them, and then back yourself between them until you're effectively sitting on the massive cushion formed between them by their breasts. This puts your pussy against ${subSlave.slaveName}'s mouth, and your butt right in front of ${eventSlave.slaveName}'s face. ${subSlave.slaveName} starts to eat you out with dedication, and after planting a wet kiss on each of your thighs, ${eventSlave.slaveName} runs ${his} tongue from the base of your cunt and along your perineum, and then begins to kiss your asshole. The universe of warm wetness created by their mouths is so intense that your arms almost buckle.`);
				seX(eventSlave, "oral", V.PC, "vaginal");
				seX(subSlave, "oral", V.PC, "anal");
			} else {
				t.push(`They don't have long to wait. There's no need to be excessively creative. You get behind them and start from the top, laying your cock against ${eventSlave.slaveName}'s back, which produces an anticipatory shudder. Moving down, you`);
				if (!canDoAnal(eventSlave)) {
					if (V.PC.vagina !== -1) {
						t.push(`trail your hot cunt across the tops of ${his} buttocks and then`);
					}
					t.push(`trace your dickhead around ${eventSlave.slaveName}'s chastity belt before continuing. You move your cockhead, beaded with precum, down ${his} soft perineum`);
				} else if (eventSlave.anus === 0) {
					if (V.PC.vagina !== -1) {
						t.push(`trail your hot cunt across the tops of ${his} buttocks and then`);
					}
					t.push(`tease your dickhead against ${eventSlave.slaveName}'s virgin butt for a moment before continuing. You move your cockhead, beaded with precum, down ${his} soft perineum`);
				} else if (eventSlave.anus < 3) {
					t.push(`push your cock against ${eventSlave.slaveName}'s tight asshole, causing ${him} to stiffen and struggle momentarily before it pops inside ${him}. After giving ${his} butt a thorough fuck, you move your wet cockhead down ${his} soft perineum`);
					seX(subSlave, "anal", V.PC, "penetrative");
					if (canImpreg(eventSlave, V.PC)) {
						knockMeUp(eventSlave, 5, 1, -1);
					}
				} else {
					t.push(`push your cock up ${eventSlave.slaveName}'s asspussy, which accepts it with ease. After giving it a good hard reaming, you move your wet cockhead down ${his} soft perineum`);
					seX(subSlave, "anal", V.PC, "penetrative");
					if (canImpreg(eventSlave, V.PC)) {
						knockMeUp(eventSlave, 5, 1, -1);
					}
				}
				if (!canDoVaginal(eventSlave) || (eventSlave.vagina === 0)) {
					t.push(`and into the warm space between the two slaves for a little while.`);
				} else {
					t.push(`and into ${his} cunt, giving it a good hard fuck.`);
					seX(eventSlave, "vaginal", V.PC, "penetrative");
					if (canImpreg(eventSlave, V.PC)) {
						knockMeUp(eventSlave, 5, 0, -1);
					}
				}
				t.push(`Then you see to ${subSlave.slaveName} beneath ${him},`);
				if (canDoVaginal(subSlave) && subSlave.vagina > 0) {
					t.push(`giving ${him2} a turn with ${his2} owner's cock inside ${his2} womanhood before`);
					seX(eventSlave, "vaginal", V.PC, "penetrative");
					if (canImpreg(subSlave, V.PC)) {
						knockMeUp(subSlave, 5, 0, -1);
					}
				}
				if (subSlave.anus === 0 || !canDoAnal(subSlave)) {
					t.push(`using the slave's smashed-together buttocks to rub against.`);
				} else {
					t.push(`giving ${him2} as hard a buttfuck as you can manage with ${eventSlave.slaveName} between you.`);
					seX(subSlave, "anal", V.PC, "penetrative");
					if (canImpreg(subSlave, V.PC)) {
						knockMeUp(subSlave, 5, 1, -1);
					}
				}
			}
			t.push(`Then you move back up, using them until you're spent and they're lying limply in a pool of sweat and tits.`);
			subSlave.trust += 2;
			eventSlave.trust += 2;

			return t;
		}

		function dominate() {
			const frag = document.createDocumentFragment();
			t = [];
			const Yessir = Spoken(eventSlave, `Yes ${title}`);
			const cm = V.showInches === 2 ? "inch" : "centimeter";

			t.push(`You tell ${eventSlave.slaveName} that that was very clumsy of ${him}. The slaves start with surprise, since they didn't know you were watching, producing a delightful jiggle of smashed-together boob.`);
			t.push(`"${Yessir}," ${eventSlave.slaveName} ${say}s obediently, suspecting that you aren't done. ${He}'s right. In an idle, speculative tone, you muse that with ${his} huge boobs`);
			if (eventSlave.belly >= 10000) {
				t.push(`and big belly`);
			}
			t.push(`pinning ${him} to the ground and ${subSlave.slaveName} holding ${his} butt like that, ${he} can't get up. "${Yessir}," ${he} agrees. Quite helpless, you continue. "${Yessir}," ${he} parrots. Unable to escape, you conclude. "${Yessir}, ${he} moans.`);
			App.Events.addParagraph(frag, t);
			t = [];

			t.push(`You tell ${subSlave.slaveName} to`);
			if (canPenetrate(subSlave)) {
				t.push(`sodomize ${him}. ${subSlave.slaveName} obeys hurriedly, shoving a hand between their hips to`);
				if (subSlave.dick > 4) {
					if (eventSlave.anus > 2) {
						t.push(`shove ${his2} cock up ${eventSlave.slaveName}'s loose anus.`);
					} else {
						t.push(`carefully push ${his2} cock inside ${eventSlave.slaveName}'s tight butthole.`);
					}
					t.push(`${eventSlave.slaveName} rides ${subSlave.slaveName} hard, knowing that the looser ${his} ass is, the easier whatever you're planning will be. ${subSlave.slaveName}'s big tool gapes ${his} hole quickly.`);
				} else {
					if (eventSlave.anus > 2) {
						t.push(`shove ${his2} dick inside ${eventSlave.slaveName}'s loose anus.`);
					} else {
						t.push(`push push ${his2} dick up ${eventSlave.slaveName}'s tight butthole.`);
					}
					t.push(`${eventSlave.slaveName} rides ${subSlave.slaveName} hard, knowing that the looser ${his} ass is, the easier whatever you're planning will be. ${subSlave.slaveName}'s penis isn't big enough to gape ${him} very much, so ${eventSlave.slaveName}, trying to be prepared, reaches around to shove an extra finger in alongside it.`);
				}
				t.push(`You`);
				if (V.PC.dick === 0) {
					t.push(`put on a strap-on,`);
				}
				t.push(`stop ${his} desperate humping, and shove ${his}`);
				if (eventSlave.bellyPreg >= 1500) {
					t.push(`gravid`);
				} else if (eventSlave.belly >= 1500) {
					t.push(`bloated`);
				}
				t.push(`torso back down against ${subSlave.slaveName}'s boobs. ${subSlave.slaveName} grabs hold of ${eventSlave.slaveName}'s buttocks and pulls them as far apart as ${he2} possibly can, removing all protection from ${eventSlave.slaveName}'s already-full asshole. ${eventSlave.slaveName} takes a deep breath and lets it out slowly as ${he} feels`);
				if (V.PC.dick === 0) {
					t.push(`the head of the strap-on`);
				} else {
					t.push(`your cockhead`);
				}
				t.push(`press insistently against the outside of ${his} anus and then, ${cm} by agonizing ${cm}, seat itself up ${his} butt alongside ${subSlave.slaveName}'s cock. ${He} shudders when you begin to thrust. ${subSlave.slaveName}, overstimulated, climaxes first; as the edge comes off ${his2} hard-on, ${his2} cock slides out of ${eventSlave.slaveName}'s ass, letting you be utterly merciless to the loosened, cum-soaked hole.`);
				seX(eventSlave, "anal", subSlave, "penetrative");
				seX(eventSlave, "anal", V.PC, "penetrative");
				if (canImpreg(eventSlave, V.PC)) {
					knockMeUp(eventSlave, 5, 1, -1);
				}
				if (canImpreg(eventSlave, subSlave)) {
					knockMeUp(eventSlave, 5, 1, subSlave.ID);
				}
			} else {
				t.push(`fingerfuck ${him}. ${subSlave.slaveName} obeys hurriedly, reaching inward and`);
				if (subSlave.anus > 2) {
					t.push(`pushing two fingers from each hand inside ${eventSlave.slaveName}'s loose anus.`);
				} else {
					t.push(`carefully pushing a finger from each hand up ${eventSlave.slaveName}'s tight butthole.`);
				}
				t.push(`${eventSlave.slaveName} begs ${subSlave.slaveName} to fuck ${his} butt, knowing that the looser ${his} ass is, the easier whatever you're planning will be. ${subSlave.slaveName} does ${his2} best, using ${his2} fingers to stretch ${eventSlave.slaveName}'s sphincter as much as ${he2} can without hurting ${him}.`);
				seX(eventSlave, "anal", subSlave, "penetrative");
				seX(eventSlave, "anal", V.PC, "penetrative");
				t.push(`Once you're satisfied that ${he} can take what's coming, you`);
				if (V.PC.dick === 0) {
					t.push(`put on a strap-on,`);
				}
				t.push(`steady ${his} hips, and shove ${his}`);
				if (eventSlave.bellyPreg >= 1500) {
					t.push(`gravid`);
				} else if (eventSlave.belly >= 1500) {
					t.push(`bloated`);
				}
				t.push(`torso back down against ${subSlave.slaveName}'s boobs. ${subSlave.slaveName} pulls to either side, gaping ${eventSlave.slaveName}'s hole for you. ${eventSlave.slaveName} takes a deep breath and lets it out slowly as ${he} feels`);
				if (V.PC.dick === 0) {
					t.push(`the head of the strap-on`);
				} else {
					t.push(`your cockhead`);
				}
				t.push(`slide between ${subSlave.slaveName}'s fingers, ${cm} by agonizing ${cm}, and seat itself up ${his} butt. ${He} shudders when you begin to thrust. ${subSlave.slaveName} keeps ${his2} fingers where they are, doing ${his2} best to use them to give you a handjob inside ${eventSlave.slaveName}'s ass.`);
				if (canImpreg(eventSlave, V.PC)) {
					knockMeUp(eventSlave, 5, 1, -1);
				}
			}
			t.push(`When you're done, you pull out, leaving ${eventSlave.slaveName} to collapse, whimpering and shaking, onto ${subSlave.slaveName}'s boobs. ${subSlave.slaveName}`);
			if (canSee(subSlave)) {
				t.push(`winks`);
			} else {
				t.push(`smiles`);
			}
			t.push(`at you over ${his2} shoulder. ${Spoken(subSlave, `"That was fun ${title2},"`)} ${he2} ${say2}s brightly. "<span class="devotion inc">${Spoken(subSlave, `Can we do that again`)}</span> ${Spoken(subSlave, `soon, please?"`)}`);
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`"Ohh fffuck," ${eventSlave.slaveName} moans into ${his} boobs, to no one in particular.`);
			subSlave.devotion += 4;
			if (eventSlave.anus < 3) {
				t.push(Spoken(eventSlave, `"Please nooo, <span class="lime">my poor hole will never be the same againnn.</span>"`));
				eventSlave.anus += 1;
			}

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

		function couple() {
			const frag = document.createDocumentFragment();
			t = [];

			t.push(`You tell them they make a cute couple. The slaves start with surprise, since they didn't know you were watching, producing a delightful jiggle of smashed-together boob. "Thank you, ${properMaster()}," they chorus correctly, before turning back to look at each other. They take your comment quite seriously, both of them seemingly forgetting that they're in the middle of having sex to consider it. ${eventSlave.slaveName} speaks first.`);
			t.push(Spoken(eventSlave, `"I guess I never really thought about you that way,"`));
			t.push(`${he} says to the huge-boobed`);
			if (subSlave.physicalAge > 30) {
				t.push(woman2);
			} else if (subSlave.physicalAge > 18) {
				t.push(girl2);
			} else if (subSlave.physicalAge > 12) {
				t.push("teen");
			} else {
				t.push(loli2);
			}
			t.push(`trapped beneath ${him}.`);
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`${subSlave.slaveName}, who is still holding ${eventSlave.slaveName}'s buttocks, gives them a squeeze. ${Spoken(subSlave, `"Well, you silly ${girl}, what do you think about it now?"`)}`);
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`${eventSlave.slaveName} stiffens with sudden embarrassment. "Uh, um," ${he} stammers, before saying in a rush, ${Spoken(eventSlave, `"${subSlave.slaveName}, will you go out with me?"`)}`);
			App.Events.addParagraph(frag, t);
			t = [];
			t.push(`${subSlave.slaveName} laughs, a pure, unclouded sound, and gives ${eventSlave.slaveName} a cute little peck on the tip of ${his} nose. ${Spoken(subSlave, `"<span class="relationship">Of course I will,</span>"`)} ${he2} purrs, and runs ${his2} hands up ${eventSlave.slaveName}'s back to hug ${him} tightly.`);
			App.Events.addParagraph(frag, t);
			t = [];

			t.push(`The encounter becomes far more heartfelt than it was before you spoke up. ${eventSlave.slaveName}, who seems affected, says self-consciously,`);
			t.push(Spoken(eventSlave, `"Um, does this mean I get a ${girl2}friend every time I'm clumsy?"`));
			t.push(`${subSlave.slaveName} giggles and shushes ${him}. They begin to kiss earnestly while they fuck, and you leave them to it. Each of them comes to you later to <span class="devotion inc">thank you</span> for permitting them to be together.`);
			subSlave.devotion += 2;
			eventSlave.devotion += 2;
			subSlave.relationship = 3;
			subSlave.relationshipTarget = eventSlave.ID;
			eventSlave.relationship = 3;
			eventSlave.relationshipTarget = subSlave.ID;
			App.Events.addParagraph(frag, t);
			t = [];
			return frag;
		}
	}
};