code:
App.Events.pessLovingHeadgirl = class pessLovingHeadgirl extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => !!S.HeadGirl,
			() => S.HeadGirl.devotion > 95,
			() => V.slaves.length > 4
		];
	}

	execute(node) {
		const {
			He, His,
			he, his, him, himself, wife
		} = getPronouns(S.HeadGirl);
		const {title: Master} = getEnunciation(S.HeadGirl);
		const art = App.UI.DOM.appendNewElement("span", node);
		App.Events.drawEventArt(art, S.HeadGirl);
		const subSlave = V.slaves.find((s) => s.ID !== V.HeadGirlID && s.devotion <= 20);

		App.Events.addParagraph(node, [
			`You and`,
			App.UI.DOM.slaveDescriptionDialog(S.HeadGirl),
			`see one another less than one might expect, for a slaveowner and their Head Girl. You both lead very busy lives, for one. Furthermore, ${S.HeadGirl.slaveName} often functions as a second set of eyes, ears, and castigating hands for you, so it would be a waste for the two of you to be in the same place at the same time. Today, the two of you saw almost nothing of one another, so ${he} comes to your office for a quick review of the day before ${he} turns in for the night.`
		]);
		const r = [];
		r.push(`The business is brief and inconsequential, but it's good to speak with ${him}. When you're done, ${he} gets halfway to the door before coming quickly back to give you a light kiss on the cheek.`);
		if (S.HeadGirl.lips > 70) {
			r.push(`"Ah love you, ${Master}," ${he} lisps, huge lips grazing your ear,`);
		} else if (S.HeadGirl.piercing.lips.weight + S.HeadGirl.piercing.tongue.weight > 2) {
			r.push(`"Ah love you, ${Master}," ${he} lisps, oral piercings grazing your ear,`);
		} else {
			r.push(`"I love you, ${Master}," ${he} whispers into your ear,`);
		}
		r.push(`${his} breasts brushing against your shoulder as ${he} does.`);
		App.Events.addParagraph(node, r);

		const choices = [];
		choices.push(new App.Events.Result(`Spend a night as equals`, equals));
		choices.push(new App.Events.Result(`Pull ${him} in to keep you company as you work`, company, (S.HeadGirl.anus === 0) ? `This will take anal virginity` : null));
		if (subSlave && canDoAnal(subSlave)) {
			choices.push(new App.Events.Result(`Victimize something together`, victimize, subSlave.anus === 0 ? "This will take anal virginity" : null));
		}

		App.Events.addResponses(node, choices);

		function equals() {
			if (V.seeImages) {
				$(art).empty();
				App.Events.drawEventArt(art, S.HeadGirl, "no clothing");
			}

			S.HeadGirl.devotion += 4;
			seX(S.HeadGirl, "oral", V.PC, "penetrative");
			seX(S.HeadGirl, "anal", V.PC, "penetrative");
			if (V.policies.mixedMarriage === 1 && S.HeadGirl.relationship === -3 && V.arcologies[0].FSPaternalist >= 60) {
				repX(500, "event", S.HeadGirl);
				return `You instruct your slave-${wife} ${S.HeadGirl.slaveName} to put on ${his} best dress and meet you at the door. You spend a nice night out with ${him}, taking in the sights before heading to a nice restaurant, where you receive the occasional admiring glance from your paternalistic citizens. Afterwards, you attend a show at a venue known for its respectful plays acted out by talented slaves, and you conclude the evening by returning to your penthouse to have loving sex in your master bed. When you wake the next morning, you're greeted with a long kiss and an adoring look, before ${S.HeadGirl.slaveName} slides out of bed to begin ${his} morning duties.`;
			} else {
				repX(-100, "event", S.HeadGirl);
				return `You instruct ${S.HeadGirl.slaveName} to put on ${his} best dress and meet you at the door. You spend a nice night out with ${him}, walking along the club to a nice restaurant and then seeing a show before returning home for loving sex in your master bed. ${He} nestles under your arm, falling to sleep well before you, a contented smile on ${his} face. There's a reason ${he} gets to sleep much quicker than you do. You lie awake for some time, remembering the doubting and disapproving faces of other prosperous citizens whenever they realized that you were treating a slave as an equal this evening.`;
			}
		}

		function company() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`${He} giggles happily as you seize ${his} ${S.HeadGirl.skin} wrist and pull ${him} down to the floor. ${He} nestles under your desk, between your legs to serve you with ${his} mouth for a while, gently playing with ${his}`);
			if (canDoVaginal(S.HeadGirl) && canPenetrate(S.HeadGirl)) {
				r.push(`wonderfully strange bits`);
			} else if (canDoAnal(S.HeadGirl)) {
				r.push(`anus`);
			} else if ((S.HeadGirl.dick > 0) && !canAchieveErection(S.HeadGirl)) {
				r.push(`limp cock`);
			} else if (S.HeadGirl.dick > 0) {
				r.push(`hard cock`);
			} else if (S.HeadGirl.clit > 0) {
				r.push(`huge, hard clit`);
			} else if (S.HeadGirl.vagina > -1) {
				r.push(`soaking-wet cunt`);
			} else {
				r.push(`nipples`);
			}
			r.push(`and moaning into you. ${He}'s down there for a long time, so long that you climax twice. The third time ${he} softly sucks you`);
			if (V.PC.dick === 0) {
				r.push(`to full arousal,`);
			} else {
				r.push(`hard,`);
			}
			r.push(`it naturally takes a bit longer. When done, ${he} slithers up into your lap without obscuring your work, stroking you lightly with a hand the whole time — a miracle of dexterity. ${He} gently runs ${his} hips over your crotch a few times, giving`);
			if (V.PC.dick === 0) {
				r.push(`you`);
			} else {
				r.push(`your dickhead`);
			}
			r.push(`a nice tactile tour of everything ${he} has to offer,`);
			if (V.PC.dick === 0) {
				r.push(`before gently turning around to wrap ${his} legs around you and rub ${himself} against you until you climax a third time.`);
			} else {
				r.push(`before gently lowering ${his} butt onto your cock with a sigh. ${His} devoted ass brings you to orgasm a third time, and instead of getting up and off your softening dick, ${he} just relaxes into you and bends ${himself} backward so ${he} can nibble your neck and whisper ${his} adoration into your ear.`);
			}
			r.push(`It would be hard for ${him} to get much more trusting of you, <span class="trust inc">but ${he} does.</span>`);
			S.HeadGirl.trust += 4;
			seX(S.HeadGirl, "oral", V.PC, "penetrative");
			r.push(VCheck.Anal(S.HeadGirl, 1));
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function victimize() {
			const frag = new DocumentFragment();
			let r = [];
			const {
				His2,
				his2, him2,
			} = getPronouns(subSlave).appendSuffix("2");

			// art
			if (V.seeImages) {
				$(art).empty();
				App.Events.drawEventArt(art, [S.HeadGirl, subSlave], [null, "no clothing"]);
			}

			r.push(`${He} giggles happily as you seize ${his} ${S.HeadGirl.skin} wrist and pull ${him} towards where your other slaves are mostly already asleep. ${He} jokingly points out ${subSlave.slaveName}, fast asleep. You nod, and ${S.HeadGirl.slaveName} pounces. ${subSlave.slaveName} wakes in terror and confusion to find ${his2} head and neck pinned in a leg-lock that holds ${his2} mouth hard against ${S.HeadGirl.slaveName}'s`);
			if (canDoAnal(S.HeadGirl)) {
				r.push(`anus.`);
			} else if (canDoVaginal(S.HeadGirl) && canPenetrate(S.HeadGirl)) {
				r.push(`cock and cunt.`);
			} else if (S.HeadGirl.dick > 0 && !canAchieveErection(S.HeadGirl)) {
				r.push(`limp cock.`);
			} else if (S.HeadGirl.dick > 0 && S.HeadGirl.balls > 0 && S.HeadGirl.scrotum > 0) {
				r.push(`cock and balls.`);
			} else if (S.HeadGirl.clit > 0) {
				r.push(`huge, hard clit.`);
			} else if (!canDoVaginal(S.HeadGirl)) {
				r.push(`soft perineum.`);
			} else {
				r.push(`soaking-wet cunt.`);
			}
			r.push(`${subSlave.slaveName} only manages one kick of ${his2} legs before you pin them and ram yourself up ${his2} butt. ${His2} howl of protest, directed against ${S.HeadGirl.slaveName}'s privates, sends a shiver through your Head Girl.`);
			if (S.HeadGirl.lips > 70) {
				r.push(`"Oh pleathe make ${him2} moan, ${Master}," ${he} lisps through ${his} huge lips.`);
			} else if (S.HeadGirl.piercing.lips.weight+S.HeadGirl.piercing.tongue.weight > 2) {
				r.push(`"Oh pleathe make ${him2} moan, ${Master}," ${he} lisps through ${his} face full of piercings.`);
			} else {
				r.push(`"I love it when you make ${him2} moan, ${Master}," ${he} groans.`);
			}
			r.push(`Poor ${subSlave.slaveName}'s asshole takes quite a beating before ${S.HeadGirl.slaveName} finally convulses with naughty pleasure. Meanwhile, all around the nighttime rape, slaves have been woken by ${subSlave.slaveName}'s struggles. They realize how completely your Head Girl has involved ${himself} in your sexual pursuits and lie as still as they can.`);
			App.Events.addParagraph(frag, r);

			seX(subSlave, "oral", S.HeadGirl, "penetrative");
			seX(subSlave, "anal", V.PC, "penetrative");
			if (subSlave.anus === 0) {
				subSlave.anus = 1;
			}
			for (const slave of V.slaves) {
				slave.devotion += 4;
				slave.trust -= 4;
			}
			return frag;
		}
	}
};


code:
App.Events.pessMadamStrategy = class pessMadamStrategy extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => !!S.Madam,
			() => App.Entity.facilities.brothel.employeesIDs().size >= 5,
			() => S.Madam.actualAge >= 35 || V.AgePenalty === 0,
			() => S.Madam.skill.whoring >= 100
		];
	}

	execute(node) {
		const {
			He,
			he, his, him, himself
		} = getPronouns(S.Madam);
		App.Events.drawEventArt(node, S.Madam);

		App.Events.addParagraph(node, [
			`Your madam`,
			App.UI.DOM.slaveDescriptionDialog(S.Madam),
			`is a perceptive whore mistress. You are a clever and well-informed manager, of course, and ${V.assistant.name} is as well-informed as it is physically possible to be about anything that happens within ${his} sensor net, but the madam has special insight. ${He} sees more sex in person than anyone in the arcology, not excepting you, and may even know some of your brothel slaves better than you do. This certainly extends to their sexualities and skills; if ${he} ever has any doubts about any of them, ${he} usually fucks them ${himself} to get at the truth.`
		]);

		const choices = [];
		choices.push(new App.Events.Result(`Review ${his} charges' skills with ${him}`, review));
		choices.push(new App.Events.Result(`Talk over the whores' appearance and correct any deficiencies`, surgery, "This option will have incidental surgical costs"));

		App.Events.addResponses(node, choices);

		function review() {
			S.Madam.devotion += 4;
			for (const slave of V.slaves) {
				if (slave.assignment === "work in the brothel") {
					if (slave.skill.oral < 100) {
						slave.skill.oral += 5;
					} else if (slave.skill.anal < 100) {
						slave.skill.anal += 5;
					} else if (slave.skill.vaginal < 100 && slave.vagina > 0) {
						slave.skill.vaginal += 5;
					}
				}
			}
			return `You call ${S.Madam.slaveName} up to your office; ${he} enters with the clear anticipation of being thrown over your desk, but instead finds ${himself} sitting across it from you, taking part in a three-way strategy session between you and ${V.assistant.name}. The three of you carefully review the sexual advantages and disadvantages of each of ${his} whores. ${He} is properly deferential, but definitely has insight to offer about how many of them satisfy customers. With ${his} input, you put together a plan to address their deficiencies with instruction and hands-on correction.`;
		}

		function surgery() {
			S.Madam.devotion += 4;
			for (const slave of V.slaves) {
				if (slave.assignment === "work in the brothel") {
					if (slave.boobs < 400) {
						slave.boobs += 200;
						slave.boobsImplant += 200;
						if (slave.boobsImplantType === "none") {
							slave.boobsImplantType = "normal";
						}
						cashX(forceNeg(Math.trunc(200*V.upgradeMultiplierMedicine)), "slaveSurgery", slave);
					} else if (slave.butt < 3) {
						slave.butt += 1;
						slave.buttImplant += 1;
						if (slave.buttImplantType === "none") {
							slave.buttImplantType = "normal";
						}
						cashX(forceNeg(Math.trunc(200*V.upgradeMultiplierMedicine)), "slaveSurgery", slave);
					} else if (slave.face < 95 && slave.faceImplant <= 10) {
						slave.face = Math.clamp(slave.face+20, -100, 100);
						slave.faceImplant += 25-5*Math.trunc(V.PC.skill.medicine/100)-5*V.surgeryUpgrade;
						cashX(forceNeg(Math.trunc(200*V.upgradeMultiplierMedicine)), "slaveSurgery", slave);
					} else if (slave.waist > -10) {
						slave.waist -= 20;
						cashX(forceNeg(Math.trunc(200*V.upgradeMultiplierMedicine)), "slaveSurgery", slave);
					} else if (slave.visualAge > 35 && slave.ageImplant === 0 && slave.faceImplant <= 10) {
						applyAgeImplant(slave);
						slave.faceImplant += 25-5*Math.trunc(V.PC.skill.medicine/100)-5*V.surgeryUpgrade;
						cashX(forceNeg(Math.trunc(200*V.upgradeMultiplierMedicine)), "slaveSurgery", slave);
					} else if (slave.lips <= 40) {
						slave.lips += 10;
						slave.lipsImplant += 10;
						cashX(forceNeg(Math.trunc(200*V.upgradeMultiplierMedicine)), "slaveSurgery", slave);
					}
				}
			}
			return `You call ${S.Madam.slaveName} up to your office; ${he} enters with the clear anticipation of being thrown over your desk, but instead finds ${himself} sitting across it from you, taking part in a three-way inventory review with you and ${V.assistant.name}. The three of you carefully review the appearance of each of ${his} whores. ${He} is properly deferential, but definitely has insight to offer about how many of them appeal to customers. With ${his} input, you put together a plan to correct their deficiencies when they can be pulled out of a shift for a quick surgical improvement.`; // TODO: the fuck is a limegreen
		}
	}
};

repo_name: Banyanael/fc

license: mit


code:
App.Events.pessTiredCollectrix = class pessTiredCollectrix extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => !!S.Milkmaid,
			() => App.Entity.facilities.dairy.employeesIDs().size >= 5,
			() => S.Milkmaid.health.condition >= 70,
			() => canAchieveErection(S.Milkmaid),
			() => cumSlaves().length >= 5,
		];
	}

	execute(node) {
		const {
			He,
			he, his, him, himself
		} = getPronouns(S.Milkmaid);
		const {
			heP
		} = getPronouns(V.PC).appendSuffix("P");
		App.Events.drawEventArt(node, S.Milkmaid, "no clothing");

		App.Events.addParagraph(node, [
			`Your milkmaid`,
			App.UI.DOM.slaveDescriptionDialog(S.Milkmaid),
			`worked hard today. ${He}'s clearly exhausted, but ${he} seems to think it below ${him} to show the fatigue. ${He} holds ${his} chin level and ${his} shoulders square as ${he} heads to the bathroom to bathe before bed. After ${his} shower, ${he} inspects ${his} crotch closely before appearing to start masturbating. On closer inspection, however, ${he}'s very gently massaging analgesic lotion into ${his} cock, wincing a little as ${he} does so. ${He} starts a little when you enter the room, but relaxes when you tell ${him} to continue ${his} ministrations and let you know how ${he}'s feeling as ${he} does.`
		]);

		const r = [];
		if (canTalk(S.Milkmaid)) {
			const {say: say, title: Master} = getEnunciation(S.Milkmaid);
			r.push(
				Spoken(S.Milkmaid, `"${Master}, I've fucked a lot of assholes today. There's ${cumSlaves().length} cumslaves in the dairy, and I fucked them all up the butt at least once. Most of them more than once. My poor cock is a little sore, ${Master},"`),
				`${he} ${say}s.`
			);
		} else {
			r.push(`${He} indicates in amusingly graphic gestures that ${his} dick is sore. ${He} painstakingly counts on ${his} fingers, letting you know that ${he}'s fucked ${cumSlaves().length} assholes today, most of them more than once.`);
		}
		r.push(`With so many slaves getting cockmilked, ${he} certainly has to work hard to make sure none of them go unpenetrated.`);
		App.Events.addParagraph(node, r);

		App.Events.addResponses(node, [
			new App.Events.Result(`Use ${his} ass as ${he} looks after ${himself}`, useHim),
			new App.Events.Result(`Help ${him} with ${his} duties`, helpHim)
		]);

		function useHim() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Wordlessly, you`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`come up behind ${him}; the first thing to touch ${him} is`);
			if (V.PC.dick === 0) {
				r.push(`the phallus,`);
			} else {
				r.push(`your rapidly hardening dick,`);
			}
			r.push(`which pokes against`);
			if (S.Milkmaid.height >= 170) {
				r.push(`right up against ${his} asshole, since ${he}'s nice and tall enough for standing anal. ${He} gasps a little and angles ${his} hips to accept your cock.`);
			} else {
				r.push(`${his} lower back, since ${he}'s shorter than you. ${He} gasps a little and hikes ${himself} up on tiptoe to accept your cock.`);
			}
			r.push(`As ${he} feels you slide into ${his} body ${he} whimpers with devotion, turning ${his} upper body so ${he} can kiss ${his} ${getWrittenTitle(S.Milkmaid)} while ${heP} sodomizes ${him}.`);
			if (canTalk(S.Milkmaid)) {
				r.push(
					Spoken(S.Milkmaid, `"So this is how it feels when I do them,"`),
					`${he} whispers.`
				);
			} else {
				r.push(`${He} uses gestures to thank you for making ${him} feel like the milkers do.`);
			}
			r.push(`${He} uses the lotion to masturbate while ${he} takes it, wincing whenever ${he} loses control and squeezes ${his} sore cock too hard. When you're done ${he} sinks to the bathroom floor in a boneless pool of satisfied sexual exhaustion, dripping ejaculate from ${his} front${V.PC.dick === 0 ? "" : " and back"}.`);
			S.Milkmaid.devotion += 4;
			seX(S.Milkmaid, "anal", V.PC, "penetrative");
			App.Events.addParagraph(frag, r);
			return frag;
		}
		function helpHim() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`${S.Milkmaid.slaveName} is surprised to find you in the collection facility when ${he} gets there the next morning. Since you're already`);
			if (V.PC.dick === 0) {
				r.push(`using a strap-on to fuck`);
			} else {
				r.push(`balls deep in`);
			}
			r.push(`a whining milker's ass, ${he} understands immediately that you're there to help. ${He}'s gratified, and does ${his} best to make sure you have a good time. With so many slaves physically restrained to make their backdoors available, it's hard not to. ${S.Milkmaid.slaveName} does ${his} best to use a slave next to you so ${he} can be available for extra amusement at all times as the two of you sodomize away.`);
			S.Milkmaid.devotion += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.pessTiredMilkmaid = class pessTiredMilkmaid extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => !!S.Milkmaid,
			() => App.Entity.facilities.dairy.employeesIDs().size >= 5,
			() => S.Milkmaid.health.condition >= 70,
			() => S.Milkmaid.muscles > 5,
		];
	}

	execute(node) {
		const {
			He,
			he, his, him
		} = getPronouns(S.Milkmaid);
		App.Events.drawEventArt(node, S.Milkmaid, "no clothing");

		App.Events.addParagraph(node, [
			`Your milkmaid`,
			App.UI.DOM.slaveDescriptionDialog(S.Milkmaid),
			`worked hard today. The cows have it much easier than ${he} does, in many ways: all they have to do is give milk, while ${his} life is one of hard labor. Long after they're asleep, ${he}'s cleaning the dairy and getting ready for the next day. At long last ${he}'s done, and even though ${he}'s exhausted, ${he} takes a few minutes to thoroughly stretch ${his} aching body. ${He}'s a big girl, and the play of ${his} muscles across ${his} back as ${he} works out the kinks is quite eye-catching.`
		]);

		App.Events.addResponses(node, [
			new App.Events.Result(`Give ${him} a businesslike massage`, massage),
			new App.Events.Result(`Share a milk bath with ${him}`, bath)
		]);

		function massage() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`When ${he}`);
			if (canHear(S.Milkmaid)) {
				r.push(`hears you enter ${V.dairyName},`);
			} else {
				r.push(`realizes you've entered ${V.dairyName},`);
			}
			r.push(`${he} turns to you for instructions, but you wordlessly dismiss ${him} back to ${his} stretching. ${He} gets back to it, but is surprised to find ${his} shoulders seized by your powerful hands. ${He} shivers helplessly as you knead ${his} knotted muscles, whimpering with near-orgasmic delight as ${he} feels the day's aches ground away under your grip. When you're done with ${him}, ${he} touches ${his} toes and then smoothly rises to stretch with ${his} hands over ${his} head, groaning with sheer pleasure at the feeling.`);
			if (canTalk(S.Milkmaid)) {
				const {title: Master} =getEnunciation(S.Milkmaid);
				r.push(
					Spoken(S.Milkmaid, `"Thank you ${Master},"`),
					`${he} murmurs.`,
					Spoken(S.Milkmaid, `"Would — would you like to use my body, now?"`)
				);
			} else {
				r.push(`${He} thanks you profusely with gestures, and then hesitantly asks if you'd like to use ${his} body.`);
			}
			r.push(`You shake your head kindly and place a kiss on ${his} forehead before continuing with your evening. As ${he} watches you go, ${he} suppresses <span class="devotion inc">another shiver.</span>`);
			S.Milkmaid.devotion += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}
		function bath() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`When ${he}`);
			if (canHear(S.Milkmaid)) {
				r.push(`hears you enter ${V.dairyName},`);
			} else {
				r.push(`realizes you've entered ${V.dairyName},`);
			}
			r.push(`${he} turns to you for instructions, but you wordlessly dismiss ${him} back to ${his} stretching. ${He} gets back to it, but is mystified as ${he} watches you out of the corner of ${his} eye. The milk is held in a large tank before being filtered, pasteurized, and sold. You remove the lid from the tank and climb in. ${He} watches with incomprehension, but understanding dawns when you splash a little, demonstratively, and crook a finger at ${him}. ${He} gives you a deliciously naughty look and hurries to join you in the warm milk, giggling when you pull ${him} in with a slosh of creamy whiteness. ${He} doesn't break the surface after climbing in, kneeling under the milk to suck you off. ${He} has to surface periodically for breath, but the grin ${he} gives you each time makes up for it. ${He} manages to drag ${his} breasts`);
			if (V.PC.boobs >= 300) {
				r.push(`against yours`);
			} else {
				r.push(`up your front`);
			}
			r.push(`each time ${he} rises for air. When you climax, ${he} carefully swallows every drop to keep the filters from getting clogged. When ${he} surfaces for good, ${he} looks you in the eyes briefly before blushing and giving you a muscular hug.`);
			S.Milkmaid.trust += 4;
			seX(S.Milkmaid, "oral", V.PC, "penetrative");
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.pessWorriedHeadgirl = class pessWorriedHeadgirl extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.week > 20,
			() => !!S.HeadGirl,
			() => S.HeadGirl.devotion > 95,
			() => S.HeadGirl.trust > 95,
			() => S.HeadGirl.intelligence + S.HeadGirl.intelligenceImplant > 50
		];
	}

	execute(node) {
		const {
			He, His,
			he, his, him, himself, girl, woman, hers
		} = getPronouns(S.HeadGirl);
		const {title:Master} = getEnunciation(S.HeadGirl);

		App.Events.drawEventArt(node, S.HeadGirl);

		App.Events.addParagraph(node, [
			`Your Head Girl`,
			App.UI.DOM.slaveDescriptionDialog(S.HeadGirl),
			`comes to find you for a routine meeting at the end of the day, and finds your office empty. You're out on its balcony, looking out into the night from the immense height of the arcology's uppermost levels. ${He} comes outside to meet you, notices your reverie, and follows your gaze. Out there, most of the way to the horizon, there's a lightshow underway. In more peaceful times it might have been mistaken for fireworks, but it's not.`
		]);
		App.Events.addParagraph(node, [
			`As the two of you stand there watching, strings of red lights begin to trace lines up into the sky. The guns are manually aimed, to go by their jerky arcs of fire, and they're hopelessly ineffective. Their target comes and goes, unseen and unheard at this distance, the only evidence of its passage a flash of light from the target area followed by a low thump that takes a long time to reach you. The commotion is outside the Free City your arcology is part of, and is of little concern: just a minor dispute of the kind becoming more and more common outside your island of safety and security.`
		]);
		let r = [];
		r.push(`You notice a warmth at your side. ${S.HeadGirl.slaveName} has edged a bit closer to you, and shivers as you glance at ${him}. ${He} crosses ${his} arms`);
		if (S.HeadGirl.boobs > 3000) {
			r.push(`under ${his} massive tits, lifting them a bit as ${he} snuggles ${his} arms into the warm cavern they create against ${his} stomach.`);
		} else if (S.HeadGirl.boobs > 1000) {
			r.push(`over ${his} big boobs, pressing them a bit flatter against ${his} chest as ${he} hugs ${himself}.`);
		} else if (S.HeadGirl.boobs > 400) {
			r.push(`over ${his} breasts, pressing them against ${his} chest as ${he} hugs ${himself}.`);
		} else {
			r.push(`over ${his} chest, hugging ${his} own shoulders and rocking back and forth a little.`);
		}
		r.push(
			Spoken(S.HeadGirl, `"It's very bad out there, isn't it, ${Master}."`),
			`It isn't really a question, but you nod.`,
			Spoken(S.HeadGirl, `"I'm glad I'm here with you,"`),
			`${he} continues,`,
			Spoken(S.HeadGirl, `"and I would be even if I didn't love you."`),
			`${He} nestles in closer to you,`
		);
		if (S.HeadGirl.height >= 185) {
			r.push(`the tall`);
			if (S.HeadGirl.physicalAge > 30) {
				r.push(`${woman}'s`);
			} else {
				r.push(`${girl}'s`);
			}
			r.push(`shoulder brushing against yours.`);
		} else if (S.HeadGirl.hips > 1) {
			r.push(`${his} broad, motherly hips brushing against your thigh.`);
		} else {
			r.push(`the shorter`);
			if (S.HeadGirl.physicalAge > 30) {
				r.push(`${woman}`);
			} else {
				r.push(`${girl}`);
			}
			r.push(`fitting neatly against your side.`);
		}
		r.push(Spoken(S.HeadGirl, `"${Master}, I don't know if the other slaves know how lucky they are, to be safe here."`));
		App.Events.addParagraph(node, r);

		App.Events.addResponses(node, [
			new App.Events.Result(`Trust ${him} to tell them`, trust),
			new App.Events.Result(`${He}'s more important`, important)
		]);

		function trust() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You tell ${him} that you're sure ${he}'ll let them know, since ${he} understands the situation and knows them all well. ${His}`);
			if (S.HeadGirl.visualAge > 35) {
				r.push(`mature`);
			} else if (S.HeadGirl.face > 40) {
				r.push(`lovely`);
			} else {
				r.push(`attentive`);
			}
			r.push(`face flicks`);
			if (S.HeadGirl.height >= 185) {
				r.push(`over`);
			} else {
				r.push(`up`);
			}
			r.push(`to look at you, ${his} ${App.Desc.eyesColor(S.HeadGirl)} glittering at the compliment. "Thank you, ${Master}," ${he} murmurs. There's another flash on the horizon, followed by a series of smaller flashes and a low, slowly growing glow as secondaries go off and start a fire. ${S.HeadGirl.slaveName} seems affected, a certain amount of moisture gathering in ${his} eyes, but ${he} turns away to return to ${his} duties when it becomes clear that you intend to keep watching for a while, and aren't going to have sex with ${him} right this minute. ${He} does ${his} best to communicate the new reality to those of your slaves who are obedient enough to understand the truth: though they are slaves, there is safety to be found in slavery.`);
			for (const slave of V.slaves) {
				if (slave.devotion > 20) {
					slave.trust += 1;
				}
			}
			S.HeadGirl.devotion += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function important() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You shift to stand behind ${him}, your`);
			if (V.PC.boobs >= 300) {
				r.push(`breasts`);
				if (V.PC.boobsImplant > 0) {
					r.push(`firm`);
				} else {
					r.push(`soft`);
				}
				r.push(`and sensual`);
			} else {
				r.push(`chest hard and masculine`);
			}
			r.push(`but not insistently sexual against ${his}`);
			if (S.HeadGirl.muscles > 30) {
				r.push(`muscular`);
			} else if (S.HeadGirl.weight > 10) {
				r.push(`soft`);
			} else {
				r.push(`warm`);
			}
			r.push(`back. You wrap your arms around ${him}, over ${his} own, each of your`);
			if (V.PC.title === 1) {
				r.push(`strong`);
			} else {
				r.push(`feminine`);
			}
			r.push(`hands finding and clasping one of ${hers}.`);
			if (S.HeadGirl.boobs > 3000) {
				r.push(`${His} incredible boobs rest heavily over the top of both of your arms.`);
			}
			r.push(`${He} knows you very well, and shifts ${his} torso ever so slightly from side to side, snuggling in a little closer to you to let you know ${he}'s comfortable and available without being demanding or needy. You speak quietly, your voice a reassuring`);
			if (V.PC.boobs === 0) {
				r.push(`rumble`);
			} else {
				r.push(`hum`);
			}
			r.push(`${he} feels against ${his} back${canHear(S.HeadGirl) ? " as well as hears" : ""}. You let ${him} know that ${he} has a place with you, and ${he} always will. You let ${him} know that you're worried too, and that you don't know what the future will bring. But you do know that ${he}'ll be by your side as you meet it. A silent shake in the pretty`);
			if (S.HeadGirl.physicalAge > 30) {
				r.push(`${woman}`);
			} else {
				r.push(`${girl}`);
			}
			r.push(
				`you've got in your arms is your only indication that <span class="mediumaquamarine">${he}'s crying a little</span> as ${he} whispers,`,
				Spoken(S.HeadGirl, `"Thank you, ${Master}. I'll do my best."`)
			);
			S.HeadGirl.trust += 5;
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.pessWorshipfulImpregnatrix = class pessWorshipfulImpregnatrix extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.week > 20,
			() => !!S.HeadGirl,
			() => canPenetrate(S.HeadGirl),
			() => S.HeadGirl.balls > 0,
			() => S.HeadGirl.devotion > 95,
			() => V.universalRulesImpregnation === "HG"
		];
	}

	execute(node) {
		const {
			He, His,
			he, his, him, himself,
		} = getPronouns(S.HeadGirl);
		const {title: Master} = getEnunciation(S.HeadGirl);
		const desc = SlaveTitle(S.HeadGirl);
		App.Events.drawEventArt(node, S.HeadGirl);

		App.Events.addParagraph(node, [
			App.UI.DOM.slaveDescriptionDialog(S.HeadGirl),
			`comes wearily into your office at the end of ${his} day to check in with you, like a good Head Girl should. You're busy at the moment, so ${he} waits quietly, not wanting to interrupt you. ${He} seems tired, and leans`
		]);
		let r = [];
		if (S.HeadGirl.physicalAge > 35) {
			r.push(`heavily`);
		} else {
			r.push(`lightly`);
		}
		r.push(`against the back of the office couch${hasAnyProstheticArms(S.HeadGirl) ? `, ${his} mechanical hand hard against the leather` : ``}. Your Head Girl is a`);
		if (S.HeadGirl.fetish === "dom") {
			r.push(`very dominant ${desc},`);
		} else if (S.HeadGirl.fetish === "sadist") {
			r.push(`sadistic and dominant ${desc},`);
		} else {
			r.push(`dutiful ${desc} and takes ${his} leadership position seriously,`);
		}
		r.push(`but ${he} knows ${he} doesn't have to pretend to be invincible around you.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`When you've finished your task, you raise your eyes to examine ${him}. ${He}'s standing with ${his}`);
		if (S.HeadGirl.hips > 1) {
			r.push(`broad`);
		} else if (S.HeadGirl.hips < -1) {
			r.push(`narrow`);
		} else {
			r.push(`womanly`);
		}
		r.push(`hips slightly cocked and ${his}`);
		if (S.HeadGirl.muscles > 95) {
			r.push(`incredibly muscular`);
		} else if (S.HeadGirl.weight > 10) {
			r.push(`soft`);
		} else if (S.HeadGirl.muscles > 10) {
			r.push(`hard`);
		} else {
			r.push(`trim`);
		}
		r.push(`thighs bowed a bit wide. You immediately understand why: it's ${his} job to impregnate fertile slaves, a duty ${he} takes very seriously, and ${his} dick must be very sore.`);
		const exposure = App.Data.clothes.get(S.HeadGirl.clothes).exposure;
		if (exposure >= 4) {
			r.push(`${He}'s nude, making it obvious that ${his} poor soft member has done its duty today. It even looks a little moist, as though it bred a fertile slave's pussy only a few minutes ago.`);
		} else if (exposure === 3) {
			r.push(`${His} clothes don't cover ${his} dick, making it obvious that ${his} poor soft member has done its duty today. It even looks a little moist, as though it bred a fertile slave's pussy only a few minutes ago.`);
		} else if (exposure === 2) {
			r.push(`${His} clothes cover ${his} groin, but they're pretty tight, making it clear that ${his} poor soft member has done its duty today.`);
		} else {
			r.push(`${His} clothes are relatively modest, so you can't see it, but it's clear that ${his} poor soft member has done its duty today.`);
		}
		r.push(`${He} sees you examining at ${him}, and looks back at you submissively, too tired to do much else.`);
		App.Events.addParagraph(node, r);

		App.Events.addResponses(node, [
			new App.Events.Result(`Fuck ${him}`, fuck),
			new App.Events.Result(`Give ${him} some loving praise`, praise)
		]);

		function fuck() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You stand up, and from the look on your face, ${he} knows it's ${his} turn to get fucked. ${He}`);
			if (S.HeadGirl.fetish === "dom") {
				r.push(`visibly shelves ${his} dominance,`);
			} else if (S.HeadGirl.fetish === "sadist") {
				r.push(`visibly lets ${his} sadism go,`);
			} else {
				r.push(`softens visibly,`);
			}
			r.push(`looking relieved to be able to let someone else lead. You give ${him} a lustful kiss on the lips and then reach down, taking hold of ${his} thigh and spinning ${him} around, raising ${his} leg so ${his} foot's on the arm of the couch.`);
			if (V.PC.dick !== 0) {
				r.push(`You slide your dick`);
			} else {
				r.push(`${He} reaches under ${himself} and back to stroke your pussy as you press your hips against ${him}, and you slide your fingers`);
			}
			r.push(`inside ${his}`);
			if (canDoVaginal(S.HeadGirl)) {
				r.push(`pussy.`);
			} else {
				r.push(`ass.`);
			}
			r.push(`${He} groans with discomfort as ${his} overtaxed dick tries and fails to become hard again, but relaxes as`);
			if (V.PC.dick !== 0) {
				r.push(`cockhead`);
			} else {
				r.push(`fingertips`);
			}
			r.push(`stimulate the most sensitive place inside ${him}, producing arousal that obscures the soreness. You hold ${him} close,`);
			if (V.PC.dick !== 0) {
				r.push(`one`);
			} else {
				r.push(`your free`);
			}
			r.push(`arm`);
			if (S.HeadGirl.boobs > 4000) {
				r.push(`cradling one of ${his} udders`);
			} else if (S.HeadGirl.boobs > 1000) {
				r.push(`hefting one of ${his} heavy breasts`);
			} else if (S.HeadGirl.boobs > 400) {
				r.push(`holding one of ${his} boobs`);
			} else {
				r.push(`cupped over one of ${his} ${S.HeadGirl.nipples} nipples`);
			}
			r.push(`and hugging ${him} against your`);
			if (V.PC.boobs >= 300) {
				r.push(`bosom.`);
			} else {
				r.push(`hard chest.`);
			}
			r.push(
				`${He} pants exhaustedly in your arms as you take ${him}, and when ${he} climaxes, ${he} manages only a weak ejaculation onto the couch. You have mercy and fuck ${him} harder, bringing yourself to a quicker orgasm and letting ${him} fall into ${his} own mess.`,
				Spoken(S.HeadGirl, `"I`),
				App.UI.DOM.makeElement("span", Spoken(S.HeadGirl, "love you,"), ["devotion", "inc"]),
				Spoken(S.HeadGirl, `${Master},"`),
				`${he} mumbles into the cushions.`
			);
			if (V.PC.dick !== 0) {
				r.push(`Your cum glistens as it begins to drip out of ${his}`);
				if (canDoVaginal(S.HeadGirl)) {
					r.push(`well-fucked pussy.`);
				} else {
					r.push(`loosened asshole, which tightens and relaxes a little with ${his} breathing.`);
				}
			} else {
				if (canDoVaginal(S.HeadGirl)) {
					r.push(`${His} pussy glistens with ${his} pussyjuice and a little of your own, transferred between your hands as you fucked.`);
				} else {
					r.push(`${His} loosened asshole tightens and relaxes a little with ${his} breathing.`);
				}
			}
			r.push(`${He} seems to have absorbed a bit of your approach, and over the next couple of days ${he} drives ${himself} past all ${his} limitations of sexual stamina when fucking slaves in your penthouse, Every single one of your slaves has become better broken to your will.`);
			if (canDoVaginal(S.HeadGirl)) {
				seX(S.HeadGirl, "vaginal", V.PC, "penetrative");
			} else {
				seX(S.HeadGirl, "anal", V.PC, "penetrative");
			}
			S.HeadGirl.devotion += 5;
			for (const slave of V.slaves) {
				if (assignmentVisible(slave)) {
					slave.devotion += 2;
				}
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function praise() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You stand up, give ${him} a kiss, and sit down on the couch, pulling ${him} into your lap. ${His}`);
			if (S.HeadGirl.butt > 8) {
				r.push(`monstrous ass rests heavily on`);
			} else if (S.HeadGirl.muscles > 30) {
				r.push(`heavily muscled ass is hard against`);
			} else if (S.HeadGirl.weight > 10) {
				r.push(`plush bottom is soft against`);
			} else if (S.HeadGirl.muscles > 10) {
				r.push(`toned butt is firm against`);
			} else if (S.HeadGirl.butt > 3) {
				r.push(`healthy butt is soft against`);
			} else {
				r.push(`cute bottom is firm against`);
			}
			r.push(`your toned thighs. ${He} wiggles ${himself} against you briefly, as though to gently remind you ${he}'s available without demanding anything, and then snuggles ${his} ${S.HeadGirl.skin} face into your neck. You run a hand`);
			if (S.HeadGirl.hLength === 0) {
				r.push(`across ${his} bald head,`);
			} else if (S.HeadGirl.hLength < 10) {
				r.push(`through ${his} short hair,`);
			} else {
				r.push(`through ${his} ${S.HeadGirl.hColor} hair,`);
			}
			r.push(`producing a shiver of pleasure as your fingers massage ${his} scalp. As you cuddle with your Head Girl, you praise ${his} hard work, and tell ${him} that the next generation of sex slaves in the Free Cities will owe a lot to ${him}. They'll learn from ${his} leadership, of course, but they'll also have ${his} genes. ${He} stiffens a little, and there's a slight moisture against your skin as tears begin to run down ${his} cheeks. ${He} cranes ${his} neck up and kisses you rapturously. ${He} seems to have absorbed a bit of your vision for the future, and over the next couple of days ${he} takes special care to make sure the slaves in your penthouse know their place in the new world you're building.`);
			S.HeadGirl.devotion += 5;
			for (const slave of V.slaves) {
				if (assignmentVisible(slave)) {
					slave.trust += 2;
				}
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.petsAggressiveSchoolteacher = class petsAggressiveSchoolteacher extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => !!S.Schoolteacher,
			() => S.Schoolteacher.intelligence + S.Schoolteacher.intelligenceImplant > 15,
			() => S.Schoolteacher.actualAge >= 35
		];
	}

	actorPrerequisites() {
		return [[
			s => s.assignment === Job.CLASSES
		]];
	}

	execute(node) {
		const subSlave = getSlave(this.actors[0]);
		const {
			he, his, him
		} = getPronouns(S.Schoolteacher);
		const {
			He2,
			he2, his2, him2
		} = getPronouns(subSlave).appendSuffix("2");

		App.Events.drawEventArt(node, [S.Schoolteacher, subSlave]);

		App.Events.addParagraph(node, [
			`${subSlave.slaveName} is at the head of the class. In this case, the literal head of the class; ${he2} has been performing poorly at ${his2} studies, so`,
			App.UI.DOM.slaveDescriptionDialog(S.Schoolteacher),
			`has ${him2} under the teacher's desk, giving ${S.Schoolteacher.slaveName} oral. ${S.Schoolteacher.slaveName} is continuing the lesson, giving little indication ${he}'s being orally serviced. The other students are doing their best to look attentive, lest they be required to replace ${subSlave.slaveName} under the teacher's desk.`
		]);

		App.Events.addResponses(node, [
			new App.Events.Result(`Encourage the schoolteacher to abuse poor students`, encourage),
			new App.Events.Result(`Take the delinquent student in hand`, personal)
		]);

		function encourage() {
			App.Entity.facilities.schoolroom.employees().forEach(function(s) {
				if (s.intelligenceImplant < 30) {
					s.intelligenceImplant += 0.1;
					s.counter.oral += 1;
					V.oralTotal += 1;
				}
			});
			return `You lean against the doorway of the classroom. ${S.Schoolteacher.slaveName} glances at you, but you subtly let ${him} know to continue with ${his} business. When ${he} finishes the lesson and, around the same time, climaxes, you clear your throat. The students all start with surprise and turn to you with trepidation. You observe in a conversational tone of voice that ${S.Schoolteacher.slaveName} is making great sacrifices here, performing an unsexy, boring job, and that any slave that does not work hard to learn will find themselves at the teacher's sexual disposal. Several of the least attentive students try to look studious, though a few of the better ones can't hide a certain anticipation.`;
		}

		function personal() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`When ${S.Schoolteacher.slaveName} finishes using ${subSlave.slaveName}'s mouth, ${subSlave.slaveName} crawls out from under ${his2} desk and stumbles back towards ${his2} seat. ${He2} stops short when ${he2} realizes you're sitting in it. All the other students do their absolute best to be perfectly studious as ${subSlave.slaveName} gets back`);
			if (hasBothLegs(subSlave)) {
				r.push(`to ${his2} knees,`);
			} else {
				r.push(`in position,`);
			}
			r.push(`for you this time. After class is over, you tell ${him2} that since ${he2} can't have been paying particularly good attention, ${he2}'ll have to take remedial classes after everyone else is done. ${S.Schoolteacher.slaveName} gives ${subSlave.slaveName} a very thorough grope at 'remedial classes,' making sure to pinch ${his} student's nipples.`);
			seX(subSlave, "oral", S.Schoolteacher, "penetrative");
			if (subSlave.intelligenceImplant < 29.5) {
				subSlave.intelligenceImplant += 0.5;
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.petsAggressiveWardeness = class petsAggressiveWardeness extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => !!S.Wardeness,
			() => canTalk(S.Wardeness)
		];
	}

	actorPrerequisites() {
		return [[
			s => s.assignment === Job.CELLBLOCK
		]];
	}

	execute(node) {
		const subSlave = getSlave(this.actors[0]);
		const {
			He,
			he, his, him, himself
		} = getPronouns(S.Wardeness);
		const {
			He2,
			he2, his2, him2
		} = getPronouns(subSlave).appendSuffix("2");
		App.Events.drawEventArt(node, [S.Wardeness, subSlave]);

		App.Events.addParagraph(node, [
			`As you pass the entrance to the hall of cells where`,
			App.UI.DOM.slaveDescriptionDialog(S.Wardeness),
			`breaks bitches late one night, you hear some muffled cursing, followed by moans. Curious, you lean into the one cell with an open door and are treated to the sight of ${S.Wardeness.slaveName} holding`,
			App.UI.DOM.combineNodes(contextualIntro(S.Wardeness, subSlave, true), `'s head`),
			`${hasBothLegs(S.Wardeness) ? `between ${his} legs` : `at ${his} groin`}, receiving what is very obviously non-consensual oral sex. ${S.Wardeness.slaveName} is clearly enjoying ${himself}, but gathers ${himself} together and greets you properly, without stopping.`
		]);

		App.Events.addParagraph(node, [
			Spoken(S.Wardeness, `"Told this whore I wasn't turning the lights off in ${his2} cell until ${he2} got me off. ${He2} can't sleep with 'em on, and bitches do anything for a little sleep,"`),
			`${he} explains.`
		]);

		const choices = [];
		choices.push(new App.Events.Result(`Encourage the use of sleep deprivation as a breaking tool`, encourage));
		choices.push(new App.Events.Result(`Have a quiet word with the Wardeness about prisoners' health`, quiet));
		if (subSlave.anus > 0 && canDoAnal(subSlave)) {
			choices.push(new App.Events.Result(`The prisoner will take it up the butt, too, if ${he2} wants sleep`, upButt));
		}
		if (subSlave.vagina > 0 && canDoVaginal(subSlave)) {
			choices.push(new App.Events.Result(`The prisoner will take it up the pussy, too, if ${he2} wants sleep`, upVag));
		}
		App.Events.addResponses(node, choices);

		function encourage() {
			V.slaves.forEach(function(s) {
				if (s.assignment === Job.CELLBLOCK) {
					s.devotion += 10;
					healthDamage(s, 10);
				}
			});
			return `You let ${S.Wardeness.slaveName} know that as far as you're concerned, sleep is a privilege, not a right. ${He} grins evilly and grinds ${himself} into ${subSlave.slaveName}'s mouth harder. The poor prisoner ${canHear(subSlave) ? `heard you, of course` : `realizes why ${S.Wardeness.slaveName} has increased ${his} brutality`}, and begins to produce muffled sobs as ${he2} realizes what this means for ${him2}. ${S.Wardeness.slaveName} reaches down and caresses ${his2} cheek. "There, there," ${he} croons. "It's not rape if you do it in return for something." All the prisoners are all that much more broken this week, though sleep deprivation isn't healthy.`;
		}

		function quiet() {
			V.slaves.forEach(function(s) {
				if (s.assignment === Job.CELLBLOCK) {
					improveCondition(s, 10);
				}
			});
			return `You let ${S.Wardeness.slaveName} finish using ${subSlave.slaveName}'s mouth, turn off the lights in ${his2} cell, and then meet ${him} outside. It won't do to undermine ${him} in front of the prisoners. You offer a few choice remarks on the value of ${his} charges to you and the potential effects of sleep deprivation, and point out that ${he} is a poor Wardeness if ${he} cannot break slaves without taking measures that may damage their health. ${He}'s clearly filled with remorse, begs your forgiveness, and manages to break slaves just as effectively this week while taking better care of their health.`;
		}

		function upButt() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You silently interrupt ${S.Wardeness.slaveName} and indicate that ${he} should sit down on the cell's bed without letting ${subSlave.slaveName}'s head out from between ${his} legs. ${He} sits down with a thump, dragging the struggling ${subSlave.slaveName} with ${him}. You`);
			if (V.PC.dick === 0) {
				r.push(`pull on a strap-on, and then`);
			}
			r.push(`seize ${subSlave.slaveName}'s hips and hoist them into the air, giving ${him2} a horrible second of anticipation as you manhandle`);
			if (V.PC.dick === 0) {
				r.push(`the cruelly large phallus`);
			} else {
				r.push(`your cock`);
			}
			r.push(`into place. ${He2} gives a strangled squeal of protest at the feeling of you pushing your way inexorably up ${his2} poor anus, making ${S.Wardeness.slaveName} jerk with surprise at the sensation of ${subSlave.slaveName} howling into ${his} crotch. Twenty minutes later, you and ${S.Wardeness.slaveName} leave ${him2} quiescent on the floor of the cell. After ${he} locks the door after ${himself}, ${S.Wardeness.slaveName} can't resist the urge to offer you a cheerful high-five.`);
			S.Wardeness.devotion += 10;
			subSlave.devotion += 4;
			seX(subSlave, "oral", S.Wardeness, "penetrative", 2);
			seX(subSlave, "anal", V.PC, "penetrative", 1);
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function upVag() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You silently interrupt ${S.Wardeness.slaveName} and indicate that ${he} should sit down on the cell's bed without letting ${subSlave.slaveName}'s head out from between ${his} legs. ${He} sits down with a thump, dragging the struggling ${subSlave.slaveName} with ${him}. You`);
			if (V.PC.dick === 0) {
				r.push(`pull on a strap-on, and then`);
			}
			r.push(`seize ${subSlave.slaveName}'s hips and hoist them into the air, giving ${him2} a horrible second of anticipation as you manhandle`);
			if (V.PC.dick === 0) {
				r.push(`the cruelly large phallus`);
			} else {
				r.push(`your cock`);
			}
			r.push(`into place. ${He2} gives a strangled squeal of protest at the feeling of you pushing your way inexorably up ${his2} poor pussy, making ${S.Wardeness.slaveName} jerk with surprise at the sensation of ${subSlave.slaveName} howling into ${his} crotch. Twenty minutes later, you and ${S.Wardeness.slaveName} leave ${him2} quiescent on the floor of the cell. After ${he} locks the door after ${himself}, ${S.Wardeness.slaveName} can't resist the urge to offer you a cheerful high-five.`);
			S.Wardeness.devotion += 10;
			subSlave.devotion += 4;
			seX(subSlave, "oral", S.Wardeness, "penetrative", 2);
			seX(subSlave, "vaginal", V.PC, "penetrative", 1);
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.petsComfortingAttendant = class petsComfortingAttendant extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => !!S.Attendant,
			() => canTalk(S.Attendant)
		];
	}

	actorPrerequisites() {
		return [[
			s => s.assignment === Job.SPA
		]];
	}

	execute(node) {
		const subSlave = getSlave(this.actors[0]);
		const {
			He,
			he, his, him, himself
		} = getPronouns(S.Attendant);
		const {title: Master} = getEnunciation(S.Attendant);
		const {
			He2,
			he2, his2, him2
		} = getPronouns(subSlave).appendSuffix("2");

		App.Events.drawEventArt(node, [S.Attendant, subSlave]);
		let r = [];
		r.push(`You decide to knit up care's raveled sleave with a break in the spa. You have your own bath, of course, but the`);
		if (V.seeDicks !== 100) {
			r.push(`female`);
		}
		r.push(
			`company is always nice even if you aren't actively using the spa's resting inhabitants. The steam in the warm pool room is turned up very high, and you can hardly see. As you lower yourself into the warm water, you see`,
			contextualIntro(V.PC, S.Attendant, true),
			`across from you, sitting in the water against the pool wall. ${He}'s holding`,
			contextualIntro(S.Attendant, subSlave, true),
			`in ${his} arms, rubbing a comforting hand up and down ${his2} back and murmuring into ${his2} ear. ${subSlave.slaveName} has ${his2} head`);
		if (S.Attendant.boobs > 2000) {
			r.push(`almost hidden between ${S.Attendant.slaveName}'s massive tits,`);
		} else if (S.Attendant.boobs > 1000) {
			r.push(`between ${S.Attendant.slaveName}'s huge boobs,`);
		} else if (S.Attendant.boobs > 300) {
			r.push(`between ${S.Attendant.slaveName}'s breasts,`);
		} else {
			r.push(`against ${S.Attendant.slaveName}'s flat chest,`);
		}
		r.push(`but it's a nonsexual embrace. You can't hear what ${S.Attendant.slaveName} is saying, but it's clearly comforting; ${subSlave.slaveName} has a happy little smile on ${his2} face and has ${his2} eyes closed in relaxation.`);

		App.Events.addParagraph(node, r);

		const choices = [];
		choices.push(new App.Events.Result(`Meet with the Attendant later to see if the slave ${he}'s helping can be assisted further`, assist));
		choices.push(new App.Events.Result(`Leave the matter between the Attendant and the slave ${he}'s helping`, leave));

		App.Events.addResponses(node, choices);

		function assist() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You meet ${S.Attendant.slaveName} after ${subSlave.slaveName} leaves. ${He} likes to take a cool shower after spending time in the steam, so you get under the refreshing water with ${him}, encircling ${his}`);
			if (S.Attendant.weight > 10) {
				r.push(`plush`);
			} else {
				r.push(`taut`);
			}
			r.push(`midriff with your arms and giving ${him} a hug before asking ${him} about ${subSlave.slaveName}. In ${S.Attendant.slaveName}'s opinion, there's nothing really wrong with ${him2}: ${he2}'s just having a little trouble accepting different expectations about human interactions.`,
				Spoken(S.Attendant, `"${He2} just needs a little help accepting that ${he2}'s a slave and it's ${his2} place to serve you, ${Master},"`),
				`${he} says.`,
				Spoken(S.Attendant, `"Like I have!"`),
				`${He} wriggles around in your arms and plants a wet kiss on your nose. ${He}'s clean now, so you release ${him} and ${he} steps over to ${his} towel. As ${he} does, you land a wet slap on ${his}`);
			if (S.Attendant.butt > 5) {
				r.push(`massive`);
			} else if (S.Attendant.butt > 3) {
				r.push(`big`);
			} else {
				r.push(`nice`);
			}
			r.push(`butt, eliciting a <span class="devotion inc">delighted</span> squeal. You use the information to <span class="devotion inc">subtly address</span> ${subSlave.slaveName}'s unhappiness.`);
			S.Attendant.devotion += 4;
			subSlave.devotion += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function leave() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(
				`You let ${S.Attendant.slaveName} deal with ${subSlave.slaveName}'s troubles; after a short time ${he} sends ${subSlave.slaveName} off to shower, and submerges, swimming over to you under the water. ${He} pokes out of the water, comically letting a huge mouthful of the warm, healthy mineral water run out of ${his} mouth in a stream before giggling at ${himself} and smiling at you.`,
				Spoken(S.Attendant, `"${Master}, would you like me to tell you about ${subSlave.slaveName}?"`),
				`${he} asks. You shake your head, and tell ${him} no, you trust ${him} to do ${his} best to heal anything that ails ${his} charges. ${He} looks at you with huge ${App.Desc.eyesColor(S.Attendant)} for a long moment before throwing ${his}`
			);
			if (S.Attendant.weight > 10) {
				r.push(`plush`);
			} else {
				r.push(`taut`);
			}
			r.push(
				`body into your arms. ${He} looks up at you and asks incredulously,`,
				Spoken(S.Attendant, `"${Master}, you trust me?"`),
				`You nod. ${He} looks shocked but kisses you and drops back down under the water. You feel the lovely sensation of ${his}`
			);
			if (S.Attendant.lips > 70) {
				r.push(`massive`);
			} else if (S.Attendant.lips > 40) {
				r.push(`pillowlike`);
			} else {
				r.push(`nice`);
			}
			r.push(`lips`);
			if (V.PC.vagina !== -1) {
				r.push(`nibbling their way up towards your clit,`);
			} else {
				r.push(`forming a seal around your dickhead,`);
			}
			r.push(`and although ${he} has to come up periodically for air, ${he} gives you quite a <span class="devotion inc">loving</span> blowjob.`);
			S.Attendant.devotion += 10;
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.petsNurseMolestation = class petsNurseMolestation extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => !!S.Nurse,
			() => (S.Nurse.energy > 95 || (S.Nurse.fetishStrength > 60 && (S.Nurse.fetish === "sadist" || S.Nurse.fetish === "dom")))
		];
	}

	actorPrerequisites() {
		return [[
			s => s.anus !== 0,
			s => s.assignment === Job.CLINIC
		]];
	}

	execute(node) {
		const subSlave = getSlave(this.actors[0]);
		let r = [];
		const {
			He, His,
			he, his, him, himself
		} = getPronouns(S.Nurse);
		const {
			He2,
			he2, his2, him2,
		} = getPronouns(subSlave).appendSuffix("2");
		const {title: Master} = getEnunciation(S.Nurse);

		App.Events.drawEventArt(node, [S.Nurse, subSlave], [null, "no clothing"]);

		r.push(
			`Late at night, you decide to walk through the clinic to look over its patients personally. As soon as you enter the space, left dimly lit at night to encourage sleep, you hear a quiet moaning and the distinct noise of flesh on flesh. Heading over towards that area, you note the noise is coming from where ${subSlave.slaveName} is listed as resting. Appearing quietly, you see`,
			App.UI.DOM.slaveDescriptionDialog(S.Nurse),
			`between ${his} patient's`
		);
		if (hasBothLegs(subSlave)) {
			r.push(`legs,`);
		} else {
			r.push(`hips,`);
		}
		r.push(`which are spread wide by the stirrups provided with each patient bed for examination of a slave's holes.`);
		App.Events.addParagraph(node, r);

		r = [];
		if (canPenetrate(S.Nurse)) {
			r.push(`${He}'s pounding eagerly away and mauling ${his} patient's bare boobs with both hands.`);
			seX(S.Nurse, "penetrative", subSlave, "mammary");
		} else {
			r.push(`${He}'s using one hand to fingerfuck ${his} patient, and the other to masturbate furiously.`);
			seX(S.Nurse, "penetrative", subSlave, "anal");
		}
		r.push(`Moaning in sexual abandon, ${he}'s obviously unaware that ${he}'s being watched. ${subSlave.slaveName} is oddly quiescent. You silently query the Clinic's systems, and learn that ${he2}'s under curative sedation. The advanced curatives applied here often improve slaves' health more quickly if a slave is mildly sedated to let them work. ${S.Nurse.slaveName} has obviously decided to use the almost unconscious ${subSlave.slaveName} for ${his} own gratification.`);
		App.Events.addParagraph(node, r);

		const choices = [];
		choices.push(new App.Events.Result(`Punish ${him} for molesting patients`, punish));

		if (canDoVaginal(S.Nurse) || canDoAnal(S.Nurse)) {
			choices.push(new App.Events.Result(`Rape ${him} for molesting patients`, rape));
			choices.push(new App.Events.Result(`Have sex with ${him} while ${he} molests the patient`, sex));
		}

		App.Events.addResponses(node, choices);

		function punish() {
			S.Nurse.devotion += 4;
			if (canDoVaginal(S.Nurse)) {
				seX(S.Nurse, "vaginal", V.PC, "penetrative");
			} else if (canDoAnal(S.Nurse)) {
				seX(S.Nurse, "anal", V.PC, "penetrative");
			}
			actX(S.Nurse, "oral", 20);
			V.slaves.forEach(function(s) {
				if (s.assignment === "get treatment in the clinic") {
					s.trust += 2;
				}
			});
			return `The next morning, the Clinic's patients awake to see an uncharacteristically subdued ${S.Nurse.slaveName} hurrying around, doing ${his} best to see to ${his} business quietly. ${He} does so a bit gingerly, as though ${he} was fucked without mercy last night, and tries not to meet anyone's eyes. Their attention is immediately drawn, however, to a sign pinned to the chest of ${his} clothing. It reads, 'The Nurse was caught molesting patients last night. ${He} has been ordered to immediately perform oral sex on anyone who asks.' Every patient instantly demands oral sex, and by the time ${he}'s gotten the last one off, the first has placed another request. ${He}'s exhausted by the end of the day; the patients, on the other hand, are very pleased to see the haughty, handsy nurse brought low.`;
		}

		function rape() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You shove ${S.Nurse.slaveName} hard, forcing a surprised shriek out of ${him} as ${he} crashes forward into ${subSlave.slaveName}'s`);
			if (subSlave.boobs > 2000) {
				r.push(`helpfully pillowlike bosom,`);
			} else if (subSlave.boobs > 500) {
				r.push(`healthy tits,`);
			} else {
				r.push(`chest,`);
			}
			r.push(`and then ram your pelvis up against ${him}, pinning ${him} against ${his} patient. ${subSlave.slaveName}'s eyelids flicker, but ${he2} does not wake up, despite your assault`);
			if (canPenetrate(S.Nurse)) {
				r.push(`shoving ${S.Nurse.slaveName}'s cock as far up ${his2} asshole as it will go.`);
			} else {
				r.push(`trapping ${S.Nurse.slaveName}'s hands between them and pushing ${his} fingers even farther up ${subSlave.slaveName}'s asshole.`);
			}
			r.push(`${S.Nurse.slaveName} tries to shift a little, but receives a peremptory push back to where ${he} was. ${He} realizes ${he}'s to lie still and take what's coming to ${him}, and ${he} does ${his} best to relax.`);
			App.Events.addParagraph(frag, r);
			r = [];
			if (V.PC.dick !== 0) {
				if (canDoVaginal(S.Nurse)) {
					if (S.Nurse.vagina > 2) {
						r.push(`${His} roomy cunt takes your brutal thrusting without trouble. To communicate your message, ${he} needs to be uncomfortable, so you deliberately force ${him} down farther and fuck ${him} at an awkward angle. Your harsh pounding begins to force groans out of ${him}.`);
					} else if (S.Nurse.vagina > 1) {
						r.push(`${He} gasps as you force your cock inside ${his} cunt without any accommodation for ${his} comfort. This is supposed to send a message, so you send a message, fucking ${him} without mercy. ${He} begins to groan under the harsh pounding.`);
					} else {
						r.push(`${He} whines as you force your cock inside ${his} tight cunt. This is supposed to send a message, so you send a message, treating ${him} like a veteran whore who can take anything. ${He} begins to groan under the harsh pounding, ${his} poor little pussy unused to this kind of abuse.`);
					}
					seX(S.Nurse, "vaginal", V.PC, "penetrative");
				} else {
					if (S.Nurse.anus > 2) {
						r.push(`${His} roomy anus takes your brutal thrusting without trouble. To communicate your message, ${he} needs to be uncomfortable, so you push a couple of fingers up there alongside your dick. ${He} wriggles helplessly, starting to groan as you rape ${his} asshole.`);
					} else if (S.Nurse.anus > 1) {
						r.push(`${He} gasps as you force your cock up ${his} ass without waiting for ${him} to relax or get ready. This is supposed to send a message, so you send a message, buttfucking ${him} without mercy. ${He} begins to groan under the harsh anal pounding.`);
					} else {
						r.push(`${He} whines as you force your cock up ${his} tight ass. This is supposed to send a message, so you send a message, treating ${him} like a veteran anal whore who can take anything. ${He} begins to scream under the harsh pounding, ${his} poor little butthole unused to this kind of abuse.`);
					}
					seX(S.Nurse, "anal", V.PC, "penetrative");
				}
			} else {
				if (canDoVaginal(S.Nurse)) {
					if (S.Nurse.vagina > 2) {
						r.push(`To communicate your message, ${he} needs to be uncomfortable, so you carefully form your fingers into a beak shape and push your fist up inside ${him}. ${He} screams as your knuckles push past ${his} pussylips, and then starts to groan as you fistfuck ${his} lewd cunt.`);
					} else if (S.Nurse.vagina > 1) {
						r.push(`${He} gasps as you ram three fingers into ${his} cunt without any accommodation for ${his} comfort. This is supposed to send a message, so you send a message, fingerfucking ${him} without mercy. ${He} begins to groan under the harsh molestation.`);
					} else {
						r.push(`${He} whines as you force two fingers inside ${his} tight cunt. This is supposed to send a message, so you send a message, treating ${him} like a veteran whore who can take a serious fingerfucking. ${He} begins to groan under the harsh molestation, ${his} poor little pussy unused to this kind of abuse.`);
					}
					seX(S.Nurse, "vaginal", V.PC, "penetrative");
				} else {
					if (S.Nurse.anus > 2) {
						r.push(`To communicate your message, ${he} needs to be uncomfortable, so you carefully form your fingers into a beak shape and push your fist up ${his} ass. ${He} screams as your knuckles push past ${his} sphincter, and then starts to groan as you fistfuck ${his} lewd butthole.`);
					} else if (S.Nurse.anus > 1) {
						r.push(`${He} gasps as you ram three fingers up ${his} butt without any accommodation at all. This is supposed to send a message, so you send a message, fingerfucking ${his} asshole without mercy. ${He} begins to groan under the harsh anal molestation.`);
					} else {
						r.push(`${He} whines as you force two fingers inside ${his} tight ass. This is supposed to send a message, so you send a message, treating ${him} like a veteran whore who can take a serious anal fingerfucking. ${He} begins to groan under the harsh molestation, ${his} girly little butthole unused to this kind of abuse.`);
					}
					seX(S.Nurse, "anal", V.PC, "penetrative");
				}
			}
			r.push(`${subSlave.slaveName} lies forgotten underneath ${him}, insensible even with the Nurse's body being sawed back and forth across ${him2}. ${S.Nurse.slaveName} is such a horny slut that ${he} starts to enjoy ${himself} a little once ${he} gets used to what you're doing to ${him}, but then you climax and discard ${him}, leaving ${him} looking forlorn and tousled. ${He} knows ${he} crossed a line, and privately resolves to be a little less handsy in the future.`);
			S.Nurse.devotion += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function sex() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You announce your presence to ${S.Nurse.slaveName} by groping ${his}`);
			if (subSlave.butt > 7) {
				r.push(`absurd butt.`);
			} else if (subSlave.butt > 3) {
				r.push(`generous buttocks.`);
			} else {
				r.push(`cute behind.`);
			}
			r.push(`${He} jumps, startled, and emits a short scream of surprise that trails off into a moan of sexual anticipation as you continue to knead and massage ${his} ${S.Nurse.skin} bottom. ${He} starts thrusting again, but carefully, so gently that ${he} doesn't need to stop for you to insert`);
			if (V.PC.dick !== 0) {
				r.push(`your hard cock into ${his}`);
				if (canDoVaginal(S.Nurse)) {
					r.push(`hot cunt.`);
					seX(S.Nurse, "vaginal", V.PC, "penetrative");
				} else {
					r.push(`willing anus.`);
					seX(S.Nurse, "anal", V.PC, "penetrative");
				}
				if (V.PC.vagina !== -1) {
					r.push(`Then you grab one of ${his} hands and pull it down under ${him}. ${He} gets the idea, and fingers your pussy while you fuck ${him}.`);
				}
			} else {
				r.push(`a couple of fingers into ${his}`);
				if (canDoVaginal(S.Nurse)) {
					r.push(`hot cunt.`);
					seX(S.Nurse, "vaginal", V.PC, "penetrative");
				} else {
					r.push(`willing anus.`);
					seX(S.Nurse, "anal", V.PC, "penetrative");
				}
				r.push(`One of ${his} hands, now freed, snakes around between you to pleasure you in turn. Its index and ring fingers slide deliciously between your folds to either side of your moist channel, into which the middle finger begins to delve.`);
			}
			r.push(`You nip ${his} neck and pull ${his} upper torso and neck around far enough around for you to plant half a kiss on the side of ${his} panting mouth.`);
			App.Events.addParagraph(frag, r);
			r = [];
			App.Events.addParagraph(frag, [
				`This is far too much for ${S.Nurse.slaveName}, and ${he} shakes with orgasm. ${He} isn't getting off that easily; you fuck ${him} slowly, letting ${him} ride aftershocks until ${he} bottoms out and ${his} arousal starts to build again. ${He} never stopped gently thrusting into the insensible ${subSlave.slaveName}, who is so thoroughly affected by the drugs that only ${his2} unconscious bodily reactions offer any indication that ${he2}'s getting fucked too.`
			]);
			r.push(`When you finally finish with ${S.Nurse.slaveName} and step away, allowing ${him} to step back in turn, ${he} looks at you with flirty confidence and husks, "${Master}, that was really pervertedly good. Even by the standards around here." You make no verbal reply, but give ${him} an open-handed swat across ${his} ${S.Nurse.skin} buttocks as ${he} turns to clean up ${his} patient's asshole. ${He} squeaks with surprise a second time, so startled that`);
			if (V.PC.dick !== 0) {
				r.push(`${his} well-fucked`);
				if (canDoVaginal(S.Nurse)) {
					r.push(`cunt`);
				} else {
					r.push(`backdoor`);
				}
				r.push(`releases a blob of cum to go sliding down ${his} leg as ${he} works.`);
			} else {
				r.push(`${he} stumbles against ${subSlave.slaveName}'s boobs again.`);
			}
			App.Events.addParagraph(frag, r);
			App.Events.addParagraph(frag, [
				`The next morning, ${subSlave.slaveName} notices that ${his2} ass is a little sore, and ${he2} can't remember any reason why it would be. ${He2} shrugs. In ${his2} life, this is unsurprising.`
			]);
			S.Nurse.trust += 4;
			return frag;
		}
	}
};


code:
App.Events.petsStewardessBeating = class petsStewardessBeating extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => !!S.Stewardess,
			() => S.Stewardess.actualAge >= 35 || V.AgePenalty === 0
		];
	}

	actorPrerequisites() {
		return [[
			s => [Job.HOUSE, Job.QUARTER].includes(s.assignment)
		]];
	}

	execute(node) {
		const subSlave = getSlave(this.actors[0]);
		let r = [];
		const {
			He, His,
			he, his, him, himself
		} = getPronouns(S.Stewardess);
		const {
			He2,
			he2, his2, him2, himself2
		} = getPronouns(subSlave).appendSuffix("2");

		App.Events.drawEventArt(node, [S.Stewardess, subSlave], [null, "no clothing"]);

		App.Events.addParagraph(node, [
			`Poor`,
			App.UI.DOM.slaveDescriptionDialog(subSlave),
			`clearly isn't working as hard as ${he2} should.`,
			App.UI.DOM.slaveDescriptionDialog(S.Stewardess),
			`has ${him2} bent over with ${his2} buttocks bare, and is administering a punishing spanking. ${subSlave.slaveName}'s ${subSlave.skin} skin is starting to show the force of the beating, and ${he2}'s begging desperately for mercy.`
		]);

		r.push(`${S.Stewardess.slaveName}, meanwhile, is obviously enjoying torturing the poor servant for ${his2} failings. ${He}'s `);
		if (S.Stewardess.chastityPenis === 1) {
			r.push(`using a couple of fingers to buttfuck ${himself}`);
		} else if (canAchieveErection(S.Stewardess)) {
			r.push(`jacking off furiously`);
		} else if (S.Stewardess.dick > 0) {
			r.push(`rubbing ${his} pathetically soft dick`);
		} else if (S.Stewardess.vagina === -1) {
			r.push(`desperately rubbing ${his} soft perineum`);
		} else {
			r.push(`rubbing ${his} sopping pussy`);
		}
		r.push(`with ${his} other hand, getting close to orgasm as the servant begs and moans.`);
		App.Events.addParagraph(node, r);

		App.Events.addResponses(node, [
			new App.Events.Result(`Fuck the servant's mouth as the stewardess beats ${him2}`, fuck),
			new App.Events.Result(`Make sure your stewardess remembers ${his} place`, remembers, S.Stewardess.anus === 0 ? `This option will take ${S.Stewardess.slaveName}'s anal virginity` : ``)
		]);

		function fuck() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`In a conversational tone of voice, you tell ${S.Stewardess.slaveName} to continue the spanking. ${subSlave.slaveName} has one anguished second to realize what's happening before you shove yourself`);
			if (V.PC.dick === 0) {
				r.push(`against ${his2} mouth.`);
			} else {
				r.push(`down ${his2} throat.`);
			}
			r.push(`${He2} gags reflexively, jerking back, only to jerk forward again in automatic pain avoidance when ${S.Stewardess.slaveName} hits ${his2} already-sore buttocks yet again. ${He2}'s broken enough to understand that ${he2} needs to relax and let ${himself2} be abused, but ${his2} body's reflexive responses deny ${him2} the relief that might be given. The sadistic stewardess comes twice before you do, a deliciously aggressive expression on ${his} face. Poor ${subSlave.slaveName} staggers off coughing, promising to never offend again.`);
			S.Stewardess.devotion += 4;
			subSlave.trust -= 5;
			seX(subSlave, "oral", V.PC, "penetrative");
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function remembers() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`In a conversational tone of voice, you tell ${S.Stewardess.slaveName} to continue the spanking. You watch the milieu impassively, your presence slightly cramping ${his} style. The poor beaten servant staggers out of the room when fully punished; ${S.Stewardess.slaveName} didn't bring ${himself} to climax, obviously over concern about why you're taking such an interest. When you tell ${him} that ${he} needs to remember that ${he} is a slave, too, and only superior to ${his} charges by degree, ${his} face falls. ${He} has a few seconds to wonder what ${his} punishment will be before ${he} finds ${himself} shoved roughly up against the wall. When ${he} feels`);
			if (V.PC.dick === 0) {
				r.push(`a strap-on`);
			} else {
				r.push(`your cockhead`);
			}
			r.push(`pressing against ${his}`);
			if (S.Stewardess.anus > 2) {
				r.push(`massive`);
			} else if (S.Stewardess.anus > 1) {
				r.push(`loose`);
			} else {
				r.push(`tight`);
			}
			r.push(`anus, ${he} tries to hike a leg up to save ${himself} a bit of anal pain, but to little avail.`);
			if (S.Stewardess.anus > 2) {
				r.push(`Since ${his} ass is so loose, you push two fingers in alongside`);
				if (V.PC.dick === 0) {
					r.push(`the phallus,`);
				} else {
					r.push(`your dick,`);
				}
				r.push(`eliciting a shocked whine.`);
			} else if (S.Stewardess.anus > 1) {
				r.push(`${His} butt may be well-used, but you pound ${him} hard enough to let ${him} know ${he}'s still your butthole bitch.`);
			} else {
				r.push(`${His} ass is so tight that fucking it standing is punishment enough.`);
			}
			r.push(`${He} submissively takes ${his} buttfuck, and <span class="devotion inc">begs your forgiveness</span> when ${he} feels you`);
			if (V.PC.dick === 0) {
				r.push(`shoot your load up ${his} ass.`);
			} else {
				r.push(`shudder with orgasm.`);
			}
			r.push(VCheck.Anal(S.Stewardess, 1));
			S.Stewardess.devotion += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.REBusyArcade = class REBusyArcade extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => App.Entity.facilities.arcade.employeesIDs().size > 3
		];
	}

	actorPrerequisites() {
		return [
			[
				s => s.assignment === Job.ARCADE,
				s => s.fetish !== "mindbroken",
				s => canMove(s) || hasAnyLegs(s),
				s => s.devotion < 45
			]
		];
	}

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

		App.Events.addParagraph(node, [`Slaves in your arcade are not immured in the facility permanently, since holding them in one position at all times would negatively impact their health. They are released to exercise, eat, bathe, and sleep, but for nothing else. You occasionally inspect them when they do so, to see that their harsh lives are not inappropriately difficult for them. One day when you are doing so, ${contextualIntro(V.PC, slave)} flings ${himself} on the ground in front of you the instant ${he} sees you.`]);

		let r = [];
		r.push(`Facing the ground, ${he}`);
		if (!canTalk(slave)) {
			r.push(`gestures`);
			if (hasAnyArms(slave)) {
				r.push(`with ${hasBothArms(slave) ? "shaking hands" : "a shaking hand"}`);
			} else {
				r.push(`in the limited capacity ${he} is cpapable of`);
			}
			r.push(`that ${he} cannot take any more. ${He} begs you abjectly to let ${him} out of the arcade and promises to be a perfect sex slave if you do.`);
		} else {
			if (SlaveStatsChecker.checkForLisp(slave)) {
				r.push(`lisps through tears`);
			} else {
				r.push(`sobs,`);
			}
			r.push(`"${Master}, ${Spoken(slave, "please. I can't take any more of this. Please let me out. I'll do anything")}, ${Master}. I'll love you forever, ${Master} — ${Spoken(slave, "just don't make me go back inside")} that wall."`);
		}
		App.Events.addParagraph(node, r);

		App.Events.addResponses(node, [
			new App.Events.Result(`Accept ${his} pledge`, accept),
			new App.Events.Result("Refuse", refuse),
		]);

		function accept() {
			slave.devotion = 45;
			removeJob(slave, "be confined in the arcade");
			return `When you accept, ${slave.slaveName} looks up at you in incomprehension, expecting you to correct yourself or reveal that this is a cruel trick. When you do neither, ${he} scrabbles spastically to your feet, kisses them as ${he} cries, and then clings to your knees, sobbing. ${He} is so relieved by this reprieve that ${he} is now on the cusp of devotion to you, and will obey out of near-paralytic fear of being sent back to the arcade.`;
		}

		function refuse() {
			return `${He} did not really expect mercy, but ${his} sobs take on a distinctly dark tone of hopelessness at your refusal. As you personally immure ${him} in the arcade for another day of endless dick, you wonder whether ${he}'ll damage ${his} throat with all the commotion ${he}'s making. Several of the other arcade slaves glance dully over at the noise. Then, they look away.`;
		}
	}
};


code:
App.Events.REBusyBrothel = class REBusyBrothel extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => App.Entity.facilities.brothel.employeesIDs().size > 3
		];
	}

	execute(node) {
		App.Events.addParagraph(node, [`${capFirstChar(V.brothelName)} is well staffed, and does a busy trade in flesh 24 hours a day. With so many sex slaves in the Free Cities, brothels occupy a functional, nearly mechanical part of the sexual landscape. Free citizens and sometimes even favored slaves visit the brothel, select from the available merchandise, relieve their sexual needs, and leave. Affection, companionship, and emotional needs are available elsewhere.`]);
		App.Events.addParagraph(node, [`Of course, ${V.brothelName} is the best establishment of its kind in the arcology. Citizens who patronize it can expect themselves to be very well looked after by skilled slaves. The quality of the merchandise, the efficiency with which it is delivered, and the cleanliness and reputation of the premises reflect well on you, so much so that you could leverage this bustling sexual commerce in many ways.`]);

		repX(500, "event");

		App.Events.addResponses(node, [
			new App.Events.Result("Surprise the hardworking whores with a day of rest", rest, `This will cost ${cashFormat(1000)}`),
			new App.Events.Result("Hire an expert hooker to give lessons", lessons, `This will cost ${cashFormat(2000)}`),
			new App.Events.Result("Eliminate prices for one morning to promote the brothel", promote, `This will cost ${cashFormat(2000)}`),
		]);

		function rest() {
			cashX(-1000, "event");
			for (const slave of V.slaves.filter(s => s.assignment === Job.Brothel)) {
				slave.devotion += 4;
				slave.health.tired = 0;
			}
			return `The problem with assembly-line sex is that it has a tendency to destroy any sense of intimacy or fun. So, you make some simple preparations and close the brothel for a day, hiring some freelancers to cover. All your slave whores are allowed to sleep late, and then spend the day with you playing games and enjoying light amusements. The slaves are surprised by your generosity, but they have fun. Many of the games are sexually themed. One day of giggling and squealing can't completely reverse the transactionalization of sex for them, but they appreciate the effort.`;
		}
		function lessons() {
			cashX(-2000, "event");
			for (const slave of V.slaves.filter(s => s.assignment === Job.Brothel)) {
				slave.lastWeeksCashIncome += 250;
				slave.lifetimeCashIncome += 250;
				if (slave.skill.whoring < 100) {
					slave.skill.whoring += 10;
				} else {
					slave.devotion += 4;
				}
			}
			return `The citizen streetwalker has had her day. A few of the cleverest have avoided being driven into poverty, either by becoming madams or by finding a way to build a new career serving the slave brothel industry. One of these is touring the city, offering her long sexual experience in seminars for slave prostitutes. Her services are not cheap, but it rapidly becomes clear that they are worth it. She is a grey-haired but still elegant woman with deep crow's feet and a smoker's voice. She is not only a sexual master, but a hard-bitten and comprehensively experienced businesswoman. All of your brothel slaves with any room for improvement in their whoring skills learn from her lessons, while those who have nothing to learn gain confidence from her praise.`;
		}
		function promote() {
			repX(1000, "event");
			cashX(-2000, "event");
			for (const slave of V.slaves.filter(s => s.assignment === Job.Brothel)) {
				healthDamage(slave, 10);
				if (canDoVaginal(slave)) {
					seX(slave, "vaginal", "public", "penetrative", 5);
					if (canDoAnal(slave)) {
						seX(slave, "anal", "public", "penetrative", 5);
					} else {
						seX(slave, "vaginal", "public", "penetrative", 5);
					}
				} else if (canDoAnal(slave)) {
					seX(slave, "anal", "public", "penetrative", 10);
				}
				seX(slave, "oral", "public", "penetrative", 10);
			}
			return `The news that sex will be free at the brothel travels like wildfire. Security measures are necessary to control the throng that spends the entire day entering and leaving the brothel, though as the day goes on the crowds thin. By midmorning, all the holes on offer are so fucked out that only those who fetishize that sort of thing stick around. The brothel is a real seminal sewer by noon, and it smells like it. Nevertheless, free sex is a short route to public approval, though you do miss a morning's fees. The poor slave whores are fairly battered by so much wear and tear in so little time.`;
		}
	}
};


code:
App.Events.REBusyDairy = class REBusyDairy extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => App.Entity.facilities.dairy.employeesIDs().size > 3,
			() => V.dairyRestraintsSetting < 2
		];
	}

	execute(node) {
		App.Events.addParagraph(node, [`${capFirstChar(V.dairyName)} is working away steadily. Its high-quality product reflects well on you, you muse one day as you inspect the premises. The gentle pneumatic sounds of the milkers and the whimpers of the cows being milked are a pleasant background for the thought.`]);
		App.Events.addParagraph(node, [`Even with high doses of modern drugs, human cows simply do not produce a very high volume of milk. This isn't much of a business problem, since it just means that the product can be sold at a high price. However, some of the more grandiose ideas about how to use milk have had to wait until you have enough cows producing enough milk to make them possible.`]);

		repX(500, "event");

		const choices = [];
		choices.push(new App.Events.Result("Share a milk bath with the cows", share, `This will cost ${cashFormat(1000)}`));
		if (V.club !== 0) {
			choices.push(new App.Events.Result("Add fresh milk to the club for a day to advertise", advertise, `This will cost ${cashFormat(2000)}`));
		}
		if (cumSlaves().length >= 5) {
			choices.push(new App.Events.Result("Cum in, milk out", cumLoop, `This will cost ${cashFormat(1000)}`));
		}
		App.Events.addResponses(node, choices);

		function share() {
			const dairySlaves = V.slaves.filter(s => s.assignment === Job.DAIRY);
			cashX(-1000, "event");
			for (const slave of dairySlaves) {
				slave.devotion += 4;
				SimpleSexAct.Slaves(slave, dairySlaves.filter(s => s.ID !== slave.ID).random());
				if (slave.actualAge < 24) {
					SimpleSexAct.Player(slave);
				} else {
					if (canDoVaginal(slave)) {
						actX(slave, "vaginal", 1);
					}
					if (slave.dick > 0 && slave.chastityPenis === 0) {
						actX(slave, "penetrative", 1);
					}
				}
				if (slave.boobs > 300) {
					actX(slave, "mammary", 2);
				}
				slave.health.tired = 0;
			}
			return `Milk is a fashionable skin treatment in the Free Cities, and many of the cows fetishize their breasts and their milk. Many of them giggle with delight when you bring them all into a large spa room with a huge tub full of their fresh milk. A pittance will be lost from sales, but it's hard to think of such things when swimming and splashing in warm, nutty mother's milk with so many huge-breasted slaves, many of whom are milking themselves into the bath. Some of the older ones relax and luxuriate, gently milking themselves and masturbating or pleasuring each other, according to taste. The younger cows prefer to rub themselves against you, taking turns being fucked. Regardless, they all appreciate such a special experience.`;
		}
		function advertise() {
			cashX(-2000, "event");
			repX(2500, "event");
			return `Sexual sights and sounds are all over the arcology. Nevertheless, passersby on the club are surprised to find one morning that a previously normal screen advertising your brand of milk has a luscious pair of breasts protruding through it at head height. The advertisement encourages anyone to try a free sample. The slaves constantly rotate, pressing fresh tits through the gap for public suckling. It is generally agreed that your product is of the finest quality and you even have enquiries about how it might be exported outside the arcology, should you manage to increase production.`;
		}
		function cumLoop() {
			repX(5000, "event");
			cashX(-1000, "event");
			return `As a promotional gimmick, you announce with considerable fanfare a special, experimental brand of milk, available at the normal price for a short time only. The milk will be unique in that it will be from cows fed mostly on slaves' cum; the cockmilked slaves will in turn be given as much milk as possible to produce a 'pure slave product,' recursively. The sad realities of nutrition stop it from being much more than a marketing ploy, but it's certainly a successful attempt to spark discussion.`;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[
				(s) => s.daughters > 0,
				(s) => s.devotion > 50,
				(s) => s.anus !== 0,
				canWalk,
			],
			[
				s => s.mother === this.actors[0],
				(s) => s.devotion < 10,
				(s) => s.anus !== 0,
				canWalk
			]
		];
	}

	execute(node) {
		let r = [];
		const mommy = getSlave(this.actors[0]);
		const daughter = getSlave(this.actors[1]);
		const {
			he, him, his, mother
		} = getPronouns(mommy);

		const {
			his2, daughter2
		} = getPronouns(daughter).appendSuffix("2");

		App.Events.drawEventArt(node, [mommy, daughter], "no clothing");

		r.push(`${mommy.slaveName} and ${his} ${daughter2} are both having trouble getting acclimated to your ownership, with their obedience suffering as a result. Though neither of them have done anything particular egregious lately, their combined list of minor transgressions is reaching a point where rendering punishment on the two would not be seen as unfair. By happenstance they come before you for inspection one after the other. Though they certainly`);
		if (canSee(mommy) && canSee(daughter)) {
			r.push(`see each other naked frequently around`);
		} else {
			r.push(`are frequently naked around each other in`);
		}
		r.push(`the penthouse, neither seems particularly comfortable around the other when nudity is involved. While you finish ${mommy.slaveName}'s inspection, ${his} ${daughter2} fidgets uneasily even while trying to mimic the posture and appearance of an obedient slave. It occurs to you that the current situation presents an opportunity to do something about this resistant ${mother}-${daughter2} pair.`);
		App.Events.addParagraph(node, r);

		const choices = [];
		choices.push(new App.Events.Result(`Spend the evening gently acclimating them to your ownership`, gently));
		choices.push(new App.Events.Result(`Make an example of the ${mother}`, exampleMommy));
		App.Events.addResponses(node, choices);

		function gently() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`Though neither of the two vehemently protests your decision to have them both join you in bed, furtive uneasy glances are exchanged between the two. Since they're already naked, they clamber onto your bed before you and reluctantly kneel facing each other, leaving enough space between them for you${(canSee(mommy) && canSee(daughter)) ? "and for them to avert their eyes to avoid the other's nakedness" : ""}. They clearly assume you would start by using one of them, so they're quite taken aback when you remain standing at the edge of the bed and suggest that ${mommy.slaveName} play with ${his} ${daughter2}. ${daughter.slaveName} awkwardly flounders a little as ${his2} ${mother}'s`);
			if (hasBothArms(mommy)) {
				r.push(`hands roam`);
			} else if (hasAnyArms(mommy)) {
				r.push(`hand roams`);
			}
			r.push(`about ${his2} body, but does not reel back from the intimate touching. In time you instruct ${daughter.slaveName} to pleasure ${his2} ${mother}, but still decline to join the incestuous union unfolding on your sheets. You extend the foreplay for hours, bringing both ${mother} and ${daughter2} to such a state of naked arousal that they begin grinding against each other uninhibitedly. They are both so desperate for release that they do not object when you finally decide to join them, instead eagerly moving to include you in their coupling. What started with ${daughter.slaveName} awkwardly kneeling unmoving while ${his2} ${mother} sucked ${his2} nipples ends with ${daughter.slaveName}`);
			if (hasAllLimbs(daughter)) {
				r.push(`on all fours`);
			} else {
				r.push(`bent over`);
			}
			r.push(`getting fucked by you while orally pleasuring ${mommy.slaveName}. You gaze over at ${mommy.slaveName} and ${he} moans and licks ${his} lips enticingly back at you as ${daughter.slaveName} moans into ${his} fuckhole.`);
			r.push(`<span class="trust inc">They have both become more trusting of you.</span>`);

			mommy.trust += 4;
			daughter.trust += 4;
			seX(mommy, "oral", daughter, "oral");

			if (canDoAnal(mommy)) {
				actX(mommy, "anal");
			} else if (canDoVaginal(mommy)) {
				actX(mommy, "vaginal");
			}

			if (canDoAnal(daughter)) {
				actX(daughter, "anal");
			} else if (canDoVaginal(daughter)) {
				actX(daughter, "vaginal");
			}

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

		function exampleMommy() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`You give them orders of devastating simplicity: You are going to assrape ${mommy.slaveName} and if ${his} ${daughter2} offers even the most token of resistance, you'll punish ${mommy.slaveName}. They're stunned, but you shake them out of their shock by grabbing ${mommy.slaveName} by the arm${(V.PC.dick === 0) ? ", donning a strap-on" : ""} and shoving ${him} over your desk. ${daughter.slaveName} flinches visibly as you enter ${his2} ${mother}'s ass in one brutal stroke, for which you stain ${his2} ${mother}'s asscheeks a rosy red with a torrent of harsh spanks. ${mommy.slaveName} takes the rough anal pounding with only quiet sobbing and the occasional whimper of pain, but ${his} ${daughter2} can't bear to`);
			if (canSee(daughter)) {
				r.push(`see`);
			} else if (canHear(daughter)) {
				r.push(`hear`);
			} else {
				r.push(`have`);
			}
			r.push(`${mommy.slaveName} in such duress and breaks ${his2} short-lived silence to beg for mercy. When you step away from ${mommy.slaveName}, ${daughter.slaveName} lets out a sigh of relief, but ${his2} expression soon turns to horror and revulsion when you return to mount ${his2} ${mother} with a lash in hand.`);
			App.Events.addParagraph(frag, r);
			r = [];
			r.push(`When you eventually finish your merciless assrape of ${mommy.slaveName}, ${his} body is covered in bruises, marks, and handprints. A testament to ${daughter.slaveName}'s inability to keep ${his2} silence as you brutalized ${his2} ${mother}. You leave your office wordlessly to attend to other matters, while behind you ${daughter.slaveName} gazes`);
			if (canSee(daughter)) {
				r.push(`forlornly`);
			} else {
				r.push(`blindly`);
			}
			r.push(`at the gibbering mess you have reduced ${his2} ${mother} to. Your severe punishment of ${his2} ${mother} has encouraged ${daughter.slaveName} to fear you. ${mommy.slaveName} has been fucked into submission but your savage treatment has caused ${him} to hate buttsex.`);

			daughter.trust -= 10;
			mommy.devotion += 4;

			seX(mommy, "anal", V.PC, "penetrative");
			mommy.sexualFlaw = "hates anal";

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


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

	actorPrerequisites() {
		return [
			[
				(s) => s.sisters > 0,
				(s) => s.origin === "$He was sold into slavery by $his older sister.",
				canPenetrate,
			],
			[
				(s) => s.anus === 0,
				(s) => getSlave(this.actors[0]).devotion > (s.devotion + 20),
				(s) => areSisters(getSlave(this.actors[0]), s) > 0,
			]
		];
	}

	execute(node) {
		let r = [];
		const youngerSis = getSlave(this.actors[0]);
		const olderSis = getSlave(this.actors[1]);
		const {
			He, His,
			he, him, his, himself,
		} = getPronouns(youngerSis);
		const {
			title: Master
		} = getEnunciation(youngerSis);

		const {
			his2, him2, sister2, girl2
		} = getPronouns(olderSis).appendSuffix("2");

		App.Events.drawEventArt(node, [youngerSis, olderSis], "no clothing");

		r.push(
			`${youngerSis.slaveName}, whose older ${sister2} tried to sell ${him} to you, is up for inspection. As usual, you pepper your inspection with questions about ${his} duties, ${his} feelings about ${his} physical condition, and experiences. More information about one's property is never a bad thing. When the inspection reaches ${youngerSis.slaveName}'s asshole, you ask whether ${he} enjoyed having ${his} older ${sister2} sell ${his} butt.`,
			Spoken(youngerSis, `"No, ${Master},"`),
			`${he} says.`
		);
		App.Events.addParagraph(node, r);

		const choices = [];
		choices.push(new App.Events.Result(`Turnabout is fair play`, turn));
		choices.push(new App.Events.Result(`Let ${him} have ${his} revenge, but remind ${him} of ${his} place`, place));
		App.Events.addResponses(node, choices);

		function turn() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`${olderSis.slaveName} is brought in. You gag ${him2}, throw the resisting bitch down on the couch, and hold ${him2} there. Then, you peremptorily order the wide-eyed ${youngerSis.slaveName} to`);
			if (canDoAnal(olderSis)) {
				r.push(`sodomize`);
			} else {
				r.push(`facefuck`);
			}
			r.push(`${his} ${sister2}. ${He} stares open mouthed for a moment, but comes over obediently. ${His} face is a strange mix of vengeful eagerness, revulsion, and even a little lust. ${He} shoves ${himself} into the frantically struggling ${girl2}'s`);
			if (canDoAnal(olderSis)) {
				r.push(`butt`);
			} else {
				r.push(`jaw`);
			}
			r.push(`without mercy. ${His} cock is`);
			if (youngerSis.dick < 3) {
				r.push(`pathetically small,`);
			} else if (youngerSis.dick < 5) {
				r.push(`nothing out of the ordinary,`);
			} else if (youngerSis.dick < 7) {
				r.push(`admittedly nothing to scoff at,`);
			} else {
				r.push(`a source of great envy amongst your slaves,`);
			}
			r.push(`but by how ${olderSis.slaveName} reacts it might as well be a baseball bat. ${youngerSis.slaveName} rarely gets to penetrate anything, mostly serving as an oral slut${canDoAnal(youngerSis) ? "and anal cocksleeve" : ""}, so ${he} comes in no time and takes a turn holding ${olderSis.slaveName} down${canDoAnal(olderSis) ? `so you can claim sloppy seconds on ${his2} spasming butthole` : ""}.`);
			r.push(`${youngerSis.slaveName} has become more devoted to you, while ${olderSis.slaveName} hates you and has become more afraid of you,${canDoAnal(olderSis) ? `and <span class="virginity loss">${olderSis.slaveName} has lost ${his2} anal virginity.</span>` : `.`}`);
			youngerSis.devotion += 4;

			olderSis.trust -= 5;
			olderSis.devotion -= 4;
			if (canDoAnal(olderSis)) {
				olderSis.anus = 1;
				seX(youngerSis, "penetrative", olderSis, "anal");
			} else {
				seX(youngerSis, "penetrative", olderSis, "oral");
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function place() {
			const frag = new DocumentFragment();
			let r = [];
			r.push(`${olderSis.slaveName} is brought in. You gag ${him2}, throw the resisting bitch down on the couch, and hold ${him2} there. Then, you peremptorily order the wide-eyed ${youngerSis.slaveName} to put ${his} cock`);
			if (canDoAnal(olderSis)) {
				r.push(`up ${his} ${sister2}'s ass,`);
			} else {
				r.push(`in ${his} ${sister2}'s mouth,`);
			}
			r.push(`and then hold it there. ${He} stares open mouthed for a moment, but comes over obediently. ${His} face is a strange mix of vengeful eagerness, revulsion, and even a little lust. ${He} shoves ${himself} into the frantically struggling ${girl2}'s`);
			if (canDoAnal(olderSis)) {
				r.push(`butt`);
			} else {
				r.push(`jaw`);
			}
			r.push(`without mercy. ${His} cock is`);
			if (youngerSis.dick < 3) {
				r.push(`pathetically small,`);
			} else if (youngerSis.dick < 5) {
				r.push(`nothing out of the ordinary,`);
			} else if (youngerSis.dick < 7) {
				r.push(`admittedly nothing to scoff at,`);
			} else {
				r.push(`a source of great envy amongst your slaves,`);
			}
			r.push(`but by how ${olderSis.slaveName} reacts it might as well be a baseball bat. ${youngerSis.slaveName} obeys your orders and holds still after inserting ${himself}. You`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on,`);
			}
			r.push(`move around`);
			if (canDoAnal(youngerSis)) {
				r.push(`behind ${him} and start ass`);
			} else {
				r.push(`in front of ${him} and start face-`);
			}
			r.push(`fucking ${him} in turn, slowly permitting ${him} to find a rhythm where ${he} can fuck and get fucked at the same time. ${He}'s getting it much harder than ${he}'s giving it but ${he}'s experienced enough that ${he} comes quickly.`);
			r.push(`${youngerSis.slaveName} has become more devoted to you, while ${olderSis.slaveName} has become more rebellious,${(canDoAnal(olderSis)) ? ` and <span class="virginity loss">${olderSis.slaveName} has lost ${his2} anal virginity.</span>` : `.`}`);
			youngerSis.devotion += 4;
			if (canDoAnal(youngerSis)) {
				seX(youngerSis, "anal", V.PC, "penetrative");
			} else {
				seX(youngerSis, "oral", V.PC, "penetrative");
			}

			olderSis.devotion -= 5;
			if (canDoAnal(olderSis)) {
				olderSis.anus = 1;
				seX(youngerSis, "penetrative", olderSis, "anal");
			} else {
				seX(youngerSis, "penetrative", olderSis, "oral");
			}
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};