code:
App.Events.RESSForbiddenMasturbation = class RESSForbiddenMasturbation 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,
				s => s.rules.release.masturbation === 0,
				s => !App.Utils.hasNonassignmentSex(s),
				s => s.need > 0,
				s => s.devotion <= 95,
				s => s.trust >= -20,
				s => (s.chastityPenis !== 1 || s.dick === 0),
				hasAnyArms,
				hasAnyLegs,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			He, he, His, his, him, himself
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);
		const {hisA, himselfA, HisA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
		const bellyAdj = bellyAdjective(eventSlave);
		const knees = hasBothLegs(eventSlave) ? "knees" : "knee";

		let offHand = "nothing";

		App.Events.drawEventArt(node, eventSlave);

		let r = [];
		if (V.assistant.personality > 0) {
			r.push(`There is an alert from ${V.assistant.name}, in ${hisA} deliciously feminine voice: "${properMaster()},`, contextualIntro(V.PC, eventSlave, true), `is masturbating. Ooh, ${he}'s breaking the rules, ${properMaster()}!" ${HisA} avatar`);
			switch (V.assistant.appearance) {
				case "monstergirl":
					r.push(`strokes ${hisA} dicks suggestively.`);
					break;
				case "shemale":
					r.push(`shifts uncomfortably, ${hisA} cock rock hard.`);
					break;
				case "amazon":
					r.push(`struts back and forth indignantly, ${hisA} bone bangles rattling.`);
					break;
				case "businesswoman":
					r.push(`licks ${hisA} cherry-red lips suggestively.`);
					break;
				case "fairy":
				case "pregnant fairy":
					r.push(`giggles uncontrollably.`);
					break;
				case "hypergoddess":
				case "goddess":
					r.push(`tutting disapprovingly, despite ${hisA} blushing.`);
					break;
				case "loli":
					r.push(`stares innocently at the scene.`);
					break;
				case "preggololi":
					r.push(`stares at the scene, blushing, while a hand caresses ${hisA} large belly.`);
					break;
				case "angel":
					r.push(`is covering ${hisA} face, occasionally peeping through ${hisA} fingers.`);
					break;
				case "cherub":
					r.push(`is trying ${hisA} hardest to look away, but keeps glancing back at the scene.`);
					break;
				case "incubus":
					r.push(`is openly jacking off to the sight.`);
					break;
				case "succubus":
					r.push(`is groping ${himselfA} to the sight.`);
					break;
				case "imp":
					r.push(`is hovering while viciously fingering ${hisA} cunt.`);
					break;
				case "witch":
					r.push(`is pretending to read from ${hisA} spell book, but is obviously watching over the top of it.`);
					break;
				case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
					r.push(`is mimicking ${hisA} actions nearly perfectly.`);
					break;
				case "schoolgirl":
					r.push(`giggles nervously.`);
					break;
				default:
					r.push(`spins accusingly.`);
			}
		} else {
			r.push(`There is a gentle alert from ${V.assistant.name}: "${properMaster()},`, contextualIntro(V.PC, eventSlave, true), `is masturbating in violation of the rules."`);
		}
		r.push(`A video feed appears.`);
		if (eventSlave.chastityVagina && eventSlave.chastityPenis === 1) {
			r.push(`In ${his} combination chastity, all ${he} can manage is furious nipple-${eventSlave.nipples !== "fuckable" ? "rubbing" : "fisting"}`);
			if (hasBothArms(eventSlave) && canDoAnal(eventSlave)) {
				r.push(`and some furtive fingering of ${his} asshole`);
				offHand = "anal";
			}
			r.push(r.pop() + `.`);
		} else if (eventSlave.chastityVagina && eventSlave.dick === 0) {
			r.push(`In ${his} chastity belt, all ${he} can manage is furious nipple-${eventSlave.nipples !== "fuckable" ? "rubbing" : "fisting"}`);
			if (hasBothArms(eventSlave) && canDoAnal(eventSlave)) {
				r.push(`and some furtive fingering of ${his} asshole`);
				offHand = "anal";
			}
			r.push(r.pop() + `.`);
		} else if (eventSlave.chastityPenis === 1 && eventSlave.vagina === -1) {
			r.push(`In ${his} chastity cage, all ${he} can manage is furious nipple-${eventSlave.nipples !== "fuckable" ? "rubbing" : "fisting"}`);
			if (hasBothArms(eventSlave) && canDoAnal(eventSlave)) {
				r.push(`and some furtive fingering of ${his} asshole`);
				offHand = "anal";
			}
			r.push(r.pop() + `.`);
		} else if (eventSlave.dick > 0 && ((eventSlave.hormoneBalance >= 100) || (eventSlave.balls > 0 && eventSlave.ballType === "sterile") || (eventSlave.balls === 0))) {
			r.push(`Since ${he}'s impotent`);
			if (eventSlave.balls === 0) {
				r.push(`due to ${his} lack of balls,`);
			} else if (eventSlave.ballType === "sterile") {
				r.push(`due to ${his} useless balls,`);
			} else {
				r.push(`from hormone treatment,`);
			}
			r.push(`all ${he} can manage is rubbing ${his} soft dick`);
			if (hasBothArms(eventSlave)) {
				if (canDoVaginal(eventSlave)) {
					r.push(`and some furtive fingering of ${his} pussy.`);
					offHand = "pussy";
				} else if (canDoAnal(eventSlave)) {
					r.push(`and some furtive fingering of ${his} asshole.`);
					offHand = "anal";
				} else {
					r.push(`and some ${eventSlave.nipples !== "fuckable" ? `furious tweaking of ${his} nipples` : `furtive fingering of ${his} nipplecunts`}`);
					offHand = "nipples";
				}
			}
			r.push(r.pop() + `.`);
		} else if (!canAchieveErection(eventSlave) && eventSlave.dick > maxErectionSize(eventSlave)) {
			r.push(`Since ${his} dick requires far too much blood to get erect, ${he}'s furiously massaging the semi-engorged monster.`);
		} else if (!canAchieveErection(eventSlave) && eventSlave.dick > 0) {
			r.push(`Since ${he}'s can't get it up, all ${he} can manage is rubbing ${his} soft dick`);
			if (hasBothArms(eventSlave)) {
				if (canDoVaginal(eventSlave)) {
					r.push(`and some furtive fingering of ${his} pussy.`);
					offHand = "pussy";
				} else if (canDoAnal(eventSlave)) {
					r.push(`and some furtive fingering of ${his} asshole.`);
					offHand = "anal";
				} else {
					r.push(`and some ${eventSlave.nipples !== "fuckable" ? `furious tweaking of ${his} nipples` : `furtive fingering of ${his} nipplecunts`}`);
					offHand = "nipples";
				}
			}
			r.push(r.pop() + `.`);
		} else if (eventSlave.vagina === -1 && eventSlave.dick === 0) {
			r.push(`${He}'s rubbing ${his} perineum desperately`);
			if (hasBothArms(eventSlave)) {
				if (canDoAnal(eventSlave)) {
					r.push(`with one hand, and ${his} anus with the other,`);
					offHand = "anal";
				} else {
					r.push(`with one hand, and a nipple with the other,`);
					offHand = "nipples";
				}
			}
			r.push(`since ${he} lacks external genitalia.`);
		} else if (eventSlave.vagina === -1) {
			r.push(`${He}'s furiously jacking off.`);
		} else if (eventSlave.clit >= 3) {
			r.push(`${He}'s furiously jacking off ${his} clitdick.`);
		} else {
			r.push(`${He}'s furiously polishing ${his} pearl.`);
		}
		r.push(`${He}'s chosen to do it in a dark corner and looks like ${he}'s hurrying; ${he} clearly knows this is forbidden.`);
		App.Events.addParagraph(node, r);
		r = [];

		r.push(`${eventSlave.slaveName} does not hear your`);
		if (canHear(eventSlave)) {
			r.push(`approach until you're very close.`);
		} else {
			r.push(`approach, but soon realizes your presence.`);
		}
		r.push(`${He} starts and tries to look normal.`);
		if (!canTalk(eventSlave)) {
			r.push(`${He} nervously gestures that ${he} wasn't doing anything.`);
		} else {
			r.push(Spoken(eventSlave, `"I wasn't doing anything, ${(eventSlave.rudeTitle === 1) ? PoliteRudeTitle(eventSlave) : Master}!"`), `${he} lies.`);
		}

		App.Events.addParagraph(node, r);
		const unknownOradvanceableFetish = eventSlave.fetishKnown !== 1 || eventSlave.fetishStrength <= 95;
		const responses = [new App.Events.Result(`Let ${him} earn relief`, relief)];
		if (eventSlave.fetish !== "cumslut" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`when ${he} sucks`, sucks));
		}
		if (eventSlave.fetish !== "boobs" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`during nipple play`, nipple));
		}
		if ((eventSlave.fetish !== "pregnancy" || unknownOradvanceableFetish) && eventSlave.belly >= 5000) {
			responses.push(new App.Events.Result(`while fondling ${his} belly`, belly));
		}
		if (canDoAnal(eventSlave) && eventSlave.fetish !== "buttslut" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`when ${he} takes it up the ass`, ass, (eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null)));
		}
		if (eventSlave.fetish !== "humiliation" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`in public`, inPublic));
		}
		if (eventSlave.fetish !== "submissive" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`while submitting to a spanking`, spanking));
		}
		if (eventSlave.fetish !== "masochist" || unknownOradvanceableFetish) {
			responses.push(new App.Events.Result(`while in pain`, pain));
		}

		if (responses.length > 1) {
			responses.splice(1, 0, new App.Events.Result(null, null, `Punish ${him}, but then let ${him} get off:`)); // Hack for providing a headline to certain responses
		}
		eventSlave.need -= 5;
		App.Events.addResponses(node, responses);

		function relief() {
			r = [];

			r.push(`${He}'s extremely relieved that you're not going to punish ${him} for the rulebreaking when you tell ${him} that ${he} can touch ${himself} if ${he}`);
			if (eventSlave.belly >= 300000) {
				r.push(`leans over ${his} ${bellyAdj} belly`);
			} else {
				r.push(`gets on ${his} ${knees}`);
			}
			r.push(`and sucks you off. ${He} does a decent job, playing with ${himself} all the while. ${He}'s learned that ${he} can get away with infractions if ${he}'s willing to suck dick afterward. ${His} resistance to your will has increased.`);
			r.push(newRumor.weakness());
			eventSlave.devotion -= 5;
			seX(eventSlave, "oral", V.PC, "penetrative");
			return r;
		}

		function sucks() {
			r = [];
			if (V.PC.belly >= 10000) {
				if (eventSlave.belly >= 300000) {
					r.push(`You tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy,`);
					} else {
						r.push(`middle,`);
					}
					r.push(`do your best to get close beside ${him},`);
				} else if (eventSlave.belly >= 5000) {
					r.push(`You order ${him} to bend over beside you so your pregnancy doesn't obstruct you as badly`);
				} else {
					r.push(`You lean back, pull ${him} over your knee and under your gravid dome of a middle`);
				}
			} else {
				if (eventSlave.belly >= 300000) {
					r.push(`You tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`middle`);
					}
				} else if (eventSlave.belly >= 5000) {
					r.push(`You spread your legs to give ${his}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`bloated middle`);
					}
					r.push(`room as you pull ${him} onto your lap`);
				} else {
					r.push(`You pull ${him} down over your knee`);
				}
			}
			r.push(`and spank ${his} ${eventSlave.skin} buttocks until they're warm to the touch. It's not a sexual punishment, it's too painful for that; by the end, ${eventSlave.slaveName} has cried ${himself} out and is limp in your hands. You pull ${him} up to face you and give ${him} your instructions: from now on, ${he} can come to you and ask to`);
			if (V.PC.dick !== 0 && V.PC.vagina !== -1) {
				r.push(`blow you and perform cunnilingus on you,`);
			} else if (V.PC.dick !== 0) {
				r.push(`blow you,`);
			} else if (V.PC.vagina !== -1) {
				r.push(`and perform cunnilingus on you,`);
			}
			r.push(`and masturbate while ${he} does. ${He} nods through ${his} tears and flees. In an hour or so, though, ${he} finds you and asks to`);
			if (V.PC.vagina !== -1) {
				r.push(`give you oral.`);
			} else {
				r.push(`suck your cock.`);
			}
			r.push(`When you pretend indifference, ${he} abjectly begs. Soon, ${he}'s down on ${his} ${knees}, crying a little with shame as ${he} masturbates furiously.`);
			seX(eventSlave, "oral", V.PC, "penetrative", 5);
			if (eventSlave.fetish === "cumslut" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of`);
				if (V.PC.dick === 0) {
					r.push(`giving head`);
				} else {
					r.push(`sucking cock`);
				}
				r.push(`has increased.</span>`);
			} else if (eventSlave.fetish === "cumslut") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of`);
				if (V.PC.dick === 0) {
					r.push(`giving head`);
				} else {
					r.push(`sucking cock`);
				}
				r.push(`is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "cumslut";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s getting aroused at the thought of`);
				if (V.PC.dick === 0) {
					r.push(`giving head.</span>`);
				} else {
					r.push(`sucking cock.</span>`);
				}
			}
			return r;
		}

		function nipple() {
			r = [];
			if (V.PC.belly >= 10000) {
				if (eventSlave.belly >= 300000) {
					r.push(`You tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy,`);
					} else {
						r.push(`middle,`);
					}
					r.push(`do your best to get close beside ${him}, and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you flip ${him} onto ${his} back, lower your gravid body down to ${his} level and start playing with ${his} nipples.`);
				} else if (eventSlave.belly >= 5000) {
					r.push(`You order ${him} to bend over beside you so your pregnancy doesn't obstruct you as badly and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you haul ${him} upright and start playing with ${his} nipples.`);
				} else {
					r.push(`You lean back, pull ${him} over your knee and under your gravid dome of a middle and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you haul ${him} upright and start playing with ${his} nipples.`);
				}
			} else {
				if (eventSlave.belly >= 300000) {
					r.push(`You tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`middle`);
					}
					r.push(`and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you haul ${him} up into your lap, ${his} stomach spreading your legs, and start playing with ${his} nipples.`);
				} else if (eventSlave.belly >= 5000) {
					r.push(`You spread your legs to give ${his}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`bloated middle`);
					}
					r.push(`room as you pull ${him} onto your lap and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you haul ${him} up into your lap and start playing with ${his} nipples.`);
				} else {
					r.push(`You pull ${him} down over your knee and grope ${him} thoroughly, bringing ${him} to the painful edge of orgasm. Just when ${he}'s about to tip over the edge, the stimulation stops and you haul ${him} up into your lap and start playing with ${his} nipples.`);
				}
			}
			r.push(`${He} writhes and sobs at the orgasm denial, since the nipple play is just barely enough to keep ${him} at a high level of arousal without giving relief. You switch back and forth until ${he} finally goes over into muscle-spasming climax during nipple stimulation alone.`);
			seX(eventSlave, "mammary", V.PC, "penetrative");
			if (eventSlave.fetish === "boobs" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of breast play has increased.</span>`);
			} else if (eventSlave.fetish === "boobs") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of breast play is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "boobs";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s getting aroused at every brush against ${his} breasts.</span>`);
			}
			return r;
		}

		function belly() {
			r= [];
			r.push(`You`);
			if (eventSlave.belly >= 300000) {
				r.push(`roll ${him} onto ${his} back`);
			} else {
				r.push(`pull ${him} into a sitting position on your lap`);
			}
			r.push(`and grope ${his} ${bellyAdj}`);
			if (eventSlave.bellyPreg >= 3000) {
				r.push(`pregnancy`);
			} else {
				r.push(`stomach`);
			}
			r.push(`thoroughly, allowing ${him} to reach the painful edge of orgasm. You feel ${his} belly shudder as ${he} reaches climax under your ministrations. You tease ${his}`);
			if (eventSlave.belly >= 10001) {
				r.push(`popped`);
			}
			r.push(`navel as ${he} comes down from ${his} masturbation session.`);
			if (eventSlave.fetish === "pregnancy" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of pregnancy has increased.</span>`);
			} else if (eventSlave.fetish === "pregnancy") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of pregnancy is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "pregnancy";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s getting aroused at`);
				if (eventSlave.pregKnown === 1) {
					r.push(`every thought about ${his} pregnancy`);
				} else {
					r.push(`the very thought of being pregnant`);
				}
				r.push(r.pop() + `.</span>`);
			}
			return r;
		}

		function ass() {
			r= [];
			r.push(`You`);
			if (V.PC.belly >= 10000) {
				if (eventSlave.belly >= 300000) {
					r.push(`tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy,`);
					} else {
						r.push(`middle,`);
					}
					r.push(`do your best to get close beside ${him},`);
				} else if (eventSlave.belly >= 5000) {
					r.push(`order ${him} to bend over beside you so your pregnancy doesn't obstruct you as badly`);
				} else {
					r.push(`lean back, pull ${him} over your knee and under your gravid dome of a middle`);
				}
			} else {
				if (eventSlave.belly >= 300000) {
					r.push(`tip ${him} over ${his} ${bellyAdj}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`middle`);
					}
				} else if (eventSlave.belly >= 5000) {
					r.push(`spread your legs to give ${his}`);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnancy`);
					} else {
						r.push(`bloated middle`);
					}
					r.push(`room as you pull ${him} onto your lap`);
				} else {
					r.push(`pull ${him} down over your knee`);
				}
			}
			r.push(`and spank ${his} ${eventSlave.skin} buttocks until they're warm to the touch. It's not a sexual punishment, it's too painful for that; by the end, ${eventSlave.slaveName} has cried ${himself} out and is limp in your hands. You pull ${him} up to face you and give ${him} your instructions: from now on, ${he} can come to you and ask you to assrape ${him}, and masturbate while ${he} takes`);
			if (V.PC.dick === 0) {
				r.push(`anal penetration.`);
			} else {
				r.push(`cock.`);
			}
			r.push(`${He} nods through ${his} tears and flees. In an hour or so, though, ${he} finds you and haltingly asks you to buttfuck ${him}. When you pretend indifference, ${he} offers you ${his} anus and abjectly begs you to stick`);
			if (V.PC.dick === 0) {
				r.push(`a strap-on`);
			} else {
				r.push(`your cock`);
			}
			r.push(`up ${his} butt. Soon, ${he}'s down on all fours, crying a little with mixed shame and anal pain as ${he} masturbates furiously.`);
			r.push(VCheck.Anal(eventSlave, 5));
			if (eventSlave.fetish === "buttslut" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of anal has increased.</span>`);
			} else if (eventSlave.fetish === "buttslut") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of anal is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "buttslut";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s getting aroused at the thought of anal sex.</span>`);
			}
			return r;
		}

		function inPublic() {
			r= [];
			r.push(`You bring ${him} out`);
			if (App.Entity.facilities.club.established) {
				r.push(`to ${App.Entity.facilities.club.nameCaps}`);
			} else {
				r.push(`onto the street`);
			}
			r.push(`and secure ${him} upright with a set of vibrators attached to all of ${his} erogenous zones. There's a lot of them, and they're extremely powerful; when you test the setup, ${he} wriggles with the intensity of the stimulation, and is about to climax when you shut it down. Without telling ${him}, you slave the vibrators to a program originally designed for VIP security details. It uses the cameras scattered through the area to detect when passersby are looking at ${him}. The more eyes on ${him}, the stronger the vibrations.`);
			if (eventSlave.fetish === "humiliation" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of humiliation has increased.</span>`);
			} else if (eventSlave.fetish === "humiliation") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of humiliation is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "humiliation";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s starting to long for humiliation.</span>`);
			}
			return r;
		}

		function spanking() {
			r= [];
			r.push(`You tell ${him} that ${he} can get ${himself} off while ${he}'s being spanked, and that's it: you don't tell ${him} to offer ${his} bottom, much less start spanking ${him}. ${He} doesn't understand for a long moment, but before long ${he}'s begging abjectly for a spanking, and has ${his} buttocks presented, quivering with simultaneous arousal and fear of pain. The pain comes soon enough, with a delicious crack of palm on flesh`);
			if (eventSlave.voice === 0) {
				r.push(`and a hoarse grunt, the most noise ${he} can make.`);
			} else {
				r.push(`and a shriek of agony.`);
			}
			r.push(`${He} masturbates furiously, but you're an accomplished spanker, and you repeatedly cause ${him} just enough pain to prevent climax. Eventually ${he} gets off in part because of, rather than in spite of, the lengthy beating.`);
			if (eventSlave.fetish === Fetish.SUBMISSIVE && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of submission has increased.</span>`);
			} else if (eventSlave.fetish === Fetish.SUBMISSIVE) {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of submission is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "submissive";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he} starts to associate submitting to you with getting off.</span>`);
			}
			return r;
		}

		function pain() {
			r = [];
			r.push(`You order ${him} to`);
			if ((eventSlave.heels === 1 && shoeHeelCategory(eventSlave) === 0) || !canStand(eventSlave)) {
				r.push(`kneel`);
			} else if (shoeHeelCategory(eventSlave) > 1 || canMove(eventSlave)) {
				r.push(`teeter`);
			} else {
				r.push(`stand`);
			}
			if (hasBothArms(eventSlave)) {
				r.push(`with ${his} arms`);
			} else {
				r.push(`with ${his} arm`);
			}
			if (hasBothLegs(eventSlave)) {
				r.push(`over ${his} head and ${his} legs splayed,`);
			} else {
				r.push(`over ${his} head and ${his} leg bent,`);
			}
			r.push(`and tell ${him} that if ${he} moves or resists, ${his} punishment will begin again from the start.`);
			if (eventSlave.chastityVagina || eventSlave.chastityPenis === 1) {
				if (offHand === "anal") {
					r.push(`${He} was touching ${his} nipples and ass, so you flick and torture ${his} nipples and give ${him} a severe spanking.`);
				} else {
					r.push(`${He} was playing with ${his} nipples, so you flick and torture them, enjoying ${his} agony.`);
				}
			} else if (!canAchieveErection(eventSlave) && eventSlave.dick > 6) {
				r.push(`${He} was playing with ${his} oversized cock, so you kick and swat at the swollen monster, enjoying the way it spasms.`);
			} else if (eventSlave.dick > 0 && !canAchieveErection(eventSlave)) {
				if (offHand === "anal") {
					r.push(`${He} was touching ${his} limp dick and ass, so you slap and torture ${his} offending dick and give ${him} a severe spanking.`);
				} else if (offHand === "pussy") {
					r.push(`${He} was touching ${his} limp dick and pussy, so you slap and torture ${his} offending dick and labia.`);
				} else if (offHand === "nipples") {
					r.push(`${He} was playing with ${his} limp dick and nipples, so you slap and torture ${his} offending dick while pinching and twisting nipples.`);
				} else {
					r.push(`${He} was playing with ${his} limp dick, so you slap and torture ${his} worthless cock, enjoying ${his} agony.`);
				}
			} else if (eventSlave.vagina === -1 && eventSlave.dick === 0) {
				if (offHand === "anal") {
					r.push(`${He} was desperately rubbing ${his} perineum and anus, the most sensitive parts ${he} has left, so you slap that part of ${him} repeatedly, enjoying the way it spasms.`);
				} else if (offHand === "nipples") {
					r.push(`${He} was desperately rubbing ${his} perineum and nipples, the most sensitive parts ${he} has left, so you slap those parts of ${him} repeatedly, enjoying the way they spasm.`);
				}
			} else if (eventSlave.vagina === -1 || eventSlave.clit >= 3) {
				r.push(`${He} was jacking it, so you force ${him} to get ${himself} hard for punishment and then deliver a series of agonizing slaps and flicks to ${his} offending member.`);
			} else if (eventSlave.labia > 1) {
				r.push(`${His} generous pussylips bear a sheen of incriminating moisture, so you slap and flick them, causing ${him} intense agony.`);
			} else {
				r.push(`You deliver a series of agonizing slaps to ${his} mons.`);
			}
			r.push(`You have to start over twice. By the end, ${he}'s managed to orgasm to all the stimulation, but ${he}'s crying and desperately promising never to touch ${himself} again without your permission. ${His} submission to you has increased.`);
			eventSlave.devotion += 4;
			if (eventSlave.fetish === "masochist" && eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength += 4;
				r.push(`<span class="fetish inc">${His} enjoyment of pain has increased.</span>`);
			} else if (eventSlave.fetish === "masochist") {
				eventSlave.fetishKnown = 1;
				r.push(`<span class="fetish gain">${His} enjoyment of pain is now clear to you.</span>`);
			} else if (random(1, 100) > 50) {
				eventSlave.fetish = "masochist";
				eventSlave.fetishKnown = 1;
				eventSlave.fetishStrength = 65;
				r.push(`Before ${he} realizes what's happening, <span class="fetish gain">${he}'s getting aroused at the thought of ${his} ${getWrittenTitle(eventSlave)} beating ${him}.</span>`);
			}
			return r;
		}
	}
};


code:
App.Events.RESSHotPC = class RESSHotPC 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,
				s => s.energy > 40,
				s => s.devotion > 0 && s.devotion <= 50,
				s => s.trust >= -50,
				canMove,
				canSee,
				hasAnyArms,
				s =>
					(s.attrXX >= 50 && V.PC.belly < 5000 && (V.PC.boobs >= 300 || V.PC.title === 0)) ||
					(s.attrXY >= 50 && V.PC.dick > 0 && V.PC.boobs < 300 && V.PC.belly < 1500) ||
					(s.fetish === "pregnancy" && V.PC.belly >= 5000) ||
					(s.fetish === "boobs" && V.PC.belly < 5000 && V.PC.boobs >= 1000),
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		let t = [];

		if (FutureSocieties.isActive('FSPhysicalIdealist')) {
			t.push(`You maintain a tremendous workout routine: the leader of a society that worships physical perfection can afford nothing less. Working out maintains your appearance, keeps you sharp, and makes you the exemplar of the physical ideal that you have to be for your vision for the future to be realized. So, you pay the iron price for your ${PC.title === 1 ? "muscles" : "toned body"}. Like most of the arcology's prominent citizens, you often lift publicly and take part in other amateur sports, but you also have your own private weight room in your penthouse, and you spend a lot of time there.`);
		} else if (PC.physicalAge >= 50) {
			t.push(`You take care of yourself. You're no longer as young as you once were, making it almost a requirement that you work out, hard and regularly. The fact is, the overwhelming majority of arcology owners who maintain their positions for more than a short time are physically fit. The Free Cities have a reputation for destroying old world wastrels who inherit wealth and think that makes them able to survive in an anarcho-capitalist world. Sloth and an inability to self-govern are not qualities common among your successful peers. Not to mention, it's useful to look good, and it may well prove essential to be physically capable in the near future.`);
		} else {
			t.push(`You take care of yourself. It would be absurd to think that there's any explicit requirement that you work out, hard and regularly, but the fact remains that the overwhelming majority of arcology owners who maintain their positions for more than a short time are physically fit. The Free Cities have a reputation for destroying old world wastrels who inherit wealth and think that makes them able to survive in an anarcho-capitalist world. Sloth and an inability to self-govern are not qualities common among your successful peers. Not to mention, it's useful to look good, and it may well prove essential to be physically capable in the near future.`);
		}

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

		t.push(`You complete the final rep of your first workout of the day, rack the bar, and jump to your feet to shower, change, and see to your empire. The motion brings your field of view up, and you notice for the first time that`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		t.push(`is frozen in the open doorway, having seen something in the workout room that caught ${his} attention as ${he} passed by. ${His} eyes are fixed on your`);
		if (PC.belly >= 120000) {
			t.push(`massive pregnancy with almost painful intensity. You can't really blame ${him}; you're the perfect image of a fertile goddess and your overfilled belly is coated in sweat. Even though you can't work your core any longer, you still take your workouts seriously, something most pregnant women would shy away from. You flush a little at what must ${he} must have thought; with all the grunting and effort, ${he} likely thought you were giving birth.`);
		} else if (PC.belly >= 100000) {
			t.push(`massive pregnancy with almost painful intensity. You can't really blame ${him}; you're eye-catchingly gravid and your full belly is coated in a thin sheen of sweat. Even though you can't work your core any longer, you still take your workouts seriously, something most pregnant women would shy away from.`);
		} else if (PC.belly >= 60000) {
			t.push(`giant pregnancy with almost painful intensity. You can't really blame ${him}; you're eye-catchingly massive and your heavy belly is coated in a thin sheen of sweat.`);
		} else if (PC.belly >= 15000) {
			t.push(`advanced pregnancy with almost painful intensity. You can't really blame ${him}; you're the perfect image of a mother-to-be and your heavy belly is coated in a thin sheen of sweat.`);
		} else if (PC.belly >= 10000) {
			t.push(`heavily pregnant middle and the last remnants of your abs with almost painful intensity. You can't really blame ${him}; you're the perfect image of a mother-to-be and your heavy belly is coated in a thin sheen of sweat.`);
		} else if (PC.belly >= 5000) {
			t.push(`greatly swollen middle and its stretched abdominal muscles with almost painful intensity. You can't really blame ${him}; despite how big you've gotten, you still have some abs left.`);
		} else if (PC.boobs >= 1400) {
			t.push(`sports bra clad boobs with almost painful intensity. You can't really blame ${him}; the bra is three sizes too small, forcing your enormous ${PC.boobsImplant > 0 ? "fake breasts to balloon around the strained material" : "breasts to lewdly bulge around the strained material"}, soaked in your sweat${PC.lactation > 0 ? " and breast milk" : ""}, and your nipples are clearly defined through the stretched thin fabric.`);
		} else if (PC.boobs >= 1200) {
			t.push(`sports bra clad boobs with almost painful intensity. You can't really blame ${him}; the bra is two sizes too small, allowing your huge ${PC.boobsImplant > 0 ? "fake" : ""} breasts to lewdly bulge out of them, soaked in your sweat${PC.lactation > 0 ? " and breast milk" : ""}, and your nipples are clearly visible as bumps in the strained material.`);
		} else if (PC.boobs >= 1000) {
			t.push(`sports bra clad boobs with almost painful intensity. You can't really blame ${him}; the bra is one size too small, allowing your big ${PC.boobsImplant > 0 ? "fake" : ""} breasts to bulge out of them, soaked in your sweat${PC.lactation > 0 ? " and breast milk" : ""}, and your nipples are clearly visible as bumps in the taut material.`);
		} else if (PC.boobs >= 300) {
			t.push(`sports bra clad boobs with almost painful intensity. You can't really blame ${him}; the bra is soaked in your sweat ${PC.lactation > 0 ? "and breast milk" : ""} and your nipples are clearly visible as bumps in the tight material.`);
		} else if (PC.belly >= 1500) {
			t.push(`swollen middle and its abdominal muscles with almost painful intensity. You can't really blame ${him}; despite your growing child${PC.pregType > 1 ? "ren" : ""}, they're still pretty cut.`);
		} else if (PC.belly >= 100) {
			if (PC.title === 0) {
				t.push(`slightly distended abdominal muscles and flat chest with almost painful intensity. You can't really blame ${him}; they're pretty cut, and your sports bra's soaked in your sweat ${PC.lactation > 0 ? "and breast milk" : ""} and your nipples are clearly visible as bumps in the tight material.`);
			} else {
				t.push(`slightly distended abdominal muscles with almost painful intensity. You can't really blame ${him}; they're pretty cut, and your bare chest is coated in a light sheen of glistening sweat.`);
			}
			if (PC.pregKnown === 1) {
				t.push(`You doubt ${he} realizes that the slight swell to your middle is a child.`);
			}
		} else {
			if (PC.title === 0) {
				t.push(`abdominal muscles and flat chest with almost painful intensity. You can't really blame ${him}; they're pretty cut, and your sports bra's soaked in your sweat${PC.lactation > 0 ? " and breast milk" : ""} and your nipples are clearly visible as bumps in the tight material.`);
			} else {
				t.push(`abdominal muscles with almost painful intensity. You can't really blame ${him}; they're pretty cut, and your bare chest is coated in a light sheen of glistening sweat.`);
			}
		}

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

		t.push(`${His} ${App.Desc.eyesColor(eventSlave)} track up your torso comically until ${he}'s looking into your eyes. ${He} stares dumbly at you for a moment before realizing what ${he}'s doing and blushes with embarrassment. ${He}'s reasonably well broken, but is still coming to terms with ${his} sexual place as a ${SlaveTitle(eventSlave)}.`);
		t.push(`In particular, ${he} hasn't gotten used to the effects of ${his} training, the slave food, and the atmosphere in the penthouse, all of which are serving to fuel an acceleration of ${his} sex drive.`);
		if (!canTalk(eventSlave)) {
			t.push(`${He} uses shaky ${hasBothArms(eventSlave) ? "hands" : "gestures"} to ask you to fuck ${him},`);
		} else {
			t.push(Spoken(eventSlave, `"Sorry, ${Master}, I was just, um, passing by and I thought, um, I saw, um, sorry ${Master}, I'm going now,"`));
			t.push(`${he} babbles,`);
		}
		t.push("and turns to flee.");

		App.Events.addParagraph(node, t);

		App.Events.addResponses(node, [
			new App.Events.Result("Not so fast", caught),
			new App.Events.Result(`Let ${him} go`, released),
		]);

		function caught() {
			const frag = document.createDocumentFragment();
			const belly = bellyAdjective(eventSlave);
			t = [];
			t.push(`As ${he} goes, ${he} follows the natural human impulse when embarrassed, and turns ${his} head resolutely away from you, trying very hard to forget making such a fool of ${himself}. This means that ${he} does not see your rapid, predatory pursuit of ${him}, nor does ${he} ${canHear(eventSlave) ? "hear" : "notice"} your careful stride across the flooring. ${His} first indication that ${he}'s prey is when your hands grab ${him} around ${his}`);
			if (eventSlave.bellyPreg >= 5000) {
				t.push(`pregnant belly`);
			} else if (eventSlave.belly >= 5000) {
				t.push(`${belly} belly`);
			} else if (eventSlave.weight > 130) {
				t.push("gut");
			} else if (eventSlave.weight > 95) {
				t.push("fat belly");
			} else if (eventSlave.muscles > 30) {
				t.push("own well-muscled middle");
			} else if (eventSlave.weight > 10) {
				t.push("plush belly");
			} else {
				t.push("middle");
			}
			t.push(`and hug ${him} hard against your`);
			if (PC.belly >= 100000) {
				t.push("massive sweaty pregnancy.");
			} else if (PC.belly >= 60000) {
				t.push("giant sweaty pregnancy.");
			} else if (PC.belly >= 15000) {
				t.push("huge sweaty pregnancy.");
			} else if (PC.belly >= 5000) {
				t.push("sweaty pregnancy.");
			} else if (PC.boobs >= 1400) {
				t.push("enormous sweaty boobs.");
			} else if (PC.boobs >= 1200) {
				t.push("huge sweaty boobs.");
			} else if (PC.boobs >= 1000) {
				t.push("big sweaty boobs.");
			} else if (PC.boobs >= 300) {
				t.push("sweaty boobs.");
			} else {
				t.push(PC.title === 0 ? "sweaty, flat chest." : "sweaty, bare chest.");
			}
			t.push(`${He} stiffens ${eventSlave.voice !== 0 ? "and shrieks" : ""} with surprise, but relaxes obediently within your embrace. Your warm, animal presence has an immediate effect. You hear ${him} suck in ${his} breath and then feel ${him} begin to breathe increasingly hard as your ${canSmell(eventSlave) ? "scent" : "body heat"} sinks into ${him} and ${his} embarrassment fades.`);

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

			App.Events.addResponses(frag, [
				(canDoVaginal(eventSlave) || canDoAnal(eventSlave))
					? new App.Events.Result(`Fuck ${him} right here`, fuck, virginityWarning())
					: new App.Events.Result(virginityWarning()),
				new App.Events.Result(`Have ${him} lick you clean`, lick),
			]);

			function fuck() {
				t = [];

				if (PC.title === 0 || PC.boobs >= 300 || PC.belly >= 1500) {
					t.push("Despite your feminine appearance, you have capable hands.");
				} else {
					t.push("You have strong hands to go with your masculine appeal.");
				}
				t.push(`They rove across ${his} front, hugging ${him} hard against you as you massage and grope.`);
				if (eventSlave.boobs > 4000) {
					t.push(`${His} tits are so big that hefting them creates a bit of a burn in your biceps, in addition to making ${him} writhe against you.`);
				} else if (eventSlave.belly >= 10000) {
					t.push(`The skin that covers ${his} swollen belly is erotically taught, and you run your fingers across it possessively.`);
				} else if (eventSlave.nipples === "inverted") {
					t.push(`You wrap your hands around the bases of ${his} inverted nipples, and use your strong grip to stimulate and squeeze them until they protrude, much to the writhing slave's anguish.`);
				} else if (eventSlave.nipples === "fuckable") {
					t.push(`You slip your fingers into ${his} nipples and spread them wide, making the slave writhe and buck against you.`);
				} else {
					t.push(`You pinch ${his} nipples and tug them hard, making the slave writhe and buck against you.`);
				}
				if (PC.dick === 0) {
					if (hasBothArms(eventSlave)) {
						t.push(`You grab one of ${his} hands and guide it down to ${his}`);
					} else if (hasAnyArms(eventSlave)) {
						t.push(`You grab ${his} hand and guide it down to ${his}`);
					} else {
						t.push(`You `);
					}
					if (eventSlave.dick > 0 && !(eventSlave.chastityPenis)) {
						t.push("cock,");
					} else if (canDoVaginal(eventSlave)) {
						t.push("pussy,");
					} else if (eventSlave.scrotum > 0 && eventSlave.balls > 1) {
						t.push("testicles,");
					} else if (eventSlave.chastityPenis === 1) {
						t.push("caged dick,");
					} else if (eventSlave.chastityVagina) {
						t.push("chastity belt,");
					} else if (eventSlave.vagina === -1) {
						t.push("perineum,");
					}
					t.push(`making ${him} play with ${himself}. Meanwhile, you look after your womanhood with your other hand, schlicking expertly while holding ${him} close, ensuring that ${he} feels every motion of what you're doing. When your fingers are thoroughly coated with pussyjuice, you drop ${his} hand, letting ${him} continue masturbating on ${his} own, and then use the freed hand to replace the one you're using to touch yourself. Then, you take the wet fingers and push them into ${his} mouth; ${he} willingly sucks them clean, using ${his} tongue to gather every trace of your secretions. You gather sweat from between your breasts, and make ${him} suck that off ${his} fingers too. When ${he} orgasms, you shove ${him} against the wall and hump against ${him} and your hand both, climaxing yourself.`);
				} else {
					t.push(`You pull ${him} up ${hasAnyLegs(eventSlave) ? `onto ${his} toes` : "to face you"} and slide yourself inside ${him}, the slave gasping when ${he} feels your hot dick enter ${his}`);
					t.push(canDoVaginal(eventSlave) ? "cunt." : "anus.");
					if (PC.belly >= 5000 && eventSlave.belly >= 10000) {
						t.push(`You'd like to lift ${him} up into a standing fuck, but there is so much distended stomach between the both of you that it's impossible so you opt for a position where you can both penetrate ${him} and continue your work out.`);
						if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
							t.push(`After a while, you shift positions, freeing your member, and force yourself up ${his} butt despite the slave's anxious begging.`);
							t.push(VCheck.Both(eventSlave, 1, 1));
							t.push(`It doesn't take long before you fill ${his} ass with cum.`);
						} else {
							t.push((canDoVaginal(eventSlave)) ? fuckVagina() : fuckAss());
						}
					} else if (PC.belly >= 5000) {
						t.push(`You'd like to lift ${him} up into a standing fuck, but you are far too pregnant to manage. Instead, you lie on your back and have ${him} work your legs as you fuck ${him}.`);
						if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
							t.push(`After a while, you lift ${him} up as high as you can, freeing your member, and then lower ${him} back down again, forcing yourself up ${his} butt instead despite the slave's anxious begging.`);
							t.push(VCheck.Both(eventSlave, 1, 1));
							t.push(`It doesn't take long before you fill ${his} ass with cum.`);
						} else {
							t.push((canDoVaginal(eventSlave)) ? fuckVagina() : fuckAss());
						}
					} else if (eventSlave.belly >= 300000) {
						t.push(`You'd like to lift ${him} up into a standing fuck, but even you aren't strong enough to lift ${his} extreme weight. Instead, you choose to have ${him} ride you; supporting ${his} ${belly} middle is a workout in its own right.`);
						if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
							t.push(`After a while, you push ${him} up as high as you can, freeing your member, and then lower ${him} back down again, forcing yourself up ${his} butt instead despite the slave's anxious begging.`);
							t.push(VCheck.Both(eventSlave, 1, 1));
							t.push(`It doesn't take long before you fill ${his} ass with cum.`);
						} else {
							t.push((canDoVaginal(eventSlave)) ? fuckVagina() : fuckAss());
						}
					} else if (eventSlave.belly >= 100000) {
						t.push(`Once you're hilted, you hoist ${him} up by the underarms, shifting your stance to handle ${his} ${belly} stomach's weight, and hold ${him} in midair, impaled on your dick. You can't pound ${him} all that hard in this challenging position, but the effort of holding ${him} this way forces you to work out hard, producing an excellent sensation. ${PC.vagina !== -1 ? `The position angles your dick upward, producing a lovely massaging sensation in your pussy as you slide in and out of ${him}.` : ""}`);
						if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
							t.push(`After a while, you lift ${him} up as high as you can, freeing your member, and then lower ${him} back down again, forcing yourself up ${his} butt instead despite the slave's anxious begging.`);
							t.push(VCheck.Both(eventSlave, 1, 1));
							t.push(`It doesn't take long before you fill ${his} ass with cum.`);
						} else {
							t.push((canDoVaginal(eventSlave)) ? fuckVagina() : fuckAss());
						}
						t.push("You're going to be feeling this tomorrow.");
					} else {
						t.push(`Once you're hilted, you bring ${his} hands up on either side of ${his} head to grasp your shoulders behind ${him}, and then scoop ${his} legs up and hoist ${him} to rest against your chest, held in midair and impaled on your dick. You can't pound ${him} all that hard in this challenging position, but the effort of holding ${himself} this way forces ${him} to tighten ${his} muscles down hard, producing an excellent sensation. ${PC.vagina !== -1 ? `The position angles your dick upward, producing a lovely massaging sensation in your pussy as you slide in and out of ${him}.` : ""}`);
						if (canDoVaginal(eventSlave) && canDoAnal(eventSlave)) {
							t.push(`After a while, you lift ${him} up as high as you can, freeing your member, and then lower ${him} back down again, forcing yourself up ${his} butt instead despite the slave's anxious begging.`);
							t.push(VCheck.Both(eventSlave, 1, 1));
							t.push(`It doesn't take long before you fill ${his} ass with cum.`);
						} else {
							t.push((canDoVaginal(eventSlave)) ? fuckVagina() : fuckAss());
						}
					}
				}

				function fuckVagina() {
					return `${VCheck.Vaginal(eventSlave, 1)} It doesn't take long before you fill ${his} pussy with cum.`;
				}

				function fuckAss() {
					return `${VCheck.Anal(eventSlave, 1)} It doesn't take long before you fill ${his} ass with cum.`;
				}

				t.push(`You tell your quivering sex toy that ${he} doesn't have to be embarrassed about ${his} needs. ${He} seems relieved that the sexual being ${he}'s becoming is acceptable, at least to you.`);
				eventSlave.trust += 4;
				return t;
			}

			function lick() {
				t = [];

				t.push(`You take ${him} by the hand and ${PC.belly >= 10000 ? "waddle" : "walk"} towards the shower. The sudden loss of your closeness jerks ${him} rudely out of ${his} sexual reverie, but ${he} follows willingly, perhaps distracted by the view as you shed your workout clothes on the way. When you get there, you pull ${him} in with you, but you do not turn on the water. Instead, you tell ${him} to wash you. Not understanding, ${he} turns to switch on the shower, but you catch ${him}, and insert two sweaty fingers into the slave's compliant mouth. ${He} sucks on them, taking refuge in the simple task, and then understands what you mean. ${He} runs ${his} tongue up your arm, sucking the salty sweat off you as best ${he} can. Soon, ${he} bends down and heads for your`);
				if (PC.dick !== 0 && PC.vagina !== -1) {
					t.push("cock and cunt");
				} else if (PC.dick !== 0) {
					t.push("cock");
				} else if (PC.vagina !== -1) {
					t.push("cunt");
				}
				t.push(`but you pull ${him} up again and tell ${him} to do that last.`);
				if (PC.belly >= 60000) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up your linea nigra. When ${he} reaches your ${PC.preg >= 22 ? "popped" : "flattened"} navel, you hold ${his} head there for a while, savoring the erotic sensation before pushing ${him} along to the rest of your expansive midriff.`);
				} else if (PC.belly >= 5000) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up your linea nigra. When ${he} reaches your ${PC.preg >= 22 ? "popped" : "flattened"} navel, you hold ${his} head there for a while, savoring the erotic sensation.`);
				} else if (PC.boobs >= 1400) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up the sweaty crevice between your enormous breasts. When ${he} reaches your nipples, you hold ${his} head there for a while, enjoying ${his} tongue.`);
				} else if (PC.boobs >= 1200) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up the sweaty crevice between your huge breasts. When ${he} reaches your nipples, you hold ${his} head there for a while, enjoying ${his} tongue.`);
				} else if (PC.boobs >= 1000) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up the sweaty crevice between your big breasts. When ${he} reaches your nipples, you hold ${his} head there for a while, enjoying ${his} tongue.`);
				} else if (PC.boobs >= 300) {
					t.push(`${He} quickly finds something almost as good by licking and sucking ${his} way up the sweaty crevice between your breasts. When ${he} reaches your nipples, you hold ${his} head there for a while, enjoying ${his} tongue.`);
				} else {
					t.push(`${He} settles for kissing and licking ${his} way up your abs, pecs, and`);
					if (PC.title === 0) {
						t.push(`non-existent tits. When ${he} reaches your nipples, you hold ${his} head there for a while, enjoying ${his} tongue.`);
					} else {
						t.push(`collarbone, before shyly sucking the line of sweat that runs down each of your temples when you perspire heavily off of you.`);
					}
				}
				t.push(`When you've enjoyed the tongue bath enough, you reach over and activate the shower, the warm water producing a hum from the slave. You coach ${him} towards your`);
				if (PC.dick === 0) {
					t.push(`cunt, and ${he} eats you out with enthusiasm`);
				} else {
					t.push(`stiff prick, and ${he} gives you an enthusiastic blowjob ${PC.vagina !== -1 ? `before turning ${his} oral attentions to your pussy` : ""}`);
				}
				t.push(`as the water plays over you both. After looking up and letting the water cascade down your face for a long moment, you quietly tell ${him} to masturbate before opening your mouth to drink from the downpour. With your eyes closed against the stream, your only indications that ${he}'s obeying the command is a slight increase in the force with which ${he} sucks, and a faint`);
				if (canDoVaginal(eventSlave)) {
					t.push("schlicking");
				} else if (eventSlave.dick > 0 && canAchieveErection(eventSlave) && !(eventSlave.chastityPenis)) {
					t.push("wanking");
				} else {
					t.push("rubbing");
				}
				t.push(`noise as ${he} jerks off. ${He} must find you quite attractive, since giving you oral in the shower while playing with ${himself} brings ${him} to orgasm with almost indecent speed.`);
				eventSlave.devotion += 4;
				seX(eventSlave, "oral", PC, "penetrative");
				return t;
			}
			return frag;
		}

		function released() {
			t = [];
			t.push(`You let ${him} go, and ${he} hurries off to go on with ${his} day. But ${his} attraction to you does not go away, and neither does the embarrassment of having made a fool of ${himself} in front of you. The experience leaves ${him} a bit worried about how life as your slave is affecting ${him}, but increasingly infatuated with you. Before long, love will conquer doubt.`);
			eventSlave.devotion += 4;
			eventSlave.trust -= 2;
			return t;
		}

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

repo_name: Nithhogg/fc

license: mit


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, // This is fine for fery cycle, since this is the slave being in heat from their natural cycle.
				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;
		}
	}
};