code:
App.Events.RESSRefreshmentDelivery = class RESSRefreshmentDelivery 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,
				canWalk,
				s => s.devotion > 20,
				s => s.trust > -10,
				s => s.ID !== V.HeadGirlID,
				s => s.ID !== V.ConcubineID,
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself, girl
		} = getPronouns(eventSlave);
		const belly = bellyAdjective(eventSlave);
		const children = eventSlave.pregType > 1 ? "children" : "child";

		App.Events.drawEventArt(node, eventSlave);

		let r = [];
		r.push(
			`When it's time for refreshments, ${V.assistant.name} directs the closest unoccupied slave capable of bringing them in to do so. This has the added advantage of bringing an enjoyably unpredictable variety of slaves under your eyes. This time,`,
			contextualIntro(V.PC, eventSlave, true),
			`comes through the door of your office, carrying`
		);
		if (V.PC.refreshmentType === 0) {
			r.push(`a selection of ${V.PC.refreshment} brands and the necessary implements`);
		} else if (V.PC.refreshmentType === 1) {
			r.push(`a bottle of ${V.PC.refreshment} with a glass in your favorite style`);
		} else if (V.PC.refreshmentType === 2) {
			r.push(`a selection of ${V.PC.refreshment} on a plate of your favored style`);
		} else if (V.PC.refreshmentType === 3) {
			r.push(`a line of ${V.PC.refreshment} and the necessary implements`);
		} else if (V.PC.refreshmentType === 4) {
			r.push(`a syringe of ${V.PC.refreshment} and the necessary implements`);
		} else if (V.PC.refreshmentType === 5) {
			r.push(`a bottle of ${V.PC.refreshment}`);
		} else if (V.PC.refreshmentType === 6) {
			r.push(`several sheets of ${V.PC.refreshment}`);
		}
		if (eventSlave.preg > eventSlave.pregData.normalBirth / 1.33) {
			r.push(`on a tray carefully held against ${his} pregnant belly, doing ${his} best to will ${his} ${children} to not kick the tray off balance.`);
		} else if (eventSlave.belly >= 10000) {
			r.push(`on a tray carefully held against ${his} ${belly}`);
			if (eventSlave.bellyPreg >= 3000) {
				r.push(`pregnant`);
			}
			r.push(`belly.`);
		} else {
			r.push(`on a tray.`);
		}
		App.Events.addParagraph(node, r);

		r = [];
		r.push(`${He} comes to a stop right beside your elbow, waiting for further direction, just as ${he}'s been trained to do in these cases.`);
		if (getLimbCount(eventSlave, 102) > 2) {
			r.push(`As ${he} maintains ${his} posture obediently, ${his} P-Limbs produce minute machine noises. They allow ${him} good coordination, but their gyros and servomotors are constantly working to maintain it, which means that when ${he} stands still, they're not perfectly quiet.`);
		} else if (eventSlave.boobs > 4000) {
			r.push(`${His} breasts are so massive that ${he}'s got the tray more or less balanced on top of them. As ${he} breathes, ${his} tits rise and fall slightly,`);
			if (V.PC.refreshmentType === 0) {
				r.push(`causing the ${V.PC.refreshment} collection to roll from side to side.`);
			} else if (V.PC.refreshmentType === 1) {
				r.push(`causing ripples in the bottle of ${V.PC.refreshment}.`);
			} else if (V.PC.refreshmentType === 2) {
				r.push(`threatening to knock the ${V.PC.refreshment} from it's plate.`);
			} else if (V.PC.refreshmentType === 3) {
				r.push(`disturbing the lines of ${V.PC.refreshment}.`);
			} else if (V.PC.refreshmentType === 4) {
				r.push(`causing the syringes of ${V.PC.refreshment} to roll from side to side.`);
			} else if (V.PC.refreshmentType === 5) {
				r.push(`rattling the ${V.PC.refreshment} in its bottle.`);
			} else if (V.PC.refreshmentType === 6) {
				r.push(`threatening to knock the sheets of ${V.PC.refreshment} off the tray.`);
			}
		} else if (eventSlave.preg > eventSlave.pregData.normalBirth / 1.33) {
			r.push(`${He} keeps the tray balanced atop ${his} ${belly} pregnancy, though the weight encourages ${his} ${children} to begin kicking. As you glance over at ${him}, ${he} lets out a minute, tired sigh, as kicks from ${his} ${children}`);
			if (V.PC.refreshmentType === 0) {
				r.push(`cause the ${V.PC.refreshment} collection to roll from side to side.`);
			} else if (V.PC.refreshmentType === 1) {
				r.push(`cause ripples in the bottle of ${V.PC.refreshment}.`);
			} else if (V.PC.refreshmentType === 2) {
				r.push(`threaten to knock the ${V.PC.refreshment} from it's plate.`);
			} else if (V.PC.refreshmentType === 3) {
				r.push(`disturb the lines of ${V.PC.refreshment}.`);
			} else if (V.PC.refreshmentType === 4) {
				r.push(`cause the syringes of ${V.PC.refreshment} to roll from side to side.`);
			} else if (V.PC.refreshmentType === 5) {
				r.push(`rattle the ${V.PC.refreshment} in its bottle.`);
			} else if (V.PC.refreshmentType === 6) {
				r.push(`threaten to knock the sheets of ${V.PC.refreshment} off the tray.`);
			}
		} else if (eventSlave.belly >= 10000) {
			r.push(`${His}`);
			if (eventSlave.bellyPreg >= 3000) {
				r.push(`pregnant`);
			}
			r.push(`belly is big enough that ${he}'s got the tray more or less balanced on top of it. As you glance over at ${him}, ${he} lets out a minute, tired sigh,`);
			if (V.PC.refreshmentType === 0) {
				r.push(`causing the ${V.PC.refreshment} collection to roll from side to side.`);
			} else if (V.PC.refreshmentType === 1) {
				r.push(`causing ripples in the bottle of ${V.PC.refreshment}.`);
			} else if (V.PC.refreshmentType === 2) {
				r.push(`nearly rocking the ${V.PC.refreshment} from it's plate.`);
			} else if (V.PC.refreshmentType === 3) {
				r.push(`disturbing the lines of ${V.PC.refreshment}.`);
			} else if (V.PC.refreshmentType === 4) {
				r.push(`causing the syringes of ${V.PC.refreshment} to roll from side to side.`);
			} else if (V.PC.refreshmentType === 5) {
				r.push(`nearly tipping the bottle of ${V.PC.refreshment}.`);
			} else if (V.PC.refreshmentType === 6) {
				r.push(`threatening to blow the sheets of ${V.PC.refreshment} off the tray.`);
			}
		} else if (eventSlave.muscles > 30) {
			r.push(`With ${his} incredible musculature, ${he}'s able to maintain utter stillness in the perfect posture of an obedient slave. A naturally standing human makes some small movements, but ${his} strength allows ${him} to suppress them by setting muscle groups against each other. This has the ancillary benefit of making them stand out nicely.`);
		} else if (eventSlave.muscles < -30) {
			r.push(`${He} is so physically frail that ${he} can barely manage to hold the tray steady. As ${he} rapidly tires, ${his} ${hasBothArms(eventSlave) ? "arms begin slightly shaking" : "arm begins to slightly shake"},`);
			if (V.PC.refreshmentType === 0) {
				r.push(`causing the ${V.PC.refreshment} collection to roll from side to side.`);
			} else if (V.PC.refreshmentType === 1) {
				r.push(`causing ripples in the bottle of ${V.PC.refreshment}.`);
			} else if (V.PC.refreshmentType === 2) {
				r.push(`threatening to knock the ${V.PC.refreshment} from it's plate.`);
			} else if (V.PC.refreshmentType === 3) {
				r.push(`disturbing the lines of ${V.PC.refreshment}.`);
			} else if (V.PC.refreshmentType === 4) {
				r.push(`causing the syringes of ${V.PC.refreshment} to roll from side to side.`);
			} else if (V.PC.refreshmentType === 5) {
				r.push(`rattling the ${V.PC.refreshment} in its bottle.`);
			} else if (V.PC.refreshmentType === 6) {
				r.push(`threatening to knock the sheets of ${V.PC.refreshment} off the tray.`);
			}
		} else if (eventSlave.energy > 95) {
			r.push(`${He}'s controlling ${his} absurd sex drive for the moment, but ${he} clearly wouldn't mind some sex as part of the delivery.`);
			if (eventSlave.dick > 0) {
				if (canAchieveErection(eventSlave)) {
					r.push(`${His} cock is painfully erect,`);
				} else {
					r.push(`${His} soft dick is dribbling precum,`);
				}
			} else if (eventSlave.vagina === -1) {
				r.push(`${He}'s unconsciously presenting ${his} bottom,`);
			} else {
				r.push(`${His} pussy is visibly soaked,`);
			}
			r.push(`showing unmistakably how badly ${he} needs release.`);
		} else {
			r.push(`${He} keeps ${his}`);
			if (canSee(eventSlave)) {
				r.push(App.Desc.eyesColor(eventSlave));
			} else {
				r.push(`face`);
			}
			r.push(`slightly downcast, ${his} back arched, ${his} chest pressed outward, and ${his} bottom stuck out a bit. ${He}'s the perfect picture of an obedient little sex slave`);
			if (eventSlave.height > 185) {
				r.push(`(though, of course, ${he}'s anything but physically small)`);
			}
			r.push(r.pop() + `.`);
		}

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Enjoy some oral with your refreshments`, oral),
			canDoAnal(eventSlave)
				? new App.Events.Result(`Show ${him} a special way to enjoy refreshments`, special)
				: new App.Events.Result(),
			V.PC.refreshmentType === 0
				? new App.Events.Result(`Put your ${V.PC.refreshment} out on ${him}`, put)
				: new App.Events.Result(),
		]);

		function oral() {
			r = [];
			r.push(`There were many things about being an arcology owner you didn't properly understand before you became one. One of the smallest and yet most enjoyable is the unlimited availability of`);
			if (V.PC.refreshmentType === 0) {
				r.push(`a good ${V.PC.refreshment}`);
			} else if (V.PC.refreshmentType === 1) {
				r.push(`a glass of ${V.PC.refreshment}`);
			} else if (V.PC.refreshmentType === 2) {
				r.push(`a plate of ${V.PC.refreshment}`);
			} else if (V.PC.refreshmentType === 3) {
				r.push(`${V.PC.refreshment}`);
			} else if (V.PC.refreshmentType === 4) {
				r.push(`a syringe of ${V.PC.refreshment}`);
			} else if (V.PC.refreshmentType === 5) {
				r.push(`bottles of ${V.PC.refreshment}`);
			} else if (V.PC.refreshmentType === 6) {
				r.push(`tabs of ${V.PC.refreshment}`);
			}
			r.push(`and`);
			if (V.PC.dick !== 0) {
				r.push(`a blowjob`);
				if (V.PC.vagina !== -1) {
					r.push(`and`);
				}
			}
			if (V.PC.vagina !== -1) {
				r.push(`some cunnilingus`);
			}
			r.push(r.pop() + ".");
			r.push(`Turning to ${eventSlave.slaveName}, you`);
			if (V.PC.refreshmentType === 0) {
				r.push(`select a ${V.PC.refreshment},`);
			} else if (V.PC.refreshmentType === 1) {
				r.push(`pour yourself some ${V.PC.refreshment},`);
			} else if (V.PC.refreshmentType === 2) {
				r.push(`serve yourself a plate of ${V.PC.refreshment},`);
			} else if (V.PC.refreshmentType === 3) {
				r.push(`prepare a line of ${V.PC.refreshment},`);
			} else if (V.PC.refreshmentType === 4) {
				r.push(`select a syringe of ${V.PC.refreshment},`);
			} else if (V.PC.refreshmentType === 5) {
				r.push(`carefully tap out enough pills of ${V.PC.refreshment} to satisfy you,`);
			} else if (V.PC.refreshmentType === 6) {
				r.push(`carefully pick up a tab of ${V.PC.refreshment},`);
			}
			r.push(`relieve the slave of the tray, and`);
			if (!canSee(eventSlave) && canHear(eventSlave)) {
				r.push(`audibly`);
			}
			r.push(`widen your legs slightly`);
			if (V.PC.belly >= 5000) {
				r.push(`as you slide forward`);
			}
			r.push(`in your chair. ${He}`);
			if (!canSee(eventSlave) && !canHear(eventSlave)) {
				r.push(`needs a little tug to catch your order, but ${he}`);
			}
			if (eventSlave.belly >= 300000) {
				r.push(`gently leans onto ${his} ${belly}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnant`);
				}
				r.push(`belly`);
			} else if (eventSlave.belly >= 5000) {
				r.push(`gently lowers ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`pregnant`);
				} else {
					r.push(`swollen`);
				}
				r.push(`body to its knees`);
			} else {
				r.push(`immediately drops to ${his} knees`);
			}
			r.push(`and gets to work,`);
			if (eventSlave.skill.oral >= 100) {
				r.push(`using all of ${his} mastery in giving oral pleasure.`);
			} else if (eventSlave.skill.oral > 60) {
				r.push(`using all of ${his} skills in giving oral pleasure.`);
			} else {
				r.push(`doing ${his} best despite ${his} mediocre oral skills.`);
			}
			if (eventSlave.teeth === "pointy") {
				r.push(`You can feel the extreme care ${he} has to take to keep ${his} shark-like teeth clear of you.`);
			} else if (eventSlave.lips > 40) {
				r.push(`${His} huge lips are soft and pillowy against you.`);
			} else if (eventSlave.teeth === "fangs") {
				r.push(`You can feel the slight hesitations as ${he} takes care to not poke you with ${his} fangs.`);
			} else if (eventSlave.teeth === "fang") {
				r.push(`${His} fang adds some thrill as it rubs against you.`);
			} else if (eventSlave.teeth === "gapped") {
				r.push(`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") {
				r.push(`You can feel the slight hesitations as ${he} takes care to keep ${his} braces off you.`);
			}
			r.push(`You take your time,`);
			if (V.PC.refreshmentType === 0) {
				r.push(`smoking meditatively`);
			} else if (V.PC.refreshmentType === 1) {
				r.push(`taking meditative sips`);
			} else if (V.PC.refreshmentType === 2) {
				r.push(`taking meditative bites`);
			} else if (V.PC.refreshmentType === 3) {
				r.push(`enjoying your ${V.PC.refreshment} high`);
			} else if (V.PC.refreshmentType === 4) {
				r.push(`injecting a fix into your arm`);
			} else if (V.PC.refreshmentType === 5) {
				r.push(`popping a few ${V.PC.refreshment}`);
			} else if (V.PC.refreshmentType === 6) {
				r.push(`holding the tab under your tongue`);
			}
			r.push(`and running a thoughtful hand`);
			if (eventSlave.hLength > 1) {
				r.push(`through ${eventSlave.slaveName}'s ${eventSlave.hColor} hair`);
			} else {
				r.push(`across ${eventSlave.slaveName}'s scalp`);
			}
			r.push(`while you look at the view out your office windows. This isn't the first time you've done this, nor will it be the last, and ${eventSlave.slaveName} is used to being used as a serving ${girl}.`);
			eventSlave.devotion += 4;
			seX(eventSlave, "oral", V.PC, "penetrative");
			return r;
		}

		function special() {
			r = [];
			if (V.PC.refreshmentType !== 2) {
				r.push(`You tell ${him} to hop up on the desk. ${He} obeys promptly,`);
				if (eventSlave.energy > 95) {
					r.push(`already starting to pant.`);
				} else {
					if (canSee(eventSlave)) {
						r.push(`watching you closely`);
					} else if (canHear(eventSlave)) {
						r.push(`listening closely`);
					} else {
						r.push(`waiting`);
					}
					r.push(`for further instructions.`);
				}
				r.push(`To ${his} complete lack of surprise, you tell ${him} to pull ${his} legs back and spread ${his} ${canDoVaginal(eventSlave) ? `holes` : "hole"}. As ${he} opens ${himself} for you, ${he}`);
				if (canSee(eventSlave)) {
					r.push(`sees`);
				} else if (canHear(eventSlave)) {
					r.push(`hears`);
				} else {
					r.push(`senses`);
				}
				r.push(`that you're doing something with`);
				if (V.PC.refreshmentType === 0) {
					r.push(`the ${V.PC.refreshment},`);
				} else if (V.PC.refreshmentType === 1) {
					r.push(`the bottle of ${V.PC.refreshment},`);
				} else if (V.PC.refreshmentType === 2) {
					r.push(`the plate of ${V.PC.refreshment},`);
				} else if (V.PC.refreshmentType === 3) {
					r.push(`the bag of ${V.PC.refreshment},`);
				} else if (V.PC.refreshmentType === 4) {
					r.push(`the syringe of ${V.PC.refreshment},`);
				} else if (V.PC.refreshmentType === 5) {
					r.push(`the bottle of ${V.PC.refreshment},`);
				} else if (V.PC.refreshmentType === 6) {
					r.push(`the tabs of ${V.PC.refreshment},`);
				}
				r.push(`and`);
				if (eventSlave.trust > 50) {
					r.push(`relaxes, trusting you completely.`);
				} else {
					r.push(`does ${his} best to relax.`);
				}
				r.push(`${He} gasps when ${he} feels`);
				if (V.PC.refreshmentType === 0) {
					r.push(`the head of the lit ${V.PC.refreshment}, warm from your mouth, being gently inserted into ${his}`);
					if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) {
						r.push(`pussy.`);
					} else {
						r.push(`asshole.`);
					}
					r.push(`You give ${him} precise muscular instructions, which ${he} does ${his} best to obey, and before long, ${he}'s slowly smoking it using ${his} fuckhole. ${His} body is very permeable there, and the effects of the it hit ${him} very quickly.`);
				} else if (V.PC.refreshmentType === 1) {
					r.push(`the cool tip of a small enema bulb being gently inserted into ${his} ass. You press the ${V.PC.refreshment} into ${him} slowly. You didn't give ${him} much, but ${his} body is very permeable there, and the effects hit ${him} very quickly.`);
				} else if (V.PC.refreshmentType === 3) {
					r.push(`${V.PC.refreshment} being gently inserted into ${his} ass. You didn't give ${him} much, but ${his} body is very permeable there, and the effects hit ${him} very quickly.`);
				} else if (V.PC.refreshmentType === 4) {
					r.push(`the tip of the syringe penetrate ${his}`);
					if (eventSlave.dick > 0) {
						r.push(`cock head`);
					} else if (eventSlave.vagina === -1) {
						r.push(`tiny front hole`);
					} else {
						r.push(`clit`);
					}
					r.push(`and the sting of the contents being forced into ${his} sex organ. You didn't give ${him} much, but ${his} body is very sensitive there, and the effects hit ${him} very quickly.`);
				} else if (V.PC.refreshmentType === 5) {
					r.push(`your finger pushing a pill deep into ${his}`);
					if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) {
						r.push(`pussy.`);
					} else {
						r.push(`asshole.`);
					}
					r.push(`You didn't give ${him} much, but ${his} body is very sensitive there, and the effects hit ${him} very quickly.`);
				} else if (V.PC.refreshmentType === 6) {
					r.push(`finger pushing a tab into ${his}`);
					if (eventSlave.vagina > 0 && canDoVaginal(eventSlave)) {
						r.push(`pussy.`);
					} else {
						r.push(`asshole.`);
					}
					r.push(`You didn't give ${him} much, but it quickly dissolves and ${his} body is very sensitive there, so the effects hit ${him} very quickly.`);
				}
				r.push(`You go back to work, letting the slave loll around on your desk, enjoying the effects. You reflect that it's probably some kind of milestone in wealth that you're willing to throw the good stuff around like this. When ${he}'s had time to reflect on the strange incident, ${he} resolves to trust you more in the future, since it can be fun.`);
			} else {
				r.push(`You tell ${him} to hop up on the desk and face you. ${He} obeys promptly,`);
				if (eventSlave.energy > 95) {
					r.push(`already starting to pant.`);
				} else {
					if (canSee(eventSlave)) {
						r.push(`watching you closely`);
					} else if (canHear(eventSlave)) {
						r.push(`listening closely`);
					} else {
						r.push(`waiting`);
					}
					r.push(`for further instructions.`);
				}
				r.push(`To ${his} surprise, you`);
				if (V.PC.boobs >= 300) {
					r.push(`unfasten your top, freeing your breasts, and`);
				}
				r.push(`uncover your`);
				if (V.PC.dick !== 0) {
					r.push(`stiffening cock`);
					if (V.PC.vagina !== -1) {
						r.push(`and moistening pussy`);
					}
				} else {
					r.push(`moistening pussy`);
				}
				r.push(r.pop() + ".");
				r.push(`Taking some ${V.PC.refreshment} in your fingers, you massage it onto your erect`);
				if (V.PC.dick !== 0 && V.PC.boobs >= 300) {
					r.push(`nipples and dick`);
				} else if (V.PC.vagina !== -1 && V.PC.boobs >= 300) {
					r.push(`nipples and clit`);
				} else if (V.PC.dick !== 0) {
					r.push(`dick`);
				} else {
					r.push(`clit`);
				}
				r.push(`making sure to cover yourself completely. You recline in your seat, beckoning to ${eventSlave.slaveName} to lick you clean. ${He} eagerly complies, eager to get a`);
				if (canTaste(eventSlave)) {
					r.push(`taste`);
				} else {
					r.push(`bit`);
				}
				r.push(`of ${V.PC.refreshment} after nothing but slave food for so long.`);
				if (eventSlave.skill.oral > 60) {
					r.push(`${He} is extremely skilled with ${his} tongue; before long, not only are you completely cleaned, but you can barely feel your crotch from ${his} masterful sucking.`);
				} else if (eventSlave.skill.oral > 30) {
					r.push(`${He} is quite skilled with ${his} tongue; before long, you are both cleaned off and enjoying some ${V.PC.refreshment} after the powerful orgasm ${he} coaxed out of you.`);
				} else if (eventSlave.skill.oral > 10) {
					r.push(`${He} has basic skill with ${his} tongue; before long, you are nearly cleaned of all the ${V.PC.refreshment}. With one final lick, ${he} takes the last`);
					if (canTaste(eventSlave)) {
						r.push(`taste`);
					} else {
						r.push(`drop`);
					}
					r.push(`of it and brings you to climax at the same time.`);
				} else {
					r.push(`${He} has no idea how to make this pleasurable; ${he} is merely greedily lapping up the ${V.PC.refreshment} off your body. As ${he} nears finishing your crotch, you grab ${his} head and hold ${him} to yourself until you are satisfied with ${his} licking.`);
				}
				r.push(`You go back to work, letting the slave sit back on your desk, licking ${his} lips of the combined`);
				if (canTaste(eventSlave)) {
					r.push(`taste`);
				} else {
					r.push(`feeling`);
				}
				r.push(`of you and ${V.PC.refreshment}. You reflect that it's probably some kind of milestone in wealth that you're willing to throw the good stuff around like this. When ${he}'s had time to reflect on the strange incident, ${he} resolves to trust you more in the future, since it can be fun`);
				if (canTaste(eventSlave)) {
					r.push(`and tasty`);
				}
				r.push(r.pop() + `.`);
				if (V.PC.dick !== 0) {
					seX(eventSlave, "oral", V.PC, "penetrative");
				}
				if (V.PC.vagina >= 0) {
					seX(eventSlave, "oral", V.PC, "vaginal");
				}
			}
			eventSlave.trust += 4;
			return r;
		}

		function put() {
			r = [];
			r.push(`You select a ${V.PC.refreshment} and start smoking, ordering ${him} to stick around and get ${his} tits out. ${He} sees nothing too unusual about this, and obeys complaisantly, standing beside you with ${his} breasts bare. You reach over and play with ${him} as you smoke, teasing ${his}`);
			if (eventSlave.nipples === "huge") {
				r.push(`massive, erect nipples.`);
			} else if (eventSlave.nipples === "inverted") {
				r.push(`painfully tender inverted nipples.`);
			} else if (eventSlave.nipples === "partially inverted") {
				r.push(`tender, partially inverted nipples.`);
			} else if (eventSlave.nipples === "fuckable") {
				r.push(`nipplecunts with your fingers.`);
			} else if (eventSlave.lactation > 0) {
				r.push(`motherly nipples.`);
			} else {
				r.push(`nipples and playing with ${his} boobs.`);
			}
			r.push(`Deciding that you're done with the ${V.PC.refreshment}, you pull a long draw of smoke into your mouth, bringing the coal at its foot to a fine glow. Then you pull it out of your mouth and press it against the slave's defenseless ${eventSlave.skin}`);
			if (eventSlave.preg > eventSlave.pregData.normalBirth / 2) {
				r.push(`pregnant belly.`);
			} else {
				r.push(`breast.`);
			}
			if (eventSlave.voice === 0) {
				r.push(`${He} makes the horrible rasping noise that ${his} mute throat substitutes for screams of agony,`);
			} else {
				r.push(`${He} shrieks with agony,`);
			}
			r.push(`flinching away instinctively, and collapses to the`);
			if (eventSlave.fetish === "masochist") {
				r.push(`ground, orgasming from the sudden rush of stimulation`);
			} else {
				r.push(`ground.`);
			}
			const target = eventSlave.preg > eventSlave.pregData.normalBirth / 2 ? "stomach": "breast";
			r.push(`Writhing in pain, ${he} cherishes the burn on ${his} ${target} with ${hasBothArms(eventSlave) ? "both hands" : `${his} hand`},`);
			r.push(`${his} sobbing only interrupted by ragged gasps for breath. You order ${him} to go get ${his} burn looked at, and go back to your work. ${He} scrabbles toward the door, weeping,`);
			if (eventSlave.fetish === "masochist") {
				r.push(`horrified at ${himself} for getting off to that, <span class="devotion inc">more convinced than ever that ${he}'s a pain slut,</span> and yet`);
				eventSlave.devotion += 4;
				eventSlave.fetishKnown = 1;
			}
			r.push(`<span class="trust dec">eager to get away.</span>`);
			eventSlave.trust -= 5;
			if (random(0, 100) > 25) {
				App.Medicine.Modification.addScar(eventSlave, target, "burn");
			}
			return r;
		}
	}
};


code:
App.Events.RESSRestrictedSmart = class RESSRestrictedSmart 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,
				canTalk,
				canHear,
				s => s.assignment !== Job.QUARTER,
				s => s.rules.speech === "restrictive",
				s => s.intelligence > 15,
				s => s.trust >= -20,
				s => s.devotion <= 20,
			]
		];
	}

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

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

		let r = [];
		r.push(`During a routine inspection of`);
		r.push(App.UI.DOM.combineNodes(contextualIntro(V.PC, eventSlave, true), ","));
		r.push(`you notice that ${he}'s behaving a little strangely. ${He}'s participating in the inspection with almost manic attention, trying to anticipate your directions and hanging desperately on your every word. After a moment, you reflect that ${he}'s a smart ${girl}, and is probably suffering for a lack of conversation. As you regard ${him}`);
		if (!hasAnyLegs(eventSlave)) {
			r.push(`sitting`);
			if (hasAnyArms(eventSlave)) {
				r.push(`helplessly`);
			} else {
				r.push(`limblessly`);
			}
		} else if (!canStand(eventSlave)) {
			r.push(`kneeling`);
		} else {
			r.push(`standing`);
		}
		r.push(`there, ${his}`);
		if (canSee(eventSlave)) {
			r.push(`eyes almost scream`);
		} else {
			r.push(`face almost screams`);
		}
		r.push(`at you for some sort of stimulation. ${His} life is not without mental interest, but talking is one of the quintessential human behaviors, and having it taken away is very difficult for someone as intelligent as ${him}. A mute almost might have it easier, for ${he} is also denied the volubility through sign language that mute slaves under less restrictive rules often enjoy.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Discuss ${his} future with ${him}`, discuss),
			canDoAnal(eventSlave)
				? new App.Events.Result(`Let ${him} talk during a rough buttfuck`, buttfuck, eventSlave.anus === 0 ? `This option will take ${his} anal virginity` : null)
				: new App.Events.Result(),
			canDoVaginal(eventSlave)
				? new App.Events.Result(`Let ${him} try to talk during a vigorous fucking`, fucking, eventSlave.vagina === 0 ? `This option will take ${his} virginity` : null)
				: new App.Events.Result(),
		]);

		function discuss() {
			r = [];
			r.push(`You announce matter-of-factly that ${he}'s allowed to speak temporarily, and that you'll be discussing where ${he} is and where ${he} sees ${himself} in the near future. ${He}'s disconcerted by the subject but so desperate for conversation that ${he}'s overjoyed anyway.`);
			r.push(Spoken(eventSlave, `"I understand what you're doing, ${Master},"`), `${he} ${say}s forthrightly.`, Spoken(eventSlave, `"I'm to be broken down into a devoted slave."`), `${He} looks thoughtful.`, Spoken(eventSlave, `"I'll help you with that. It'll be easier if I do, won't it?"`), `${He} looks up, and you`);
			if (canSee(eventSlave)) {
				r.push(`nod in affirmation`);
			} else {
				r.push(`acknowledge ${him}`);
			}
			r.push(`${he} gives you a rueful smile.`, Spoken(eventSlave, `"A good slut would offer to give you oral now, I think. So, ${Master}, may I please be allowed to ${V.PC.dick === 0 ? "lick your pussy" : "suck your cock"}"?`));
			if (canSee(eventSlave)) {
				r.push(`You nod,`);
			} else {
				r.push(`You acknowledge,`);
			}
			r.push(`and tell ${him} that the rules are back in effect.`);
			if (isAmputee(eventSlave)) {
				r.push(`As you get ${his} helpless form into position,`);
			} else if (eventSlave.belly >= 300000) {
				r.push(`As ${he} struggles to get into position with ${his} ${belly} stomach in the way,`);
			} else if (!canStand(eventSlave)) {
				r.push(`As ${he} shifts into position,`);
			} else if (eventSlave.belly >= 10000) {
				r.push(`As ${he} gently lowers ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`gravid`);
				} else {
					r.push(`bloated`);
				}
				r.push(`form to`);
				if (hasBothLegs(eventSlave)) {
					r.push(`its knees,`);
				} else {
					r.push(`the ground,`);
				}
			} else {
				r.push(`As ${he} gets down on`);
				if (hasBothLegs(eventSlave)) {
					r.push(`${his} knees,`);
				} else {
					r.push(`the ground,`);
				}
			}
			r.push(`${he} focuses on the task in front of ${him} with all ${his} considerable intelligence, clearly having decided to make things easier on ${himself} by conforming to ${his} new life.`);
			eventSlave.devotion += 4;
			seX(eventSlave, "oral", V.PC, "penetrative");
			return r;
		}

		function buttfuck() {
			r = [];
			if (isAmputee(eventSlave)) {
				r.push(`You lay ${his} fuckpuppet torso across`);
			} else if (!canStand(eventSlave)) {
				r.push(`You help ${him} lie back on`);
			} else if (eventSlave.belly >= 5000) {
				r.push(`You tip ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`motherly`);
				} else {
					r.push(`swollen`);
				}
				r.push(`body backwards onto`);
			} else {
				r.push(`You push ${him} backwards onto`);
			}
			r.push(`your desk, groping ${his}`);
			if (eventSlave.butt > 15) {
				r.push(`absurd`);
			} else if (eventSlave.butt > 10) {
				r.push(`immense`);
			} else if (eventSlave.butt > 7) {
				r.push(`huge`);
			} else if (eventSlave.butt > 4) {
				r.push(`big`);
			} else if (eventSlave.butt > 1) {
				r.push(`moderate`);
			} else {
				r.push(`meager`);
			}
			r.push(`butt. You instruct ${him} that ${he}'ll be allowed to talk if ${he} wants, but not yet, as you`);
			if (V.PC.dick === 0) {
				r.push(`push a couple of fingers up`);
			} else {
				r.push(`line your cock up with`);
			}
			if (eventSlave.anus > 2) {
				r.push(`${his} gaping asshole.`);
			} else if (eventSlave.anus > 1) {
				r.push(`${his} sizable asshole.`);
			} else {
				r.push(`${his} tight asshole.`);
			}
			r.push(`As you penetrate ${him}, you tell ${him} that the time to talk is now.`);
			if (eventSlave.anus > 2) {
				r.push(`To make the sex sufficiently uncomfortable, you`);
				if (V.PC.dick === 0) {
					r.push(`finger fuck`);
				} else {
					r.push(`dick`);
				}
				r.push(`${him} without mercy.`);
			} else if (eventSlave.anus > 1) {
				r.push(`To make the sex sufficiently uncomfortable, you pull yourself out with every stroke, putting ${him} through initial anal penetration over and over.`);
			} else {
				r.push(`${His} butt is so tight that just a simple assfuck makes ${him} uncomfortable enough.`);
			}
			r.push(`${He} opens ${his} mouth, closes it again, grunts at the burning sensation of your rough use of ${his} poor ass, and then shuts up. You ask ${him} if ${he}'s sure ${he} doesn't have anything to say, and ${he} makes ${his} one verbal comment of the day:`, Spoken(eventSlave, `"No, ${Master}."`), `${He} understands the lesson here: fail to conform, get assraped. It's as simple as that.`);
			eventSlave.devotion += 3;
			eventSlave.trust -= 3;
			r.push(VCheck.Anal(eventSlave, 1));
			return r;
		}

		function fucking() {
			r = [];
			if (isAmputee(eventSlave)) {
				r.push(`You lay ${his} fuckpuppet torso across`);
			} else if (!canStand(eventSlave)) {
				r.push(`You help ${him} lie back on`);
			} else if (eventSlave.belly >= 5000) {
				r.push(`You tip ${his}`);
				if (eventSlave.bellyPreg >= 3000) {
					r.push(`motherly`);
				} else {
					r.push(`swollen`);
				}
				r.push(`body backwards onto`);
			} else {
				r.push(`You push ${him} backwards onto`);
			}
			r.push(`your desk, groping ${his}`);
			if (eventSlave.butt > 15) {
				r.push(`absurd`);
			} else if (eventSlave.butt > 10) {
				r.push(`immense`);
			} else if (eventSlave.butt > 7) {
				r.push(`huge`);
			} else if (eventSlave.butt > 4) {
				r.push(`big`);
			} else if (eventSlave.butt > 1) {
				r.push(`moderate`);
			} else {
				r.push(`meager`);
			}
			r.push(`butt. You instruct ${him} that ${he}'ll be allowed to talk if ${he} wants, but not yet, as you`);
			if (V.PC.dick === 0) {
				r.push(`push a dildo into`);
			} else {
				r.push(`line your cock up with`);
			}
			r.push(`${his}`);
			if (eventSlave.anus > 2) {
				r.push(`gaping`);
			} else if (eventSlave.anus > 1) {
				r.push(`sizable`);
			} else {
				r.push(`tight`);
			}
			r.push(`pussy. As you penetrate ${him}, you tell ${him} that the time to talk is now.`);
			if (eventSlave.vagina > 2) {
				r.push(`To make the sex sufficiently overwhelming, you`);
				if (V.PC.dick === 0) {
					r.push(`ram`);
				} else {
					r.push(`dick`);
				}
				r.push(`${him} without mercy.`);
			} else if (eventSlave.vagina > 1) {
				r.push(`To make the sex sufficiently overwhelming, you pull yourself out with every stroke, putting ${him} through initial penetration over and over.`);
			} else {
				r.push(`${His} cunt is so tight that just a simple fucking overwhelms ${him} with pleasure.`);
			}
			r.push(`${He} opens ${his} mouth, closes it again, groaning at the sensation of your rough use of ${his} body, and then stops trying. You ask ${him} if ${he}'s sure ${he} doesn't have anything to say, and ${he} lets off an orgasmic moan. There's no need to talk when your owner is fucking your brains out.`);
			eventSlave.devotion += 3;
			eventSlave.trust += 3;
			r.push(VCheck.Vaginal(eventSlave, 1));
			return r;
		}
	}
};

repo_name: Arkerthan/fc

license: mit


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

	actorPrerequisites() {
		return [
			[
				s => s.fetish !== Fetish.MINDBROKEN,
				s => s.assignment !== "work as a servant",
				canStand,
				hasAnyArms,
				s => s.dietCum > 0,
				s => s.devotion <= 20,
				s => (s.fetish !== "cumslut" && s.fetish !== "masochist" && s.fetishStrength < 60) || s.fetishKnown === 0,
			]
		];
	}

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

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

		let t = [];
		t.push(`You are inspecting the slave feeding area early in the week, watching your slaves as they come and go to get their required nourishment for the morning, and`);
		t.push(contextualIntro(V.PC, eventSlave, true));
		t.push(`catches your attention.`);
		if (V.cockFeeder === 1) {
			t.push(`You see as ${he} kneels in front of the feeder`);
			t.push(canSee(eventSlave) ? `phallus, staring at it with disgust plainly written on ${his} face.` : `phallus with a look of disgust on ${his} face.`);
		} else if (canSee(eventSlave)) {
			t.push(`You see ${him} staring into ${his} cup of nutritional fluid with a look of disgust on ${his} face.`);
		} else {
			t.push(`You see ${him} grimacing at ${his} cup of nutritional fluid.`);
		}
		t.push(`You quickly check your records and ${V.assistant.name} confirms that ${eventSlave.slaveName} is required to ingest`);
		t.push(eventSlave.dietCum === 2 ? `an extreme diet based almost entirely on human ejaculate.` : `a large amount of human ejaculate as part of ${his} diet.`);
		App.Events.addParagraph(node, t);

		t = [];
		t.push(`You watch ${eventSlave.slaveName} as ${he} retches unpleasantly,`);
		t.push(V.cockFeeder === 1 ? `stimulating the feeder phallus with ${his} mouth` : `tentatively drinking from ${his} cup`);
		t.push(`and choking ${his} food down. ${He} knows that if ${he} doesn't eat it willingly, ${he}'ll will be forced to, and you can almost see ${his}`);
		t.push(eventSlave.intelligence + eventSlave.intelligenceImplant > 15 ? `intelligent mind` : `stupid mind`);
		t.push(`working through the reality of what ${his} life has become. ${He} is now a receptacle for`);
		if (eventSlave.dietCum === 2) {
			t.push(`concentrated`);
		}
		t.push(`human ejaculate, and for no other reason than the perverse amusement of ${his} owner. Almost as soon as ${he} swallows ${his} food, ${he} whimpers, burps, and then`);
		t.push(eventSlave.belly >= 10000 ? `hastily waddles` : `quickly runs`);
		t.push(`to a nearby bathroom to vomit it back up. This is a common reaction for unbroken slaves on cum diets,`);
		t.push(eventSlave.weight > 0 ? `and can also be an effective, if unhealthy, way of forcing them to lose weight.` : `but it can also prevent slaves that are already too thin from gaining weight.`);

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

		App.Events.addResponses(node, [
			new App.Events.Result(`Have mercy on the poor ${girl} and take ${him} off ${his} cum diet for now`, mercy),
			(eventSlave.dietCum === 1)
				? new App.Events.Result(`Force ${him} onto a heavy cum diet, and double up on ${his} ejaculate intake`, heavy)
				: new App.Events.Result(),
			(eventSlave.dietCum === 2)
				? new App.Events.Result(`Give the poor ${girl} a break and reduce ${his} cum intake to a more modest level`, reduce)
				: new App.Events.Result(),
			new App.Events.Result(`Suppress ${his} gag reflex and double ${his} cum intake for a week`, double),
			(V.arcade > 0)
				? new App.Events.Result(`Sentence ${him} to a day in ${V.arcadeName} for cum injection therapy`, arcade)
				: new App.Events.Result(),
		]);

		function mercy() {
			eventSlave.devotion -= 5;
			eventSlave.trust += 5;
			eventSlave.dietCum = 0;
			return `You see how ${eventSlave.slaveName} is suffering and you decide to reconsider ${his} dietary prescription. You instruct ${V.assistant.name} to change ${eventSlave.slaveName}'s diet to exclude cum for now. Slaves who can't eat are unhealthy, and unhealthy slaves are unprofitable slaves. ${He} is now more confident that ${he} can resist you and get ${his} way, ${he} also trusts you a little more to look after ${his} well-being.`;
		}
		function heavy() {
			eventSlave.devotion -= 3;
			eventSlave.trust -= 3;
			eventSlave.dietCum = 2;
			return `You instruct ${V.assistant.name} to double down on ${eventSlave.slaveName}'s cum diet. Ungrateful little sluts who retch up their expensive food sometimes need tough love. Making ${his} cum-food thicker and more concentrated might help ${him} to learn that no matter how bad things seem, you can always make them worse. Initially ${his} new heavy cum diet makes no difference in ${his} ability to keep it down, but you tell ${him} to give it some time. Eventually ${he} will learn to appreciate cum as the primary ingredient in everything ${he} ingests. All of your future cumsluts do, sooner or later. ${His} pathetic tears reveal how helpless ${he} feels, but they don't hide the streak of rebelliousness that remains burning inside ${him}.`;
		}

		function reduce() {
			eventSlave.devotion += 2;
			eventSlave.trust += 2;
			eventSlave.dietCum = 1;
			return `${eventSlave.slaveName} is on a very heavy cum diet, and it's possible you're forcing ${him} to take too much, too soon. You decide to give ${him} a break and instruct ${V.assistant.name} to reduce, but not eliminate the amount of cum in ${his} diet. Although it doesn't immediately make ${him} hate cum any less, ${he} appreciates your willingness to make things a little less unpleasant for ${him}. ${He} is a little less afraid of you too, although not as much as if you'd taken ${him} off ${his} cum diet altogether.`;
		}

		function double() {
			t = [];
			t.push(`${He} is already on a very heavy cum-based diet, and there's only so much ejaculate you can force a slut to ingest before it negatively affects ${his} health. However, as a temporary measure, you still have options. You instruct ${V.assistant.name} to re-double the amount of ejaculate in ${eventSlave.slaveName}'s diet for the week. You also have ${him} closely monitored and injected with anti-nausea drugs to help ${his} hold down ${his} food. Although the idea of being forced to eat large amounts of human reproductive fluid still disgusts ${him}, the week of having a super-concentrated cum-diet, along with the suppressed reflex to purge it has its effect. Knowing that you monitor and control every aspect of ${his} life breaks down ${his} resistance to your will, and by the end of the week, ${he} is grateful that you return ${him} to a more nutritionally viable regimen — even if its cum content is still overwhelmingly high.`);
			if (eventSlave.fetishKnown === 1) {
				t.push(`<span class="lightcoral">${His} brain has now begun to accept the sexual perversity of ${his} food as a turn on.</span>`);
			} else {
				t.push(`${He} is now able to eat and digest ${his} prescribed diet without pharmacological assistance.`);
			}
			eventSlave.devotion += 5;
			eventSlave.fetish = "cumslut";
			if (eventSlave.fetishKnown === 1) {
				eventSlave.fetishStrength = 10;
			}
			return t;
		}
		function arcade() {
			t = [];
			t.push(`You have ${V.assistant.name} inform ${eventSlave.slaveName} of ${his} unacceptable behavior and sentence ${him} to a day in ${V.arcadeName}. ${He} cries and pleads for mercy, and even begs to be allowed to suck a cock, any cock, so ${he} can prove ${his} newfound enthusiasm for cum, but you are unmerciful as two other slaves drag ${him} off to serve ${his} sentence. ${He} is forced to wear`);
			t.push(eventSlave.vagina !== -1 ? `a combined vaginal and` : `an`);
			t.push(`anal chastity belt so that the only hole available is ${his} mouth, and is then confined in ${V.arcadeName} with ${his} mouth spread open by a ring gag and ${his} head sticking through the hole in the wall. A sign below ${his} mouth proclaims ${him} to be a "cum extraction tube" and ${he} is used that way for the duration of ${his} stay — a grueling, 18-hour marathon of relentless throat fucking.`);
			if (eventSlave.sexualFlaw !== "hates oral") {
				t.push(`${His} ordeal is so extreme that ${he} now <span class="red">hates oral sex,</span>`);
			} else {
				t.push(`${His} hatred of oral sex makes ${his} ordeal that much more horrific,`);
			}
			t.push(`but it breaks down ${his} resistance. ${He} now better understands the terrifying power you have over ${him}, and the sheer amount of cum ${he} is forced to ingest negatively effects ${his} health. Your other cum-fed slaves take note of what you do to those who can't hold down their assigned diet.`);
			eventSlave.devotion += 5;
			eventSlave.trust -= 5;
			eventSlave.sexualFlaw = "hates oral";
			eventSlave.fetish = "masochist";
			seX(eventSlave, "oral", "public", "penetrative", 55);
			healthDamage(eventSlave, 5);
			return t;
		}
	}
};


code:
App.Events.RESSPAServant = class RESSPAServant extends App.Events.BaseEvent {
	eventPrerequisites() {
		return [
			() => V.assistant.appearance !== "normal",
			() => V.assistant.personality === 1,
		]; // always valid if sufficient actors can be cast successfully
	}

	actorPrerequisites() {
		return [
			[ // single event slave
				s => s.fetish !== Fetish.MINDBROKEN,
				hasAnyArms,
				hasAnyLegs,
				canTalk,
				s => s.devotion >= -20,
				s => s.devotion <= 50,
				canSee,
				s => [Job.HOUSE, Job.QUARTER].includes(s.assignment),
				s => canDoVaginal(s) || canDoAnal(s),
			]
		];
	}

	execute(node) {
		const [eventSlave] = this.actors.map(a => getSlave(a));
		const {
			His, He, he, his, him, himself, girl
		} = getPronouns(eventSlave);
		const {title: Master} = getEnunciation(eventSlave);
		const belly = bellyAdjective(eventSlave);
		const PC = V.PC;
		const {
			HeA, heA, himA, hisA, himselfA, girlA, womanA, loliA
		} = getPronouns(assistant.pronouns().main).appendSuffix("A");

		App.Events.drawEventArt(node, eventSlave);

		let r = [];
		r.push(`As you begin your day one morning, you hear the quiet`);
		switch (V.assistant.appearance) {
			case "monstergirl":
				r.push(`but unmistakably sensual voice of your monster${girlA}`);
				break;
			case "shemale":
				r.push(`but unmistakably lewd voice of your shemale`);
				break;
			case "amazon":
				r.push(`but unmistakably aggressive voice of your amazon`);
				break;
			case "businesswoman":
				r.push(`but unmistakably dominant voice of your business${womanA}`);
				break;
			case "fairy":
			case "pregnant fairy":
				r.push(`but unmistakably adorable voice of your fairy`);
				break;
			case "goddess":
			case "hypergoddess":
				r.push(`and kindly voice of your goddess`);
				break;
			case "loli":
				r.push(`and childish voice of your ${loliA}`);
				break;
			case "preggololi":
				r.push(`and childish, out of breath voice of your pregnant ${loliA}`);
				break;
			case "angel":
				r.push(`but unmistakably caring voice of your angel`);
				break;
			case "cherub":
				r.push(`yet overly cheerful voice of your cherub`);
				break;
			case "incubus":
				r.push(`and commanding, but obviously aroused voice of your incubus`);
				break;
			case "succubus":
				r.push(`and seductive, but obviously aroused voice of your succubus`);
				break;
			case "imp":
				r.push(`and harassing voice of your imp`);
				break;
			case "witch":
				r.push(`and oddly aroused voice of your witch`);
				break;
			case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
				r.push(`and very distinct voice of your avatar`);
				break;
			case "schoolgirl":
				r.push(`but unmistakably suggestive voice of your school${girlA}`);
		}
		r.push(
			`personal assistant coming from your office. Looking in, you are treated to the sight of`,
			App.UI.DOM.combineNodes(contextualIntro(PC, eventSlave, true), "'s")
		);
		if (eventSlave.butt > 8) {
			r.push(`ridiculous bottom jiggling`);
		} else if (eventSlave.butt > 4) {
			r.push(`big behind bouncing`);
		} else {
			r.push(`cute rear`);
		}
		if (eventSlave.belly >= 5000) {
			r.push(r.pop() + `, and the ${belly} rounded belly hanging between ${his} legs,`);
		}
		r.push(`as ${he} reaches out over the glass top of your desk with a soft, dust-free cloth and a bottle of screen cleaner. ${capFirstChar(V.assistant.name)} is displaying ${hisA} avatar right under where the slave is cleaning the glass screen, and ${heA}'s displaying it nude. ${HeA}'s positioned ${himselfA} so that the poor slave appears to be wiping`);
		switch (V.assistant.appearance) {
			case "monstergirl":
				r.push(`${hisA} hair-tentacles`);
				break;
			case "shemale":
				r.push(`the shaft of ${hisA} massive prick`);
				break;
			case "amazon":
				r.push(`the insides of ${hisA} muscular thighs`);
				break;
			case "businesswoman":
				r.push(`${hisA} pussy`);
				break;
			case "fairy":
				r.push(`${hisA} tiny body`);
				break;
			case "pregnant fairy":
				r.push(`${hisA} tiny yet swollen body`);
				break;
			case "goddess":
				r.push(`${hisA} motherly tits`);
				break;
			case "hypergoddess":
				r.push(`${hisA} huge pregnant belly`);
				break;
			case "loli":
				r.push(`${hisA} flat chest`);
				break;
			case "preggololi":
				r.push(`${hisA} pregnant belly`);
				break;
			case "angel":
				r.push(`${hisA} wide-spread wings`);
				break;
			case "cherub":
				r.push(`${hisA} cute pussy`);
				break;
			case "incubus":
				r.push(`${hisA} throbbing prick`);
				break;
			case "succubus":
				r.push(`${hisA} lovely pussy`);
				break;
			case "imp":
				r.push(`${hisA} pussy`);
				break;
			case "witch":
				r.push(`${hisA} plump tits`);
				break;
			case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
				r.push(`${hisA} phallic tentacles`);
				break;
			case "schoolgirl":
				r.push(`${hisA} perky tits`);
		}
		r.push(`down with screen cleaner, and is talking dirty to the furiously blushing servant. "Ohh, that feels good," ${heA} moans. "Rub me right there, you ${SlaveTitle(eventSlave)} slut! I love it!" The poor slave is doing ${his} best to hurry, embarrassed and unsure of how to react to ${V.assistant.name}'s behavior.`);

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`Share the slave with your PA`, share, virginityWarning()),
			canDoAnal(eventSlave)
				? new App.Events.Result(`Double penetrate the slave with your PA`, double, virginityWarning())
				: new App.Events.Result()
		]);

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

		function share() {
			const frag = document.createDocumentFragment();
			r = [];
			r.push(
				`You enter, eliciting an embarrassed`,
				Spoken(eventSlave, `"Um, hi ${Master}"`),
				`from ${eventSlave.slaveName} and a cheery wave from ${V.assistant.name}. At this stage of your morning ablutions, you're conveniently naked, so you`
			);
			if (PC.belly >= 5000) {
				r.push(`heft yourself`);
			} else if (PC.belly >= 1500) {
				r.push(`clamber up`);
			} else {
				r.push(`leap up`);
			}
			r.push(`onto the desktop and kneel upright, legs splayed. (Naturally, the desk is reinforced and sealed for exactly this reason.) You point meaningfully at your`);
			if (PC.dick !== 0) {
				r.push(`stiff prick`);
				if (PC.vagina !== -1) {
					r.push(`and flushed pussy`);
				}
				r.push(r.pop() + `, and the obedient slave`);
				if (eventSlave.belly >= 5000) {
					r.push(`hefts ${himself}`);
				} else {
					r.push(`clambers`);
				}
				r.push(`up to suck you off`);
				if (PC.vagina !== -1) {
					r.push(`and eat you out`);
				}
				r.push(r.pop() + `. When you're close, you surprise ${him} by pulling your cock out of ${his} mouth and blowing your load onto the glass.`);
			} else {
				r.push(`hot cunt, and the obedient slave`);
				if (eventSlave.belly >= 5000) {
					r.push(`hefts ${himself}`);
				} else {
					r.push(`clambers`);
				}
				r.push(`up to eat you out. You surprise ${him} by taking your time, drawing out the oral session with the ulterior motive of getting as much saliva and pussyjuice onto the glass as possible.`);
			}
			r.push(`${capFirstChar(V.assistant.name)} shifts ${hisA} avatar so that this lands all over ${hisA}`);
			switch (V.assistant.appearance) {
				case "monstergirl":
					r.push(`cocks.`);
					break;
				case "shemale":
					r.push(`huge cock.`);
					break;
				case "amazon":
					r.push(`muscular pussy.`);
					break;
				case "businesswoman":
					r.push(`mature pussy.`);
					break;
				case "fairy":
				case "pregnant fairy":
					r.push(`tiny body.`);
					break;
				case "goddess":
					r.push(`fertile pussy.`);
					break;
				case "hypergoddess":
					r.push(`gaping pussy.`);
					break;
				case "loli":
				case "cherub":
					r.push(`tight virgin pussy.`);
					break;
				case "preggololi":
					r.push(`tight young pussy.`);
					break;
				case "angel":
					r.push(`virgin pussy.`);
					break;
				case "incubus":
					r.push(`perfect dick.`);
					break;
				case "succubus":
					r.push(`lovely pussy.`);
					break;
				case "imp":
					r.push(`slutty pussy.`);
					break;
				case "witch":
					r.push(`plump breasts.`);
					break;
				case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
					r.push(`pussy-like body.`);
					break;
				case "schoolgirl":
					r.push(`pretty young pussy.`);
			}
			r.push(`"Clean me off, ${eventSlave.slaveName}," ${heA} demands, winking broadly at you. The slave, knowing that commands from ${himA} are commands from you, repositions ${himself} to lick up the`);
			if (PC.dick !== 0) {
				r.push(`ejaculate`);
				if (PC.vagina !== -1) {
					r.push(`and`);
				}
			}
			if (PC.vagina !== -1) {
				r.push(`girlcum`);
			}
			r.push(r.pop() + `.`);
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`This brings the slave into a crouch with ${his} ass pointed at you,`);
			if (canDoVaginal(eventSlave)) {
				if (eventSlave.vagina > 2) {
					r.push(`${his} experienced pussy practically begging for a pounding.`);
				} else if (eventSlave.vagina > 1) {
					r.push(`${his} nice pussy practically begging for a good hard fucking.`);
				} else {
					r.push(`${his} tight little pussy completely vulnerable.`);
				}
				r.push(`As you`);
				if (PC.dick !== 0) {
					if (PC.vagina !== -1) {
						r.push(`use manual stimulation of your pussy to get your dick`);
					} else {
						r.push(`stroke yourself`);
					}
					r.push(`rapidly back to full mast,`);
				} else {
					r.push(`don a strap-on,`);
				}
				r.push(`${V.assistant.name} opines helpfully, "Hey ${eventSlave.slaveName}! You're about to get fucked!" The slave reacts by obediently reaching back to spread ${his} buttocks and relaxing, but ${V.assistant.name} ruins ${his} attempt at graceful submission.`);
				if (PC.title === 1) {
					r.push(`"Siiir,`);
				} else {
					r.push(`"Ma'aaam,`);
				}
				r.push(`${he}'s bluuuushing," ${he} says tauntingly, and the slave stiffens with renewed embarrassment, not to mention stimulation, as you penetrate ${him}.`);
				r.push(VCheck.Vaginal(eventSlave, 1));
			} else {
				if (eventSlave.anus > 2) {
					r.push(`${his} big asspussy practically begging for a pounding.`);
				} else if (eventSlave.anus > 1) {
					r.push(`${his} nice asshole practically begging for a good hard fucking.`);
				} else {
					r.push(`${his} tight little rosebud completely vulnerable.`);
				}
				r.push(`As`);
				if (PC.dick !== 0) {
					if (PC.vagina !== -1) {
						r.push(`use manual stimulation of your pussy to get your dick`);
					} else {
						r.push(`stroke yourself`);
					}
					r.push(`rapidly back to full mast,`);
				} else {
					r.push(`don a strap-on,`);
				}
				r.push(`${V.assistant.name} opines helpfully, "Hey ${eventSlave.slaveName}! You're about to get buttfucked!" The slave reacts by obediently reaching back to spread ${his} buttocks, and relaxes ${his} anus, but ${V.assistant.name} ruins ${his} attempt at graceful anal submission."`);
				if (PC.title === 1) {
					r.push(`Siiir,`);
				} else {
					r.push(`Ma'aaam,`);
				}
				r.push(`${he}'s bluuuushing," ${heA} says tauntingly, and the slave stiffens with renewed embarrassment, not to mention discomfort, as you penetrate ${him}.`);
				r.push(VCheck.Anal(eventSlave, 1));
			}
			r.push(`${He} keeps licking away, cleaning up the mess you made as ${V.assistant.name} does everything ${he} can to make it seem like the slave is pleasuring ${him}. Partway through, ${V.assistant.name} sticks out a hand for a high-five from you, producing a gurgle of indignation or perhaps even laughter as ${his} owner and ${his} owner's personal assistant program high-five over ${his} back.`);
			eventSlave.trust += 4;
			seX(eventSlave, "oral", PC, "penetrative");
			App.Events.addParagraph(frag, r);
			return frag;
		}

		function double() {
			const frag = document.createDocumentFragment();
			r = [];
			r.push(
				`You enter, eliciting an embarrassed`,
				Spoken(eventSlave, `"Um, hi ${Master}"`),
				`from ${eventSlave.slaveName}, and ask ${V.assistant.name} if ${he}'d like to DP the slave with you.`);
			switch (V.assistant.appearance) {
				case "monstergirl":
					r.push(`"Oh yes," ${heA} purrs threateningly over the slave's moan of apprehension, and ${hisA} avatar begins to stroke ${hisA} dicks meaningfully.`);
					break;
				case "shemale":
				case "incubus":
					r.push(`"Fuck yes," ${heA} groans over the slave's moan of apprehension, and ${hisA} avatar begins to stroke ${hisA} cock meaningfully.`);
					break;
				case "amazon":
					r.push(`"Yeah!" ${heA} shouts over the slave's moan of apprehension, and ${hisA} avatar quickly dons a big strap-on carved from mammoth tusk.`);
					break;
				case "businesswoman":
					r.push(`"Oh yes," ${heA} purrs sadistically over the slave's moan of apprehension, and ${hisA} avatar quickly dons a big strap-on.`);
					break;
				case "fairy":
				case "pregnant fairy":
					r.push(`"Oh yeah!" ${heA} shouts over the slave's moan of apprehension, and ${hisA} avatar quickly conjures up a magic floating dick.`);
					break;
				case "goddess":
				case "hypergoddess":
					r.push(`"That would be lovely," ${heA} says radiantly over the slave's moan of apprehension, and ${hisA} avatar acquires a phallus of light.`);
					break;
				case "angel":
				case "cherub":
					r.push(`"If you insist," ${heA} says reluctantly over the slave's moan of apprehension, and ${hisA} avatar acquires a phallus of light.`);
					break;
				case "succubus":
					r.push(`"Just this once," ${heA} says stroking ${his} clit as it steadily swells into a fully functional cock.`);
					break;
				case "imp":
					r.push(`"Fuck yes," ${heA} groans over the slave's moan of apprehension, and ${hisA} avatar quickly dons a huge, spiked strap-on.`);
					break;
				case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
					r.push(`"Of course," ${heA} shouts over the slave's moan of apprehension, and ${hisA} avatar quickly forms a huge, fleshy, bulbous cock.`);
					break;
				default:
					r.push(`"Fuck yeah!" ${heA} cheers over the slave's moan of apprehension, and ${hisA} avatar quickly dons a big strap-on.`);
			}
			r.push(`You indicate a fuckmachine in the corner of the room, and the slave obediently hurries over to it. It's vertical, and ${he} hops up on it, positioning ${his} anus over its`);
			switch (V.assistant.appearance) {
				case "monstergirl":
					r.push(`pair of dildos. They insert themselves`);
					break;
				case "shemale":
				case "incubus":
					r.push(`frighteningly big dildo. It inserts itself`);
					break;
				case "amazon":
					r.push(`animalistically ribbed dildo. It inserts itself`);
					break;
				case "imp":
					r.push(`terrifyingly spiked, huge dildo. It inserts itself`);
					break;
				case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
					r.push(`frighteningly big, lumpy and uneven dildo. It inserts itself`);
					break;
				default:
					r.push(`large dildo. It inserts itself`);
			}
			r.push(`gently but firmly and then stops, the panting slave's`);
			if (eventSlave.weight > 130) {
				r.push(`thick`);
			} else if (eventSlave.weight > 95) {
				r.push(`chubby`);
			} else if (eventSlave.muscles > 30) {
				r.push(`heavily muscled`);
			} else if (eventSlave.preg >= eventSlave.pregData.normalBirth/8) {
				r.push(`motherly`);
			} else if (eventSlave.weight > 10) {
				r.push(`plush`);
			} else if (eventSlave.muscles > 5) {
				r.push(`toned`);
			} else {
				r.push(`feminine`);
			}
			r.push(`thighs quivering a little from supporting ${his} body in its perch atop the machine, and from the fullness of ${his} anus.`);
			r.push(VCheck.Anal(eventSlave, 3));
			r.push(`${He} knows this is going to be challenging, and is breathing deeply, doing ${his} best to stay relaxed. You cannot resist slapping your`);
			if (PC.dick !== 0) {
				r.push(`big cock lightly`);
			} else {
				r.push(`lubricated strap-on`);
			}
			r.push(`against ${his} cheek, producing a groan of apprehension.`);
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`You push ${him} gently backward, letting ${him} get accustomed to the new angle.`);
			if (eventSlave.boobs > 2000) {
				r.push(`${His} monstrous tits spread to either side of ${his}`);
				if (eventSlave.belly >= 5000) {
					r.push(belly);
					if (eventSlave.bellyPreg >= 3000) {
						r.push(`pregnant`);
					}
					r.push(`belly,`);
				} else {
					r.push(`now upright torso,`);
				}
				r.push(`and you take a moment to play with them as ${he} prepares ${himself}.`);
			}
			if (canDoVaginal(eventSlave)) {
				r.push(`${He} gasps as ${he} feels`);
				if (PC.dick !== 0) {
					r.push(`your hot dickhead`);
				} else {
					r.push(`the slick head of your strap-on`);
				}
				r.push(`part ${his} pussylips, no doubt feeling full already.`);
				r.push(VCheck.Vaginal(eventSlave, 3));
				r.push(`When you're all the way in, the`);
				if (V.assistant.appearance === "monstergirl") {
					r.push(`dildos in ${his} butt begin`);
				} else {
					r.push(`dildo in ${his} butt begins`);
				}
				r.push(`to fuck ${him}, harder and harder, as ${V.assistant.name} moans happily. The all-encompassing feeling of fullness as ${his} cunt and ass are fucked to the very limit of their capacities`);
			} else {
				r.push(`${He} gasps as ${he} feels you push a finger up ${his} already-full butt and pull ${his} sphincter a bit wider. You withdraw it and replace it with`);
				if (PC.dick !== 0) {
					r.push(`your turgid cock`);
				} else {
					r.push(`your strap-on`);
				}
				r.push(`the slave writhes involuntarily, ${his} body trying to refuse the invasion of yet another phallus.`);
				r.push(VCheck.Anal(eventSlave, 3));
				r.push(`When you're all the way in, the`);
				if (V.assistant.appearance === "monstergirl") {
					r.push(`dildos alongside your`);
					if (PC.dick !== 0) {
						r.push(`dick`);
					} else {
						r.push(`strap-on`);
					}
					r.push(`in ${his} butt begin`);
				} else {
					r.push(`dildo alongside your`);
					if (PC.dick !== 0) {
						r.push(`dick`);
					} else {
						r.push(`strap-on`);
					}
					r.push(`in ${his} butt begins`);
				}
				r.push(`to fuck ${him}, harder and harder, as ${V.assistant.name} moans happily. The all-encompassing feeling of fullness as ${his} ass is fucked to the very limit of its capacity`);
			}
			r.push(`quickly drives all feminine grace, presence of mind, or really, conscious thought out of the poor slave. After begging for mercy for a short while, ${he} lapses into animal groans, drooling and leaking tears out the corner of ${his} eyes as you and ${V.assistant.name} fuck ${him} into insensibility. When you climax, ${V.assistant.name} ejaculates, filling the slave's anus with warm fluid.`);
			App.Events.addParagraph(frag, r);

			r = [];
			r.push(`By this point ${he}'s so helpless that you`);
			if (eventSlave.belly >= 300000 || eventSlave.weight > 190) {
				r.push(`have to struggle to lift`);
			} else {
				r.push(`gently lift`);
			}
			r.push(`${him} off the fuckmachine and carry ${him} to the shower. You set ${him} down there, and ${V.assistant.name} activates the water, using the powerful jets in pulses to massage life back into your exhausted fuckpuppet. ${His} avatar appears on a screen behind the shower, creating an optical illusion that makes it look like ${he}'s petting the slave in time with the water. ${He} reassures to the slave as ${he} does:`);
			switch (V.assistant.appearance) {
				case "monstergirl":
					r.push(`"You're a good little cocksock," ${he} says kindly.`);
					break;
				case "shemale":
					r.push(`"I like your butthole," ${he} says politely.`);
					break;
				case "amazon":
					r.push(`"I like fucking your butthole," ${he} says kindly.`);
					break;
				case "businesswoman":
					r.push(`"I'm sure you won't be sold right away," ${he} says.`);
					break;
				case "fairy":
				case "pregnant fairy":
					r.push(`"You're a good ${girl}," ${he} says.`);
					break;
				case "goddess":
				case "hypergoddess":
					r.push(`"There, there," ${he} says kindly. "You are a good sex slave."`);
					break;
				case "angel":
				case "cherub":
					r.push(`"There, there," ${he} says kindly. "You are a good ${girl}."`);
					break;
				case "incubus":
				case "succubus":
				case "imp":
					r.push(`"You're a good little cocksleeve," ${he} says honestly.`);
					break;
				case "ERROR_1606_APPEARANCE_FILE_CORRUPT":
					r.push(`"You're a good little nursery," ${he} says.`);
					break;
				default:
					r.push(`"I like you," ${he} says cheerily.`);
			}
			eventSlave.devotion += 4;
			App.Events.addParagraph(frag, r);
			return frag;
		}
	}
};


code:
App.Events.RESSAGift = class RESSAGift 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.devotion > 50,
				s => s.trust > 50,
				hasAnyArms,
				hasAnyLegs,
				canTalk,
				s => V.HeadGirlID !== s.ID // eventSlave.ID cannot be 0(?), therefore redundant to also allow V.headGirlID === 0
			]
		];
	}

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

		App.Events.drawEventArt(node, eventSlave);

		const FSArray = FutureSocieties.activeFSes(V.arcologies[0]);
		const napkin = getNapkin();
		function getNapkin() {
			switch (FSArray.random()) {
				case "FSGenderRadicalist":
					return "a lily with a prominent stamen";
				case "FSGenderFundamentalist":
					return "a beautiful, feminine lily";
				case "FSSupremacist":
					return "a proud rose";
				case "FSSubjugationist":
					return "a makeshift whip";
				case "FSYouthPreferentialist":
					return "a cute little flowerbud";
				case "FSMaturityPreferentialist":
					return "a gorgeous mature orchid";
				case "FSPaternalist":
					return "a smooth, calming design";
				case "FSDegradationist":
					return "a spiky abstract design";
				case "FSTransformationFetishist":
					return "a big pair of fake lips";
				case "FSBodyPurist":
					return "a simple, unaltered flower";
				case "FSPastoralist":
					return "a sheaf of corn";
				case "FSPhysicalIdealist":
					return "a dumbbell";
				case "FSHedonisticDecadence":
					return "a hamburger";
				case "FSSlimnessEnthusiast":
					return "a lithe figure";
				case "FSAssetExpansionist":
					return "a figure with exaggerated breasts and buttocks";
				case "FSRepopulationFocus":
					return "a lotus flower";
				case "FSRestart":
					return "a makeshift chastity belt";
				case "FSIntellectualDependency":
					if (eventSlave.intelligence+eventSlave.intelligenceImplant >= -50) {
						return "a jasmine flower";
					} else {
						return "a dick";
					}
				case "FSSlaveProfessionalism":
					return "an iris";
				case "FSPetiteAdmiration":
					return "a cute little buttercup";
				case "FSStatuesqueGlorification":
					return "a large sunflower";
				case "FSChattelReligionist":
					return "a piece of religious iconography";
				case "FSNull":
					return "a daffodil";
				case "FSRomanRevivalist":
					return "a laurel wreath";
				case "FSNeoImperialist":
					return "an elegant coat of arms from another noble family";
				case "FSAztecRevivalist":
					return "a small statuette";
				case "FSEgyptianRevivalist":
					return "a perfect pyramid";
				case "FSEdoRevivalist":
					return "a Shinto arch";
				case "FSArabianRevivalist":
					return "a complex minaret";
				case "FSChineseRevivalist":
					return "an imperial pagoda";
				case "FSAntebellumRevivalist":
					return "a fleur-de-lis";
				default:
					return "a beautiful flower";
			}
		}

		let r = [];
		r.push(`You're working at your desk when`);
		r.push(contextualIntro(V.PC, eventSlave, true));
		r.push(`walks by your office. ${He} checks to see whether you're in while trying very hard to look like ${he}'s minding ${his} own business, and turns to go once ${he}`);
		if (canSee(eventSlave)) {
			r.push(`sees`);
		} else if (canHear(eventSlave)) {
			r.push(`hears`);
		} else {
			r.push(`assumes`);
		}
		r.push(`that you're present. You`);
		if (canSee(eventSlave)) {
			r.push(`crook a finger at ${him}.`);
		} else if (canHear(eventSlave)) {
			r.push(`clear your throat at ${him}, signaling you want ${him} before you.`);
		} else {
			r.push(`remotely and quickly close the door behind ${him}.`);
		}
		r.push(`${He}'s a good ${girl} and not likely to be plotting anything nefarious, but letting nonsense like that slide would be stupid. ${He} hurries in, blushing furiously, with ${his} ${hands} behind ${his} back. Deciding to deal with the obvious thing first, you ask ${him} what ${he}'s got. ${He} blushes even harder, and brings ${his} ${hands} around to reveal one of the large cloth napkins used for entertaining, carefully folded into the shape of ${napkin}. It's very well done.`);
		App.Events.addParagraph(node, r);

		r = [];
		r.push(Spoken(eventSlave, `"I'm sorry, ${Master},"`), `${he} mumbles,`);
		if (canSee(eventSlave)) {
			r.push(`glancing down at ${his} feet.`);
		} else {
			r.push(`${his} head facing down at ${his} feet.`);
		}
		r.push(Spoken(eventSlave, `"One of the other girls ${canSee(eventSlave) ? "showed" : "taught"} us how to fold stuff when we were resting together. I wanted to make something for you, and this was the first thing that was good enough. I was just going to slip it onto your desk. I — I feel kind of stupid, now."`));

		App.Events.addParagraph(node, r);
		App.Events.addResponses(node, [
			new App.Events.Result(`That's nice`, nice),
			new App.Events.Result(`These slaves clearly have too much time on their hands`, time),
			(eventSlave.fetishKnown === 1 && eventSlave.fetish !== Fetish.NONE)
				? new App.Events.Result(`Give ${him} something in return`, give, ((eventSlave.anus === 0 && canDoAnal(eventSlave)) || (eventSlave.vagina === 0 && canDoVaginal(eventSlave)) ? `This option may take ${his} virginity` : null))
				: new App.Events.Result(),
			new App.Events.Result(`${He}'s already gift enough`, enough),
			// @ts-ignore
			(typeof eventSlave.napkin === "undefined")
				? new App.Events.Result(`Place it in your display case`, addTrinketLocal)
				: new App.Events.Result()
		]);

		function nice(){
			return `It's not just a feeling. However, slapping slaves for idiotic devotion isn't wise, since the idiotic part of idiotic devotion is less important than the devotion part. You thank ${him} kindly, tell ${him} to put ${his} offering on your desk, and go back to your work. ${He} flees, feeling relieved but foolish. When ${he}'s gone, you direct another slave to return the napkin to its proper place.`;
		}

		function time(){
			r = [];
			r.push(`You thank ${him} kindly, tell ${him} to put ${his} offering on your desk, and go back to your work. ${He} flees, and once ${he}'s gone, you`);
			if (S.HeadGirl) {
				r.push(`have ${V.assistant.name} pass a note to your Head Girl instructing ${getPronouns(S.HeadGirl).him}`);
			} else {
				r.push(`instruct ${V.assistant.name}`);
			}
			r.push(`to tighten up your slaves' schedules, since you feel that they have too much time on their hands. Then you direct another slave to return the napkin to its proper place. Your slaves find their spare moments occupied by household minutiae during the coming week, saving you some money on penthouse and slave upkeep.`);
			cashX(2000, "event", eventSlave);
			return r;
		}

		function give(){
			const {girlU} = getNonlocalPronouns(V.seeDicks).appendSuffix('U');

			r = [];
			r.push(`You thank ${him}, and tell ${him} you're considering what to give ${him} in return. ${He} looks flirty, and says,`);
			switch (eventSlave.fetish) {
				case "submissive":
					if (canDoAnal(eventSlave) || canDoVaginal(eventSlave)) {
						r.push(Spoken(eventSlave, `"Please, would you hold me down and fuck me, ${Master}?"`));
						r.push(`${He} drapes ${himself} submissively`);
						if (eventSlave.belly >= 300000) {
							r.push(`over ${his} ${belly} middle,`);
						} else {
							r.push(`over the couch,`);
						}
						r.push(`lest you misunderstand. You could hold ${him} down and fuck ${him}, and you do.`);
						if (canDoAnal(eventSlave)) {
							r.push(VCheck.Anal(eventSlave, 1));
						} else {
							r.push(VCheck.Vaginal(eventSlave, 1));
						}
					} else {
						r.push(Spoken(eventSlave, `"Please, would you hold me down and ${V.PC.dick !== 0 ? "fuck my throat" : "grind against my face"}, ${Master}?"`));
						r.push(`${He} drapes ${himself} submissively`);
						if (eventSlave.belly >= 300000) {
							r.push(`over ${his} ${belly} middle,`);
						} else {
							r.push(`over the couch,`);
						}
						r.push(`lest you misunderstand. You could hold ${him} down and`);
						if (V.PC.dick !== 0) {
							r.push(`facefuck ${him},`);
						} else {
							r.push(`make ${him} eat you out,`);
						}
						r.push(`and you do.`);
						seX(eventSlave, "oral", V.PC, "penetrative");
					}
					break;
				case "cumslut":
					r.push(Spoken(eventSlave, `"Please, may I`));
					if (V.PC.dick !== 0) {
						r.push(`give you a blowjob`);
						if (V.PC.vagina !== -1) {
							r.push(`and`);
						}
					}
					if (V.PC.vagina !== -1) {
						r.push(`eat you out`);
					}
					r.push(r.pop() + `, ${Master}?" ${He}`);
					if (eventSlave.belly >= 300000) {
						r.push(`leans onto ${his} ${belly} middle`);
					} else if (eventSlave.belly >= 10000) {
						r.push(`gently lowers ${his}`);
						if (eventSlave.bellyPreg >= 3000) {
							r.push(`pregnant`);
						} else {
							r.push(`heavy`);
						}
						r.push(`body to its knees`);
					} else {
						r.push(`gets down on ${his} knees`);
					}
					r.push(`and licks ${his} lips, lest you misunderstand. You could let ${him}`);
					if (V.PC.dick !== 0) {
						r.push(`give you a blowjob`);
						if (V.PC.vagina !== -1) {
							r.push(`and`);
						}
					}
					if (V.PC.vagina !== -1) {
						r.push(`eat you out`);
					}
					r.push(r.pop() + ",");
					r.push(`and you do.`);
					seX(eventSlave, "oral", V.PC, "penetrative");
					break;
				case "humiliation":
					if (canDoAnal(eventSlave) || canDoVaginal(eventSlave)) {
						r.push(Spoken(eventSlave, `"Please, would you fuck me in public, ${Master}?"`));
						r.push(`${He} edges towards the door, lest you misunderstand. You could fuck ${him} in public, and you do.`);
						if (canDoAnal(eventSlave)) {
							r.push(VCheck.Anal(eventSlave, 1));
						} else {
							r.push(VCheck.Vaginal(eventSlave, 1));
						}
					} else {
						r.push(Spoken(eventSlave, `"Please, may I`));
						if (V.PC.dick !== 0) {
							r.push(`give you a blowjob`);
							if (V.PC.vagina !== -1) {
								r.push(`and`);
							}
						}
						if (V.PC.vagina !== -1) {
							r.push(`eat you out`);
						}
						r.push(Spoken(eventSlave, `in public, ${Master}?"`));
						r.push(`${He} edges towards the door, lest you misunderstand. You could`);
						if (V.PC.dick !== 0) {
							r.push(`give you a blowjob`);
							if (V.PC.vagina !== -1) {
								r.push(`and`);
							}
						}
						if (V.PC.vagina !== -1) {
							r.push(`eat you out`);
						}
						r.push(`in public, and you do.`);
						seX(eventSlave, "oral", V.PC, "penetrative");
					}
					break;
				case "buttslut":
					if (canDoAnal(eventSlave)) {
						r.push(Spoken(eventSlave, `"Please, would you fuck my butt, ${Master}?"`));
						r.push(`${He} turns halfway and shakes ${his} rear enticingly, lest you misunderstand. You could fuck ${his} butt, and you do.`);
						r.push(VCheck.Anal(eventSlave, 1));
					} else {
						r.push(Spoken(eventSlave, `"Please, would you play with my butt, ${Master}?"`));
						r.push(`${He} turns halfway and shakes ${his} rear enticingly, lest you misunderstand. You could play with ${his} butt, and you do, managing intercourse several ways without penetrating ${him}.`);
					}
					break;
				case "boobs":
					r.push(Spoken(eventSlave, `"Please, would you play with my boobs, ${Master}?"`));
					r.push(`${He} sticks out ${his} chest and bounces ${his} breasts for you, lest you misunderstand. You could play with ${his} boobs, and you do, managing mammary intercourse several ways.`);
					seX(eventSlave, "mammary", V.PC, "penetrative", 3);
					break;
				case "pregnancy":
					if ((eventSlave.toyHole === "dick" || V.policies.sexualOpenness === 1) && canPenetrate(eventSlave) && V.PC.vagina !== -1) {
						if (canGetPregnant(V.PC)) {
							r.push(Spoken(eventSlave, `"Please, can I try to get you pregnant, ${Master}?"`));
							r.push(`${His} eyes are glued to your middle. You could let ${him}`);
							if (V.PC.vagina === 0) {
								r.push(`<span class="virginity loss">pierce your maidenhead</span> and`);
								V.PC.vagina++;
							}
							r.push(`seed you, and you do, enjoying the feeling of ${his} hot cum jetting into your fertile pussy.`);
							if (canImpreg(V.PC, eventSlave)) {
								r.push(knockMeUp(V.PC, 20, 0, eventSlave.ID));
							}
						} else if (V.PC.belly >= 1500) {
							r.push(Spoken(eventSlave, `"Please, could I play with your pregnancy while I fuck you, ${Master}?"`));
							r.push(`{His} eyes are glued to your gravid middle. You could let ${him}`);
							if (V.PC.vagina === 0) {
								r.push(`<span class="virginity loss">pierce your maidenhead</span> and`);
								V.PC.vagina++;
							}
							r.push(`play with your pregnancy, and you do, enjoying ${his} fondling as ${he} fucks your pussy.`);
						} else {
							r.push(Spoken(eventSlave, `"Please, would you pretend to be pregnant with my baby, ${Master}?"`));
							r.push(`${His} eyes are glued to your middle. You could play pretend with ${him}, and you do,`);
							if (isItemAccessible.entry("a small empathy belly", "bellyAccessory")) {
								r.push(`strapping an empathy belly on yourself before bending over`);
							} else {
								r.push(`tossing on a camisole and sticking a pillow under it before bending over`);
							}
							if (V.PC.vagina === 0) {
								r.push(`and <span class="virginity loss">gifting ${him} your maidenhead.</span>`);
								V.PC.vagina++;
							} else {
								r.push(`for ${him}.`);
							}
						}
						seX(eventSlave, "penetrative", V.PC, "vaginal");
					} else {
						if (canDoVaginal(eventSlave) || canDoAnal(eventSlave)) {
							r.push(Spoken(eventSlave, `"Please, would you ${V.PC.dick !== 0? `fill me with your seed` : `fuck me`}, ${Master}?"`));
							r.push(`${He} reclines on the couch and offers ${himself} to you, lest you misunderstand. You could`);
							if (V.PC.dick !== 0) {
								r.push(`fill ${him} with your seed,`);
							} else {
								r.push(`fuck ${him},`);
							}
							r.push(`and you do.`);
							if (canDoVaginal(eventSlave)) {
								r.push(VCheck.Vaginal(eventSlave, 1));
							} else {
								r.push(VCheck.Anal(eventSlave, 1));
							}
						} else if (eventSlave.pregKnown === 1) {
							r.push(Spoken(eventSlave, `"Please, would you play with my pregnancy, ${Master}?"`));
							r.push(`${He} pokes out ${his} belly and sways it enticingly, lest you misunderstand. You could play with ${his} pregnancy, and you do, managing to get off several ways.`);
						} else {
							r.push(Spoken(eventSlave, `"Please, would you pretend that I'm pregnant with your baby, ${Master}?"`));
							r.push(`${He} pokes out ${his} belly and sways it enticingly, lest you misunderstand. You could play pretend with ${him}, and you do,`);
							if (isItemAccessible.entry("a small empathy belly", "bellyAccessory")) {
								r.push(`strapping an empathy belly on ${him} before feeling ${him} up.`);
							} else {
								r.push(`tossing ${him} a camisole and a pillow before feeling ${him} up.`);
							}
						}
					}
					break;
				case "dom":
					if ((eventSlave.toyHole === "dick" || V.policies.sexualOpenness === 1) && canPenetrate(eventSlave)) {
						r.push(Spoken(eventSlave, `"Please, could I bang you, ${Master}?"`));
						r.push(`${He} bounces on ${his} heels, rock-hard and biting ${his} lip with anticipation. You could let ${him}`);
						if (V.PC.vagina === 0) {
							r.push(`<span class="virginity loss">pop your cherry</span> and`);
							V.PC.vagina++;
						} else if (V.PC.vagina < 0 && V.PC.anus === 0) {
							r.push(`<span class="virginity loss">break into your virgin rear</span> and`);
							V.PC.anus++;
						}
						r.push(`fuck your brains out, and you do, enjoying playing the sub for once.`);
						seX(eventSlave, "penetrative", V.PC, "vaginal");
						if (V.PC.vagina !== -1) {
							if (canImpreg(V.PC, eventSlave)) {
								r.push(knockMeUp(V.PC, 20, 0, eventSlave.ID));
							}
							seX(eventSlave, "penetrative", V.PC, "vaginal");
						} else {
							if (canImpreg(V.PC, eventSlave)) {
								r.push(knockMeUp(V.PC, 20, 1, eventSlave.ID));
							}
							seX(eventSlave, "penetrative", V.PC, "anal");
						}
					} else {
						r.push(Spoken(eventSlave, `"Please, would you fuck my brains out, ${Master}?"`));
						r.push(`${He} bounces on ${his} heels, biting ${his} lip with anticipation. You could fuck ${his} brains out, and you do, enjoying the dominant slave's constant sexual one-upmanship.`);
						if (canDoVaginal(eventSlave)) {
							r.push(VCheck.Vaginal(eventSlave, 1));
						} else if (canDoAnal(eventSlave)) {
							r.push(VCheck.Anal(eventSlave, 1));
						} else {
							seX(eventSlave, "oral", V.PC, "penetrative");
						}
					}
					break;
				case "sadist":
					if ((eventSlave.toyHole === "dick" || V.policies.sexualOpenness === 1) && canPenetrate(eventSlave)) {
						r.push(Spoken(eventSlave, `"Please, can I pretend to rape you, ${Master}?"`));
						r.push(`${His} eyes are wild. You could let ${him}`);
						if (V.PC.vagina === 0) {
							r.push(`<span class="virginity loss">tear your hymen</span> and`);
							V.PC.vagina++;
						} else if (V.PC.vagina < 0 && V.PC.anus === 0) {
							r.push(`<span class="virginity loss">burst your virgin sphincter</span> and`);
							V.PC.anus++;
						}
						r.push(`rape you, and you do, pretending to go about your day until ${he} shoves you onto the couch and roughly fucks your`);
						if (V.PC.vagina !== -1) {
							r.push(`pussy.`);
							if (canImpreg(V.PC, eventSlave)) {
								r.push(knockMeUp(V.PC, 20, 0, eventSlave.ID));
							}
							seX(eventSlave, "penetrative", V.PC, "vaginal");
						} else {
							r.push(`ass.`);
							if (canImpreg(V.PC, eventSlave)) {
								r.push(knockMeUp(V.PC, 20, 1, eventSlave.ID));
							}
							seX(eventSlave, "penetrative", V.PC, "anal");
						}
					} else {
						r.push(Spoken(eventSlave, `"Please, would you let me rape someone, ${Master}?"`));
						r.push(`${His} eyes are wild. You could let ${him} rape someone, and you do, bringing in an appropriate slave and letting ${him} have ${his} way with the poor ${girlU}.`);
					}
					break;
				case "masochist":
					if ((eventSlave.toyHole === "dick" || V.policies.sexualOpenness === 1) && canPenetrate(eventSlave)) {
						r.push(Spoken(eventSlave, `"Please, would you rape me, ${Master}?"`));
						r.push(`${His} eyes are hungry. You could rape ${him}, and you do, throwing ${him} across the`);
						if (V.PC.vagina === 0) {
							r.push(`couch, <span class="virginity loss">piercing your maidenhead</span> with ${his} stiff dick`);
							V.PC.vagina++;
						} else if (V.PC.vagina < 0 && V.PC.anus === 0) {
							r.push(`couch, taking ${his} dick inside <span class="virginity loss">your virgin rear</span>`);
							V.PC.anus++;
						} else {
							r.push(`couch`);
						}
						r.push(`and riding ${him} through so many orgasms that ${he} begs for mercy.`);
						seX(eventSlave, "penetrative", V.PC, "vaginal");
						if (canImpreg(V.PC, eventSlave)) {
							r.push(knockMeUp(V.PC, 20, 2, eventSlave.ID));
						}
					} else {
						r.push(Spoken(eventSlave, `"Please, would you rape me, ${Master}?"`));
						r.push(`${His} eyes are hungry. You could rape ${him}, and you do, throwing ${him} across the couch and fucking ${him} so hard ${he} begs for mercy as ${he} orgasms.`);
						if (canDoVaginal(eventSlave)) {
							r.push(VCheck.Vaginal(eventSlave, 1));
						} else if (canDoAnal(eventSlave)) {
							r.push(VCheck.Anal(eventSlave, 1));
						} else {
							seX(eventSlave, "oral", V.PC, "penetrative");
						}
					}
					break;
				default:
					r.push(Spoken(eventSlave, `"I forgot what my fetish is, but I think it is ${eventSlave.fetish}."`));
					throw Error (`<span class="red">Error: rents is outside accepted range, please report this issue.</span>`);
			}
			if (eventSlave.fetishStrength > 95) {
				r.push(`This is very close to ${his} dream of the ideal sexual encounter, and getting rewarded for such devoted behavior with pleasure on such a level encourages ${him} to trust you.`);
				eventSlave.trust += 5;
			} else {
				r.push(`It isn't exactly an old world romance, but sharing this with you <span class="fetish inc">advances ${his} fetish.</span> In the Free Cities, it will do for romance.`);
				eventSlave.fetishStrength += 4;
			}
			r.push(`When ${he}'s gone, you direct another slave to return the napkin to its proper place.`);
			return r;
		}

		function enough(){
			r = [];
			r.push(`You smile gently at ${him} and tell ${him} to put ${his} gift down on your desk. ${He} does, looking doubtful, but then you thank ${him}, going on to say that it was very nice of ${him} to have the thought, but ${he}'s already gift enough. ${He} looks momentarily confused, but you continue, describing ${his} body in rhapsodic terms, lingering on ${his}`);
			if (eventSlave.boobs > 5000) {
				r.push(`gargantuan tits`);
			} else if (eventSlave.butt > 5) {
				r.push(`massive ass`);
			} else if (eventSlave.face > 40) {
				r.push(`model's face`);
			} else if (eventSlave.bellyPreg > 1500) {
				r.push(`rounded pregnancy`);
			} else if (eventSlave.belly > 1500) {
				r.push(`${belly} belly`);
			} else if (eventSlave.muscles > 30) {
				r.push(`ripped abs`);
			} else if (eventSlave.weight > 10) {
				r.push(`plush belly`);
			} else {
				r.push(`nice butt`);
			}
			r.push(`and`);
			if (eventSlave.boobs < 500) {
				r.push(`cute chest.`);
			} else if (eventSlave.butt < 3) {
				r.push(`cute rear.`);
			} else if (eventSlave.anus > 1) {
				r.push(`wonderful butthole.`);
			} else if (eventSlave.clit > 1) {
				r.push(`cute clit.`);
			} else if (eventSlave.waist < -10) {
				r.push(`wasp waist.`);
			} else if (eventSlave.nipples === "fuckable") {
				r.push(`fuckable chest.`);
			} else {
				r.push(`nice nipples.`);
			}
			r.push(`${He} blushes more and more furiously as you continue, alternately`);
			if (canSee(eventSlave)) {
				r.push(`glancing back down at ${his} feet and stealing looks at you, <span class="devotion inc">adoration</span> in ${his} eyes.`);
			} else {
				r.push(`facing ${his} feet and facing you, <span class="devotion inc">adoration</span> on ${his} face.`);
			}
			r.push(`When ${he}'s gone, you direct another slave to return the napkin to its proper place.`);
			eventSlave.devotion += 4;
			return r;
		}

		function addTrinketLocal(){
			eventSlave.devotion += 4;
			// @ts-ignore
			eventSlave.napkin = 1;
			addTrinket(`a cloth napkin`, {name: eventSlave.slaveName, id: eventSlave.ID, napkinShape: napkin});
			return `You thank ${him} kindly, and hold out your hand. ${He} places ${his} creation in your hands with something like reverence. You enter a secure command on your desk, and the display case behind you slides open. You place the folded napkin in its own little place within. ${eventSlave.slaveName} watches incredulously, unable to believe what you're doing. When ${he} finally processes it, ${he} bursts into inelegant tears. Cuffing them away from ${his} eyes and sniffling, ${he} tells you ${he} loves you.`;
		}
	}
};