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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canMove,
				canTalk,
				s => s.assignment !== Job.QUARTER,
				s => s.trust < -50,
				s => s.devotion <= 50,
			]
		];
	}

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

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

		let t = [];

		t.push(`During ${his} weekly inspection,`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		t.push(`has trouble following the routine orders that position ${him} so you can examine ${his} body. The cause is not difficult to determine: ${he}'s so cripplingly terrified that ${he}'s having difficulty functioning. ${He} seems to be trying to obey you, but ${he}'s so scared that ${his} mind is having trouble translating your simple verbal commands into physical obedience. You ask ${him} what ${he}'s so frightened of. The question stuns ${him}, and ${he} ${canSee(eventSlave) ? "stares at" : "faces"} you in mute horror, looking even more terrified than ${he} has up to this point and completely devoid of any idea how to respond. You order ${him} to respond, and this starts ${him} out of ${his} fugue. ${He} begins to cry, makes two false starts, sobs, and then begins forcing out words.`);
		App.Events.addParagraph(node, t);
		t = [];

		t.push(`"E-e-everything," ${he} cries. "${Spoken(eventSlave, "I'm s-so s-sorry b-but I c-can't help")}," ${he} chokes on a sob and hiccups, "${Spoken(eventSlave, "help it. This, this place, being a sex slave")},`);
		switch (eventSlave.rules.punishment) {
			case "confinement":
				t.push(Spoken(eventSlave, "b-being sh-shut up in the d-dark"));
				break;
			case "whipping":
				t.push(Spoken(eventSlave, "b-being wh-wh-whip-ped"));
				break;
			case "chastity":
				t.push(Spoken(eventSlave, "h-having my p-parts locked up in ch-chastity"));
				break;
			default:
				t.push(Spoken(eventSlave, "n-never knowing what th-the p-punishment will be"));
		}
		t.push(`${Spoken(eventSlave, `wh-when I'm bad, e-everything, ${eventSlave.rudeTitle === 1 ? PoliteRudeTitle(eventSlave) : Master}. Oh, oh, I'm sorry, p-please, I'm sorry I, I'm like this, I'm crying, p-please ${eventSlave.rudeTitle === 1 ? PoliteRudeTitle(eventSlave) : Master}, please don't...`)}" ${He} trails off, giving you a look of supplication.`);
		App.Events.addParagraph(node, t);
		t = [];

		App.Events.addResponses(node, [
			new App.Events.Result(`Punish ${him}`, punish),
			new App.Events.Result(`Comfort ${him}`, comfort),
			(V.dairyRestraintsSetting === 2
				? new App.Events.Result(`Threaten ${him} with the industrial Dairy`, industrial)
				: new App.Events.Result()),
			(V.seeExtreme === 1
				? new App.Events.Result(`Threaten to convert ${him} into a Fuckdoll`, fuckdoll)
				: new App.Events.Result())
		]);

		function punish() {
			t = [];

			t.push(`${He} obviously knows that breaking down like this would displease you, but you patiently explain that it's against the rules anyway. ${He} cries harder, nodding through ${his} tears. ${He} knows that interrupting you to beg would be profoundly stupid, so ${he} clasps ${his} ${hasBothArms(eventSlave) ? "hands" : "hand"} in wordless submission. You tell ${him} that ${he}'s to keep ${himself} under control; if ${he} fails, ${he} will be punished. Since ${he} failed, ${he} will now suffer ${his} standard punishment, and be`);

			switch (eventSlave.rules.punishment) {
				case "confinement":
					t.push(`shut up in a box. <span class="gold">${He} breaks down,</span> falling to ${his} knees, begging abjectly for mercy.`);
					if (eventSlave.belly >= 100000 || eventSlave.boobs > 25000 || eventSlave.weight > 190) {
						t.push(Spoken(eventSlave, `"It's too cramped in there,"`));
					} else {
						t.push(Spoken(eventSlave, `"It's dark in there,"`));
					}
					t.push(`${he} screams as you open the box for ${him}. ${He} knows that if ${he} doesn't climb in, it'll be longer before ${he}'s let out, so ${he} does, scrabbling inside and sobbing desperately as you close the lid.`);
					break;
				case "whipping":
					t.push(`whipped. ${He} breaks down, falling to ${his} knees, begging abjectly for mercy. "It'll h-hu-hurt," ${he} blubbers weakly as you attach ${his} ${hasBothArms(eventSlave) ? "hands" : "hand"} to shackles high on the office wall. The first stroke across ${his} buttocks draws a long shriek out of ${him}.`);
					break;
				case "chastity":
					t.push(`locked up in chastity. ${He} breaks down, falling to ${his} knees, begging abjectly for mercy. "I c-can't," ${he} moans. "I can't take it. I can't stand it." As you lock the chastity onto ${him}, ${he} sobs inconsolably, knowing that any arousal will be torturous until ${he}'s released.`);
					break;
				default:
					t.push(`gagged, since that's the appropriate castigation for failure to control ${his} mouth and deportment. ${He} tries to behave, but breaks down as you slide a dildo gag into ${his} throat, choking and struggling to breathe as ${he} tries to cry past it.`);
			}
			t.push(`The thing ${he}'s most frightened of is that ${he} won't be able to control ${his} fear in the future, and will continue to suffer.`);

			eventSlave.trust -= 5;
			return t;
		}

		function comfort() {
			t = [];

			t.push(`You rise from behind your desk, and ${eventSlave.slaveName} collapses to the floor, sure that ${he}'s about to be severely punished. ${He}'s shocked to feel your arms encircle ${him} as you kneel down beside ${him} and embrace ${his} huddled form. You pull ${his} head`);
			if (V.PC.boobs >= 1400) {
				t.push(`against your enormous, ${PC.boobsImplant !== 0 ? "hard" : "soft"} breasts,`);
			} else if (V.PC.boobs >= 1200) {
				t.push(`against your huge ${PC.boobsImplant !== 0 ? "firm" : "soft"} breasts,`);
			} else if (V.PC.boobs >= 1000) {
				t.push(`against your big ${PC.boobsImplant !== 0 ? "firm" : "soft"} breasts,`);
			} else if (V.PC.boobs >= 300) {
				t.push(`against your soft breasts,`);
			} else if (V.PC.title === 0) {
				t.push(`against your flat chest,`);
			} else {
				t.push(`into your shoulder,`);
			}
			t.push(`stroking it reassuringly and murmuring kindness. ${He} clings to you, mostly for lack of any other comfort in the whole world, and sobs convulsively, ${his} terror flowing out of ${him} in a torrent as you gently rub ${his} back. When ${he}'s mostly cried ${himself} out, you tell ${him} that ${he}'ll be all right. You're sure ${he}'ll be a good slave one day. You understand that ${his} life is hard. ${He}'ll make mistakes, and you'll punish ${him} for them, but that's part of slave training, and that's all right. If ${he} does ${his} best, ${he}'ll be all right. ${He} sniffles, cuffing tears away. "${Spoken(eventSlave, `Th-thank you, ${eventSlave.rudeTitle === 1 ? PoliteRudeTitle(eventSlave) : Master}, I'll d-do my b-best`)}," ${he} manages to ${say}.`);

			eventSlave.trust += 5;
			return t;
		}

		function industrial() {
			t = [];
			const watchListenFreezes = canSee(eventSlave) ? "watches" : (canHear(eventSlave) ? "listens" : "freezes");

			t.push(`You grab ${him} by the scruff of ${his} neck and drag ${him} down to ${V.dairyName}. ${He} tries to control ${himself}, but breaks down in tears when you haul ${him} to a stop, forcing ${him} to get a good`);
			if (canSee(eventSlave)) {
				t.push(`look at the`);
			} else if (canHear(eventSlave)) {
				t.push(`listen of the sound of`);
			} else {
				t.push(`feel for the omnipresent aura of`);
			}
			t.push(`rows of bodies being mercilessly milked. You explain that if ${he} continues to fail to control ${himself}, your patience with ${his} will eventually expire, and you'll be forced to immure ${him} here. ${canSee(eventSlave) ? "Indicating" : `Facing ${him} towards`} a slave who's being`);
			if (eventSlave.balls > 0 && V.dairyStimulatorsSetting === 2) {
				t.push(`cockmilked by the machines, you tell ${eventSlave.slaveName} to pay close attention. ${He} ${watchListenFreezes} in horror as a dildo the size of ${his} forearm slides in and out of the slave's rectum, pounding it harder and harder until the slave stiffens and the transparent tubing coming off its cockhead whitens with cum. As the slave relaxes slightly in the restrains, the powerful milkers continue their relentless tugging at ${his} gigantic udders.`);
				if (!canSee(eventSlave)) {
					t.push(`As the dildo begins its efforts to loose a second cumming, you grab the horrified slave's hands and push them to the cow's throbbing dick just in time for ${him} to feel the ejaculate forced out by its unwilling orgasm.`);
				}
				t.push(`You run a hand down to ${eventSlave.slaveName}'s own balls and, squeezing them slightly, tell ${him} that unless ${he} wants ${his} ass ruined by constant machine rape, ${his} tits turned into immobilizing milk factories and ${his} balls drained of every last drop of seed,`);
			} else if ((eventSlave.ovaries === 1 || eventSlave.mpreg === 1) && V.dairyPregSetting === 2) {
				t.push(`used for reproduction by the machines, you tell ${eventSlave.slaveName} to pay close attention. ${He} ${watchListenFreezes} in horror as a dildo the size of ${his} forearm fucks the slave's enormous cunt, keeping it as gaped as possible to ease birth and constantly ejaculating preparatory drugs against ${his} cervix. The slave is gigantically pregnant. You tell ${eventSlave.slaveName} that this is the vaginal treatment ${he} can expect when pregnant; when impregnation is required, the dildos ejaculate more than a liter of cum a minute.`);
				if (!canSee(eventSlave)) {
					t.push(`As the dildo retracts from the cow's gaping cunt, you grab the horrified slave's hands and push them to its gravid middle just in time for ${him} to feel a massive contraction.`);
				}
				t.push(`You run a hand down to ${eventSlave.slaveName}'s own middle and, patting it gently, tell ${him} that unless ${he} wants ${his} womb converted into an industrial component,`);
			} else if ((eventSlave.ovaries === 1 || eventSlave.mpreg === 1) && V.dairyPregSetting === 3) {
				t.push(`used for mass reproduction by the machines, you tell ${eventSlave.slaveName} to pay close attention. ${He} ${watchListenFreezes} in horror as a dildo the size of ${his} forearm fucks the slave's cavernous cunt, keeping it as gaped as possible to ease birth and constantly ejaculating preparatory drugs against ${his} tortured cervix. The slave is absolutely enormous, more a taut sphere of a belly than a person; so pregnant that the children within ${his} are visibly forced to bulge the skin covering ${his} straining womb by their sisters. You tell ${eventSlave.slaveName} that this is the treatment ${he} can expect when pregnant here; when impregnation is required, the dildos ejaculate more than a liter of cum a minute.`);
				if (!canSee(eventSlave)) {
					t.push(`As the cow takes the huge dildo absentmindedly, you grab the horrified slave's ${hasBothArms(eventSlave) ? "hands" : "hand"} and push ${hasBothArms(eventSlave) ? "them" : "it"} to its gravid middle, forcing ${him} to feel the children squirming within its packed womb. ${He} squeals in terror at the feeling of so many babies moving under ${his} fingers.`);
				}
				t.push(`You run a hand down to ${eventSlave.slaveName}'s own middle and, patting it gently, tell ${him} that unless ${he} wants to become an industrial breeder,`);
			} else {
				t.push(`drained of ${his} milk, you tell ${eventSlave.slaveName} to pay close attention. ${He} ${watchListenFreezes} in horror as the slave's gigantic breasts are massaged and squeezed, while the milkers attached to ${his} absurd nipples tug and pull with industrial power. ${He} can't ${canSee(eventSlave) ? "look away; the orbs of jiggling flesh being manipulated are each as big as the slave's torso" : "shut out the sound of those enormous jiggling orbs of flesh being so roughly manipulated"}. It's good for milk production to drain slaves completely on occasion, and the machine doesn't stop until every drop is wrung from both udders.`);
				if (!canSee(eventSlave)) {
					t.push(`You force the horrified slave's ${hasBothArms(eventSlave) ? "hands" : "hand"} onto its breasts so that ${he} may get a good sense of just how big and swollen they are and how hard the milker is pulling at them.`);
				}
				t.push(`You run a hand over to ${eventSlave.slaveName}'s own breast and, teasing ${his} nipple, tell ${him} that unless ${he} wants to experience that twice a day,`);
			}
			t.push(`${he} had better behave ${himself}. ${He} nods furiously, <span class="gold">terrified beyond the ability to speak.</span>`);

			eventSlave.trust -= 8;
			return t;
		}

		function fuckdoll() {
			t = [];

			t.push(`You order a Fuckdoll brought to your office. ${eventSlave.slaveName} `);
			if (canSee(eventSlave)) {
				t.push(`watches it totter in,`);
			} else if (canHear(eventSlave)) {
				t.push(`listens to the clicks of its approaching heels and the ominous squeaking of its latex shell,`);
			} else {
				t.push(`feels the uncomfortable latex skin of its suit when it brushes up against ${him},`);
			}
			t.push(`automatically following the tugs on its leash and the tonal commands passed by its suit. ${He} already understands the implicit threat, and ${he} shivers uncontrollably, almost falling to ${his} knees in fear. Not content with that, you tell ${him} that ${he}'s trying your patience with ${his} behavior. If ${he} doesn't control ${himself} better in the future, you'll give up on ${him} and convert ${him} into a Fuckdoll. At the spoken threat ${eventSlave.slaveName} does collapse, but you order ${him} to get back to ${his} feet and ${canSee(eventSlave) ? "watch" : "pay attention"}. ${He} does, shakily, tears streaming down ${his} face as you put the Fuckdoll on all fours, as though it were about to take dick. Its`);
			if (eventSlave.vagina > -1) {
				t.push(`holes are pointed straight at ${eventSlave.slaveName}'s face,`);
				if (canSee(eventSlave)) {
					t.push(`and ${he} can't avoid seeing how loose and used they look.`);
				} else {
					t.push(`so you grab both ${his} hands and force one into each of its blown out holes. ${eventSlave.slaveName} shrieks in horror at the recognizable sensation.`);
				}
			} else {
				t.push(`rear hole is pointed straight at ${eventSlave.slaveName}'s face,`);
				if (canSee(eventSlave)) {
					t.push(`and ${he} can't avoid seeing how loose and used it looks.`);
				} else {
					t.push(`so you grab both ${his} hands and force them into its blown out ass. ${eventSlave.slaveName} shrieks in horror at the recognizable sensation.`);
				}
			}
			t.push(`Suddenly, you activate the Fuckdoll's suit's punishment systems. It does not and cannot scream, but `);
			if (canSee(eventSlave)) {
				t.push(`a slight stiffening of its posture communicates extreme anguish, and its sphincter spasms tightly closed with obviously involuntary force.`);
			} else {
				t.push(`the sudden, pitiful attempt to clamp down on ${his} arms makes it perfectly clear that you just forced it to undergo extreme anguish.`);
			}
			t.push(`${eventSlave.slaveName} is almost incapacitated by terror.`);

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


code:
App.Events.RESSImpregnationPlease = class RESSImpregnationPlease extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.seePreg !== 0,
			() => V.PC.dick !== 0,
		]; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				s => (s.fetish === "pregnancy" || s.energy > 95),
				s => s.devotion > 50,
				s => s.vagina !== 0,
				s => s.anus > 0,
				hasAnyArms,
				canWalk,
				isFertile,
				s => s.eggType === "human",
				s => s.fetishKnown === 1,
				s => !(s.geneticQuirks.superfetation === 2 && (s.intelligence + s.intelligenceImplant > 15) && s.womb.length > 0) || (s.belly < (s.pregAdaptation * 1750)) // Material conditional: only false if first condition is true and second is false
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let isFaceUp = true;
		const isPregnantAndSuperfetation = (eventSlave.geneticQuirks.superfetation === 2 && eventSlave.pregKnown === 1);

		let r = [];
		r.push(`Taken by a mood,`);
		r.push(contextualIntro(V.PC, eventSlave, true));
		if (isPregnantAndSuperfetation) {
			if (eventSlave.belly >= 750000) {
				r.push(`barely makes into your office before turning and leaning against ${his} ${belly} belly. Once ${he} manages to get comfortable against the strained mass, ${he} wiggles ${his} exposed`);
				if (eventSlave.mpreg === 1) {
					r.push(`asshole`);
				} else {
					r.push(`pussylips`);
				}
				r.push(`with a strange light`);
				if (canSee(eventSlave)) {
					r.push(`in ${his} eyes.`);
				} else {
					r.push(`on ${his} face.`);
				}
				isFaceUp = false;
			} else if (eventSlave.belly >= 450000) {
				r.push(`slowly waddles into your office with a strange light`);
				if (canSee(eventSlave)) {
					r.push(`in ${his} eyes.`);
				} else {
					r.push(`on ${his} face.`);
				}
				r.push(`${He} carefully turns before your desk and leans forward with a grunt against ${his} ${belly} belly, allowing it to part ${his} legs while exposing ${his}`);
				if (eventSlave.mpreg === 1) {
					r.push(`asshole`);
				} else {
					r.push(`pussylips`);
				}
				r.push(`to you. ${He} gingerly rubs ${his} agitated stomach as ${he} wiggles ${his} bottom at you.`);
				isFaceUp = false;
			} else if (eventSlave.belly >= 300000) {
				r.push(`slowly waddles into your office with a strange light`);
				if (canSee(eventSlave)) {
					r.push(`in ${his} eyes.`);
				} else {
					r.push(`on ${his} face.`);
				}
				r.push(`${He} carefully turns before your desk and leans forward with a grunt against ${his} ${belly} belly, allowing it to part ${his} legs while exposing ${his}`);
				if (eventSlave.mpreg === 1) {
					r.push(`asshole`);
				} else {
					r.push(`pussylips`);
				}
				r.push(`to you.`);
				isFaceUp = false;
			} else if (eventSlave.belly >= 150000) {
				r.push(`nearly trips under ${his} own weight as ${he} waddles into your office with a strange light`);
				if (canSee(eventSlave)) {
					r.push(`in ${his} eyes.`);
				} else {
					r.push(`on ${his} face.`);
				}
				r.push(`${He} maneuvers over to the couch, leans forward with a grunt as ${his} ${belly} belly pushes into the floor, spreading ${his} legs and exposing ${his}`);
				if (eventSlave.mpreg === 1) {
					r.push(`asshole`);
				} else {
					r.push(`pussylips`);
				}
				r.push(`to you.`);
				isFaceUp = false;
			} else if (eventSlave.belly >= 60000) {
				r.push(`waddles into your office with a strange light`);
				if (canSee(eventSlave)) {
					r.push(`in ${his} eyes.`);
				} else {
					r.push(`on ${his} face.`);
				}
				r.push(`${He} maneuvers over to the couch, leans forward, spreads ${his} legs and exposes ${his}`);
				if (eventSlave.mpreg === 1) {
					r.push(`asshole`);
				} else {
					r.push(`pussylips`);
				}
				r.push(`to you.`);
				isFaceUp = false;
			} else if (eventSlave.belly >= 10000) {
				r.push(`hastily waddles into your office with a strange light`);
				if (canSee(eventSlave)) {
					r.push(`in ${his} eyes.`);
				} else {
					r.push(`on ${his} face.`);
				}
				r.push(`${He} sits down on the couch and scoots down so ${his} butt is right at the edge of the couch and ${his} ${belly} belly is sticking up in the air. ${He} then spreads ${his} legs and exposes ${his}`);
				if (eventSlave.mpreg === 1) {
					r.push(`asshole`);
				} else {
					r.push(`pussylips`);
				}
				r.push(`to you.`);
			} else {
				r.push(`hurries into your office with a strange light`);
				if (canSee(eventSlave)) {
					r.push(`in ${his} eyes.`);
				} else {
					r.push(`on ${his} face.`);
				}
				r.push(`${He} sits down on the couch and scoots down so ${his} butt is right at the edge of the couch. ${He} then spreads ${his} legs and uses ${hasBothArms(eventSlave) ? "one" : `${his}`} hand to spread ${his}`);
				if (eventSlave.mpreg === 1) {
					r.push(`asshole`);
				} else {
					r.push(`pussylips`);
				}
				r.push(`for you.`);
			}
			if (!canTalk(eventSlave)) {
				r.push(`${He} pantomimes pregnancy with`);
				if (!hasBothArms(eventSlave)) {
					r.push(`${his}`);
				} else if (eventSlave.belly < 10000) {
					r.push(`${his} other`);
				} else {
					r.push(`one`);
				}
				r.push(`hand, lewdly gesturing to ask you to cum inside ${his} still very fertile`);
				if (eventSlave.mpreg === 1) {
					r.push(`asspussy.`);
				} else {
					r.push(`pussy.`);
				}
			} else {
				r.push(Spoken(eventSlave, `"Please put another baby in me, ${Master}, I have plenty of room still,"`));
				if (eventSlave.lips > 70) {
					r.push(`${he} begs through ${his} dick-sucking lips.`);
				} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
					r.push(`${he} begs through ${his} ridiculous piercings.`);
				} else {
					r.push(`${he} begs.`);
				}
				r.push(Spoken(eventSlave, `"I can't stand it. I need to make you another slave, ${Master}. Please stuff my body with as many future slaves as my womb can hold. Make me your slave production line."`));
			}
		} else {
			r.push(`hurries into your office with a strange light`);
			if (canSee(eventSlave)) {
				r.push(`in ${his} eyes.`);
			} else {
				r.push(`on ${his} face.`);
			}
			r.push(`${He} sits down on the couch and scoots down so ${his} butt is right at the edge of the couch. ${He} then spreads ${his} legs and uses ${hasBothArms(eventSlave) ? "one" : `${his}`} hand to spread ${his}`);
			if (eventSlave.mpreg === 1) {
				r.push(`asshole`);
			} else {
				r.push(`pussylips`);
			}
			r.push(`for you.`);
			App.Events.addParagraph(node, r);
			r = [];

			if (!canTalk(eventSlave)) {
				r.push(`${He}`);
				if (hasBothArms(eventSlave)) {
					r.push(`pantomimes pregnancy with ${his} other hand,`);
				} else {
					r.push(`shifts to pantomiming pregnancy with ${his} hand,`);
				}
				r.push(`lewdly gesturing to ask you to cum inside ${his} fertile`);
				if (eventSlave.mpreg === 1) {
					r.push(`ass`);
				}
				r.push(`pussy.`);
			} else {
				r.push(Spoken(eventSlave, `"Please knock me up, ${Master},"`));
				if (eventSlave.lips > 70) {
					r.push(`${he} begs through ${his} dick-sucking lips.`);
				} else if (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2) {
					r.push(`${he} begs through ${his} ridiculous piercings.`);
				} else {
					r.push(`${he} begs.`);
				}
				r.push(Spoken(eventSlave, `"I can't stand it. I need to make you another slave, ${Master}. Please use my body as your slave factory."`));
			}
		}
		if (canSee(eventSlave)) {
			r.push(`${He} stares at you doe-eyed,`);
		} else {
			r.push(`${He} faces you with the look of a child begging for candy,`);
		}
		r.push(`desperately awaiting your answer.`);
		App.Events.addParagraph(node, r);

		let responses = [new App.Events.Result(`Put a slave in ${him}`, impregnate)];
		if (eventSlave.mpreg === 0) {
			responses.push(new App.Events.Result(`Use ${his} ass but give ${him} what ${he} wants`, impregnateAss));
			responses.push(new App.Events.Result(`Sneak it into ${his} ass instead`, sneak));
		} else {
			responses.push(new App.Events.Result(`Use ${his} ass but finish across ${his} back`, back));
		}
		if (cumSlaves().length >= 5) {
			responses.push(new App.Events.Result(`Use the Dairy cockmilk to impregnate ${him}`, dairy));
		}
		App.Events.addResponses(node, responses);

		function impregnate() {
			r = [];
			if (eventSlave.mpreg === 1) {
				if (!canDoAnal(eventSlave)) {
					r.push(`You slowly undo ${his} chastity, allowing ${him} to be overwhelmed with anticipation of the deed to come.`);
				}
			} else if (eventSlave.chastityVagina) {
				r.push(`You slowly undo ${his} chastity, allowing ${him} to be overwhelmed with anticipation of the deed to come.`);
			}
			r.push(`Despite ${himself}, ${he} breaks down when ${he} feels your cock enter ${his}`);
			if (eventSlave.mpreg === 1) {
				if (eventSlave.anus === 1) {
					r.push(`deliciously tight`);
				} else if (eventSlave.anus === 2) {
					r.push(`well experienced`);
				} else {
					r.push(`fucked-out`);
				}
				r.push(`ass.`);
			} else {
				if (eventSlave.vagina === 1) {
					r.push(`deliciously tight`);
				} else if (eventSlave.vagina === 2) {
					r.push(`well experienced`);
				} else {
					r.push(`fucked-out`);
				}
				r.push(`cunt.`);
			}
			if (isPregnantAndSuperfetation) {
				r.push(`${He} grinds against you`);
			} else {
				r.push(`${He} smiles up reassuringly at you`);
			}
			r.push(`to let you know ${he}'s not in pain or anguish, blinking away ${his} happy tears.`);
			if (isFaceUp) {
				r.push(`${He} reaches up to hug ${himself} close to you,`);
				if (eventSlave.bellyPreg >= 5000) {
					r.push(`but the gravid swell of ${his} current pregnancy thwarts ${his} efforts as you take ${him}.`);
				} else if (eventSlave.belly >= 5000 && eventSlave.boobs < 600) {
					r.push(`${his} big ${eventSlave.inflationType}-stuffed belly pushing against you as you take ${him}.`);
				} else if (V.PC.belly >= 5000) {
					r.push(`but the best ${he} can do is press ${himself} against your bulging middle.`);
				} else if (eventSlave.boobs < 600 && eventSlave.belly < 5000) {
					r.push(`and ${his} modest breasts let ${him} snuggle close to you, face-to-face, as you take ${him}.`);
				} else if (eventSlave.boobs < 10000) {
					r.push(`and ${his} big tits`);
					if (eventSlave.bellyFluid >= 2000) {
						r.push(`and ${eventSlave.inflationType}-stuffed belly`);
					}
					r.push(`form a soft cushion between you as you take ${him}.`);
				} else {
					r.push(`but ${his} massive tits stop ${him} from bringing ${himself} too close to you as you take ${him}.`);
				}
			} else {
				r.push(`${He} reaches back to take your hand, slowly bringing it back to the swell of ${his} baby bump.`);
			}
			r.push(`${He} enjoys ${himself} immensely, but ${he} loses it again when ${he} feels your`);
			if (V.PC.balls >= 30) {
				if (isPregnantAndSuperfetation) {
					r.push(`seed inflating ${his} womb until ${his} stomach is`);
					if (eventSlave.belly >= 2000) {
						r.push(`noticeably larger than when ${he} started.`);
					} else {
						r.push(`distended and wobbling with cum.`);
					}
				} else {
					r.push(`seed fill ${his} cramped womb and start to backflow.`);
				}
			} else if (V.PC.balls >= 14) {
				r.push(`seed pumping into ${him} until ${his} womb is stuffed with cum.`);
			} else if (V.PC.balls >= 9) {
				r.push(`seed pouring into ${him}.`);
			} else {
				r.push(`seed.`);
			}
			r.push(`${He} starts blubbering inelegantly and`);
			if (!canTalk(eventSlave)) {
				r.push(`gesturing`);
			} else if ((eventSlave.lips > 70) || (eventSlave.piercing.lips.weight+eventSlave.piercing.tongue.weight > 2)) {
				r.push(`lisping`);
			} else {
				r.push(`whimpering`);
			}
			r.push(`<span class="devotion inc">${his} thanks.</span>`);
			eventSlave.devotion += 4;
			if (eventSlave.mpreg === 1) {
				seX(eventSlave, "anal", V.PC, "penetrative");
			} else {
				seX(eventSlave, "vaginal", V.PC, "penetrative");
			}
			knockMeUp(eventSlave, 50, 2, -1);
			return r;
		}

		function impregnateAss() {
			r = [];
			r.push(`You tell ${him} that impregnation will be ${his} reward if ${he}'s a good little`);
			if (eventSlave.chastityVagina || eventSlave.chastityAnus) {
				r.push(`buttslut as you undo ${his} chastity.`);
			} else {
				r.push(`buttslut.`);
			}
			r.push(`${He} visibly resolves to do ${his} anal best. You recline on the couch and ${he} squats over you, one leg on the floor and the other bent up on the cushion, with`);
			if (isPregnantAndSuperfetation && isFaceUp && eventSlave.belly >= 5000) {
				r.push(`${his} ${belly} belly pressing against you.`);
			} else if (hasBothArms(eventSlave)) {
				r.push(`one hand on the back of the couch and the other rubbing ${his} pussy.`);
			} else {
				r.push(`${his} hand on the back of the couch.`);
			}
			r.push(`${He}`);
			if (eventSlave.anus === 1) {
				r.push(`winces in pain as ${he} lowers ${his} tight`);
			} else if (eventSlave.anus === 2) {
				r.push(`moans with discomfort as ${he} lowers ${his} tight`);
			} else {
				r.push(`barely reacts as ${he} lowers ${his} huge`);
			}
			r.push(`butthole down onto your cock. ${He} gets quite a workout, raising and lowering ${his} body to fuck ${his} own ass on your stationary dick.`);
			if (isFaceUp) {
				r.push(`Since ${he}'s facing you, you get a great view of ${his} body in motion.`);
			} else {
				r.push(`${He}'s so heavy with child, you eventually have to give ${him} a hand as ${he} steadily tires.`);
			}
			r.push(`${His}`);
			if (eventSlave.clit) {
				r.push(`clitoral`);
			}
			r.push(`stimulation is having an effect, and after a while ${he}`);
			if (!canTalk(eventSlave)) {
				r.push(`takes ${his} hand away to make an unintelligible gesture. After ${he} repeats it, you figure out that ${he} means ${he} wishes ${he} could get pregnant anally.`);
			} else {
				r.push(`pants,`, Spoken(eventSlave, `"That's so good, ${Master}. I wish you could get my ass pregnant."`));
			}
			r.push(`When you're close, you scoot back to pull yourself out and ${he} spears ${his} cunt down onto your cock. The sudden difference of sensation brings you to violent climax, and ${he} cries with joy at feeling your hot`);
			if (V.PC.balls >= 30) {
				if (isPregnantAndSuperfetation) {
					r.push(`seed inflating ${his} womb until ${his} stomach is`);
					if (eventSlave.belly >= 2000) {
						r.push(`noticeably larger than when ${he} started.`);
					} else {
						r.push(`distended and wobbling with cum.`);
					}
				} else {
					r.push(`seed fill ${his} cramped womb and start to backflow.`);
				}
				if (eventSlave.belly >= 30000) {
					r.push(`You barely managed to keep your grip on ${him} as ${his} middle ballooned between you.`);
				}
			} else if (V.PC.balls >= 14) {
				r.push(`seed pumping into ${him} until ${his} womb is stuffed with cum.`);
			} else if (V.PC.balls >= 9) {
				r.push(`seed pouring into ${him}.`);
			} else {
				r.push(`seed.`);
			}
			eventSlave.devotion += 4;
			seX(eventSlave, "vaginal", V.PC, "penetrative");
			seX(eventSlave, "anal", V.PC, "penetrative");
			knockMeUp(eventSlave, 50, 0, -1);
			return r;
		}

		function sneak() {
			r = [];
			r.push(`Despite ${himself}, ${he} breaks down when ${he}`);
			if (canSee(eventSlave)) {
				r.push(`sees`);
			} else if (canHear(eventSlave)) {
				r.push(`hears`);
			} else {
				r.push(`notices`);
			}
			r.push(`you coming over and kneeling down to line your cock up with the entrance to ${his}`);
			if (eventSlave.vagina === 1) {
				r.push(`deliciously tight`);
			} else if (eventSlave.vagina === 2) {
				r.push(`well experienced`);
			} else {
				r.push(`fucked-out`);
			}
			r.push(`cunt. ${His} happy tears turn to a ragged gasp of surprise and pain when you`);
			if (eventSlave.chastityAnus) {
				r.push(`undo ${his} anal chastity,`);
			}
			r.push(`slide your dickhead down to ${his}`);
			if (eventSlave.anus === 1) {
				r.push(`painfully inexperienced`);
			} else if (eventSlave.anus === 2) {
				r.push(`tight`);
			} else {
				r.push(`loose`);
			}
			r.push(`ass and shove it up there instead. ${He} knows better than to protest, but the expression on ${his} face is a wonderful mix of submission, anguish and disappointment as ${he} takes the anal fuck. To stop ${his} fugue of disappointment you give ${him} a light slap on the cheek to get ${his} attention, and then instruct ${him} that it's not ${his} place`);
			if (isPregnantAndSuperfetation) {
				r.push(`to decide how pregnant ${he} gets to be.`);
			} else {
				r.push(`to plan ${his} pregnancies.`);
			}
			r.push(`They'll happen when they happen, and until then ${he}'ll take it up the butt like a good slut. ${He} <span class="trust dec">nods and wipes ${his} eyes</span> even as`);
			if (eventSlave.anus === 1) {
				r.push(`${he} grimaces involuntarily at your painful use of ${his} tight butthole.`);
			} else if (eventSlave.anus === 2) {
				r.push(`${he} takes your cock up ${his} tight ass.`);
			} else {
				r.push(`${his} gaping anus makes occasional lewd noises as you pound it.`);
			}
			eventSlave.trust -= 5;
			seX(eventSlave, "anal", V.PC, "penetrative");
			return r;
		}

		function back() {
			r = [];
			r.push(`You tell ${him} that impregnation will be ${his} reward if ${he}'s a good little`);
			if (eventSlave.chastityVagina || eventSlave.chastityAnus) {
				r.push(`buttslut as you undo ${his} chastity.`);
			} else {
				r.push(`buttslut.`);
			}
			r.push(`${He} visibly resolves to do ${his} anal best. You recline on the couch and ${he} squats over you, one leg on the floor and the other bent up on the cushion, with`);
			if (isPregnantAndSuperfetation && isFaceUp && eventSlave.belly >= 5000) {
				r.push(`${his} ${belly} belly pressing against you.`);
			} else if (hasBothArms(eventSlave)) {
				r.push(`one hand on the back of the couch and the other`);
				if (eventSlave.nipples !== "fuckable") {
					r.push(`pinching`);
				} else {
					r.push(`fingering`);
				}
				r.push(`a nipple.`);
			} else {
				r.push(`${his} hand on the back of the couch.`);
			}

			r.push(`${He}`);
			if (eventSlave.anus === 1) {
				r.push(`winces in pain as ${he} lowers ${his} tight`);
			} else if (eventSlave.anus === 2) {
				r.push(`moans with discomfort as ${he} lowers ${his} tight`);
			} else {
				r.push(`barely reacts as ${he} lowers ${his} huge`);
			}
			r.push(`butthole down onto your cock. ${He} gets quite a workout, raising and lowering ${his} body to fuck ${his} own ass on your stationary dick.`);
			if (isFaceUp) {
				r.push(`Since ${he}'s facing you, you get a great view of ${his} body in motion.`);
			} else {
				r.push(`${He}'s so heavy with child, you eventually have to give ${him} a hand as ${he} steadily tires.`);
			}
			r.push(`${His} stimulation is having an effect, and after a while ${he}`);
			if (!canTalk(eventSlave)) {
				r.push(`takes ${his} hand away to make an unintelligible gesture. After ${he} repeats it, you figure out that ${he} means ${he} is thrilled to be able to get anally pregnant`);
				if (isPregnantAndSuperfetation) {
					r.push(`pregnant and is about to conceive again`);
				} else {
					r.push(`pregnant.`);
				}
			} else {
				r.push(`pants,`, Spoken(eventSlave, `"That's so good, ${Master}. I'm so glad my ass is fertile."`));
			}
			r.push(`When you're at your limit, you quickly pull`);
			if (isFaceUp) {
				r.push(`out, slide slightly further under ${him}`);
			} else {
				r.push(`out`);
			}
			r.push(`and thrust up between ${his} asscheeks, blowing your hot seed`);
			if (V.PC.balls >= 30) {
				r.push(`across ${his} entire back.`);
			} else if (V.PC.balls >= 9) {
				r.push(`across ${his} back.`);
			} else {
				r.push(`across ${his} lower back.`);
			}
			r.push(`${He} stops riding you and`);
			if (canSee(eventSlave)) {
				r.push(`stares at`);
			} else {
				r.push(`faces`);
			}
			r.push(`you with a look of <span class="devotion dec">disbelief.</span> You shrug; it must have slipped out under all ${his} enthusiasm.`);
			eventSlave.devotion -= 5;
			seX(eventSlave, "anal", V.PC, "penetrative");
			return r;
		}

		function dairy() {
			r = [];
			r.push(`You tell ${him} ${he}'ll be having everyone's children. ${He} looks puzzled until you put ${him} on the couch, legs spread`);
			if ((eventSlave.mpreg === 1 && eventSlave.chastityAnus) || eventSlave.chastityVagina) {
				r.push(`and chastity removed`);
			}
			r.push(r.pop() + `,`);
			r.push(`and produce a large, soft injector full of fresh cum. At this ${he} giggles and thanks you; ${he} rapturously rubs ${his} ${belly} belly as you gently push the injector home. For the rest of the week, ${he} appears in your office morning and night, receiving the seed of every slave you're currently having cockmilked. ${He} goes about ${his} other business with a deeply pleased expression on ${his} face. Whenever ${he} has a spare moment ${he} steals down to the Dairy to hug the slaves there or otherwise show them a little affection.`);
			eventSlave.devotion += 10;
			if (cumSlaves().length > 0) {
				knockMeUp(eventSlave, 90, 2, cumSlaves().random().ID);
			}
			return r;
		}
	}
};

repo_name: DontAskDontTell/fc

license: mit


code:
App.Events.RESSInjectionsPlease = class RESSInjectionsPlease extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.expansionRequestsAllowed > 0,
			() => V.arcologies[0].FSSlimnessEnthusiast === "unset",
		]; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				canTalk,
				s => s.drugs === "no drugs",
				s => s.rules.speech === "permissive",
				s => s.health.condition > 20,
				s => s.devotion >= -20,
				s => s.trust > 20,
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		App.Events.addParagraph(node, [
			`Coming to see you in a clearly good mood is`,
			App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), "."),
			`Since ${he}'s allowed to ask questions, ${he} comes right out with it.`,
			Spoken(eventSlave, `"${Master}, I'm feeling healthy, and I've been a good ${girl} this week. With everyone getting so many powerful drugs —"`),
			`${he} takes a breath before asking in a rush`,
			Spoken(eventSlave, `"– may I have a dose of ${drug.text}"`)
		]);

		App.Events.addResponses(node, [
			new App.Events.Result(`Give ${him} the necessary injections`, necessary),
			eventSlave.pregKnown === 1
				? new App.Events.Result(`Not when you're pregnant`, pregnant)
				: new App.Events.Result(),
			new App.Events.Result("Decline", decline),
			new App.Events.Result("No, and slaves should not make requests of this kind", stop),
		]);

		function necessary() {
			eventSlave.devotion += 2;
			let r = [];
			r.push(`You load the injection gun you keep in your desk, and tap it repeatedly against the cooperative slave's`);
			const thankfulSentence = `${He} leaves <span class="devotion inc">thanking</span> you profusely, ${hasAnyArms(eventSlave) ? `massaging ${himself} in` : "quivering with"} anticipation`;
			switch (drug.type) {
				case "boobs":
					r.push(`tits, producing a hiss each time as pressurized gas painlessly drives the drugs deep into ${his} tissues. ${thankfulSentence}. Before the end of the week, ${his} boobs have grown, delighting ${him}.`);
					if (eventSlave.markings === "freckles" || eventSlave.markings === "heavily freckled") {
						r.push(`${He} proudly shows your other slaves ${his} breast growth by keeping track of the increasing distance between a couple of chosen freckles on the front of ${his} boobs.`);
					}
					r.push(`The dose of growth hormones necessary to cause such rapid tissue changes left ${him} feeling <span class="health dec">rather ill,</span> but ${he} is recovering normally.`);
					if (eventSlave.geneMods.NCS === 0) {
						eventSlave.boobs += 200;
					} else {
						eventSlave.boobs += 100;
					}
					break;
				case "butt":
					r.push(`rear end, producing a hiss each time as pressurized gas painlessly drives the drugs deep into ${his} tissues. ${thankfulSentence}. Before the end of the week, ${his} buttocks have grown, delighting ${him}.`);
					eventSlave.butt++;
					r.push(`The dose of growth hormones necessary to cause such rapid tissue changes left ${him} feeling <span class="health dec">rather ill,</span> but ${he} is recovering normally.`);
					break;
				case "lips":
					r.push(`lips, producing a hiss each time as pressurized gas painlessly drives the drugs deep into ${his} tissues. ${thankfulSentence}. Before the end of the week, ${his} lips have swelled, delighting ${him}.`);
					r.push(`The dose of growth hormones necessary to cause such rapid tissue changes left ${him} feeling <span class="health dec">rather ill,</span> but ${he} is recovering normally.`);
					eventSlave.lips += 10;
					break;
				case "dick":
					r.push(`cock, producing a hiss each time as pressurized gas painlessly drives the drugs deep into ${his} tissues. ${thankfulSentence}. Before the end of the week, ${his} cock has grown, delighting ${him}.`);
					eventSlave.dick++;
					if (eventSlave.balls < 5 && random(1, 100) > 70) {
						r.push(`As a side effect, ${his} <span class="change positive">balls have also swelled,</span> which ${he} sees as an added benefit.`);
						eventSlave.balls++;
					}
					r.push(`The dose of growth hormones and male hormone treatment necessary to cause such rapid change left ${him} feeling <span class="health dec">rather ill,</span> but ${he} is recovering normally.`);
					break;
				case "dickMinus":
					r.push(`girly dick, producing a hiss each time as pressurized gas painlessly drives the drugs deep into ${his} tissues. ${thankfulSentence}. Before the end of the week, ${his} dick has shrunk, delighting ${him}.`);
					eventSlave.dick--;
					if ((eventSlave.geneMods.NCS === 1) && (eventSlave.dick > 1) && (random(1, 100) > 50)) {
						eventSlave.dick--;
					}
					if (eventSlave.balls > 1 && random(1, 100) > 70) {
						r.push(`As a side effect, ${his} <span class="orange">balls have also atrophied,</span> which ${he} sees as an added benefit.`);
						eventSlave.balls--;
						if ((eventSlave.geneMods.NCS === 1) && (eventSlave.balls > 1) && (random(1, 100) > 50)) {
							eventSlave.balls--;
						}
					}
					r.push(`The dose of growth hormones and hormone treatment necessary to cause such rapid tissue reduction left ${him} feeling <span class="health dec">rather ill,</span> but ${he} is recovering normally.`);
					break;
				case "balls":
					r.push(`sack, producing a hiss each time as pressurized gas painlessly drives the drugs deep into ${his} tissues. ${thankfulSentence}. Before the end of the week, ${his} testicles have grown, delighting ${him}. The dose of growth hormones and male hormone treatment necessary to cause such rapid change left ${him} feeling rather ill, but ${he} is recovering normally.`);
					eventSlave.balls++;
					break;
				case "ballsMinus":
					r.push(`useless sack, producing a hiss each time as pressurized gas painlessly drives the drugs deep into ${his} tissues. ${thankfulSentence}. Before the end of the week, ${his} testicles have shrunk, delighting ${him}. The dose of growth hormones and hormone treatment necessary to cause such rapid tissue reduction left ${him} feeling rather ill, but ${he} is recovering normally.`);
					eventSlave.balls--;
					if ((eventSlave.geneMods.NCS === 1) && (eventSlave.balls > 1) && (random(1, 100) > 50)) {
						eventSlave.balls--;
					}
					break;
				case "clit":
					r.push(`clit, producing a hiss each time as pressurized gas painlessly drives the drugs deep into ${his} tissues. ${thankfulSentence}. Before the end of the week, ${his} clit has grown, delighting ${him}. The dose of growth hormones necessary to cause such rapid tissue changes left ${him} feeling rather ill, but ${he} is recovering normally.`);
					eventSlave.clit++;
					break;
			}
			if (V.arcologies[0].FSBodyPuristLaw === 0 && V.healthyDrugsUpgrade === 0) {
				surgeryDamage(eventSlave, 10);
			} else {
				surgeryDamage(eventSlave, 5);
			}
			App.Events.refreshEventArt(eventSlave);
			return r;
		}

		function pregnant() {
			const child = eventSlave.pregType > 1 ? "children" : "child";
			eventSlave.trust++;
			return `You tell ${him} that you would prefer not to inject your pregnant slaves with large doses of growth hormones, and ${he} must respect your judgment in this regard. ${He} leaves looking disappointed, but vows to return once ${he} has given birth. ${He} isn't satisfied with ${his} body, but trusts that ${his} ${getWrittenTitle(eventSlave)} cares for ${him} and ${his} unborn ${child}'s health.`;
		}

		function decline() {
			eventSlave.devotion++;
			eventSlave.trust++;
			return `You tell ${him} that ${he}'s better as ${he} is, and ${he} must respect your judgment in this regard. ${He} leaves looking more flattered than disappointed. ${He}'s less insecure in ${his} own body, and trusts that ${his} ${getWrittenTitle(eventSlave)} has a plan for ${him}.`;
		}

		function stop() {
			V.expansionRequestsAllowed = 0;
			return `You tell ${him} firmly that you don't intend to apply growth hormones to ${him} at the moment, your tone communicating that further requests on this subject are not permitted. ${He} understands clearly and looks a little crushed, but trusts that ${he} won't be punished for violating a rule you hadn't promulgated. You repair the oversight immediately, directing your personal assistant to spread notice that decisions about asset size are yours alone.`;
		}

		/** @returns {{type:"boobs" | "butt" | "lips" | "dick" | "dick" | "dickMinus" | "balls" | "ballsMinus" | "clit", text: string}} */
		function getDrug() {
			let possibleDrugs = [];
			if (eventSlave.fetishKnown === 1 && eventSlave.fetishStrength > 60) {
				if (eventSlave.fetish === "dom") {
					if (eventSlave.dick.isBetween(0, 5) && canPenetrate(eventSlave)) {
						if (canSee(eventSlave)) { /* not taking chances on the condition in there */
							possibleDrugs.push({type: "dick", text: `penis enhancement? I know I'm a sex slave and it's my place to get fucked, but when I do get to do a girl, ${Master}, I want to see a little fear in her eyes.`});
						} else {
							possibleDrugs.push({type: "dick", text: `penis enhancement? I know I'm a sex slave and it's my place to get fucked, but when I do get to do a girl, ${Master}, I want to feel her ass clench in fear.`});
						}
					}
					if (canPenetrate(eventSlave) && eventSlave.scrotum > 0 && eventSlave.balls < 10) {
						possibleDrugs.push({type: "balls", text: `testicle enhancement? I know I'm a sex slave and it's my place to get fucked, but when I do get to do a girl, ${Master}, I want to ${canHear(eventSlave) ? `hear her grunt` : `feel her shake`} every single time the weight of my balls slaps against her body.`});
					}
					if (eventSlave.dick === 0 && eventSlave.clit < 5) {
						possibleDrugs.push({type: "clit", text: `clit enhancement? I know I'm a sex slave and it's my place to get fucked, but I want to teach those cocky sluts a lesson they'll never forget.`});
					}
				} else if (eventSlave.fetish === "sadist") {
					if (eventSlave.dick.isBetween(0, 5) && canPenetrate(eventSlave)) {
						possibleDrugs.push({type: "dick", text: `penis enhancement? I know I'm a sex slave and it's my place to get fucked, but when I do get to do a girl, ${Master}, I want her to hurt.`});
					}
				} else if (eventSlave.fetish === "masochist") {
					if (eventSlave.dick > 1 && V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
						possibleDrugs.push({type: "dickMinus", text: `hormones to shrink my dick? I'm a sex slave and it's my place to get fucked, and when I get used like a little slut it hurts so good, ${Master}.`});
					}
					if (eventSlave.balls.isBetween(0, 10) && eventSlave.scrotum > 0) {
						possibleDrugs.push({type: "balls", text: `hormones to swell up my balls? I know I won't be using them, but to have such a tempting target for abuse, ${Master}...`});
					}
					if (eventSlave.butt < 9) {
						possibleDrugs.push({type: "butt", text: `ass growth drugs? It would just beg for a good spanking!`});
					}
				} else if (eventSlave.fetish === Fetish.SUBMISSIVE) {
					if (eventSlave.dick > 1 && V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
						possibleDrugs.push({type: "dickMinus", text: `hormones to shrink my dick? I don't need a big dick to get fucked, ${Master}. I don't want to intimidate anyone who might use me.`});
					}
					if (eventSlave.balls > 1 && V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
						possibleDrugs.push({type: "ballsMinus", text: `hormones to shrink my balls? I don't need to cum buckets while getting fucked, ${Master}. I don't want to outdo anyone who might use me.`});
					}
					if (eventSlave.butt < 9) {
						possibleDrugs.push({type: "butt", text: `ass growth drugs? I want whoever's fucking me to have plenty of cushion to push into.`});
					}
					if (eventSlave.lips <= 70) {
						possibleDrugs.push({type: "lips", text: `lip enhancement? I want lips so big everyone will think of just shoving a dick in them.`});
					}
					if (eventSlave.boobs < 3000) {
						possibleDrugs.push({type: "boobs", text: `boob growth drugs? I want to be nothing more than a young man's wet dream. Just a pair of tits, a big ass and some holes to fuck.`});
					}
				} else if (eventSlave.fetish === "cumslut") {
					if (eventSlave.lips <= 70) {
						possibleDrugs.push({type: "lips", text: `lip enhancement? I want everyone to imagine my lips around their cock, ${Master}.`});
					}
					if (eventSlave.balls.isBetween(0, 10) && eventSlave.scrotum > 0) {
						possibleDrugs.push({type: "balls", text: `hormones to add some weight to my balls? I just need to make more cum, ${Master}. I promise I'll clean up after myself too!`});
					}
				} else if (eventSlave.fetish === "buttslut") {
					if (eventSlave.butt < 9) {
						const entry = {type: "butt", text: `ass growth drugs? I would love it if everyone thought of fucking my big butt the moment they saw me!`};
						possibleDrugs.push(...[entry, entry, entry]);
					}
				} else if (eventSlave.fetish === "boobs") {
					if (eventSlave.boobs < 15000) {
						const entry = {type: "boobs", text: `boob growth drugs? I would love it if everyone thought of touching and sucking and fucking my big bimbo boobies the moment they saw me!`};
						possibleDrugs.push(...[entry, entry, entry]);
					}
				} else if (eventSlave.fetish === "pregnancy") {
					if (canPenetrate(eventSlave) && eventSlave.scrotum > 0 && eventSlave.balls < 10) {
						possibleDrugs.push({type: "balls", text: `hormones to add some heft to my balls? When I get the chance to cum in a girl, I want to get her pregnant, really pregnant!`});
					}
					if (eventSlave.boobs < 3000) {
						const entry = {type: "boobs", text: `boob growth drugs? I want to look, you know, fertile, ${Master}.`};
						possibleDrugs.push(...[entry, entry]);
					}
					if (eventSlave.butt < 6) {
						const entry = {type: "butt", text: `ass growth drugs? I want to look, you know, fertile, ${Master}, even if it's not in my hips.`};
						possibleDrugs.push(...[entry, entry, entry]);
					}
				} else if (eventSlave.fetish === "humiliation") {
					if (eventSlave.dick > 1 && V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
						possibleDrugs.push({type: "dickMinus", text: `hormones to shrink my dick? It would be so humiliating to have a little bitch dick, ${Master}, everyone would know I'm a worthless little slut.`});
					}
					if (eventSlave.lips <= 70) {
						possibleDrugs.push({type: "lips", text: `lip enhancement? I want lips so big everyone knows I'm a slut the moment they see me. They'll all stare at me.`});
					}
					if (eventSlave.boobs < 10000) {
						possibleDrugs.push({type: "boobs", text: `boob growth drugs? I want big bimbo breasts so big I just spill out of my top.`});
					}
					if (eventSlave.butt < 9) {
						possibleDrugs.push({type: "butt", text: `ass growth drugs? I want to risk ripping my clothes any time I bend over.`});
					}
				}
			}

			if (eventSlave.energy > 95 && eventSlave.dick > 0 && eventSlave.dick < 5 && eventSlave.balls > 0 && !["humiliation", "masochist", "submissive"].includes(eventSlave.fetish)) {
				possibleDrugs.push({type: "dick", text: `penis enhancement? I just want to fuck all the time, ${Master}. ${capFirstChar(girl)}s with big cocks have more fun, even getting fucked. Especially getting fucked.`});
			}

			if (eventSlave.attrKnown === 1) {
				if (eventSlave.attrXY > 65 && eventSlave.boobs < 3000) {
					const entry = {type: "boobs", text: `boob growth drugs? Nothing gets a cute boy hard like a big pair of boobies.`};
					possibleDrugs.push(...[entry, entry]);
				}
				if (eventSlave.attrXX > 65 && canPenetrate(eventSlave) && eventSlave.dick < 5) {
					const entry = {type: "dick", text: `penis enhancement? Nothing gets a cute girl wet better than a big hard shaft.`};
					possibleDrugs.push(...[entry, entry]);
				}
			}

			if (V.arcologies[0].FSGenderRadicalist !== "unset") {
				if (V.arcologies[0].FSGenderRadicalistLawFuta === 2) {
					if (canPenetrate(eventSlave) && eventSlave.dick < 5) {
						const entry = {type: "dick", text: `penis enhancement? I want to be the best hung slave I can be, ${Master}. I want them to see my erection and stare.`};
						possibleDrugs.push(...[entry, entry, entry]);
					}
					if (eventSlave.scrotum > 0 && eventSlave.balls < 10) {
						const entry = {type: "balls", text: `hormones to add some size to my balls? My package is falling behind all the other slaves out there...`};
						possibleDrugs.push(...[entry, entry, entry]);
					}
				} else if (V.arcologies[0].FSGenderRadicalistLawFuta === 3) {
					if (eventSlave.butt < 9) {
						const entry = {type: "butt", text: `ass growth drugs? I feel like I'm starting to fall behind the other slaves...`};
						possibleDrugs.push(...[entry, entry, entry]);
					}
				} else {
					if (eventSlave.dick > 1 && V.arcologies[0].FSSlimnessEnthusiastResearch === 1) {
						possibleDrugs.push({type: "dickMinus", text: `of hormones to shrink my dick? A big one too. I just want to become the best little girl I can be, ${Master}, I don't want anything distracting anyone from my rear pussy.`});
					}
				}
			}

			if (eventSlave.toyHole === "dick") {
				if (eventSlave.dick < 5) {
					possibleDrugs.push({type: "dick", text: `penis enhancement? I know how much you like using it, ${Master}, and I want to make sure it is good for you too.`});
				}
			} else if (eventSlave.toyHole === "mouth") {
				if (eventSlave.lips <= 90) {
					possibleDrugs.push({type: "lips", text: `lip enhancement? I know how much you like using them, ${Master}.`});
				}
			} else if (eventSlave.toyHole === "ass") {
				if (eventSlave.butt < 9) {
					possibleDrugs.push({type: "butt", text: `ass growth drugs? I know how much you like using it, ${Master}.`});
				}
			} else if (eventSlave.toyHole === "boobs") {
				if (eventSlave.boobs < 25000) {
					possibleDrugs.push({type: "boobs", text: `boob growth drugs? I know how much you like using them, ${Master}.`});
				}
			}

			if (eventSlave.boobs < eventSlave.butt * 750) {
				possibleDrugs.push({type: "boobs", text: `boob growth drugs? I want to be as fuckable as I can for you, ${Master}, and I think my boobs need it more than my butt.`});
			} else if (eventSlave.butt < eventSlave.boobs/500 && eventSlave.butt < 9) {
				possibleDrugs.push({type: "butt", text: `ass growth drugs? I want to be as fuckable as I can for you, ${Master}, and I think my butt needs it more than my boobs.`});
			} else {
				possibleDrugs.push({type: "boobs", text: `boob growth drugs? The way they bounce when I get fucked is kind of addicting...`});
			}
			// @ts-ignore
			return possibleDrugs.random();
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				canStand,
				canHear,
				s => s.assignment !== Job.QUARTER,
				s => s.voice > 0,
				s => s.lips <= 95,
				s => s.mouthAccessory === "none",
				s => s.accent === 3,
				s => s.devotion <= 50,
				s => s.trust > -10,
				s => (s.devotion >= -20 || s.trust < -20),
			]
		];
	}

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

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

		let r = [];
		r.push(`Standing before you for an inspection is`);
		r.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), "."));
		r.push(`The obedient ${SlaveTitle(eventSlave)} has run through the prescribed motions of a normal inspection, and you've reached the part of the routine where you usually ask the slave a few questions, give ${him} a few orders, or fuck ${him}. ${His}`);
		if (canSee(eventSlave)) {
			r.push(`${App.Desc.eyesColor(eventSlave)} are watching you closely,`);
		} else {
			r.push(`face is centered on you,`);
		}
		r.push(`and ${he}'s listening carefully for direction. This is probably due to linguistic anxiety: ${he} can understand the most straightforward commands, but giving ${him} orders is often an exercise in`);
		if (canSee(eventSlave)) {
			r.push(`pointing and gesturing, or when that fails, simply`);
		} else {
			r.push(`frustration, ending with you simply`);
		}
		r.push(`pushing and pulling ${his} usually-compliant body into the proper place.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Give ${him} personal language lessons`, language),
			new App.Events.Result(`Teach ${him} the words for body parts`, bodyParts),
		]);

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

			r.push(`You order ${him} to sit next to you. Sure enough, ${he} hesitates, but ${he} seems to have gotten the 'next to you' part, and comes carefully over,`);
			if (canSee(eventSlave)) {
				r.push(`watching you`);
			} else {
				r.push(`listening`);
			}
			r.push(`intently for any indication that ${he}'s misunderstood you. Once there, ${he} stops, knees bent partway as ${he} second-guesses ${himself} about whether ${he}'s supposed to sit. Sighing internally, you grab`);
			if (eventSlave.belly >= 5000) {
				if (eventSlave.piercing.navel.weight > 0) {
					r.push(`the piercing dangling from ${his} ${belly} belly`);
				} else {
					r.push(`${his} ${belly} belly`);
				}
			} else if (eventSlave.piercing.nipple.weight > 0) {
				r.push(`a nipple piercing`);
			} else if (eventSlave.nipples === "fuckable") {
				r.push(`a nipplecunt`);
			} else if (eventSlave.lactation > 0) {
				r.push(`a milky nipple`);
			} else {
				r.push(`a nipple`);
			}
			r.push(`and pull downward gently.`, Spoken(eventSlave, `"Sorry ${Master},"`), `${he} mutters in ${his} barbarous ${eventSlave.nationality !== "Stateless" ? `${aNational(eventSlave.nationality)}` : ""} accent, and sits`);
			if (eventSlave.belly >= 5000) {
				r.push(`carefully down.`);
			} else {
				r.push(`hurriedly down.`);
			}
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`You review 'next,' praising ${him} for getting that, and then move on to 'sit,' 'stand,' and other such useful terms, teaching the ${V.language} language to the nude slave sitting`);
			if (eventSlave.belly >= 10000 || eventSlave.weight >= 130) {
				r.push(`heavily`);
			} else if (hasBothLegs(eventSlave)) {
				r.push(`cross-legged`);
			}
			r.push(`next to you. ${He} listens raptly, parroting obediently and clearly doing ${his} best to please, but you notice a certain incredulity that slowly fades as the lesson goes on. ${He}'s obviously having trouble believing that ${his} owner would trouble ${himselfP} with ${his} vocabulary lessons. You work with ${him} several times a day, and ${he}'s so diligent that by the end of the week ${he}'s beginning to make ${himself} understood, though ${his} accent is still pretty atrocious.`);
			eventSlave.accent--;
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function bodyParts(){
			const frag = document.createDocumentFragment();

			r = [];
			r.push(`You order ${him} to stand next to you. ${He} hesitates, but eventually processes the instruction and`);
			if (canWalk(eventSlave)) {
				r.push(`hurries`);
			} else {
				r.push(`shuffles`);
			}
			r.push(`over. When ${he} comes to a stop, ${he} gasps to find you taking ${him} by the`);
			if (hasBothArms(eventSlave)) { // really going all in here
				r.push(`hands. You raise them slightly, bringing them`);
				if (canSee(eventSlave)) {
					r.push(`up into ${his} field of view,`);
				} else {
					r.push(`to ${his} attention,`);
				}
				r.push(`and tell ${him} that these are ${his} hands. "${Spoken(eventSlave, "Hands")}," ${he} parrots in ${V.language} understanding that this is a language lesson. Your own hands slide over ${his} wrists to grasp ${his}`);
				if (eventSlave.weight > 160) {
					r.push(`fat`);
				} else if (eventSlave.weight > 95) {
					r.push(`chubby`);
				} else if (eventSlave.muscles > 5) {
					r.push(`toned`);
				} else {
					r.push(`soft`);
				}
				r.push(`forearms, producing a little shiver; you name them, and ${he} repeats after you, "${Spoken(eventSlave, "Arms")}." You reach`);
			} else {
				r.push(`hand. You raise it slightly, bringing it`);
				if (canSee(eventSlave)) {
					r.push(`up into ${his} field of view,`);
				} else {
					r.push(`to ${his} attention,`);
				}
				r.push(`and tell ${him} that these are ${his} hand. "Hand," ${he} parrots in ${V.language} understanding that this is a language lesson. Your own hands slide over ${his} wrist to grasp ${his}`);
				if (eventSlave.weight > 160) {
					r.push(`fat`);
				} else if (eventSlave.weight > 95) {
					r.push(`chubby`);
				} else if (eventSlave.muscles > 5) {
					r.push(`toned`);
				} else {
					r.push(`soft`);
				}
				r.push(`forearm, producing a little shiver; you name it, and ${he} repeats after you, "Arm." You reach`);
			}
			if (eventSlave.height >= 185) {
				r.push(`a long way up to reach the tall`);
			} else if (eventSlave.height >= 160) {
				r.push(`up to caress the`);
			} else {
				r.push(`out to touch the diminutive`);
			}
			r.push(`slave's shoulders possessively, and name them.`, Spoken(eventSlave, `"Shoulder."`));
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`You continue from there.`, Spoken(eventSlave, `"Neck. Chin. Lips. Chest. Boobs. ${eventSlave.nipples === "fuckable" ? "N-nipplecunts" : "N-nipples"}. Belly. Hips,`));
			if (eventSlave.dick > 0) {
				if (eventSlave.balls > 0) {
					r.push(Spoken(eventSlave, `c-cock, oh ${Master}, p-please, augh, balls,`));
				} else {
					r.push(Spoken(eventSlave, `b-bitchclit, oh ${Master}, p-please,`));
				}
			}
			if (eventSlave.vagina > -1) {
				r.push(Spoken(eventSlave, `pussy. Cliiiiiit, oh ${Master} n-nuh,`));
			}
			r.push(Spoken(eventSlave, `Butt," and finally, "B-butt, um, butthole."`));
			App.Events.addParagraph(frag, r);
			App.Events.addResponses(frag, [
				new App.Events.Result(`Now let ${him} review`, review),
				canDoVaginal(eventSlave)
					? new App.Events.Result(`Cover some sexual vocabulary, and make sure ${he} doesn't forget it`, sexual, eventSlave.vagina === 0 ? `This option will take ${his} virginity` : null)
					: new App.Events.Result(),
				canDoAnal(eventSlave)
					? new App.Events.Result(`Cover some anal vocabulary, and make sure ${he} doesn't forget it`, anal, eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null)
					: new App.Events.Result(),
				canPenetrate(eventSlave) && (eventSlave.toyHole === "dick" || V.policies.sexualOpenness === 1)
					? new App.Events.Result(`Cover some extra curricular vocabulary, and see if ${he} retains it`, fuckMe, `This option will penetrate you`)
					: new App.Events.Result(),
			]);

			function review() {
				r = [];
				r.push(`You tell ${him} to do the inspection routine again, narrating it ${himself}. ${He} understands immediately, and hustles back to stand in front of your desk, brow furrowed in concentration as ${he} struggles to keep the vocabulary in ${his} head. ${He} shows each part of ${his} body to you in turn, and gets every single one of the terms to describe ${his} body — which in the legal sense, is actually your body, one of many you own — perfectly right, though of course ${he} repeats them in ${his} atrocious ${eventSlave.nationality !== "Stateless" ? `${aNational(eventSlave.nationality)}` : ""} accent. ${He} even has the confidence to throw in a little flourish: ${he} says`);
				if (eventSlave.belly >= 10000) {
					r.push(`"Belly!" with flirty emphasis, stroking it sensually.`);
				} else if (eventSlave.boobs > 3000) {
					r.push(Spoken(eventSlave, `"Boobs!"`), `with flirty emphasis, bouncing them for you.`);
				} else if (eventSlave.dick > 0 && eventSlave.balls > 0) {
					r.push(Spoken(eventSlave, `"Cock!"`), `with flirty emphasis, making it bounce for you.`);
				} else if (eventSlave.dick > 0) {
					r.push(Spoken(eventSlave, `"Bitchclit!"`), `with flirty emphasis, making it wave for you.`);
				} else if (eventSlave.lips > 40) {
					r.push(Spoken(eventSlave, `"Lips!"`), `with flirty emphasis, and blows you a kiss.`);
				} else if (eventSlave.butt > 4) {
					r.push(`"Butt!" with flirty emphasis, jiggling it for you.`);
				} else {
					r.push(`"Butthole!" with flirty emphasis, bending over and`);
					if (!canDoAnal(eventSlave)) {
						r.push(`shaking ${his} anal chastity at you.`);
					} else {
						r.push(`winking it for you.`);
					}
				}
				eventSlave.trust += 4;
				return r;
			}

			function sexual() {
				const {girlU, himU, hisU} = getNonlocalPronouns(V.seeDicks).appendSuffix("U");

				r = [];
				r.push(`A glance at one of your desk monitors reveals that another slave whose business brought ${himU} past this area of the penthouse has paused and is listening quizzically, trying to figure out what this odd, heavily accented chant coming out of your office means. It soon becomes obvious.`);
				r.push(Spoken(eventSlave, `"Fingerfuuuck!"`));
				r.push(`comes ${eventSlave.slaveName}'s voice, loud and clear, and <span class="devotion inc">desperately eager to please.</span> ${He} continues, moving from "Pussy" to`);
				if (V.PC.dick !== 0) {
					r.push(Spoken(eventSlave, `"${Master}'s ${V.PC.vagina !== -1 ? "futacock" : "cock"}, oh no,"`));
				} else {
					r.push(Spoken(eventSlave, `"Strap-on, oh no,"`));
				}
				r.push(`to repetition of`);
				r.push(Spoken(eventSlave, `"Intercourse, sex, unh, fucking, screwing, um, pounding,"`));
				r.push(`and so on. Just when the eavesdropping ${girlU} decides that this has become monotonous and turns to go about ${hisU} business, ${eventSlave.slaveName}'s voice rises sharply in pitch. "Aaah! rape!`);
				r.push(Spoken(eventSlave, `Oh please, ${Master}, ohh, rape, rape,"`));
				r.push(`followed by much tearful repetition of what's happening to ${him}, and a final, sad`);
				if (V.PC.dick !== 0) {
					r.push(Spoken(eventSlave, `"C-creampie,"`));
				} else {
					r.push(`"Loosened,"`);
				}
				r.push(`in a defeated little voice.`);
				eventSlave.trust -= 2;
				eventSlave.devotion += 4;
				r.push(VCheck.Vaginal(eventSlave, 1));
				return r;
			}

			function anal() {
				const {girlU, himU, hisU} = getNonlocalPronouns(V.seeDicks).appendSuffix("U");

				r = [];
				r.push(`A glance at one of your desk monitors reveals that another slave whose business brought ${himU} past this area of the penthouse has paused and is listening quizzically, trying to figure out what this odd, heavily accented chant coming out of your office means. It soon becomes obvious.`);
				r.push(Spoken(eventSlave, `"Fingerfuuuck!"`));
				r.push(`comes ${eventSlave.slaveName}'s voice, loud and clear, and <span class="devotion inc">desperately eager to please.</span> ${He} continues, moving from "Sphincter" to`);
				if (V.PC.dick !== 0) {
					r.push(Spoken(eventSlave, `"${Master}'s ${V.PC.vagina !== -1 ? "futacock" : "cock"}, oh no,"`));
				} else {
					r.push(Spoken(eventSlave, `"Strap-on, oh no,"`));
				}
				r.push(`to repetition of`);
				r.push(Spoken(eventSlave, `"Anal, buttsex, unh, assfucking, sodomy, um, buttfucking,"`));
				const Assrape = Spoken(eventSlave, "Assrape");
				r.push(`and so on. Just when the eavesdropping ${girlU} decides that this has become monotonous and turns to go about ${hisU} business, ${eventSlave.slaveName}'s voice rises sharply in pitch. "Aaah! ${Assrape}!`);
				r.push(Spoken(eventSlave, `Oh please, ${Master}, ohh, assrape, assrape,"`));
				r.push(`followed by much tearful repetition of what's happening to ${him}, and a final, sad`);
				if (V.PC.dick !== 0) {
					r.push(Spoken(eventSlave, `"C-creampie,"`));
				} else {
					r.push(`"Gape,"`);
				}
				r.push(`in a defeated little voice.`);
				eventSlave.trust -= 2;
				eventSlave.devotion += 4;
				r.push(VCheck.Anal(eventSlave, 1));
				return r;
			}

			function fuckMe() {
				const {girlU, himU, hisU} = getNonlocalPronouns(V.seeDicks).appendSuffix("U");

				r = [];
				r.push(`A glance at one of your desk monitors reveals that another slave whose business brought ${himU} past this area of the penthouse has paused and is listening quizzically, trying to figure out what this odd, heavily accented chant coming out of your office means. It soon becomes obvious.`);
				r.push(Spoken(eventSlave, `"Erection!"`));
				r.push(`comes ${eventSlave.slaveName}'s voice, loud and clear, and <span class="devotion inc">desperately eager to please.</span> ${He} continues, moving from "Glans" to`);
				r.push(Spoken(eventSlave, `"${Master}'s ${V.PC.vagina !== -1 ? "pussy" : "butthole"}, ah warm,"`));
				r.push(`to repetition of`);
				r.push(Spoken(eventSlave, `"Intercourse, sex, unh, fucking, breeding, um, mounting,"`));
				const Orgasm = Spoken(eventSlave, "Orgasm");
				r.push(`and so on. Just when the eavesdropping ${girlU} decides that this might be too salacious for ${hisU} well-being and turns to go about ${hisU} business, ${eventSlave.slaveName}'s voice rises sharply in pitch. "Aaah! ${Orgasm}!`);
				r.push(Spoken(eventSlave, `Oh ${Master}, ohh, orgasm, orgasm,"`));
				r.push(`followed by much breathless repetition of what's about to come, and a final, ecstatic`);
				r.push(Spoken(eventSlave, `"C-creampie!"`));
				r.push(`in a completely out of breath voice.`);
				eventSlave.trust += 4;
				eventSlave.devotion += 4;
				if (V.PC.vagina !== -1) {
					seX(eventSlave, "penetrative", V.PC, "vaginal");
					if (canImpreg(V.PC, eventSlave)) {
						knockMeUp(V.PC, 20, 0, eventSlave.ID);
					}
				} else {
					seX(eventSlave, "penetrative", V.PC, "anal");
					if (canImpreg(V.PC, eventSlave)) {
						knockMeUp(V.PC, 20, 1, eventSlave.ID);
					}
				}
				return r;
			}
			return frag;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				canStand,
				hasAnyArms,
				s => (s.assignment === Job.FUCKTOY || s.assignment === Job.MASTERSUITE || s.assignment === Job.CONCUBINE),
				s => s.devotion > 20,
			]
		];
	}

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

		/** @param {App.Entity.SlaveState} slave */
		function getSceneClothes(slave) {
			if (getLimbCount(slave, 102) > 2) {
				return "an oversized t-shirt";
			} else if (slave.boobs > 4000) {
				return "an oversized t-shirt"; /* loose pajama top */
			} else if (slave.intelligence+slave.intelligenceImplant > 50) {
				return "a halter top dress";
			} else if (slave.muscles > 30) {
				if (isItemAccessible.entry("sport shorts", "clothes")) {
					if (slave.boobs >= 650) {
						return "sport shorts and a sports bra";
					} else {
						return "sport shorts";
					}
				} else {
					return "spats and a tank top";
				}
			} else if (slave.energy > 95) {
				return null; // no change of clothes
			} else {
				return "conservative clothing";
			}
		}

		App.Events.drawEventArt(node, eventSlave, getSceneClothes(eventSlave));

		let t = [];
		t.push(`Although your life as an arcology owner comes with many associated privileges, extended idleness to bask in your luxury is not often among them. Thankfully, ${V.assistant.name} knows better than to let you run yourself ragged from the weight of your assorted responsibilities and often allots time in the evenings of your active schedule to simply relax.`);
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`Of course, no self respecting arcology owner could be expected to enjoy a lazy night of idle relaxation on their own. As you resolve the last of your most pressing responsibilities for the evening, ${V.assistant.name} directs one of your attentive slaves to gently guide you away from the unending burdens of running your arcology. Leaning against the doorway and wearing a facsimile of what an old world ${woman} might wear on a casual night in,`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		if (!canTalk(eventSlave)) {
			t.push(`asks with a gesture that carries just the right mixture of submission and exaggerated casualness if you'd like to 'hang out.'`);
		} else if (SlaveStatsChecker.checkForLisp(eventSlave)) {
			t.push(
				`lisps with exaggerated casualness,`,
				Spoken(eventSlave, `"Let's hang out, ${title}?"`)
			);
		} else {
			t.push(
				`asks with exaggerated casualness,`,
				Spoken(eventSlave, `"Want to hang out, ${title}?"`)
			);
		}
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`${He} saunters over and`);
		if (eventSlave.belly >= 100000) {
			t.push(`struggles to lower ${his} ${bellyAdjective(eventSlave)} form to an obedient kneel`);
		} else if (eventSlave.belly >= 10000) {
			t.push(`gingerly lowers ${his} heavily ${eventSlave.bellyPreg > 3000 ? "gravid" : "swollen"} form to an obedient kneel`);
		} else if (eventSlave.belly >= 5000) {
			t.push(`gently lowers ${his} ${eventSlave.bellyPreg > 3000 ? "gravid" : "swollen"} form to an obedient kneel`);
		} else {
			t.push(`kneels obediently`);
		}
		t.push(`in front of you, awaiting further direction.`);

		/* If you are updating below, please consider updating the vector art swaps at the top to match. */
		if (getLimbCount(eventSlave, 102) > 2) {
			t.push(`Clad in an antique T-Shirt referencing some defunct old world website, ${his} P-Limbs stand in stark contrast — gyros and servomotors against simple thread and cloth. With such tangible examples of the technological prowess of the Free Cities serving as ${his} limbs, ${his} ${eventSlave.belly >= 5000 ? "taut " : ""} shirt is an amusing testimonial to how far behind the old world stands in contrast to the new.`);
		} else if (eventSlave.boobs > 4000) {
			t.push(`${His} breasts are so massive that the front of ${his} loose pajama top must be unbuttoned. Even so, the protrusion of ${his} immense breasts`);
			if (eventSlave.belly >= 5000) {
				t.push(`and ${bellyAdjective(eventSlave)} rounded belly from ${his} body`);
			} else {
				t.push(`from ${his} chest`);
			}
			t.push(`strains the soft pajama top to its breaking point.`);
		} else if (eventSlave.intelligence+eventSlave.intelligenceImplant > 50) {
			t.push(`As a clever ${girl}, ${his} simple${eventSlave.belly >= 5000 ? `, yet tight around the middle,` : ""} summer dress evokes memories of bygone warm weather days at elite old world colleges — and the sexual conquest of their youthful residents.`);
		} else if (eventSlave.muscles > 30) {
			t.push(`${His} simple sports bra and compression shorts ensemble does little to conceal ${his} incredible musculature,`);
			if (eventSlave.belly >= 1500) {
				t.push(`straining to hold up against ${his} swelling middle and`);
			}
			t.push(`glistening with sweat from a recent workout. Despite ${his} recent exertions, ${he}'s able to maintain utter stillness in the perfect posture of an obedient slave.`);
		} else if (eventSlave.energy > 95) {
			t.push(`${He}'s controlling ${his} absurd sex drive for the moment in deference to the notion of your relaxation time, but ${he} clearly wouldn't mind some sex as part of the evening.`);
			if (eventSlave.dick > 0) {
				if (canAchieveErection(eventSlave)) {
					t.push(`${His} cock is painfully erect`);
					if (eventSlave.belly >= 10000) {
						t.push(`and pressed against the underside of ${his} belly,`);
					}
				} else {
					t.push(`${His} soft dick is dribbling precum,`);
				}
			} else {
				t.push(`${His} pussy is visibly soaked,`);
			}
			t.push(`showing unmistakably how badly ${he} needs release.`);
		} else {
			t.push(`${He} keeps ${his}`);
			if (canSee(eventSlave)) {
				t.push(App.Desc.eyesColor(eventSlave));
			} else {
				t.push("face");
			}
			t.push(`slightly downcast, ${his} hands lightly smoothing the folds from ${his} tight skirt while ${his} breasts visibly rise and fall under ${his} even tighter blouse.`);
			if (eventSlave.belly >= 5000) {
				t.push(`Between the two, there is little ${he} can do to cover ${his} exposed ${eventSlave.bellyPreg >= 3000 ? "pregnancy" : "middle"}.`);
			}
			t.push(`${He}'s the perfect picture of an attentive little old world ${girl}friend${eventSlave.height > 185 ? ` (though, of course, ${he}'s anything but physically small)` : ""}.`);
		}
		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result("Enjoy some oral with an evening of wallscreen television", flixAndChill),
			new App.Events.Result("Spend the night idly cuddling", cuddle),
			new App.Events.Result(`Unwind by tormenting ${him}`, torture)
		]);

		function flixAndChill() {
			let t = [];
			t.push(`There are some things that never change, even after ascension to the high position of an arcology owner. One of these fixtures of life is the ability to enjoy a relaxing evening of wallscreen television and`);
			if (V.PC.dick !== 0) {
				t.push("a blowjob");
				if (V.PC.vagina !== -1) {
					t.push("and");
				}
			}
			if (V.PC.vagina !== -1) {
				t.push("some cunnilingus");
			}
			t.push(t.pop() + ".");
			t.push(`With ${eventSlave.slaveName} sequestered between your legs, you tune into your favorite Free Cities serial drama and widen your legs slightly as you sink back into the chair with a sigh of contentment. ${He}`);
			if (eventSlave.belly >= 300000) {
				t.push(`gently leans onto ${his} ${bellyAdjective(eventSlave)} belly`);
				if (hasAnyArms(eventSlave)) {
					t.push(`with ${his} arm${hasBothArms(eventSlave) ? "s" : ""} steadying the mass`);
				}
			} else if (eventSlave.belly >= 5000) {
				if (hasAnyLegs(eventSlave)) {
					t.push(`kneels carefully`);
				} else {
					t.push(`lowers ${himself}`);
				}
				if (hasAnyArms(eventSlave)) {
					t.push(`with ${hasBothArms(eventSlave) ? `an` : `${his}`} arm`);
					if (eventSlave.bellyPreg >= 3000) {
						t.push(`wrapped protectively around ${his} bump`);
					} else {
						t.push(`cradling ${his} ${bellyAdjective(eventSlave)} belly`);
					}
				}
			} else {
				t.push(`sinks to`);
				if (hasAnyLegs(eventSlave)) {
					t.push(`${his} knee${hasBothLegs(eventSlave) ? "s" : ""} obediently`);
					if (hasAnyArms(eventSlave)) {
						t.push(`with ${his} hand${hasBothArms(eventSlave) ? "s" : ""} placed placidly on ${his} thigh${hasBothLegs(eventSlave) ? "s" : ""}`);
					}
				} else {
					t.push("the ground");
				}
			}
			t.push(`before putting ${his} mouth to work,`);
			if (eventSlave.skill.oral >= 100) {
				t.push(`${his} mastery at giving oral providing a wealth of pleasure.`);
			} else if (eventSlave.skill.oral > 60) {
				t.push(`${his} skills in oral providing ample pleasure.`);
			} else {
				t.push(`${his} mediocre oral skills providing some relief.`);
			}
			if (eventSlave.teeth === "pointy") {
				t.push(`Although most of your attention is focused on the intriguing drama unfolding on your wallscreen, you still feel the extreme care ${he} has to take to keep ${his} shark-like teeth clear of you.`);
			} else if (eventSlave.teeth === "fangs") {
				t.push(`Although most of your attention is focused on the intriguing drama unfolding on your wallscreen, you can feel the slight hesitations as ${he} takes care to not scratch you with ${his} fangs.`);
			} else if (eventSlave.lips > 40) {
				t.push(`${His} huge lips are soft and pillowy against you.`);
			} else if (eventSlave.teeth === "fang") {
				t.push(`Although most of your attention is focused on the intriguing drama unfolding on your wallscreen, you can feel the care ${he} is taking to keep ${his} fang from clipping you.`);
			} else if (eventSlave.teeth === "gapped") {
				t.push(`Although most of your attention is focused on the intriguing drama unfolding on your wallscreen, you can feel the slight hesitations as ${he} takes care to not pinch you between ${his} front teeth.`);
			} else if ((eventSlave.teeth === "straightening braces") || (eventSlave.teeth === "cosmetic braces")) {
				t.push(`Although most of your attention is focused on the intriguing drama unfolding on your wallscreen, you can feel the slight hesitations as ${he} takes care to keep ${his} braces off you.`);
			}
			t.push(`You have an enjoyable evening glued to your wallscreen, punctuated by the playful ruffling ${eventSlave.hLength > 1 ? `of ${eventSlave.slaveName}'s ${eventSlave.hColor} hair` : `across ${eventSlave.slaveName}'s scalp`} and the occasional orgasm into ${his} waiting mouth.`);
			if (eventSlave.sexualFlaw !== "hates oral") {
				t.push(`Though your experience was more stimulating than ${hers}, ${eventSlave.slaveName} <span class="devotion inc">enjoyed being used while you enjoyed yourself.</span>`);
				eventSlave.devotion += 4;
			} else {
				t.push(`Although you enjoyed ${his} ministrations, ${eventSlave.slaveName} had a bad time because of ${his} <span class="devotion dec">hate of oral.</span>`);
				eventSlave.devotion -= 2;
			}
			seX(eventSlave, "oral", V.PC, "penetrative");
			return t;
		}

		function cuddle() {
			let t = [];
			t.push(`Though your evening could hardly be called eventful, there is something eminently comforting about having a warm`);
			if (eventSlave.physicalAge > 30) {
				t.push(woman);
			} else if (eventSlave.physicalAge > 18) {
				t.push("young lady");
			} else if (eventSlave.physicalAge > 12) {
				t.push("teen");
			} else {
				t.push(`little ${girl}`);
			}
			t.push(`cuddled up beside you to idly while away the hours`);
			if (eventSlave.bellyPreg >= 1500 && eventSlave.pregSource === -1) {
				t.push(t.pop() + ",");
				t.push(`especially when ${he} is ${eventSlave.belly >= 300000 ? `so massively swollen with your children` : `heavy with your child${eventSlave.pregType > 1 ? "ren" : ""}`}`);
			}
			t.push(t.pop() + ".");
			t.push(`${He} <span class="trust inc">trusts you more</span> for these few intimate hours amidst ${his} life of sexual servitude.`);
			eventSlave.trust += 4;
			return t;
		}

		function torture() {
			let t = [];
			t.push(`Though there is no shortage of torments you inflict during the course of your day to day life as an arcology owner, there is something refreshing about torturing a slave out of idle boredom rather than corrective disciple or sexual domination. Your night is filled with ${eventSlave.voice === 0 ? "the horrible rasping that a mute throat substitutes for cries of agony" : "echoing shrieks of anguish"}, though every vocal outburst is idly punished with electro shock or strike of the whip. Come the morning, ${eventSlave.slaveName}`);
			if (eventSlave.fetish === "masochist") {
				t.push(`is mortified by the intensity of ${his} orgasms that night, <span class="devotion inc">and more convinced than ever that ${he}'s a pain slut,</span> and yet`);
				eventSlave.devotion += 4;
			}
			t.push(`<span class="trust dec">scuttles away to tend to the bruises and marks that litter ${his} battered body.</span>`);
			eventSlave.trust -= 5;
			return t;
		}
	}
};


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

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				canHear,
				s => s.skill.whoring >= 100,
				s => s.trust > 50,
				s => s.devotion > 20,
				s => s.assignment === Job.WHORE,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {He, he, his, him, himself} = getPronouns(eventSlave);
		const feet = hasBothLegs ? "feet" : "foot";

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

		let r = [];
		r.push(`As a queen of the whorehouse,`);
		r.push(contextualIntro(V.PC, eventSlave, true));
		r.push(`is never surprised, never squeamish, and always on the prowl for ${his} next customer. ${He} has mastered the transactionalization of sex. When ${he}'s selling ${himself} by the hole, a customer who purchases ${his} skilled oral services will often find himself upsold to a more expensive`);
		if (canDoVaginal(eventSlave) && eventSlave.vagina > 0) {
			r.push(`vaginal experience.`);
		} else if (canDoAnal(eventSlave) && eventSlave.anus > 0) {
			r.push(`anal experience.`);
		} else {
			r.push(`showcase of ${his} skills.`);
		}
		r.push(`When ${he}'s doing it by the orgasm, customers find themselves climaxing rather more quickly than they intended.`);
		App.Events.addParagraph(node, r);
		App.Events.addParagraph(node, [`And perhaps most importantly, ${he} always has an ear to the ground, even when one of them is being shoved against the sheets. Customers say the most interesting things when they've got themselves buried in ${him}. Today, ${he}'s got an especially delightful morsel of information for you: one of your commercial tenants is shortchanging you on rent, concealing profits to reduce your share.`]);

		App.Events.addResponses(node, [
			new App.Events.Result(`Require double repayment`, double),
			new App.Events.Result(`Require double repayment and spend it on ${him}`, spend),
			new App.Events.Result(`Leverage the situation and reward ${him}`, reward, `This option will cost ${cashFormat(2000)}`),
		]);

		function double() {
			cashX(random(150, 200)*10, "event", eventSlave);
			return `Your tenant knows that abject surrender is his only hope once you make it clear to him that his scheme is known to you. He complies all too eagerly with your demand that he repay double what he owes.`;
		}

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

			r = [];
			r.push(`Your tenant knows that abject surrender is his only hope once you make it clear to him that his scheme is known to you. He complies all too eagerly with your demand that he repay double what he owes. Slaves are not permitted to keep possessions, especially money, so you spend it on ${eventSlave.slaveName} directly. ${He} spends the day`);
			if (eventSlave.preg > eventSlave.pregData.normalBirth / 2) {
				r.push(`having ${his} pregnant belly moisturized,`);
				if (hasAnyLegs(eventSlave)) {
					r.push(`${his} tired ${feet} rubbed,`);
				}
				r.push(`${his} cravings fulfilled, being`);
			} else {
				r.push(`being`);
			}
			r.push(`massaged, beautified, and pampered. You then take ${him} out for a lovely meal, allowing ${him} to wear clothing that's almost conservative by Free Cities standards, and take a nice walk around ${V.arcologies[0].name}'s club, talking on light subjects. ${He}'s deeply touched by an evening of affection without sex.`);
			eventSlave.devotion += 10;
			return r;
		}

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

			r = [];
			r.push(`Archimedes might have his lever, but give you a place to set such information as this, and you can move a mountain of money. Before he knows what has beset him, your tenant is bustled out of ${V.arcologies[0].name} and replaced by a favored and hopefully more honest competitor, who is well aware of the score here. ${eventSlave.slaveName}, who made this possible, spends the day`);
			if (eventSlave.preg > eventSlave.pregData.normalBirth / 2) {
				r.push(`having ${his} pregnant belly moisturized,`);
				if (hasAnyLegs(eventSlave)) {
					r.push(`${his} tired ${feet} rubbed,`);
				}
				r.push(`${his} cravings fulfilled, being`);
			} else {
				r.push(`being`);
			}
			r.push(`massaged, beautified, and pampered. You then take ${him} out for a lovely meal, allowing ${him} to wear clothing that's almost conservative by Free Cities standards, and take a nice walk around ${V.arcologies[0].name}'s club, talking on light subjects. ${He}'s deeply touched by an evening of affection without sex, and ${he} trusts you with all sorts of amusing whorehouse rumors.`);
			eventSlave.devotion += 3;
			eventSlave.trust += 3;
			cashX(-2000, "event", eventSlave);
			V.arcologies[0].prosperity += 1;
			return r;
		}
	}
};