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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => V.REFeminizationCheckinIDs.includes(s.ID),
				s => s.assignment !== Job.QUARTER,
				s => s.devotion >= 10,
				s => s.dick > 0,
				s => s.vagina < 0,
				s => s.attrXY > 65,
				s => s.energy > 60,
				s => s.faceShape !== "masculine",
				s => s.belly <= 0,
				s => s.bodySwap === 0,
				s => s.anus > 0,
				s => s.sexualFlaw !== "hates anal",
				s => s.butt > 0,
				canStand,
				canDoAnal,
				canTalk,
				canHear,
				hasAnyArms,
			]
		];
	}

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

		V.REFeminizationCheckinIDs.deleteWith((s) => s === eventSlave.ID);

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

		let t = [];
		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`is standing before your desk for an inspection. The ${desc} is naked, of course, and is devoted enough to find the situation arousing: ${he}'s being inspected by ${his} ${getWrittenTitle(eventSlave)} in the nude, which is sexual enough, and past inspections have often led to a quick fuck. The horny bitch obviously wants it;`);
		if (eventSlave.chastityPenis === 1) {
			t.push(`${his} chastity cage is dribbling precum, and ${he}'s clearly uncomfortable with simultaneous arousal and unwillingness to suffer a hard-on inside it.`);
		} else if (canAchieveErection(eventSlave)) {
			t.push(`${his} cock is painfully erect.`);
		} else if (eventSlave.dick > 6) {
			t.push(`${his} inhuman cock is swollen and leaking precum.`);
		} else if (eventSlave.dick > 0) {
			t.push(`${his} pathetically limp dick is practically dripping precum.`);
		}
		t.push(`Your inspections require the slave to offer each of ${his} body parts to your view, and when the routine reaches ${his} anus, the slut obediently turns ${his} back to you, bends at the waist, and`);
		if (eventSlave.butt > 10) {
			t.push(`struggles to spread ${his} immense asscheeks far enough apart to even give you a view of`);
		} else if (eventSlave.butt > 5) {
			t.push(`prises ${his} massive buttocks apart to reveal`);
		} else if (eventSlave.butt > 2) {
			t.push(`pulls ${his} buttocks apart to show off`);
		} else {
			t.push(`spreads ${his} cute buttocks to show off`);
		}
		t.push(`${his}`);
		if (eventSlave.anus > 2) {
			t.push(`asshole, which is so relaxed it's begging for cock.`);
		} else if (eventSlave.anus > 1) {
			t.push(`butthole, which ${he} winks invitingly at you.`);
		} else {
			t.push(`tight anus, which ${he} winks invitingly at you.`);
		}
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`You often pepper slaves with questions during this inspection; it helps you gauge their mental state, and it's just as important to verbally inspect slaves' minds as it is to visually inspect their backdoors. You remember with sudden clarity what ${eventSlave.slaveName} was like when you acquired ${him}. ${He} wasn't as enthusiastic then. The first time you inspected ${him}, ${he} certainly wasn't so excited about getting buttfucked. You ask ${him} if ${he} remembers that too. ${He} hesitates, wondering how to answer, but decides that honesty is the best policy and ${say}s,`);
		t.push(Spoken(eventSlave, `"I remember, ${Master}. It was hard for me, becoming a girl.`));
		if (eventSlave.fetish === "buttslut" || eventSlave.energy > 95) {
			t.push(Spoken(eventSlave, `But, ${Master}, girls get fucked. And I love getting fucked in the butt so much. If that makes me a girl then I'm happy being a girl.`));
		} else if (eventSlave.fetish === "cumslut" && eventSlave.fetishStrength > 60) {
			t.push(Spoken(eventSlave, `But, ${Master}, girls suck cock. And I love sucking cock so much. If that makes me a girl then I'm happy being a girl.`));
		} else if (eventSlave.fetish === "pregnancy" && eventSlave.fetishStrength > 60) {
			t.push(Spoken(eventSlave, `But, ${Master}, girls get bred. And I love being held down and bred. If that makes me a girl then I'm happy being a girl.`));
		} else if ((eventSlave.fetish === "submissive" || eventSlave.fetish === "masochist") && eventSlave.fetishStrength > 60) {
			t.push(Spoken(eventSlave, `But, ${Master}, girls get held down and fucked. And I love being used so much. If that makes me a girl then I'm happy being a girl.`));
		} else if (eventSlave.boobs > 400) {
			t.push(Spoken(eventSlave, `Getting a girl's body made it easier for me, though. When I`));
			if (canSee(eventSlave)) {
				t.push(Spoken(eventSlave, `see myself in the mirror, I see`));
			} else {
				t.push(Spoken(eventSlave, `feel myself up, I feel`));
			}
			t.push(Spoken(eventSlave, `a girl with a body made for getting fucked.`));
		} else if (eventSlave.balls === 0) {
			t.push(Spoken(eventSlave, `Not having balls makes it easier for me, though. The only way my soft girldick will come is when I take cock.`));
		} else {
			t.push(Spoken(eventSlave, `But the training and the rules pushed me through it.`));
		}
		t.push(Spoken(eventSlave, `I try to be a good slave girl for you, ${Master}. Can I — can I be a good slave girl for you? Right now? Please?"`));
		t.push(`${He} twists ${his} ${eventSlave.skin} body suggestively,`);
		if (eventSlave.chastityPenis === 1) {
			t.push(`offering you ${his} rear hole, the only hope the chastity caged ${girl} has of release.`);
		} else if (canAchieveErection(eventSlave)) {
			t.push(`hard dick wagging with the motion, offering you ${his} rear.`);
		} else if (eventSlave.dick > 6) {
			t.push(`engorged dick wobbling with the motion, offering you ${his} rear.`);
		} else if (eventSlave.dick > 0) {
			t.push(`soft dick flopping with the motion, offering you ${his} rear.`);
		}
		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result(`Yes ${he} can`, gentleSex),
			new App.Events.Result(`${He}'s a good slave girl all the time, not just right now`, poundingSex),
			(canImpreg(eventSlave, V.PC))
				? new App.Events.Result(`Girls should be naked, barefoot and pregnant`, breedingSex)
				: new App.Events.Result(),
			new App.Events.Result(`Good slave girls earn money`, partyGirl),
		]);

		function gentleSex() {
			t = [];
			t.push(`When ${he}`);
			if (canSee(eventSlave)) {
				t.push(`sees`);
			} else {
				t.push(`hears`);
			}
			t.push(`you stand up from behind your`);
			if (V.PC.dick === 0) {
				t.push(`desk and pull on a strap-on,`);
			} else {
				t.push(`desk,`);
			}
			t.push(`${he} turns fully away from you, cocking ${his}`);
			if (eventSlave.hips > 0) {
				t.push(`womanly`);
			}
			t.push(`hips at just the right angle to offer you ${his} anus, without any preamble or foreplay. But you come up behind ${him} and encircle ${his}`);
			if (eventSlave.weight > 95) {
				t.push(`bountiful belly`);
			} else if (eventSlave.weight > 30) {
				t.push(`soft stomach`);
			} else if (eventSlave.muscles > 95) {
				t.push(`ripped abs`);
			} else if (eventSlave.weight > 10) {
				t.push(`plush belly`);
			} else if (eventSlave.muscles > 30) {
				t.push(`muscular waist`);
			} else if (eventSlave.muscles > 5) {
				t.push(`firm stomach`);
			} else {
				t.push(`trim waist`);
			}
			t.push(`with your capable hands, your lips nibbling along the line of ${his}`);
			if (eventSlave.weight > 95) {
				t.push(`soft`);
			} else if (eventSlave.muscles > 30) {
				t.push(`strong`);
			} else if (eventSlave.muscles > 5) {
				t.push(`toned`);
			} else {
				t.push(`soft`);
			}
			t.push(`shoulders and neck. ${He} shudders as the embrace brings your`);
			if (V.PC.dick === 0) {
				t.push(`strap-on`);
			} else {
				t.push(`dick`);
			}
			if (eventSlave.height >= V.PC.height + 15) {
				if (hasBothLegs(eventSlave)) {
					t.push(`slipping between ${his} thighs,`);
				} else {
					t.push(`slapping against ${his} thigh,`);
				}
				t.push(`since ${he}'s taller than you.`);
			} else if (eventSlave.height >= V.PC.height) {
				t.push(`up between ${his} buttocks, since ${he}'s as tall as you.`);
			} else if (eventSlave.height >= V.PC.height - 15) {
				t.push(`pressing into ${his} asscrack, since ${he}'s shorter than you.`);
			} else if (eventSlave.height >= V.PC.height - 30) {
				t.push(`nestling down into ${his} asscrack, since ${he}'s so much shorter than you.`);
			} else {
				t.push(`sliding down ${his} back, since there is a considerable size difference between you.`);
			}
			t.push(`You whisper that a good slave girl doesn't have to touch ${himself} to come when ${his} ${getWrittenTitle(eventSlave)} fucks ${his} butt, and ask whether ${he}'s a good slave girl. ${He} shivers and promises that ${he} is, rubbing ${his} asshole against your`);
			if (V.PC.dick === 0) {
				t.push(`phallus.`);
			} else {
				t.push(`cockhead.`);
			}
			t.push(`${He} gives a`);
			if (eventSlave.voice > 1) {
				t.push(`feminine`);
			} else {
				t.push(`unbecomingly deep`);
			}
			t.push(`sigh as it slides into ${him}, and moves softly within your embrace, doing ${his} best to pleasure you with ${his} girly ass. ${He} was already very close, and your loving touch so aroused ${him} that ${he} gasps and stiffens after only a few thrusts,`);
			if (eventSlave.chastityPenis === 1) {
				t.push(`shuddering`);
			} else if (canAchieveErection(eventSlave)) {
				t.push(`${his} dick twitching`);
			} else if (eventSlave.dick > 6) {
				t.push(`${his} fat dick twitching slightly.`);
			} else if (eventSlave.dick > 0) {
				t.push(`${his} soft dick twitching softly`);
			}
			t.push(`with a weak orgasm. ${He} giggles self-consciously and keeps humping back into you. ${He} is a good slave girl once more before going to rinse ${himself} off in the shower, so much so that you follow ${him} so ${he} can be a good slave girl in the shower, too.`);
			eventSlave.devotion += 4;
			seX(eventSlave, "anal", V.PC, "penetrative", 3);
			if (canImpreg(eventSlave, V.PC)) {
				knockMeUp(eventSlave, 15, 1, -1);
			}
			return t;
		}

		function poundingSex() {
			t = [];
			t.push(`You tell ${him} that ${he} doesn't have to prove anything to you right now; ${he}'s shown that ${he}'s a good slave girl already. ${He} looks shocked for a moment before blushing and turning ${his} gaze down at ${his} feet.`);
			t.push(Spoken(eventSlave, `"T-thanks ${Master},"`));
			t.push(`${he} stammers. Since ${he} asked so nicely, though, you continue; you will fuck ${his} butt. ${He} giggles and`);
			if (canWalk(eventSlave)) {
				t.push(`hurries`);
			} else {
				t.push(`crawls`);
			}
			t.push(`over to you in response to a crooked finger, curling up in your lap for a nice makeout session. When the next slave scheduled for an examination comes through the door, it's to the sight of ${eventSlave.slaveName} holding ${his} body sideways in the air over the`);
			if (hasBothLegs(eventSlave)) {
				t.push(`couch: ${he} has one knee down on the cushions, and is doing the splits with the other leg running up`);
				if (V.PC.boobs >= 300) {
					t.push(`between your breasts.`);
				} else if (V.PC.title === 0) {
					t.push(`your flat chest.`);
				} else {
					t.push(`your muscular chest.`);
				}
			} else {
				t.push(`couch.`);
			}
			t.push(`Your`);
			if (V.PC.dick === 0) {
				t.push(`strap-on`);
			} else {
				t.push(`dick`);
			}
			t.push(`is up ${his} ass, and you're giving it to ${him} hard.`);
			if (eventSlave.boobs > 25000) {
				t.push(`${His} immense breasts wobble beside ${him}, absorbing the impact of each thrust.`);
			} else if (eventSlave.boobs > 1000) {
				t.push(`${His} huge breasts are bouncing back and forth with the motion, almost hitting ${himself} in the face.`);
			} else if (eventSlave.weight > 10) {
				t.push(`${His} generous curves lend the motion weight, and each thrust reams ${his} ass hard.`);
			} else if (eventSlave.hLength >= 60) {
				t.push(`${His} long hair flies around ${his} face in a maelstrom of sexual energy.`);
			} else {
				t.push(`The leather couch creaks with an obscurely sexual rhythm.`);
			}
			t.push(`${He}'s being fucked so hard that ${his}`);
			if (eventSlave.chastityPenis === 1) {
				t.push(`cock is being forced to half-hardness inside its chastity cage, making ${him} writhe with mixed anal pleasure and dick pain.`);
			} else if (canAchieveErection(eventSlave)) {
				if (eventSlave.dick > 3) {
					t.push(`massive erection is slapping wetly against ${his} stomach, spattering ejaculate from a previous orgasm everywhere,`);
				} else if (eventSlave.dick > 1) {
					t.push(`hard-on is helicoptering around wildly, spattering ejaculate from a previous orgasm everywhere`);
				} else {
					t.push(`tiny erection is scattering ejaculate from a previous orgasm everywhere.`);
				}
			} else if (eventSlave.dick > 6) {
				t.push(`${his} swollen cock is swaying along to the pounding, slapping heavily against anything it hits.`);
			} else if (eventSlave.dick > 3) {
				t.push(`huge soft cock is flopping at random, slapping against ${his} stomach and ${his} ${legs}.`);
			} else if (eventSlave.dick > 1) {
				t.push(`${his} impotent dick has been forced to a state of half-hardness.`);
			} else {
				t.push(`${his} pathetic little dick has been forced into a state of half-hardness.`);
			}
			t.push(`${He}'s so far gone into a state of`);
			if (eventSlave.prostate > 0) {
				t.push(`prostate stimulation induced bliss`);
			} else {
				t.push(`bliss from having ${his} insides stirred up`);
			}
			t.push(`that ${he}'s drooling a little.`);
			eventSlave.trust += 4;
			seX(eventSlave, "anal", V.PC, "penetrative");
			if (canImpreg(eventSlave, V.PC)) {
				knockMeUp(eventSlave, 10, 1, -1);
			}
			return t;
		}

		function breedingSex() {
			t = [];
			t.push(`You tell ${him} that a proper girl should be naked, barefoot, and pregnant. ${He} thinks for a moment and ${say}s,`);
			t.push(Spoken(eventSlave, `"Well I'm already naked... And I'm not wearing any shoes... So that just leaves getting knocked up..."`));
			t.push(`${He} giggles, lowers ${himself} to the ground and`);
			if (eventSlave.butt > 10) {
				t.push(`bounces ${his} ridiculous ass at you,`);
			} else if (eventSlave.butt > 3) {
				t.push(`jiggles ${his} huge butt at you,`);
			} else {
				t.push(`wiggles ${his} butt at you,`);
			}
			t.push(`inviting you to mount ${him}.`);
			t.push(Spoken(eventSlave, `"Which won't be a problem at a—!"`));
			t.push(`${He} is cut short as you hilt your dick in ${his} ass, push ${his} face to the floor, and being pounding ${his}`);
			if (eventSlave.anus > 2) {
				t.push(`slutty asspussy.`);
			} else if (eventSlave.anus > 1) {
				t.push(`loose hole.`);
			} else {
				t.push(`tight hole.`);
			}
			t.push(`${He} bucks against you like a bitch in heat,`);
			if (eventSlave.chastityPenis === 1) {
				t.push(`despite the pain caused by ${his} chastity bound hardness,`);
			} else if (canAchieveErection(eventSlave)) {
				t.push(`${his} throbbing erection smearing precum across ${his} belly,`);
			} else if (eventSlave.dick > 6) {
				t.push(`${his} swollen cock wobbling with your thrusts,`);
			} else if (eventSlave.dick > 1) {
				t.push(`${his} soft cock flopping against ${his} belly to your thrusts,`);
			} else {
				t.push(`${his} pathetic little dick flopping around forgotten beneath ${him},`);
			}
			t.push(`until ${he} feels the warmth of your fresh load deposited in the depths of ${his} rear. You help ${him} onto the couch, where ${he} gently massages ${his} lower belly, marveling at what it means to be your girl.`);
			t.push(Spoken(eventSlave, `"I'm going to have ${Master}'s babies... It's like a dream,"`));
			t.push(`${he} babbles incoherently. This is just the first of many breedings ${he}'ll undergo this week as you finish ${his} transformation into the perfect slave girl; it will be a surprise if ${he} doesn't come out of this pregnant.`);
			eventSlave.devotion += 2;
			seX(eventSlave, "anal", V.PC, "penetrative", 10);
			if (canImpreg(eventSlave, V.PC)) {
				knockMeUp(eventSlave, 95, 1, -1);
			}
			return t;
		}

		function partyGirl() {
			// replace slave art
			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, eventSlave, "a mini dress");

			t = [];
			t.push(`You tell ${him} that you've hired ${him} out for a party a prominent citizen is throwing, and that ${he} should be a good slave girl by saving ${himself} for that. ${He} trips all over ${himself} promising that ${he} will. You check in on ${him} later, using the video feeds, and are treated to the sight of ${him} wearing a slinky cocktail dress, although wearing is perhaps the wrong term. ${He}'s bent over a barstool with the top of the dress pulled down`);
			if (eventSlave.boobs > 10000) {
				t.push(`to let ${his} massive chest wobble freely`);
			} else if (eventSlave.boobs > 1000) {
				t.push(`over ${his} huge tits`);
			} else if (eventSlave.boobs > 300) {
				t.push(`to bare ${his} boobs`);
			} else {
				t.push(`to reveal ${his} sissy chest`);
			}
			t.push(`and the bottom of ${his} dress hiked up so a guest can fuck ${his} ass. ${He}'s obviously enjoying ${himself}, happy to be getting some at last. ${His} fee for the night is substantial, and the host attaches a note to the payment, complimenting ${his} eagerness to get assfucked and ${his} willingness to suck cock, and asking when ${he}'ll be available next.`);
			cashX(500, "event", eventSlave);
			seX(eventSlave, "anal", "public", "penetrative", 5);
			seX(eventSlave, "oral", "public", "penetrative", 5);
			if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
				knockMeUp(eventSlave, 10, 1, -2);
			}
			return t;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => V.REFutaSisterCheckinIDs.includes(s.ID),
				s => s.assignment !== Job.QUARTER,
				s => s.trust >= 10,
				s => s.dick > 0,
				s => s.balls > 0,
				s => s.vagina >= 0,
				canStand,
				canAchieveErection,
				canTalk,
				canHear,
				hasAllNaturalLimbs,
			]
		];
	}

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

		V.REFutaSisterCheckinIDs.deleteWith((s) => s === eventSlave.ID);

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

		let t = [];
		t.push(`You're just finishing up`);
		t.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), "'s"));
		t.push(`weekly inspection. The`);
		if (eventSlave.face >= -10) {
			t.push(`pretty`);
		} else {
			t.push(`perky`);
		}
		t.push(`futa is standing obediently before you, answering the usual questions with enthusiasm. ${He} gestures animatedly as ${he} talks, making ${his}`);
		if (eventSlave.boobs > 8000) {
			t.push(`mind-blowing`);
		} else if (eventSlave.boobs > 4000) {
			t.push(`monstrous`);
		} else if (eventSlave.boobs > 2000) {
			t.push(`enormous`);
		} else if (eventSlave.boobs > 800) {
			t.push(`big`);
		}
		if (eventSlave.boobs >= 300) {
			t.push(`boobs jiggle slightly, and ${his}`);
		}
		if (eventSlave.dick > 5) {
			t.push(`incredible, erect penis wave from side to side.`);
		} else if (eventSlave.dick > 3) {
			t.push(`big cock wave from side to side.`);
		} else if (eventSlave.dick > 1) {
			t.push(`dick stick out stiffly.`);
		} else {
			t.push(`tiny hard-on wiggle lewdly.`);
		}
		t.push(`${He} doesn't seem to notice, probably because this state of obvious arousal is more or less permanent for ${him}. After all, this is what the ex-Futanari Sister wanted.`);
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`Apparently, ${he} has something to say. When you've asked ${him} your last question and are considering whether to dismiss ${him} or fuck ${him} and then dismiss ${him}, ${he} speaks up confidently.`);
		t.push(Spoken(eventSlave, `"${Master},"`));
		t.push(`${he} ${say}s.`);
		t.push(Spoken(eventSlave, `"I want to thank you. When our group of Futa Sisters here failed, I was so scared. We all were! We didn't know what was going to happen, whether we were going to be raped or cut up or worse. But you saved us ${Master}, and you saved me. I'm just as happy with you as I was with the Sisters. I thought I'd have to wake up from the dream I was in, but I'm still dreaming. Thank you."`));
		t.push(`${He} gives you a pretty half-curtsy, half-bow that manages to be both graceful and appealingly sexual.`);
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`${His} ${eventSlave.skin} face displays nothing but honest gratitude and devotion. ${He} does not know that the reason ${his} community of Futanari Sisters failed is that you cleverly undermined its finances, forcing it into ruin and its members into slavery. ${He} does not know that the reason ${he} lost years of idyllic transformation and sexual freedom within a group of like-minded women is that you stole them from ${him}. And ${he} does not know that the person ${he} just thanked for saving ${him} from the consequences of the worst thing that ever happened to ${him} was its author.`);
		t.push(Spoken(eventSlave, `"I love you, ${Master},"`));
		t.push(`${he} concludes, smiling expectantly at you.`);
		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result(`Love ${him} back`, love, virginityWarningSingle()),
			new App.Events.Result(`Break ${him} with the truth`, hate, virginityWarningDouble()),
		]);

		function love() {
			t = [];
			t.push(`You swing your legs up onto your desk and`);
			if (V.PC.belly < 5000) {
				t.push(`jump`);
			} else {
				t.push(`heft yourself`);
			}
			t.push(`up onto its smooth surface, ${his} eyes tracking the`);
			if (V.PC.belly >= 5000) {
				t.push(`delicate, yet determined, motions you take to accommodate your pregnancy.`);
			} else if (V.PC.boobs >= 300) {
				t.push(`way it makes your breasts move.`);
			} else {
				t.push(`powerful way your muscles move your body.`);
			}
			t.push(`When you pat the tops of your`);
			if (V.PC.title === 1) {
				t.push(`hard`);
			} else {
				t.push(`soft`);
			}
			t.push(`thighs meaningfully, ${he} giggles happily and skips forward to clamber up and sit on your lap. The bouncing and climbing creates quite a nice spectacle of`);
			if (eventSlave.boobs >= 300) {
				t.push(`jiggling tits and`);
			}
			t.push(`waving cock, and ${he} manages to get up on the desk in such a way that you get a solid eyeful of first ${his} wet pussy and then ${his} ready anus.`);
			if (V.PC.belly + eventSlave.belly >= 10000) {
				t.push(`${He} positions ${himself} so that`);
				if (eventSlave.belly >= 8000) {
					t.push(`${his}`);
					if (eventSlave.bellyPreg >= 3000) {
						t.push(`pregnancy`);
					} else {
						t.push(`swollen middle`);
					}
					t.push(`will allow ${his} hermaphroditic genitalia to meet the`);
					if (V.PC.dick !== 0) {
						t.push(`hardness of your`);
						if (V.PC.vagina !== -1) {
							t.push(`erection and the warmth further down.`);
						} else {
							t.push(`erection.`);
						}
					} else {
						t.push(`warmth of your arousal.`);
					}
				} else if (V.PC.belly >= 8000) {
					t.push(`${He} slides ${himself} beneath your bump with a coo, feeling the`);
					if (V.PC.dick !== 0) {
						t.push(`hardness of your erection`);
						if (V.PC.vagina !== -1) {
							t.push(`and the warmth further down`);
						}
					} else {
						t.push(`warmth of your arousal`);
					}
					t.push(`against ${his} hermaphroditic genitalia.`);
				} else {
					t.push(`It takes a moment for both of you to find a position where ${his} hermaphroditic genitalia are able to cross paths with the`);
					if (V.PC.dick !== 0) {
						t.push(`hardness of your`);
						if (V.PC.vagina !== -1) {
							t.push(`erection and the warmth further down`);
						} else {
							t.push(`erection`);
						}
					} else {
						t.push(`warmth of your arousal`);
					}
					t.push(`without both of your bellies getting in the way.`);
				}
			} else {
				t.push(`${He} settles ${himself} onto your lap with a coo, feeling the`);
				if (V.PC.dick !== 0) {
					t.push(`hardness of your erection`);
					if (V.PC.vagina !== -1) {
						t.push(`and the warmth further down`);
					}
				} else {
					t.push(`warmth of your arousal`);
				}
				t.push(`against ${his} hermaphroditic genitalia.`);
			}
			t.push(`${He} starts to grind ${himself} lasciviously against you, but stops when you seize ${his} face and kiss ${him} deeply. ${He} moans back into you, returning the kiss with intensity.`);
			if (eventSlave.boobs > 25000) {
				t.push(`${His} udders are so huge the two of you have to press your torsos hard together to make out, a delightful struggle that stimulates ${his} nipples quite a lot, to go by the way ${he} squeaks and giggles into your mouth.`);
			} else if (eventSlave.boobs > 4000) {
				t.push(`${His} bosom is so big that making out face to face presses it quite hard between your torsos, which stimulates ${his} nipples quite a lot, to go by the way ${he} squeaks and giggles into your mouth.`);
			} else if (eventSlave.boobs + V.PC.boobs > 4000 && V.PC.boobs >= 1000) {
				t.push(`The amount of breast flesh between you forces you and ${him} to press your torsos hard together to make out, a delightful struggle that stimulates both party's nipples quite a lot, to go by the way ${he} squeaks and giggles into your mouth, and you into ${hers}.`);
			} else if (V.PC.boobs >= 300 || V.PC.title === 0) {
				t.push(`You undress without breaking your lip lock, bringing your bare breasts against ${hers} in a warm, loving embrace.`);
			} else {
				t.push(`You strip without breaking your lip lock, bringing your heavily muscled chest against ${his} soft breasts in a tender, loving embrace.`);
			}
			t.push(`${His} arousal builds rapidly and ${he} goes back to grinding,`);
			if (V.PC.dick !== 0) {
				t.push(`eventually getting ${himself} so hot that your dick slides into ${him} almost without either of you meaning to make it happen. ${He} climaxes with you shortly, cumming all over ${his} own breasts.`);
			} else {
				t.push(`bringing you both to a shaking climax. ${He} cums all over ${his} own breasts, coating them in glistening ejaculate.`);
			}
			t.push(`As ${he} relaxes back against the desk, ${his} panting making ${his} cum-glazed tits rise and fall, you reflect that you just lied by omission, letting`);
			if (eventSlave.face >= -10) {
				t.push(`a pretty`);
			} else {
				t.push(`a trusting`);
			}
			t.push(`${girl} maintain ${his} delusions and <span class="devotion inc">${his} love for you.</span> Of all your sins, this is perhaps the smallest.`);
			eventSlave.devotion += 4;
			t.push(VCheck.Vaginal(eventSlave, 1));

			return t;
		}

		function hate() {
			t = [];
			t.push(`You point at`);
			if (eventSlave.belly >= 300000) {
				t.push(`${his} stomach, and ${he} leans forward onto ${his} ${belly} belly, giggling with ${his} butt stuck out invitingly.`);
			} else {
				t.push(`the couch, and ${he}`);
				if (canWalk(eventSlave)) {
					t.push(`skips over to it with a giggle,`);
					if (eventSlave.boobs >= 300) {
						t.push(`boobs bouncing.`);
					} else if (eventSlave.weight > 95) {
						t.push(`belly bouncing.`);
					}
				} else {
					t.push(`crawls over to it with a giggle.`);
				}
				t.push(`${He} hops up onto the cushions, kneeling with ${his} butt stuck out invitingly and ${his} torso bent over its back.`);
			}
			t.push(`${He} reaches around to pull one`);
			if (eventSlave.butt > 12) {
				t.push(`massive`);
			} else if (eventSlave.butt > 8) {
				t.push(`giant`);
			} else if (eventSlave.butt > 5) {
				t.push(`huge`);
			} else if (eventSlave.butt > 2) {
				t.push(`heavy`);
			} else {
				t.push(`cute`);
			}
			t.push(`buttock to one side,`);
			if (eventSlave.anus > 2) {
				t.push(`stretching ${his} lewd backdoor into a gape`);
			} else if (eventSlave.anus > 1) {
				t.push(`stretching ${his} backdoor lewdly`);
			} else {
				t.push(`highlighting ${his} tight anus`);
			}
			t.push(`and showing off ${his}`);
			if (eventSlave.labia > 1) {
				t.push(`dangling`);
			} else if (eventSlave.labia > 0) {
				t.push(`generous`);
			} else if (eventSlave.vaginaLube > 0) {
				t.push(`wet`);
			}
			t.push(`pussylips. You enter ${him} from behind, your`);
			if (V.PC.dick !== 0) {
				t.push(`turgid dick`);
			} else {
				t.push(`strap-on`);
			}
			t.push(`sliding easily into ${his} cunt. Your hands slide around ${him} to hold ${his} shoulders in a gentle lock, and you whisper secrets into ${his} ear. You tell ${him} that the Futanari Sisters here failed because you undermined them. You tell ${him} that ${he} is a slave because you planned and executed ${his} enslavement. And you tell ${him} that no slave will `);
			if (V.enduringDevotion > 20) {
				t.push(`believe ${him} if ${he} tells them the truth, since they love you just like ${he} did.`);
			} else {
				t.push(`listen to ${him} if ${he} tells them the truth, since they aren't as naive as ${he} was.`);
			}
			t.push(`As you pour this poison into ${him}, ${he} remains perfectly still, processing the revelation; the only clue to ${his} feelings is ${his} rapidly softening cock. When it has become completely, pathetically limp, a huge sob tears its way out of ${him}. You switch to ${his} anus and assrape ${him} without mercy, forcing ${his} limp torso halfway around so you can press a kiss on ${his} bawling mouth. ${He} does not resist, even when you begin to taste the salty tears that stream down ${his}`);
			if (eventSlave.face >= -10) {
				t.push(`pretty`);
			} else {
				t.push(`broken`);
			}
			t.push(`face. ${He} will remain devoted to you, mostly from a lack of alternatives, but ${his} trust in you has <span class="trust dec">suffered immensely.</span>`);
			eventSlave.trust = jsRandom(-90, -75);
			t.push(VCheck.Both(eventSlave, 1, 1));

			return t;
		}

		function virginityWarningSingle() {
			if (V.PC.dick >= 0 && eventSlave.vagina === 0) {
				return `This option will take ${his} virginity`;
			}
			return null;
		}

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

repo_name: Pecanus/fc

license: mit


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => V.REMILFCheckinIDs.includes(s.ID),
				s => s.assignment !== Job.QUARTER,
				s => s.devotion >= 10,
				s => s.energy > 60,
				s => s.bodySwap === 0,
				s => (canDoAnal(s) || canDoVaginal(s)),
				canStand,
				canTalk,
				canHear,
				hasAnyArms,
				hasAnyLegs,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, His, his, hers, him, himself, girl
		} = getPronouns(eventSlave);
		const {title: Master, say: say} = getEnunciation(eventSlave);
		const {womenP} = getSpokenPronouns(V.PC, eventSlave).appendSuffix('P');
		const belly = bellyAdjective(eventSlave);
		const desc = SlaveTitle(eventSlave);
		const hands = hasBothArms(eventSlave) ? "hands" : "hand";
		const legs = hasBothLegs(eventSlave) ? "legs" : "leg";
		const ankles = hasBothLegs(eventSlave) ? "ankles" : "ankle";

		V.REMILFCheckinIDs.deleteWith((s) => s === eventSlave.ID);

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

		let t = [];
		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`is standing before your desk for an inspection. The ${desc} is naked, of course, and is devoted enough to find the situation arousing: ${he}'s being inspected by ${his} ${getWrittenTitle(eventSlave)} in the nude, which is sexual enough, and past inspections have often led to a quick fuck. The horny bitch obviously wants it;`);
		if (eventSlave.chastityPenis === 1) {
			t.push(`${his} chastity cage is dribbling precum, and ${he}'s clearly uncomfortable with simultaneous arousal and unwillingness to suffer a hard-on inside it.`);
		} else if (canAchieveErection(eventSlave)) {
			t.push(`${his} cock is painfully erect.`);
		} else if (eventSlave.dick > 6) {
			t.push(`${his} inhuman cock is swollen and leaking precum.`);
		} else if (eventSlave.dick > 0) {
			t.push(`${his} pathetically limp dick is practically dripping precum.`);
		} else if (eventSlave.clit > 0) {
			t.push(`${his} clit is big enough to be visibly erect when ${he}'s willing and ready.`);
		} else if (canDoVaginal(eventSlave)) {
			t.push(`a sheen is visible on ${his} pussylips, and ${he}'s smiling hopefully at you.`);
		} else {
			t.push(`the scent of arousal fills the air, and ${he}'s smiling hopefully at you.`);
		}
		t.push(`Your inspections require the slave to offer each of ${his} body parts to your view, and when the routine reaches ${his} crotch,`);
		if (eventSlave.belly >= 600000) {
			t.push(`${he} obediently turns around, gingerly leans forward onto ${his} ${belly} middle, hikes`);
			if (hasBothLegs(eventSlave)) {
				t.push(`a`);
			} else {
				t.push(`${his}`);
			}
			t.push(`leg onto ${his} bulk, and displays ${his}`);
			if (eventSlave.chastityPenis === 1) {
				t.push(`chastity caged dick.`);
			} else if (canAchieveErection(eventSlave)) {
				t.push(`erect cock pressing hard against ${his} underbelly.`);
			} else if (eventSlave.dick > 6) {
				t.push(`fat member against ${his} underbelly.`);
			} else if (eventSlave.dick > 0) {
				t.push(`poor flaccid member dangling pitifully against ${his} underbelly.`);
			} else if (eventSlave.labia > 0 && canDoVaginal(eventSlave)) {
				t.push(`pussy, whose lips are so generous that ${he}`);
				if (hasBothArms(eventSlave)) {
					t.push(`uses both hands`);
				} else {
					t.push(`uses ${his} hand`);
				}
				t.push(`to peel them apart.`);
			} else if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina > 1) {
					t.push(`nice big cunt, which ${he} spreads shamelessly for you.`);
				} else if (eventSlave.vagina > 0) {
					t.push(`tight pussy.`);
				} else {
					t.push(`virgin pussy.`);
				}
			} else {
				if (eventSlave.anus > 1) {
					t.push(`experienced anus, which ${he} winks shamelessly for you.`);
				} else if (eventSlave.vagina > 0) {
					t.push(`tight anus.`);
				} else {
					t.push(`virgin anus.`);
				}
			}
		} else if (eventSlave.belly >= 100000) {
			t.push(`${he} obediently turns around, steadies ${himself}, and leans forward to display ${his}`);
			if (eventSlave.chastityPenis === 1) {
				t.push(`chastity caged dick`);
			} else if (canAchieveErection(eventSlave)) {
				t.push(`erect cock`);
			} else if (eventSlave.dick > 6) {
				t.push(`fat member`);
			} else if (eventSlave.dick > 0) {
				t.push(`poor flaccid member`);
			} else if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina > 1) {
					t.push(`nice big cunt, which ${he} spreads shamelessly for you,`);
				} else if (eventSlave.vagina > 0) {
					t.push(`tight pussy`);
				} else {
					t.push(`virgin pussy`);
				}
			} else {
				if (eventSlave.anus > 1) {
					t.push(`experienced anus, which ${he} winks shamelessly for you,`);
				} else if (eventSlave.vagina > 0) {
					t.push(`tight anus`);
				} else {
					t.push(`virgin anus`);
				}
			}
			t.push(`without ${his} ${belly} belly in the way.`);
		} else {
			t.push(`${he} obediently backs up to sit down on the couch, spread ${his} ${legs},`);
			if (eventSlave.belly >= 5000 || eventSlave.weight > 95) {
				t.push(`lift ${his} belly,`);
			}
			t.push(`and display ${his}`);
			if (eventSlave.chastityPenis === 1) {
				t.push(`chastity caged dick.`);
			} else if (canAchieveErection(eventSlave)) {
				t.push(`erect cock, which ${he} doesn't have to touch to keep upright.`);
			} else if (eventSlave.dick > 6) {
				t.push(`fat member, which takes ${his} entire hand to shove upright.`);
			} else if (eventSlave.dick > 0) {
				t.push(`poor flaccid member, which ${he} uses a thumb and forefinger to pull upright.`);
			} else if (eventSlave.labia > 0 && canDoVaginal(eventSlave)) {
				t.push(`pussy, whose lips are so generous that ${he}`);
				if (hasBothArms(eventSlave)) {
					t.push(`uses both hands`);
				} else {
					t.push(`uses ${his} hand`);
				}
				t.push(`to peel them apart.`);
			} else if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina > 1) {
					t.push(`nice big cunt, which ${he} spreads shamelessly for you.`);
				} else if (eventSlave.vagina > 0) {
					t.push(`tight pussy.`);
				} else {
					t.push(`virgin pussy.`);
				}
			} else {
				if (eventSlave.anus > 1) {
					t.push(`experienced anus, which ${he} winks shamelessly for you.`);
				} else if (eventSlave.vagina > 0) {
					t.push(`tight anus.`);
				} else {
					t.push(`virgin anus.`);
				}
			}
		}
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`You often pepper slaves with questions during this inspection; it helps you gauge their mental state, and it's just as important to verbally inspect slaves' minds as it is to visually inspect their parts. You remember with sudden clarity what ${eventSlave.slaveName} was like when you acquired ${him}. ${He} seemed older then.`);
		if (eventSlave.faceImplant > 0) {
			t.push(`${His} face has been improved since then, of course, making ${him} a good deal prettier.`);
		}
		if (eventSlave.ageImplant > 0) {
			t.push(`The age lift ${he} received has certainly hidden some of the most evident signs of ${his} years.`);
		} else if (eventSlave.geneMods.NCS === 1) {
			t.push(`The artificially induced NCS is peeling back the years, as expected.`);
		} else if (eventSlave.visualAge < eventSlave.physicalAge) {
			t.push(`The age reducing creams ${he} uses have certainly hidden some of the most evident signs of ${his} years.`);
		}
		t.push(`Decent care, diet, and exercise have done wonders. But more than all of that trivial physical stuff, the sexual hunger visible in ${his} ${App.Desc.eyesColor(eventSlave)} makes ${him} look like a teenager. You ask ${him} if ${he} remembers what ${he} was like when you enslaved ${him}. ${He} hesitates, wondering how to answer, but decides that honesty is the best policy and ${say}s,`);
		t.push(Spoken(eventSlave, `"I remember it every day, ${Master}. I'm grateful. I didn't think of myself as too pretty, then."`));
		t.push(`${He} giggles.`);
		t.push(Spoken(eventSlave, `"Becoming a fuckslave really improved my self esteem.`));
		if (eventSlave.energy > 95) {
			t.push(Spoken(eventSlave, `I can't imagine going back to having as little sex as I used to have. It would be awful.`));
		} else if (eventSlave.fetish === "cumslut" && eventSlave.fetishStrength > 60) {
			t.push(Spoken(eventSlave, `I can't imagine going back to not sucking dicks all the time. It would be awful.`));
		} else if (eventSlave.fetish === "buttslut" && eventSlave.fetishStrength > 60) {
			t.push(Spoken(eventSlave, `I can't imagine going back to a life of so little assplay. It would be awful.`));
		} else {
			t.push(Spoken(eventSlave, `I didn't have much of a sex life back then either, not compared to now.`));
		}
		t.push(Spoken(eventSlave, `And, ${Master}."`));
		if (eventSlave.belly >= 600000) {
			t.push(`${He} shifts ${his} weight fully onto ${his} ${eventSlave.bellyPreg >= 2000 ? `pregnant` : `gravid`} swell, angling ${his} crotch upwards and showing off everything ${he} has.`);
		} else if (eventSlave.belly >= 100000) {
			t.push(`${He} arches ${his} back prettily and leans even further forward, ${his} ${eventSlave.bellyPreg >= 2000 ? `pregnant` : `gravid`} swell forcing ${his} ${legs} wide, showing off everything ${he} has.`);
		} else {
			t.push(`${He} arches ${his} back prettily and then scoots ${himself} down the couch cushions, taking ${his} ${hands} away from ${his} crotch to spread ${his} ${legs} even wider, showing off everything ${he} has.`);
		}
		t.push(Spoken(eventSlave, `"I didn't really appreciate being fucked by ${V.PC.title !== 0 ? `gorgeous` : `hot`} ${womenP} then, either. Not like I do now..."`));
		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result(`Then ${he} can appreciate a nice struggle fuck`, roughSex, virginityWarning()),
			new App.Events.Result(`Appreciate ${his} body`, gentleSex, virginityWarning()),
			new App.Events.Result(`Put the horny old ${girl} to work`, partyGirl, virginityWarningDouble()),
		]);

		function roughSex() {
			let virginityLoss = 0;
			let inHole = "";

			t = [];
			t.push(`When ${he}`);
			if (canSee(eventSlave)) {
				t.push(`sees`);
			} else {
				t.push(`hears`);
			}
			t.push(`you stand up from behind your desk`);
			if (V.PC.dick === 0) {
				t.push(`desk and pull on a strap-on,`);
			} else {
				t.push(`desk,`);
			}
			t.push(`${he} smiles invitingly at you and relaxes. But as you approach, ${he}`);
			if (canSee(eventSlave)) {
				t.push(`sees a dangerous glint in your eyes.`);
			} else {
				t.push(`hears a menacing cadence to your footstep.`);
			}
			t.push(`One corner of ${his} mouth flaws upward with anticipation, and ${he} plays along.`);
			if (eventSlave.belly < 600000) {
				if (eventSlave.belly >= 100000) {
					t.push(`${He} stumbles face first into the couch, managing to somehow end up with ${his}`);
				} else {
					t.push(`${He} immediately curls up into a ball on the couch, managing to end up with ${his}`);
				}
				if (eventSlave.weight > 30) {
					t.push(`fat ass squashed enticingly against the seat back.`);
				} else if (eventSlave.butt > 5) {
					t.push(`absurd ass squashed enticingly against the seat back.`);
				} else if (eventSlave.butt > 2) {
					t.push(`healthy ass pushed against the seat back.`);
				} else {
					t.push(`trim ass against the seat back.`);
				}
			}
			t.push(`${He} looks up at you with feigned terror and begs,`);
			t.push(Spoken(eventSlave, `"Please, ${Master}, I'm just an innocent little ${girl}. Please don't rape my poor little butt!"`));
			t.push(`You grab ${his} ${ankles} and`);
			if (eventSlave.belly >= 100000 || eventSlave.weight > 160) { // muscles check here!
				t.push(`pull yourself onto ${his}`);
			} else {
				t.push(`haul ${his}`);
			}
			if (eventSlave.weight > 160) {
				t.push(`rippling`);
			} else if (eventSlave.weight > 95) {
				t.push(`thick`);
			} else if (eventSlave.weight > 30) {
				t.push(`chubby`);
			} else if (eventSlave.muscles > 95) {
				t.push(`ripped`);
			} else if (eventSlave.muscles > 30) {
				t.push(`muscled`);
			} else if (eventSlave.weight > 10) {
				t.push(`plush`);
			} else if (eventSlave.muscles > 5) {
				t.push(`toned`);
			} else {
				t.push(`slender`);
			}
			if (eventSlave.belly >= 750000) {
				if (eventSlave.bellyPreg > 0) {
					t.push(`grotesquely pregnant`);
				} else {
					t.push(`grotesquely inflated`);
				}
			} else if (eventSlave.belly >= 600000) {
				if (eventSlave.bellyPreg > 0) {
					t.push(`dangerously pregnant`);
				} else {
					t.push(`dangerously distended`);
				}
			} else if (eventSlave.belly >= 450000) {
				if (eventSlave.bellyPreg > 0) {
					t.push(`immensely pregnant`);
				} else {
					t.push(`immensely distended`);
				}
			} else if (eventSlave.belly >= 150000) {
				if (eventSlave.bellyPreg > 0) {
					t.push(`massively pregnant`);
				} else {
					t.push(`massively distended`);
				}
			} else if (eventSlave.belly >= 120000) {
				if (eventSlave.bellyPreg > 0) {
					t.push(`enormously pregnant`);
				} else {
					t.push(`greatly gravid`);
				}
			} else if (eventSlave.belly >= 10000) {
				if (eventSlave.bellyPreg > 3000) {
					t.push(`heavily pregnant`);
				} else if (eventSlave.bellyImplant > 3000) {
					t.push(`very gravid`);
				} else {
					t.push(`taut`);
				}
			} else if (eventSlave.belly >= 5000) {
				if (eventSlave.bellyPreg > 3000) {
					t.push(`very pregnant`);
				} else if (eventSlave.bellyImplant > 3000) {
					t.push(`gravid`);
				} else {
					t.push(`distended`);
				}
			} else if (eventSlave.belly >= 1500) {
				if (eventSlave.bellyPreg > 0) {
					t.push(`slightly pregnant`);
				} else if (eventSlave.bellyImplant > 0) {
					t.push(`slightly distended`);
				} else {
					t.push(`bloated`);
				}
			}
			t.push(`${eventSlave.skin}`);
			if (eventSlave.belly >= 100000 || eventSlave.weight > 160) {
				t.push(`body,`);
			} else {
				t.push(`body toward you, dragging ${him} across the couch,`);
				if (eventSlave.belly >= 5000) {
					t.push(`and then pin ${him},`);
				} else {
					t.push(`and then half-fall atop ${him},`);
				}
			}
			t.push(`pushing`);
			if (V.PC.dick === 0) {
				t.push(`the strap-on`);
			} else {
				t.push(`your hard cock`);
			}
			if (canDoVaginal(eventSlave) && (!canDoAnal(eventSlave) || eventSlave.anus === 0 || eventSlave.vagina > 0)) {
				t.push(`into the wriggling ${girl}'s`);
				if (eventSlave.vagina === 0) {
					t.push(`virgin`);
					virginityLoss = 1;
				}
				t.push(`pussy.`);
				inHole = "pussy";
			} else {
				t.push(`up the wriggling ${girl}'s`);
				if (eventSlave.anus === 0) {
					t.push(`virgin`);
					virginityLoss = 2;
				}
				t.push(`butt.`);
				inHole = "ass";
			}
			t.push(`${He} keeps begging and whining, but`);
			if (hasBothArms(eventSlave)) {
				t.push(`${he}'s managed to bring a hand under ${himself} and is`);
				if (eventSlave.belly >= 100000 || eventSlave.fetish === "boobs") {
					if (eventSlave.nipples === "fuckable") {
						t.push(`frantically fingering ${his} nipple.`);
					} else if (eventSlave.boobs >= 400) {
						t.push(`enthusiastically kneading ${his} breasts.`);
					} else {
						t.push(`frantically tweaking ${his} nipples.`);
					}
				} else if (canDoVaginal(eventSlave) && inHole === "ass" && eventSlave.dick === 0) {
					t.push(`schlicking away.`);
				} else if (eventSlave.chastityPenis && !canDoVaginal(eventSlave)) {
					t.push(`frantically rubbing ${his} taint.`);
				} else if (canAchieveErection(eventSlave)) {
					t.push(`jacking off to your rhythm.`);
				} else if (eventSlave.dick > 6) {
					t.push(`rubbing as much of ${his} engorged cock as ${he} can reach.`);
				} else if (eventSlave.dick > 0) {
					t.push(`rubbing ${his} submissive little bitch dick.`);
				} else {
					t.push(`massaging ${his} pubic mound, and what's beneath it, to your thrusts.`);
				}
			} else {
				t.push(`there's no stopping ${him} from grinding against you.`);
			}
			if ((inHole === "ass" && eventSlave.skill.anal > 30) || (inHole === "pussy" && eventSlave.skill.vaginal > 30)) {
				t.push(`${He} periodically manages to get`);
			} else {
				t.push(`${He} sometimes accidentally pulls`);
			}
			t.push(`${his}`);
			if (inHole === "ass") {
				if (eventSlave.anus > 2) {
					t.push(`loose`);
				} else if (eventSlave.anus > 1) {
					t.push(`practiced`);
				} else {
					t.push(`tight`);
				}
				t.push(`anus`);
			} else {
				if (eventSlave.vagina > 2) {
					t.push(`loose`);
				} else if (eventSlave.vagina > 1) {
					t.push(`practiced`);
				} else {
					t.push(`tight`);
				}
				t.push(`vagina`);
			}
			t.push(`off your thrusting`);
			if (V.PC.dick === 0) {
				t.push(`phallus,`);
			} else {
				t.push(`penis,`);
			}
			t.push(`but that just gives you the pleasure of forcing it`);
			if (inHole === "ass") {
				t.push(`up ${his} ass`);
			} else {
				t.push(`into ${his} cunt`);
			}
			t.push(`again to the accompaniment of pretended girlish protests. ${He} does ${his} best to maintain the pretense, but soon the best ${he} can come up with is a ridiculous`);
			if (inHole === "ass") {
				t.push(Spoken(eventSlave, `"${Master}, please don't make me come! Not from anal!"`));
			} else {
				t.push(Spoken(eventSlave, `"${Master}, don't cum in me! It's a dangerous day! I'll get pregnant!"`));
			}
			t.push(`${He}'s`);
			if (virginityLoss > 0) {
				t.push(`quite sore from`);
				if (virginityLoss === 2) {
					t.push(`<span class="virginity loss">losing ${his} anal cherry in such a rough way</span>`);
					eventSlave.anus = 1;
				} else {
					t.push(`<span class="virginity loss">${his} first time being so rough</span>`);
					eventSlave.vagina = 1;
				}
			} else {
				t.push(`a little sore,`);
			}
			t.push(`and winces stiffly when ${he}`);
			if (eventSlave.belly < 600000) {
				t.push(`gets up off the couch,`);
			} else {
				t.push(`shoves ${himself} back upright`);
			}
			t.push(`but shakes it off and <span class="devotion inc">gives you a kiss</span> with surprising shyness for a mature slave whose`);
			if (inHole === "ass") {
				t.push(`anus you just fucked.`);
				seX(eventSlave, "anal", V.PC, "penetrative");
				if (canImpreg(eventSlave, V.PC)) {
					knockMeUp(eventSlave, 10, 1, -1);
				}
			} else {
				t.push(`pussy you just dominated.`);
				seX(eventSlave, "vaginal", V.PC, "penetrative");
				if (canImpreg(eventSlave, V.PC)) {
					knockMeUp(eventSlave, 10, 0, -1);
				}
			}
			eventSlave.devotion += 4;
			return t;
		}

		function gentleSex() {
			let inHole = "";

			t = [];
			t.push(`You stand up from behind your`);
			if (V.PC.dick === 0) {
				t.push(`desk, pull on a strap-on,`);
			} else {
				t.push(`desk`);
			}
			t.push(`and approach ${him}, appreciating ${his} gorgeous body,`);
			if (eventSlave.belly >= 600000) {
				t.push(`perfectly laid out across ${his} own bulk`);
			} else if (eventSlave.belly >= 100000) {
				t.push(`glowing with maternity and all stretched out`);
			} else {
				t.push(`all laid out across the couch`);
			}
			t.push(`for your perusal. When you reach ${him}, you hold out a hand for`);
			if (hasBothArms(eventSlave)) {
				t.push(`one of`);
			}
			t.push(`${hers}; ${he} takes it <span class="trust inc">trustingly,</span> ${his} grip`);
			if (eventSlave.muscles > 50) {
				t.push(`powerful and decisive.`);
			} else if (eventSlave.muscles > 30) {
				t.push(`strong and sure.`);
			} else if (eventSlave.weight > 160) {
				t.push(`excessively soft.`);
			} else if (eventSlave.muscles > 5) {
				t.push(`firm and warm.`);
			} else if (eventSlave.muscles < -95) {
				t.push(`almost nonexistent.`);
			} else if (eventSlave.muscles < -30) {
				t.push(`weak and submissive.`);
			} else {
				t.push(`soft and feminine.`);
			}
			t.push(`You pull ${him} up to kneel on the couch cushions, facing a mirrored wall of the room.`);
			if (canSee(eventSlave)) {
				t.push(`${He}'s treated to a view of ${his} own face`);
			} else {
				t.push(`Your treated to the sight of ${his} blind face`);
			}
			t.push(`as you`);
			if (V.PC.belly >= 100000) {
				t.push(`awkwardly`);
			} else {
				t.push(`gently`);
			}
			t.push(`penetrate ${him} from behind,`);
			if (V.PC.belly >= 100000) {
				t.push(`your massive baby bump rubbing erotically`);
			} else if (V.PC.belly >= 30000) {
				t.push(`your baby bump uncomfortably squished`);
			} else if (V.PC.belly >= 1500) {
				t.push(`holding the curve of your pregnancy`);
			} else if (V.PC.boobs >= 300) {
				t.push(`holding your`);
				if (V.PC.boobsImplant / V.PC.boobs >= .60) {
					t.push(`firm`);
				} else {
					t.push(`soft`);
				}
				t.push(`breasts hard`);
			} else if (V.PC.title === 1) {
				t.push(`holding your strong chest hard`);
			} else {
				t.push(`holding your flat chest hard`);
			}
			t.push(`against ${his}`);
			if (eventSlave.weight > 160) {
				t.push(`rippling backfat.`);
			} else if (eventSlave.weight > 130) {
				t.push(`soft backfat.`);
			} else if (eventSlave.weight > 95) {
				t.push(`soft back.`);
			} else if (eventSlave.muscles > 95) {
				t.push(`ripped back.`);
			} else if (eventSlave.muscles > 30) {
				t.push(`strong back.`);
			} else if (eventSlave.muscles > 5) {
				t.push(`toned back.`);
			} else {
				t.push(`warm back.`);
			}
			t.push(`Once you're seated in ${his}`);
			if (canDoVaginal(eventSlave) && (!canDoAnal(eventSlave) || eventSlave.anus === 0 || eventSlave.vagina > 0)) {
				if (eventSlave.vagina === 0) {
					t.push(`virgin`);
				}
				t.push(`womanhood,`);
				inHole = "pussy";
			} else {
				if (eventSlave.anus === 0) {
					t.push(`virgin`);
				}
				t.push(`anus,`);
				inHole = "ass";
			}
			t.push(`you let your hands rove across ${his}`);
			if (eventSlave.weight > 95) {
				t.push(`luscious`);
			}
			t.push(`body, resting your chin on one of ${his} shoulders to`);
			if (canSee(eventSlave)) { // height concerns!
				t.push(`watch the view with ${him}.`);
			} else {
				t.push(`get a better view of ${him}.`);
			}
			t.push(`You run your fingers`);
			if (eventSlave.hLength < 10) {
				t.push(`across ${his} scalp, eliciting a sigh.`);
			} else if (eventSlave.hLength < 50) {
				t.push(`through ${his} short hair and across ${his} scalp, eliciting a sigh.`);
			} else if (eventSlave.hLength < 100) {
				t.push(`all through ${his} long, luxurious hair.`);
			} else {
				t.push(`down the immense length of ${his} hair, bringing it around to cascade down`);
				if (eventSlave.boobs > 300) {
					t.push(`between ${his}`);
					if (eventSlave.belly >= 5000 || eventSlave.weight > 95) {
						t.push(`breasts and around ${his} stomach.`);
					} else {
						t.push(`breasts.`);
					}
				} else if (eventSlave.belly >= 5000 || eventSlave.weight > 95) {
					t.push(`${his} front and around ${his} stomach.`);
				} else {
					t.push(`${his} chest.`);
				}
			}
			t.push(`Your fingers`);
			if (eventSlave.faceShape === "cute" || eventSlave.weight > 97) {
				t.push(`caress ${his} soft cheeks,`);
			} else {
				t.push(`trace ${his} cheekbones,`);
			}
			if (eventSlave.weight > 130) {
				t.push(`the roll of ${his} extra chin,`);
			} else if (eventSlave.faceShape === "masculine") {
				t.push(`the chiseled cut of ${his} jaw,`);
			} else {
				t.push(`the line of ${his} jaw,`);
			}
			t.push(`and the`);
			if (eventSlave.lips > 95) {
				t.push(`dominant feature of ${his} face; ${his} immensely inflated lips.`);
			} else if (eventSlave.lips > 70) {
				t.push(`pouting prominence of ${his} huge lips.`);
			} else if (eventSlave.lips > 40) {
				t.push(`plush softness of ${his} plump lips.`);
			} else if (eventSlave.lips > 20) {
				t.push(`soft outline of ${his} pretty mouth.`);
			} else if (eventSlave.lips > 10) {
				t.push(`soft outline of ${his} cute lips.`);
			} else {
				t.push(`outline of ${his} mouth.`);
			}
			t.push(`Your hands`);
			if (eventSlave.boobs >= 25000) {
				t.push(`grope as much of ${his} unbelievable breasts as you can reach, before diving into the warm depths beneath ${his} immense udders.`);
			} else if (eventSlave.boobs >= 10000) {
				t.push(`struggle to heft ${his} bountiful breasts, and then allow themselves to be enveloped by the copious amount of flesh that makes up ${his} udders.`);
			} else if (eventSlave.boobs >= 2000) {
				t.push(`heft ${his} enormous breasts, and then bury themselves in the warm surroundings of the spaces between ${his} udders and ${his} ribcage.`);
			} else if (eventSlave.boobs >= 1000) {
				t.push(`heft ${his} big breasts measuringly.`);
			} else if (eventSlave.boobs >= 300) {
				t.push(`cup ${his} healthy breasts, feeling their weight.`);
			} else {
				t.push(`massage ${his} flat chest.`);
			}
			if (eventSlave.boobs >= 25000 || V.PC.belly >= 30000) {
				t.push(`It takes some effort but you manage to`);
			} else {
				t.push(`You`);
			}
			if (eventSlave.piercing.nipple.weight > 0) {
				t.push(`gently tug on ${his} nipple piercings, earning a gentle intake of breath.`);
			} else if (eventSlave.nipples === "huge") {
				t.push(`run a feather-light touch along ${his} long nipples, earning a gasp as they stiffen.`);
			} else {
				t.push(`run a feather-light touch over ${his} nipples, earning a gasp as they`);
				if (eventSlave.nipples !== "fuckable") {
					t.push(`stiffen.`);
				} else {
					t.push(`tighten.`);
				}
			}
			t.push(`You slide further down,`);
			if (eventSlave.bellyPreg >= 750000) {
				t.push(`running your hands across the countless infants that stretch ${his} uterus to its very limit.`);
			} else if (eventSlave.bellyPreg >= 600000) {
				t.push(`running your hands across the sides of ${his} belly, enjoying the bulging infants beneath your palms reacting to your touch.`);
			} else if (eventSlave.bellyPreg >= 450000) {
				t.push(`running your hands across the sides of ${his} belly, marveling at the feelings of life just beneath your palms.`);
			} else if (eventSlave.belly >= 60000) {
				t.push(`massaging the sides of ${his} sensitive midriff as you try to meet your hands around the imposing bump.`);
			} else if (eventSlave.belly >= 10000) {
				if (eventSlave.bellyPreg >= 2000) {
					t.push(`massaging the stretched skin of ${his} pregnancy before teasing ${his} popped navel.`);
				} else if (eventSlave.bellyImplant >= 2000) {
					t.push(`massaging the taut skin of ${his} belly before teasing ${his} popped navel.`);
				} else {
					t.push(`cupping the hugely bloated expanse of ${his} fluid filled middle.`);
				}
			} else if (eventSlave.weight > 130) {
				t.push(`fondling and groping the soft mass of ${his} hugely fat belly.`);
			} else if (eventSlave.weight > 95) {
				t.push(`fondling ${his} fat belly and exploring its soft folds.`);
			} else if (eventSlave.belly >= 1500) {
				if (eventSlave.bellyPreg >= 2000) {
					t.push(`running your hands over the life growing inside ${him}.`);
				} else if (eventSlave.bellyImplant >= 2000) {
					t.push(`running your hands across the curve of ${his} stomach.`);
				} else {
					t.push(`enjoying the way ${his} fluid-filled belly jiggles in your hands.`);
				}
			} else if (eventSlave.muscles > 30) {
				t.push(`fondling ${his} tight abs and flanks.`);
			} else if (eventSlave.weight > 30) {
				t.push(`fondling ${his} plush belly and deep navel.`);
			} else if (eventSlave.bellySag > 0) {
				t.push(`rubbing and teasing ${his} loose stomach.`);
			} else {
				t.push(`rubbing ${his} flat stomach and trim sides.`);
			}
			t.push(`${He}'s so mesmerized by your manual tour of ${his} mature body that it's almost a surprise to ${him} when ${he} tips over into a strong orgasm that obliges you to grip ${him} and hold on while ${he} shakes.`);
			eventSlave.trust += 4;
			if (inHole === "ass") {
				if (eventSlave.anus === 0) {
					t.push(`${He}'ll remember <span class="virginity loss">losing ${his} anal virginity</span> in <span class="devotion inc">such an intimate way.</span>`);
					eventSlave.devotion += 4;
					eventSlave.anus++;
				}
				seX(eventSlave, "anal", V.PC, "penetrative");
				if (canImpreg(eventSlave, V.PC)) {
					knockMeUp(eventSlave, 10, 1, -1);
				}
			} else {
				if (eventSlave.vagina === 0) {
					t.push(`${He}'ll remember <span class="virginity loss">losing ${his} virginity</span> in <span class="devotion inc">such an intimate way.</span>`);
					eventSlave.devotion += 4;
					eventSlave.vagina++;
				}
				seX(eventSlave, "vaginal", V.PC, "penetrative");
				if (canImpreg(eventSlave, V.PC)) {
					knockMeUp(eventSlave, 10, 0, -1);
				}
			}
			return t;
		}

		function partyGirl() {
			// replace slave art
			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, eventSlave, "a t-shirt");

			t = [];
			t.push(`You tell ${him} that you've hired ${him} out for a party hosted by a prominent citizen's son, home from college, and that ${he} should be saving it for that. ${He} promises that ${he} will,`);
			if (eventSlave.belly >= 600000) {
				t.push(`wiggling atop ${his} mass`);
			} else if (eventSlave.belly >= 100000) {
				t.push(`straightening up`);
			} else if (hasBothLegs(eventSlave)) {
				t.push(`relaxing ${his} leg`);
			} else {
				t.push(`bringing ${his} legs together again`);
			}
			t.push(`and clearly already imagining it. You check in on ${him} later, using the video feeds, and are treated to the sight of ${him} wearing a recently-acquired, too-tight t-shirt with an old world college's mascot on it as ${he}`);
			if ((canDoAnal(eventSlave) && eventSlave.anus === 0) || (canDoVaginal(eventSlave) && eventSlave.vagina === 0)) {
				t.push(`<span class="virginity loss">is deflowered</span> by`);
			} else {
				t.push(`rides`);
			}
			t.push(`a dick young enough to be ${his} son's. There's some drunken yelling, which ${he} responds to by blowing kisses and licking ${his}`);
			if (eventSlave.lips > 95) {
				t.push(`absurd`);
			} else if (eventSlave.lips > 70) {
				t.push(`huge`);
			} else if (eventSlave.lips > 40) {
				t.push(`plump`);
			} else if (eventSlave.lips > 20) {
				t.push(`pretty`);
			} else if (eventSlave.lips <= 10) {
				t.push(`thin`);
			}
			t.push(`lips until another cock finds its way into ${his} mouth. ${His} fee for the night is <span class="cash inc">substantial,</span> and the student's father attaches a note to the payment. Apparently ${he} got him too, and he's interested in hiring ${him} for a business meeting next month.`);
			cashX(500, "event", eventSlave);
			if (canDoVaginal(eventSlave)) {
				seX(eventSlave, "vaginal", "public", "penetrative", 5);
				if (eventSlave.vagina === 0) {
					eventSlave.vagina++;
				}
				if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
					knockMeUp(eventSlave, 10, 0, -2);
				}
			}
			if (canDoAnal(eventSlave)) {
				seX(eventSlave, "anal", "public", "penetrative", 5);
				if (eventSlave.anus === 0) {
					eventSlave.anus++;
				}
				if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
					knockMeUp(eventSlave, 10, 1, -2);
				}
			}
			seX(eventSlave, "oral", "public", "penetrative", 5);
			return t;
		}

		function virginityWarning() {
			if (canDoVaginal(eventSlave) && (eventSlave.vagina === 0)) {
				if (!canDoAnal(eventSlave) || eventSlave.anus === 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 virginityWarningDouble() {
			if (eventSlave.vagina === 0 && canDoVaginal(eventSlave) && eventSlave.anus === 0 && canDoAnal(eventSlave)) {
				return `This option will take both ${his} virginities`;
			} else if (eventSlave.vagina === 0 && canDoVaginal(eventSlave)) {
				return `This option will take ${his} virginity`;
			} else if (eventSlave.anus === 0 && canDoAnal(eventSlave)) {
				return `This option will take ${his} anal virginity`;
			}
			return null;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => V.REOrientationCheckinIDs.includes(s.ID),
				s => s.assignment !== Job.QUARTER,
				s => s.attrXY > 50,
				s => s.anus !== 0,
				s => s.vagina !== 0,
				s => (canDoAnal(s) || canDoVaginal(s)),
				s => s.devotion >= 10,
				canStand,
				canTalk,
				canHear,
				hasBothLegs,
			]
		];
	}

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

		V.REOrientationCheckinIDs.deleteWith((s) => s === eventSlave.ID);

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

		let t = [];
		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		t.push(`is the second slave on the inspection schedule for today. ${He} comes into your office naked, to find that the first inspection is going a little long. The slave before ${him} is obediently riding`);
		if (V.PC.dick === 0) {
			t.push(`one of your larger strap-ons.`);
		} else {
			t.push(`your cock.`);
		}
		t.push(`${He} waits patiently, but does not bother to hide ${his} arousal at the`);
		if (canSee(eventSlave)) {
			t.push(`lewd sight.`);
		} else {
			t.push(`sound of flesh slapping flesh.`);
		}
		t.push(`${He} obviously wants to be next;`);
		if (eventSlave.chastityPenis === 1) {
			t.push(`${his} chastity cage is dribbling precum, and ${he}'s clearly uncomfortable with simultaneous arousal and unwillingness to suffer a hard-on inside it,`);
		} else if (canAchieveErection(eventSlave)) {
			t.push(`${his} cock is painfully erect,`);
		} else if (eventSlave.dick > 6) {
			t.push(`precum is starting to bead at the tip of ${his} inhuman cock,`);
		} else if (eventSlave.dick > 0) {
			t.push(`${his} pathetically limp dick is practically dripping precum,`);
		} else if (eventSlave.clit > 0) {
			t.push(`${his} big clit is visibly erect,`);
		} else {
			t.push(`a sheen is visible on ${his} pussylips,`);
		}
		t.push(`${his} nipples are`);
		if (eventSlave.nipples !== "fuckable") {
			t.push(`stiff,`);
		} else {
			t.push(`swollen tight,`);
		}
		t.push(`and ${he}'s starting to breathe a little hard.`);
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`When you finish and send the slave you were boning on their way with a light slap on the rump, you seat yourself to inspect ${eventSlave.slaveName}. As you do,`);
		if (V.PC.dick === 0) {
			t.push(`your rather realistically modeled phallus dangles`);
		} else {
			t.push(`your half-hard but still quite imposing cock hangs`);
		}
		t.push(`between your legs, still slick from fucking the previous inspectee.`);
		if (canSee(eventSlave)) {
			t.push(`${eventSlave.slaveName}'s`);
			t.push(App.Desc.eyesColor(eventSlave));
			t.push(`focus`);
		} else {
			t.push(`${eventSlave.slaveName} focuses`);
		}
		t.push(`on it with painful intensity,`);
		if (eventSlave.chastityPenis === 1) {
			t.push(`and the ${desc}'s chastity cage begins to bother ${him} even more.`);
		} else if (canAchieveErection(eventSlave)) {
			t.push(`and the ${desc}'s hard dick releases a string of precum.`);
		} else if (eventSlave.dick > 6) {
			t.push(`and the ${desc}'s oversized dick engorges as much as it possibly can.`);
		} else if (eventSlave.dick > 0) {
			t.push(`and the ${desc}'s soft dick twitches weakly.`);
		} else if (eventSlave.clit > 0) {
			t.push(`and the ${desc}'s clit gets, if possible, even more flushed and erect.`);
		} else {
			t.push(`the distinct smell of female arousal in the office intensifying.`);
		}
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`You remember the way ${he} was when ${he} became your slave with sudden clarity. ${He} was not a fan of the dick then, but ${he}'s certainly come around.`);
		if (V.PC.dick === 0) {
			t.push(`Even a realistic strap-on is enough to get ${him} all hot and bothered.`);
		}
		t.push(`On impulse, you ask ${him} if ${he} remembers how ${he} used to feel about cock. ${He} hesitates, wondering how to answer, but decides that honesty is the best policy and giggles,`);
		t.push(Spoken(eventSlave, `"Yes, ${Master}. I do. I mean, not all the time. It's easy to forget that I wasn't always such a cock-hungry slut."`));
		t.push(`${He} laughs, a rueful sound.`);
		if (eventSlave.energy > 95) {
			t.push(Spoken(eventSlave, `"I need it so bad now, I'll let anybody fuck me. I mean, I'd let anybody fuck me, if it wasn't already my job as a slave.`));
		} else if (eventSlave.fetish === "cumslut" && eventSlave.fetishStrength > 60) {
			t.push(Spoken(eventSlave, `"Cocks are so hot. Just thinking about them gets me all horny. How they're all throbbing and warm and then they cum..."`));
			t.push(`${He} trails off.`);
			t.push(Spoken(eventSlave, `"Sorry, got distracted.`));
		} else if (eventSlave.fetish === "buttslut" && eventSlave.fetishStrength > 60) {
			t.push(Spoken(eventSlave, `"I didn't know how much fun getting fucked in the butt was back then.`));
		} else if (eventSlave.fetish === "pregnancy" && eventSlave.fetishStrength > 60) {
			t.push(Spoken(eventSlave, `"I didn't know how good it felt to receive a load of fresh cum back then.`));
		} else {
			t.push(Spoken(eventSlave, `"Guys are just so hot — all big and strong and muscly.`));
		}
		if (V.PC.title === 1) {
			t.push(Spoken(eventSlave, `And being owned by such a handsome man has helped."`));
		} else {
			t.push(Spoken(eventSlave, `Not that I don't love ladies too."`));
		}
		t.push(`${He} arches ${his} back and bats ${his} eyes at you.`);
		t.push(Spoken(eventSlave, `"A lot."`));
		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result(`${He} wants dick. Give ${him} the dick`, dicking),
			new App.Events.Result(`Send ${him} down to a gym to share that attraction around`, gymService),
		]);

		function dicking() {
			const arms = hasBothArms(eventSlave) ? "arms" : "arm";

			t = [];
			t.push(`You`);
			if (V.PC.belly >= 10000) {
				t.push(`push yourself`);
			} else {
				t.push(`rise fluidly`);
			}
			t.push(`out of your chair,`);
			if (canSee(eventSlave)) {
				t.push(`pointing at the floor`);
				if (eventSlave.belly >= 100000 || eventSlave.boobs > 50000) {
					t.push(`at ${his} feet.`);
				} else {
					t.push(`in front of ${him}.`);
				}
			} else {
				t.push(`ordering ${him} to prepare ${himself}.`);
			}
			t.push(`${He} needs no further direction, and hurriedly gets down to place ${his} mouth at dick height. ${He}`);
			if (V.PC.dick === 0) {
				t.push(`gives your strap-on a blowjob`);
			} else {
				t.push(`sucks you off`);
				if (V.PC.vagina !== -1) {
					t.push(`and eats you out`);
				}
			}
			t.push(`with relish,`);
			if (V.PC.belly >= 10000) {
				t.push(`hair tickling the underside of your belly,`);
			} else {
				t.push(`looking adoringly up at you`);
			}
			t.push(`as ${he} rhythmically works ${his} lips up and down`);
			if (V.PC.dick === 0) {
				t.push(`the`);
			} else {
				t.push(`your`);
			}
			t.push(`thick shaft. After a bit of this, you pull`);
			if (V.PC.dick === 0) {
				t.push(`the phallus`);
			} else {
				t.push(`yourself`);
			}
			t.push(`free with a delicious popping noise, and haul the slave`);
			if (canWalk(eventSlave)) {
				t.push(`to ${his} feet`);
			} else {
				t.push(`upright`);
			}
			t.push(`with ${his} back to you. You grab ${his}`);
			if (hasAnyArms(eventSlave)) {
				t.push(`${arms}`);
			} else {
				t.push(`shoulders`);
			}
			t.push(`in a firm hold and`);
			// TODO: fucking height
			if (V.PC.belly >= 1000) {
				t.push(`guide ${him} forward`);
				if (eventSlave.belly >= 300000) {
					t.push(`onto ${his} ${belly} belly`);
				}
			} else {
				t.push(`pull ${him} up on tiptoe`);
			}
			t.push(`(at which the horny ${girl} giggles with anticipation), and then thrust into the`);
			if (eventSlave.weight > 10) {
				t.push(`soft crevice between ${his} plush thighs.`);
			} else {
				t.push(`gap between ${his} thighs.`);
			}
			t.push(`This motion slides`);
			if (V.PC.dick === 0) {
				t.push(`the strap-on`);
			} else {
				t.push(`your hard dick`);
			}
			if (eventSlave.vagina > -1) {
				t.push(`against ${his} moist pussylips,`);
			} else if (eventSlave.scrotum > 0) {
				t.push(`against ${his} anus and then past ${his} ballsack,`);
			} else {
				t.push(`along ${his} sensitive perineum,`);
			}
			t.push(`eliciting a shocked gasp and then a prolonged whine of pleasure. ${He} humps ${himself} along`);
			if (V.PC.dick === 0) {
				t.push(`the phallus`);
			} else {
				t.push(`your shaft`);
				if (V.PC.vagina !== -1) {
					t.push(`and mons`);
				}
			}
			t.push(`shamelessly, craning around to rain kisses on your`);
			if (V.PC.belly >= 10000) {
				t.push(`baby bump.`);
			} else {
				t.push(`jawline and neck.`);
			}
			t.push(`When you gently push ${his} face away from you by`);
			if (V.PC.belly >= 10000) {
				t.push(`leaning into ${him},`);
			} else {
				t.push(`tipping ${his} torso forward,`);
			}
			t.push(`${he} moans a little from the loss of closeness, but soon forgets it when you press your`);
			if (V.PC.dick === 0) {
				t.push(`strap-on`);
			} else {
				t.push(`dick`);
			}
			if (canDoVaginal(eventSlave)) {
				t.push(`inside ${him}. ${He} begins to gasp your name, moan adoration, and beg nonsensically, and ${he} orgasms promptly. ${He} groans with`);
				if (canDoAnal(eventSlave)) {
					t.push(`overstimulation as you pull out, and then whines when you redouble it by immediately switching to ${his}`);
					if (eventSlave.anus > 2) {
						t.push(`loose`);
					} else if (eventSlave.anus > 1) {
						t.push(`practiced`);
					} else {
						t.push(`tight`);
					}
					t.push(`ass.`);
				} else {
					t.push(`overstimulation, but you're just getting started; you grab ${his} hips and hoist ${him} up to fuck ${his}`);
					if (eventSlave.vagina > 9) {
						t.push(`abyssal`);
					} else if (eventSlave.vagina > 3) {
						t.push(`gaping`);
					} else if (eventSlave.vagina > 2) {
						t.push(`loose`);
					} else if (eventSlave.vagina > 1) {
						t.push(`practiced`);
					} else {
						t.push(`tight`);
					}
					t.push(`pussy some more.`);
				}
			} else {
				t.push(`against ${his}`);
				if (eventSlave.anus > 2) {
					t.push(`loose`);
				} else if (eventSlave.anus > 1) {
					t.push(`practiced`);
				} else {
					t.push(`tight`);
				}
				t.push(`anus. As you push inside ${him}, ${he} begins to gasp your name, moan adoration, and beg nonsensically, and ${he} orgasms promptly. ${He} groans with overstimulation, but you're just getting started; you grab ${his} hips and hoist ${him} up to fuck ${his} ass some more.`);
			}
			t.push(`You climax there, your tour of ${his} holes completed; ${he} drops down to clean you off again before thanking you earnestly and taking ${his} leave, though not without a final turn in the doorway to`);
			if (canSee(eventSlave)) {
				t.push(`steal a final loving glance at`);
				if (V.PC.dick === 0) {
					t.push(`your strap-on.`);
				} else {
					t.push(`your junk.`);
				}
			} else {
				t.push(`fantasize a little about the next time ${he}'ll be intimate with`);
				if (V.PC.dick === 0) {
					t.push(`your strap-on.`);
				} else {
					t.push(`your junk.`);
				}
			}
			eventSlave.trust += 4;
			seX(eventSlave, "oral", V.PC, "penetrative");
			if (canDoVaginal(eventSlave)) {
				seX(eventSlave, "vaginal", V.PC, "penetrative");
				if (canDoAnal(eventSlave)) {
					seX(eventSlave, "anal", V.PC, "penetrative");
					if (canImpreg(eventSlave, V.PC)) {
						knockMeUp(eventSlave, 10, 2, -1);
					}
				} else {
					seX(eventSlave, "vaginal", V.PC, "penetrative");
					if (canImpreg(eventSlave, V.PC)) {
						knockMeUp(eventSlave, 10, 0, -1);
					}
				}
			} else if (canDoAnal(eventSlave)) {
				seX(eventSlave, "anal", V.PC, "penetrative", 2);
				if (canImpreg(eventSlave, V.PC)) {
					knockMeUp(eventSlave, 10, 1, -1);
				}
			}
			return t;
		}

		function gymService() {
			t = [];
			t.push(`You bring up a schematic of the arcology and`);
			if (canSee(eventSlave)) {
				t.push(`point out a`);
			} else {
				t.push(`detail the path to a nearby`);
			}
			t.push(`public gym to ${him}; you`);
			if (canHold(eventSlave)) {
				t.push(`hand ${him} a day pass,`);
			} else {
				t.push(`fasten a day pass around ${his} neck,`);
			}
			t.push(`tell ${him} to go down there, and let ${him} know ${he}'ll spend the rest of the day there. ${He} looks mystified, and when you do not elaborate further, ${he} asks,`);
			t.push(Spoken(eventSlave, `"What should I do there, ${Master}?"`));
			t.push(`Anything ${he} wants, you tell ${him}. ${He} still looks somewhat puzzled, but ${he}`);
			if (canWalk(eventSlave)) {
				t.push(`heads down`);
			} else {
				t.push(`accepts help down`);
			}
			t.push(`to the gym anyway. When ${he} gets there, ${he}`);
			if (canSee(eventSlave)) {
				t.push(`sees a steady stream of well-muscled male citizens entering the showers,`);
			} else {
				t.push(`hears the well-muscled male citizens working up a sweat before heading to the showers,`);
			}
			t.push(`and gets it. ${He} waves cheerfully to the nearest camera, and blows you a kiss before heading into the locker room. This is the Free Cities, and there isn't much reaction to a naked ${girl} entering a male-dominated gym. That is, until ${he} selects from among the sweaty gentlemen coming in from the weight room, sidles up to one, and says cheerfully,`);
			t.push(Spoken(eventSlave, `"Hi! Do you wanna fuck me?"`));
			t.push(`He does, and <span class="reputation inc">so do many of his friends.</span> So many, in fact, that having the showers right there becomes convenient for ${him} as the day goes on.`);
			repX(1250, "event", eventSlave);
			seX(eventSlave, "oral", "public", "penetrative", 5);
			if (canDoVaginal(eventSlave)) {
				seX(eventSlave, "vaginal", "public", "penetrative", 5);
				if (canDoAnal(eventSlave)) {
					seX(eventSlave, "anal", "public", "penetrative", 5);
					if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
						knockMeUp(eventSlave, 10, 2, -2);
					}
				} else {
					seX(eventSlave, "vaginal", "public", "penetrative", 5);
					if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
						knockMeUp(eventSlave, 10, 0, -2);
					}
				}
			} else {
				seX(eventSlave, "anal", "public", "penetrative", 10);
				if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
					knockMeUp(eventSlave, 10, 1, -2);
				}
			}
			return t;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== "mindbroken",
				s => V.REUglyCheckinIDs.includes(s.ID),
				s => s.face >= -10,
				s => (s.assignment === Job.PUBLIC || s.assignment === Job.WHORE),
				s => s.devotion >= 10,
				s => (Beauty(s) >= 50),
				s => s.bodySwap === 0,
				s => s.porn.prestige === 0,
				canSee,
				canStand,
				canTalk,
				canHear,
				hasAnyArms,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {He, he, His, his, him, himself, girl} = getPronouns(eventSlave);
		const {title: Master, say: say} = getEnunciation(eventSlave);
		const freeMovement = (canWalk(eventSlave) || (canMove(eventSlave) && eventSlave.rules.mobility === "permissive"));

		V.REUglyCheckinIDs.deleteWith((s) => s === eventSlave.ID);

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

		let t = [];
		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
		if (freeMovement) {
			t.push(`comes`);
		} else {
			t.push(`is walked`);
		}
		t.push(`in for an inspection. You have a relaxed day scheduled, so you take the time to do an unusually thorough job. On a whim, you pull up ${his} complete file, flipping the virtual pages out across your desk. The induction pictures are particularly striking. ${He} doesn't look much like that, anymore, and that's a good thing. ${He} was not a pretty ${girl} when you got ${him}, though ${he}'s pretty enough now. With a desk control gesture you flip a full frontal shot of ${him} on the day of ${his} enslavement up onto a wallscreen.`);
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`${His} ${App.Desc.eyesColor(eventSlave)} track your sudden motion, of course, and ${he} follows it to the screen. Suddenly, the ${SlaveTitle(eventSlave)} is eye to eye with a life-size picture of who ${he} used to be, just a few`);
		if (V.showInches === 2) {
			t.push(`feet`);
		} else {
			t.push(`meters`);
		}
		t.push(`away. ${He} gasps with recognition, and then ${his} face clouds inscrutably. ${He}`);
		if (freeMovement) {
			t.push(`takes a couple of hesitant steps`);
		} else {
			t.push(`hesitates for a moment before struggling`);
		}
		t.push(`forward, and then reaches out to touch the cheek of the ${girl} in the picture.`);
		if (hasBothArms(eventSlave)) {
			t.push(`As ${his} fingertips brush the smooth surface of the wallscreen, ${his} other hand ghosts along ${his} own face.`);
		} else {
			t.push(`${His} fingertips brush the smooth surface of the wallscreen, before ghosting along ${his} own face.`);
		}
		t.push(`${His} expression is not sad, so it's surprising when a single tear rolls down ${his} cheek. You order ${him} to tell you how the picture makes ${him} feel.`);
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`${He} looks pensive, and goes through two false starts before ${he} clears ${his} throat, wrenches ${his} gaze away from ${his} picture, and ${say}s introspectively,`);
		t.push(Spoken(eventSlave, `"${Master}, it's strange. We — we don't have pictures of ourselves, from before we were enslaved. I didn't really realize how much I'd changed. Some days being a slave is hard. But seeing that picture, it makes me feel better about it. You — you're really ${V.PC.title === 1 ? "handsome" : "pretty"}, ${Master}. I bet you always were."`));
		t.push(`${He} inclines ${his} head towards the homely ${girl} on the screen.`);
		t.push(Spoken(eventSlave, `"It's hard to be ugly, ${Master}. Really hard. I feel sorry for that ${girl}, and I'm glad I don't look like ${him} anymore."`));
		t.push(`${He} laughs suddenly, a little self-consciously.`);
		t.push(Spoken(eventSlave, `"The crazy thing is if you'd told that ${girl} that`));
		if (eventSlave.assignment === Job.WHORE) {
			t.push(Spoken(eventSlave, `lots and lots of people would pay to fuck ${him}`));
		} else {
			t.push(Spoken(eventSlave, `all kinds of people would happily fuck ${him}`));
		}
		t.push(Spoken(eventSlave, `someday, ${he} wouldn't have believed you. It's kind of reassuring, actually. Is that weird? That came out weird. Sorry."`));
		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result(`${He}'s pretty enough to decorate your arm for a night out`, nightOut),
			new App.Events.Result(`Show ${him} off online`, livestreaming)
		]);

		function nightOut() {
			// replace slave art
			$(artDiv).empty();
			App.Events.drawEventArt(artDiv, eventSlave, "a mini dress");

			let frag = document.createDocumentFragment();

			t = [];
			t.push(`You tell ${him} to head down to the wardrobe and put on the outfit that'll be laid out for ${him} there. ${He} obeys promptly, but does not return for some time, having gotten instructions from ${V.assistant.name} along the way to put extra effort into ${his} grooming. When ${he} finally returns, the effect is striking.`);
			if (eventSlave.face > 10) {
				t.push(`${He}'s a gorgeous ${girl} with or without makeup, dressed up or naked, but ${he}'s especially luscious tonight.`);
			} else {
				t.push(`${His} face is not flawless, but ${he}'s conscious of ${his} transformation, and the new confidence in ${his} beauty adds a special glow that cannot be faked.`);
			}
			t.push(`${His} evening dress is elegant; it's quite slutty by old world standards, but according to Free Cities fashion, it's just about the most conservative gown a slave can be expected to wear, and quite daring in that it isn't immediately obvious whether ${he}'s a slave or not.`);
			if (eventSlave.areolae < 3) {
				t.push(`The tops of ${his} areolae are hardly even visible.`);
			}
			App.Events.addParagraph(frag, t);

			t = [];
			t.push(`You take ${him} out to a nice lounge, with blue-toned light and soft music. ${He} clings to your arm, pressing ${himself} against you just the right amount: not enough to demand sex right now, but enough to raise the anticipation of it later. ${He}'s a slave, so ${he} does not eat or drink the usual fare on offer, but the establishment is used to slaves and offers flavorful variation on liquid slave food. ${He} drinks the translucent fluid out of a tall glass, carefully maintaining ${his} poise. You circulate, leaving ${him} at the bar when acquaintances appear. ${He} perches on a stool, conscious of and pleased by the discreet admiration of ${his} body, delectably outlined by the tight dress. Once a new arrival who did not see you with ${him} introduces himself to ${him}. He's tall and fit and silver-haired, but he picked ${him} out of the room to approach, and it's with polite disappointment that he reacts to ${his} indication of you, across the room:`);
			t.push(Spoken(eventSlave, `"I'm sorry, Sir, that's my ${Master} there."`));
			t.push(`He offers a nonverbal apology without coming over, which you accept with a wave: it's such a common mistake in Free Cities high society that it's universally brushed off without offense. It happens again later in the night, when a slightly tipsy free woman occupies the barstool next to ${eventSlave.slaveName}'s and keeps trying to relax against ${him} until the flattered slave explains ${himself} again. When you bring ${him} home at the end of the night, ${his}`);
			if (hasBothEyes(eventSlave)) {
				t.push(`eyes are`);
			} else {
				t.push(`eye is`);
			}
			t.push(`shining with <span class="trust inc">private assurance,</span> and ${he} presses ${himself} against you more closely than ever.`);
			App.Events.addParagraph(frag, t);

			eventSlave.trust += 4;

			return frag;
		}

		function livestreaming() {
			t = [];
			t.push(`You tell ${him} that ${he}'s become a very pretty sex slave, and to prove it, you`);
			if (eventSlave.porn.feed > 0) {
				t.push(`let ${him} believe you've`);
			}
			t.push(`set up a live feed for ${him} that's available for free in the old world.`);
			if (eventSlave.porn.feed === 0) {
				t.push(`The Free Cities produce an utter torrent of hardcore video, so much that there's never any profit to be made off it anymore, but viewers begin to join the channel anyway and by the end of the week`);
			} else {
				t.push(`${He} already has a growing fanbase, and with the promise of a week of special content, even more join the channel to observe. Before long,`);
			}
			t.push(`${he} has thousands of eyes watching ${him} as ${he}`);
			if (eventSlave.assignment === Job.WHORE) {
				t.push(`sells ${his} body`);
			} else {
				t.push(`has sex with random citizens`);
			}
			t.push(`in the hallways of ${V.arcologies[0].name}. ${capFirstChar(V.assistant.name)} keeps ${him} constantly informed of how many people are watching ${him} get fucked, how many of them are likely masturbating to ${his} body, and how many inquiries about ${him} ${V.assistant.name} is culling out of your inbox. ${He} slowly gets used to ${his} starring role in an impromptu free hardcore stream, but never quite stops stealing wondering glances at the nearest camera, as though ${he} cannot believe that so many people would sexualize ${him}. This lends ${him} a naughtiness that cannot be faked, garnering ${him} much attention by the end of the week.`);
			if (eventSlave.fetish === "humiliation" && eventSlave.fetishStrength > 60) {
				if (eventSlave.fetishKnown === 1) {
					t.push(`Of course, since ${he}'s a humiliation fetishist, this experience is like sexual candy for ${him}. ${He} <span class="devotion inc">can't get enough.</span>`);
				} else {
					t.push(`Oddly enough, <span class="devotion inc">${he} seems to enjoy it far more than anticipated.</span>`);
				}
				eventSlave.devotion += 4;
			}
			if (eventSlave.porn.feed === 0) {
				repX(1250, "event", eventSlave);
			} else {
				repX(500, "event", eventSlave);
				eventSlave.porn.viewerCount += 7000;
			}
			return t;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // event slave /InterestTargetID
				isSlaveAvailable,
				s => (s.fetish === "none" || s.fetishStrength <= 60),
				s => (canSee(s) || canHear(s)),
				s => s.rules.speech !== "restrictive",
			],
			[ // and subslave /subID
				s => App.Events.qualifiesForREFIsubSlave(s, "boobs"),
				s => s.lactation > 0
			]
		];
	}

	execute(node) {
		const [eventSlave, subSlave] = this.actors.map(a => getSlave(a));
		const {He, he, his, him, himself} = getPronouns(eventSlave);
		const {he2, his2} = getPronouns(subSlave).appendSuffix("2");
		const {say} = getEnunciation(eventSlave);

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

		if (subSlave.lactation > 0) {
			subSlave.lactationDuration = 2;
			subSlave.boobs -= subSlave.boobsMilk;
			subSlave.boobsMilk = 0;
		} else {
			induceLactation(subSlave, 4);
		}

		let t = [];

		t.push(`On lunch duty today is`);
		t.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, subSlave, true), "."));
		t.push(`That means that as you eat your working lunch, ${he2} sits on the edge of your desk right next to you, so that`);
		if (subSlave.belly >= 100000) {
			t.push(`a nipple is`);
		} else {
			t.push(`${his2} nipples are`);
		}
		t.push(`conveniently at mouth height. Whenever you feel thirsty, you lean`);
		if (subSlave.nipples === "partially inverted" || subSlave.nipples === "inverted") {
			t.push(`over, pop one out,`);
		} else if (subSlave.nipples === "fuckable") {
			t.push(`over, slip your tongue deep inside,`);
		} else {
			t.push("over,");
		}
		t.push(`take some of ${his2} creamy, slightly vanilla-toned milk straight from the source. Every time you do, ${he2} shudders convulsively,`);
		if (canTalk(subSlave)) {
			t.push(`giving little mewling whimpers.`);
		} else {
			if (subSlave.accent >= 3) {
				t.push(`giving little mewling whimpers.`);
			} else if (subSlave.voice === 0) {
				t.push(`making the harsh gasping noises that are all ${he2} can manage, as a mute.`);
			} else {
				t.push(`giving small moans through ${his2} obstructed mouth.`);
			}
		}
		t.push(`Though you never touch anything but ${his2} nipples, ${he2} climaxes twice. After you finish and ${he2} leaves, you notice`);
		t.push(contextualIntro(V.PC, eventSlave, true), `at the door to your office. You call ${him} in.`);
		App.Events.addParagraph(node, t);
		t = [];

		t.push(`${eventSlave.slaveName} hesitates before explaining ${himself}, and the ${SlaveTitle(eventSlave)} is obviously aroused:`);
		if (eventSlave.dick > 0 && eventSlave.chastityPenis === 1) {
			t.push(`${he}'s got a string of precum leaking out of ${his} chastity cage.`);
		} else if (eventSlave.dick > 0 && eventSlave.hormoneBalance >= 100) {
			t.push(`though ${his} hormone-filled body can't get ${his} dick hard any more, ${he}'s got a string of precum coming off ${his} member.`);
		} else if (eventSlave.dick > 0 && eventSlave.balls > 0 && eventSlave.ballType === "sterile") {
			t.push(`though ${his} useless balls can't muster the effort to get ${his} dick hard any more, ${he}'s got a string of precum coming off ${his} limp member.`);
		} else if (eventSlave.dick > 0 && eventSlave.balls === 0) {
			t.push(`though ${his} gelded body can't get ${his} dick hard any more, ${he}'s got a string of precum coming off ${his} limp member.`);
		} else if (canAchieveErection(eventSlave)) {
			if (eventSlave.dick > 4) {
				t.push(`${his} gigantic cock is standing out like a mast.`);
			} else if (eventSlave.dick > 2) {
				t.push(`${he}'s sporting an impressive erection.`);
			} else if (eventSlave.dick > 0) {
				t.push(`${his} little penis is rock hard.`);
			}
		} else if (eventSlave.dick > 7) {
			t.push(`${he}'s got a string of precum coming off ${his} engorged member.`);
		} else if (eventSlave.dick > 0) {
			t.push(`${he}'s got a string of precum coming off ${his} limp member.`);
		} else if (eventSlave.clit > 0) {
			t.push(`${his} large clit is visibly engorged.`);
		} else if (eventSlave.vagina > -1) {
			if (eventSlave.nipples !== "fuckable") {
				t.push(`${his} nipples are hard and`);
			}
			t.push(`there's a sheen on ${his} pussylips.`);
		} else if (eventSlave.balls > 0) {
			if (eventSlave.nipples !== "fuckable") {
				t.push(`${his} nipples are hard and`);
			}
			t.push(`there is a distinct dribble of precum running from ${his} featureless crotch.`);
		} else {
			if (eventSlave.nipples !== "fuckable") {
				t.push(`${his} nipples are hard and`);
			}
			t.push(`there is a clear scent of lust around ${him}.`);
		}
		t.push(`It seems ${he} passed by while you were drinking from`, contextualIntro(eventSlave, subSlave), `and found the`);
		if (canSee(eventSlave)) {
			t.push(`sight`);
		} else {
			t.push(`sounds`);
		}
		t.push(`rather compelling. It should be possible to either encourage this fascination or steer ${him} away from it for now.`);

		App.Events.addParagraph(node, t);
		App.Events.addResponses(node, [
			new App.Events.Result(`Turn ${him} into another breast fetishist`, turn),
			new App.Events.Result(`Steer ${him} away from breast obsession for the moment`, steer),
		]);

		function turn() {
			t = [];

			if (!canTalk(eventSlave)) {
				if (eventSlave.accent >= 3) {
					if (!hasAnyArms(eventSlave)) {
						t.push(`Since ${he} isn't conversant in ${V.language} and lacks the hands to gesture, ${he}'s forced to push out ${his} chest and wiggle to try to communicate that ${he} would like to experience a nipple orgasm, too.`);
					} else {
						t.push(`Since ${he} isn't conversant in ${V.language}, ${he}'s forced to use some delightfully lewd gestures at ${his} own boobs to communicate that ${he} would like to experience a nipple orgasm, too.`);
					}
				} else if (eventSlave.voice === 0) {
					if (!hasAnyArms(eventSlave)) {
						t.push(`${He}'s mute and has no hands, so it takes a long, frustrating time for ${him} to communicate that ${he} would like to experience a nipple orgasm, too.`);
					} else {
						t.push(`${He}'s mute, so ${he} uses gestures to ask you for a nipple orgasm, too.`);
					}
				} else {
					t.push(`${He} can't form`);
					if (!hasAnyArms(eventSlave)) {
						t.push(`words and has no hands, so it takes a long, frustrating time for ${him} to communicate that ${he} would like to experience a nipple orgasm, too.`);
					} else {
						t.push(`words, so ${he} uses gestures to ask you for a nipple orgasm, too.`);
					}
				}
			} else {
				if (eventSlave.lips > 70) {
					t.push(`${He} ${say}s through ${his} massive dick-sucking lips,`);
				} else if (eventSlave.piercing.lips.weight + eventSlave.piercing.tongue.weight > 2) {
					t.push(`${He} ${say}s through ${his} big oral piercings,`);
				} else {
					t.push(`${He} ${say}s,`);
				}
				t.push(Spoken(eventSlave, `"${getWrittenTitle(eventSlave)}, may I have a nipple orgasm, too?"`));
			}
			t.push(`You make ${him} state it more explicitly, so ${he} tries again:`);
			if (!hasAnyArms(eventSlave) && !canTalk(eventSlave)) {
				t.push(`${he} sticks ${his} chest out as far as it will go, and wiggles it back and forth demonstratively.`);
			} else if (!canTalk(eventSlave)) {
				t.push(`${he} tries to depict suckling and orgasm with ${his}`);
				if (hasBothArms(eventSlave)) {
					t.push(`hands,`);
				} else {
					t.push(`hand,`);
				}
				t.push(`but gives up and just sticks ${his} tits out at`);
				if (eventSlave.nipples === "fuckable") {
					t.push(`you while fingering ${his} nipplecunts.`);
				} else {
					t.push(`you, pinching ${his} nipples hard.`);
				}
			} else {
				t.push(Spoken(eventSlave, `"Please use my boobs, ${getWrittenTitle(eventSlave)}!"`));
			}
			t.push(`${He} gasps as you seize ${him} and carry ${him}`);
			if (V.PC.belly >= 30000) {
				t.push(`to the couch, but ${he}'s clearly pleased. While you would rather sit ${him} on your lap, you are far too pregnant to fit ${him}; instead you settle ${him} beside you and torment`);
			} else {
				t.push(`back to your desk chair, but ${he}'s clearly pleased. You sit in the chair with ${him} in your lap facing away from`);
				if (V.PC.boobs >= 300) {
					t.push(`you, ${his} back against your breasts and torment`);
				} else {
					t.push(`you, and torment`);
				}
			}
			t.push(`${his} nipples until ${he}'s close to climax. Then you get ${him} on`);
			if (hasBothLegs(eventSlave)) {
				t.push(`${his} knees`);
			} else {
				t.push(`the floor`);
			}
			t.push(`and push ${him} over the edge with`);
			if (V.PC.dick !== 0) {
				if (eventSlave.nipples === "fuckable") {
					t.push(`your cock and fingers deep inside ${his}`);
				} else {
					t.push(`your cock between ${his}`);
				}
			} else {
				if (eventSlave.nipples === "fuckable") {
					t.push(`your fingers deep inside ${his}`);
				} else {
					t.push(`your pussy rubbing against the stiff nipples atop ${his}`);
				}
			}
			if (eventSlave.boobs > 40000) {
				t.push(`gargantuan`);
			} else if (eventSlave.boobs > 25000) {
				t.push(`immense`);
			} else if (eventSlave.boobs > 10000) {
				t.push(`ridiculous`);
			} else if (eventSlave.boobs > 5000) {
				t.push(`enormous`);
			} else if (eventSlave.boobs > 3200) {
				t.push(`giant`);
			} else if (eventSlave.boobs > 1600) {
				t.push(`huge`);
			} else if (eventSlave.boobs > 800) {
				t.push(`big`);
			} else if (eventSlave.boobs > 300) {
				t.push(`modest`);
			} else {
				t.push(`flat`);
			}
			if (eventSlave.boobs > 300) {
				t.push(`tits.`);
			} else {
				t.push(`chest.`);
			}
			t.push(`<span class="devotion inc">${He} has become more devoted to you,</span> and <span class="fetish gain">${his} sexuality now focuses on ${his} breasts.</span>`);
			eventSlave.devotion += 4;
			seX(eventSlave, "mammary", V.PC, "penetrative");
			eventSlave.fetish = "boobs";
			eventSlave.fetishKnown = 1;
			eventSlave.fetishStrength = 65;
			if (eventSlave.lactation > 0) {
				eventSlave.lactationDuration = 2;
				eventSlave.boobs -= eventSlave.boobsMilk;
				eventSlave.boobsMilk = 0;
			} else {
				t.push(induceLactation(eventSlave, 5));
			}
			return t;
		}

		function steer() {
			t = [];
			t.push(`Good slaves get aroused according to their masters' whim, not their own silly tendencies. You call ${eventSlave.slaveName} over before ${he} can give voice to ${his} interest in nipple play,`);
			if (canDoVaginal(eventSlave) || (eventSlave.dick > 0 && !(eventSlave.chastityPenis))) {
				t.push(`and let ${him} masturbate while`);
				if (V.PC.dick === 0) {
					t.push(`eating you out,`);
					seX(eventSlave, "oral", V.PC, "vaginal");
				} else {
					t.push(`sucking you off,`);
					seX(eventSlave, "oral", V.PC, "penetrative");
				}
				t.push(`to associate non-mammary intercourse with pleasure.`);
			} else {
				t.push(`and play with ${him} until ${he} orgasms while carefully keeping ${his} boobs and nipples untouched and unstimulated.`);
			}
			t.push(`You'll keep an eye on ${him}, and with this correction <span class="devotion inc">${he}'ll become more submissive to you.</span>`);
			eventSlave.devotion += 4;
			return t;
		}
	}
};