code:
/**
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.Interact.fPCImpreg = function(slave) {
	const frag = new DocumentFragment();

	const text = [];

	const {He, His, he, his, him, himself} = getPronouns(slave);

	const pregnancyFetish = slave.fetish === 'pregnancy' && slave.fetishStrength > 60 && slave.fetishKnown;
	const submissive = slave.fetish === 'submissive' && slave.fetishStrength > 60 && slave.fetishKnown;
	const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown;
	const virgin = slave.vagina === 0 || (slave.mpreg && slave.anus === 0);
	const hole = slave.mpreg ? `asshole` : `pussy`;

	const accepting = slave.devotion > 20;
	const hesitant = slave.devotion >= -20 && slave.devotion <= 20;
	const resistant = slave.devotion < -20;

	const loseVirginity = () => {
		if (slave.mpreg) {
			slave.anus = 1;
		} else {
			slave.vagina = 1;
		}
	};

	let fillHim = '';
	let firstTime = '';

	if (V.PC.prostate > 1) {
		fillHim = ` filling ${him} until ${his} belly is distended and wobbling with your cum`;
	} else if (V.PC.prostate > 0) {
		fillHim = ` pouring into ${him} until ${he} is stuffed with your cum`;
	} else if (V.PC.balls > 8) {
		fillHim = ` pouring into ${him}`;
	}

	text.push(`You call ${him} over so you can`);

	if (slave.mpreg) {
		const asshole = slave.geneticQuirks.superfetation === 2 && slave.pregKnown
			? `asshole and put another baby in ${him}`
			: `asshole`;

		if (slave.anus > 2) {
			text.push(`fuck ${his} gaping, fertile ${asshole}.`);
		} else if (slave.anus === 2) {
			text.push(`use ${his} whorish, fertile ${asshole}.`);
		} else if (slave.anus === 1) {
			text.push(`use ${his} tight, fertile ${asshole}.`);
		} else if (slave.anus === 0) {
			text.push(`take ${his} fertile, virgin ${asshole}.`);
		} else {
			throw new Error(`Unexpected anus value '${slave.anus}' in fPCImpreg()`);
		}

		text.push(`The crest on ${his} abdomen eagerly awaits a womb stuffed with cum, and who are you to deny its request?`);
	} else {
		if (slave.vagina > 2) {
			text.push(`fuck ${his} gaping, fertile cunt.`);
		} else if (slave.vagina === 2) {
			text.push(`use ${his} whorish, fertile cunt.`);
		} else if (slave.vagina === 1) {
			text.push(`use ${his} tight, fertile cunt.`);
		} else if (slave.vagina === 0) {
			text.push(`take ${his} fertile, virgin pussy.`);
		} else {
			throw new Error(`Unexpected vagina value '${slave.vagina}' in fPCImpreg()`);
		}

		if (superfetation) {
			text.push(`You plan on putting another baby in ${him}.`);
		}

		if (slave.vaginaTat) {
			if (slave.vaginaTat === "tribal patterns") {
				text.push(`The tattoos on ${his} abdomen certainly draw attention there.`);
			} else if (slave.vaginaTat === "scenes") {
				text.push(`The tattoos on ${his} abdomen nicely illustrate what you mean to do to ${him}.`);
			} else if (slave.vaginaTat === "degradation") {
				text.push(`The tattoos on ${his} abdomen ask you to, after all.`);
			} else if (slave.vaginaTat === "lewd crest") {
				text.push(`The crest on ${his} abdomen eagerly awaits a womb stuffed with cum.`);
			}
		}

		if (slave.clit > 0) {
			if (slave.clit === 1) {
				text.push(`${His} big clit ${slave.foreskin ? `peeks out from under its hood` : `can't be missed`}.`);
			} else if (slave.clit > 1) {
				text.push(`${His} huge clit is impossible to miss.`);
			}
		}

		if (slave.piercing.vagina.weight > 0) {
			if (slave.piercing.vagina.weight > 1) {
				text.push(`${His} pierced lips and clit have ${him} nice and wet.`);
			} else if (slave.piercing.vagina.weight === 1) {
				text.push(`${His} pierced clit has ${him} nice and moist.`);
			}
		}
	}

	if (virgin) {
		if (pregnancyFetish) {
			if (isSexuallyPure(slave)) {
				firstTime = `, knowing that ${his} first time will always be special to ${him}`;
			}

			text.push(`${He} cries with joy and presents ${his} virgin`);

			if (slave.mpreg) {
				text.push(`asshole for fertilization.`);
			} else if (['bushy', 'very bushy', 'bushy in the front and neat in the rear'].includes(slave.pubicHStyle)) {
				text.push(`treasure, barely visible within her tangle of pubic hair, but ready for fertilization.`);
			} else if (slave.pubicHStyle === 'in a strip') {
				text.push(`pussy, accented by ${his} strip of pubic hair, ready for fertilization.`);
			} else if (slave.pubicHStyle === 'neat') {
				text.push(`neatly trimmed pussy, ready for fertilization.`);
			} else if (slave.pubicHStyle === 'waxed') {
				text.push(`pussy, smooth and bare, ready for fertilization.`);
			} else {
				text.push(`pussy, ready for fertilization.`);
			}

			text.push(`You waste no time with foreplay as you mount ${him} and get to work. As you claim ${his} pearl, ${his} breath hitches in ${his} throat, but pleasure quickly overcomes the pain. ${He} groans as your pelvis repeatedly slaps against ${him} over and over, anticipating what's to come. Just before you reach your peak, you hilt yourself within ${him}, signaling that it's time. ${He} sobs with happiness when ${he} finally feels your hot seed${fillHim}${firstTime}. ${He} spends the rest of the day cherishing ${his} ${bellyAdjective(slave)} stomach. This new connection with ${his} ${getWrittenTitle(slave)} increases ${his} devotion to you. ${His} ${hole} has been broken in, and there's a good chance ${he}'s ${superfetation ? `got another bun in the oven` : `pregnant`}.
			`);

			slave.devotion += 15;

			loseVirginity();
		} else if (accepting) {
			text.push(`${He} accepts your orders without comment and presents ${his} virgin ${hole} for fertilization. ${He} gasps in shock when ${he} feels your hot seed${fillHim}. ${He} spends the rest of the day struggling with roiling emotions. Since ${he} is already well broken${superfetation ? ` and pregnant` : ``}, this new connection with ${his} ${getWrittenTitle(slave)} increases ${his} devotion to you. ${His} ${hole} has been broken in, and there's a good chance ${he}'s ${superfetation ? `got another bun in the oven` : `pregnant`}.`);

			slave.devotion += 10;

			loseVirginity();
		} else if (hesitant) {
			text.push(`${He} is clearly unhappy at losing ${his} pearl of great price to you; this probably isn't what ${he} imagined ${his} first real sex would be like. Worse, ${he} knows ${he}'s fertile and realizes ${superfetation ? `${his} existing pregnancy is not going to stop you from adding another baby to ${his} womb.` : `${he}'ll likely get pregnant.`} Nevertheless, this new connection with ${his} ${getWrittenTitle(slave)} increases ${his} devotion to you. ${His} ${hole} has been broken in.`);

			slave.devotion += 4;

			loseVirginity();
		} else if (resistant) {
			text.push(`As you anticipated, ${he} refuses to give you ${his} virginity. And as you expected, ${he} is unable to resist you. ${He} cries as you force yourself on ${him}, your cock piercing ${his} fresh, tight hole. Afterwards, ${he} ${hasAnyArms(slave) ? `clutches ${his} ${bellyAdjective(slave)} stomach` : `lies there`} and sobs, horrified by the knowledge that ${superfetation ? `${his} unborn ${slave.pregType === 1 ? `child is` : `children are`} now sharing quarters with ${his} rapist's child.` : `${he}'s probably carrying ${his} rapist's child.`} Being raped pregnant decreases ${his} devotion to you and fills ${him} with fear. ${His} ${hole} has been broken in.`);

			slave.devotion -= 5;
			slave.trust -= 5;

			loseVirginity();
		}
	} else {
		if (pregnancyFetish) {
			text.push(`${He} cries with joy and presents ${his} fertile`);

			if (slave.mpreg) {
				text.push(`asshole for breeding.`);
			} else if (['bushy', 'very bushy', 'bushy in the front and neat in the rear'].includes(slave.pubicHStyle)) {
				text.push(`pussy, barely visible within her tangle of pubic hair but ripe for breeding.`);
			} else if (slave.pubicHStyle === 'in a strip') {
				text.push(`pussy, accented by ${his} strip of pubic hair and ripe for breeding.`);
			} else if (slave.pubicHStyle === 'neat') {
				text.push(`neatly trimmed pussy, ripe for breeding.`);
			} else if (slave.pubicHStyle === 'waxed') {
				text.push(`pussy, smooth, bare, and ripe for breeding.`);
			} else {
				text.push(`pussy, ripe for breeding.`);
			}

			text.push(`You waste no time with foreplay as you mount ${him} and get to work. ${He} groans as your pelvis repeatedly slaps against ${him} over and over, anticipating what's to come. Just before you reach your peak, you hilt yourself within ${him}, signaling that it's time. ${He} sobs with happiness when ${he} finally feels your hot seed${fillHim}. ${He} spends the rest of the day cherishing ${his} ${bellyAdjective(slave)} stomach. This new connection with ${his} ${getWrittenTitle(slave)} increases ${his} devotion to you.`);

			slave.devotion += 10;
		} else if (isAmputee(slave)) {
			text.push(`You have ${his} limbless torso set on the end of the couch, face-${superfetation ? `up` : `down`}, with ${his} hips up in the air. This way, you get the greatest degree of penetration into ${his} fertile ${hole} you can manage. ${He} moans ${superfetation ? `openly` : `into the cushions`}, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`);
		} else if (tooBigBelly(slave)) {
			if (V.PC.prostate > 1) {
				fillHim = ` filling ${him} until ${his} the pressure forces it to spray around your shaft`;
			} else if (V.PC.prostate > 0) {
				fillHim = ` pouring into ${him} until ${he} is stuffed with your cum`;
			} else if (V.PC.balls > 8) {
				fillHim = ` pouring into ${him}`;
			}

			text.push(`Since ${he} already has trouble moving with ${his} ${bellyAdjective(slave)} belly, you just tip ${him} onto it; this leaves ${his} fertile ${hole} exposed and vulnerable. ${He} moans${hasAnyArms(slave) ? ` as ${he} clutches the sides of ${his} stomach` : ``}, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably gotten ${superfetation ? `another bun added to the oven` : `pregnant`}.`);
		} else if (tooFatSlave(slave)) {
			text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s pinned in place by the weight of ${his} own body, and you get the greatest degree of penetration into ${his} fertile ${hole}; after you push into ${his} soft folds enough to reach it, of course. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`);
		} else if (tooBigBreasts(slave)) {
			text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s pinned in place by the weight of ${his} ridiculous tits, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`);
		} else if (tooBigButt(slave)) {
			text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s stuck under ${his} ridiculous ass, you get an amazingly soft rear to pound, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`);
		} else if (tooBigDick(slave)) {
			text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s anchored in place by the weight of ${his} ridiculous cock, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`);
		} else if (tooBigBalls(slave)) {
			text.push(`You set ${him} down on the couch, face-down, with ${his} hips up in the air. This way, ${he}'s anchored in place by the weight of ${his} ridiculous balls, and you get the greatest degree of penetration into ${his} fertile ${hole}. ${He} moans into the cushions, knowing that when ${he} feels the hot flow of semen${fillHim}, ${he} has probably ${superfetation ? `got another bun in the oven` : `gotten pregnant`}.`);
		} else if (submissive) {
			let fillsHim = '';

			if (V.PC.prostate > 1) {
				fillsHim = `fills ${him} until ${his} belly is distended and wobbling with your cum`;
			} else if (V.PC.prostate > 0) {
				fillsHim = `pours into ${him} until ${he} is stuffed with your cum`;
			} else if (V.PC.balls > 8) {
				fillsHim = `pours into ${him}`;
			} else {
				fillsHim = `jets into ${his} welcoming depths`;
			}

			text.push(`${He} ${slave.belly >= 10000 ? `waddles` : `comes`} submissively over, smiling a little submissive smile, and spreads ${himself} for you. ${slave.belly < 5000
				? `You take ${him} on the couch next to your desk in the missionary position. ${He} hugs ${his} torso to you and ${his} breasts press against your chest; you can feel ${his} heart beating hard.`
				: `You take ${him} from behind against your desk. ${He} steadies ${himself} as ${he} feels your hands roaming across ${his} ${bellyAdjective(slave)} belly. As the sex reaches its climax, ${his} breaths grow short and ${his} moans passionate.`}
			As the sex reaches its climax your semen ${fillsHim} as ${he} begs you to use ${his} unworthy body to make a new slave.`);
		} else if (accepting) {
			let fillingHim = '';

			if (V.PC.prostate > 1) {
				fillingHim = `flowing into ${him} until ${his} stomach is distended and wobbling with your cum`;
			} else if (V.PC.prostate > 0) {
				fillingHim = `pouring into ${him} until ${he} is stuffed with your cum`;
			} else if (V.PC.balls > 8) {
				fillingHim = `pouring into ${him}`;
			} else {
				fillingHim = `jetting into ${him}`;
			}

			text.push(`${slave.belly < 5000
				? `${He} skips over smiling and gives you a quick kiss. You take ${him} on the couch next to your desk in the missionary position. ${He} hugs ${his} torso to you and ${his} breasts press against your ${V.PC.boobs > 300 ? `own;` : `chest; `} you can feel ${his} heart beating hard. As the sex reaches its climax, ${his} kisses grow urgent and passionate. ${He} clings to you,`
				: `${He} waddles over smiling and leans in to give you a quick kiss. You decide to take ${him} from behind against your desk. ${He} steadies ${himself} against the furniture as ${he} feels your hands roaming across ${his} ${bellyAdjective(slave)} belly. You begin to pound into ${him} and as the sex reaches its climax, ${his} breaths grow short and ${his} moans passionate. As you reach your respective peaks, ${he} pushes ${himself} back against you, feeling`}
			your semen ${fillingHim} as ${he} rides the downslope of ${his} orgasm. ${He} kisses you and promises to do ${his} best to use ${his} womb to make ${superfetation ? `another` : `a`} good slave for you.`);
		} else if (hesitant) {
			let full = '';

			if (V.PC.prostate > 1) {
				full = ` far beyond capacity`;
			} else if (V.PC.prostate > 0) {
				full = ` beyond capacity`;
			} else if (V.PC.balls > 8) {
				full = ` to capacity`;
			}

			text.push(`${He} obeys, lying on the couch next to your desk${hasAnyLegs(slave) ? ` with ${his} leg${hasBothLegs(slave) ? `s spread` : ` moved aside`}` : ``}. You kneel on the ground and enter ${him}${hasAnyLegs(slave) ? `, a hand on ${hasBothLegs(slave) ? `each of ${his} legs` : `${his} leg`} to give you purchase` : ``}. The pounding is hard and fast, and ${he} gasps and whines. ${slave.belly > 100000 ? `You reach a hand up to tease ${his} already taut dome of a pregnancy.` : `You reach a hand down to maul ${his} breasts.`} ${He} begs you not to cum inside ${him}, knowing ${he}'s fertile, but soon loses track of ${his} fears as ${he} enjoys ${himself}. ${He} bites ${his} lip and moans as ${he} climaxes. You follow ${him} over the edge as you give one final, deep thrust before filling ${his} squeezing fuckhole${full} with your cum; ${he} realizes what you've done with a gasp and a worried look.`);
		} else if (resistant) {
			if (V.PC.prostate > 1) {
				fillHim = `filling ${him} until ${his} belly is distended and wobbling with your cum`;
			} else if (V.PC.prostate > 0) {
				fillHim = `pouring into ${him} until ${he} is stuffed with your cum`;
			} else if (V.PC.balls > 8) {
				fillHim = `pouring into ${him}`;
			} else {
				fillHim = `blow your load`;
			}

			text.push(`${He} tries to refuse, so you bend the disobedient slave over your desk and take ${him} hard from behind. ${His} breasts slide back and forth across the desk. You give ${his} buttocks some nice hard swats as you pound ${him}. ${He} grunts and moans but knows better than to try to get away. ${He} begs you not to cum inside ${him}, knowing ${he}'s fertile, and sobs when ${he} feels you ${fillHim} despite ${his} pleas.`);
		}
	}

	text.push(`You repeat this ritual throughout the week, ensuring that ${slave.slaveName}`);

	if (superfetation) {
		text.push(`has <span class="pregnant">added your child</span> to ${his} pregnancy.`);
	} else {
		text.push(`is <span class="pregnant">carrying your child.</span>`);
	}

	if (FutureSocieties.isActive('FSRestart') && (!slave.breedingMark || V.propOutcome === 0) && V.eugenicsFullControl !== 1) {
		text.push(`Rumors spread about you fucking your slaves pregnant; the Societal Elite are <span class="reputation dec">very displeased</span> by these rumors.`);

		V.failedElite += 5;
	}

	if (FutureSocieties.isActive('FSGenderRadicalist') && slave.mpreg) {
		text.push(`Society <span class="reputation inc">approves</span> of your fucking your slaves' asses pregnant; this advances the ideal all a slave needs is ${his} rear.`);
		FutureSocieties.Change("FSGenderRadicalist", 1);
	} else if (FutureSocieties.isActive('FSGenderFundamentalist')) {
		if (slave.mpreg) {
			text.push(`Society <span class="reputation dec">is disgusted</span> by this degenerate form of reproduction.`);
			FutureSocieties.Change("FSGenderFundamentalist", -1);
		} else {
			text.push(`Society <span class="reputation inc">approves</span> of your putting a new slave in ${him}; this advances the idea that all slaves should bear their masters' babies.`);
			FutureSocieties.Change("FSGenderFundamentalist", 1);
		}
	}

	seX(slave, slave.mpreg ? `anal` : `vaginal`, V.PC, "penetrative");
	knockMeUp(slave, 100, 2, -1);

	App.Events.addNode(frag, text);

	return frag;
};


code:
/**
 *
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.Interact.fPat = function(slave) {
	const node = new DocumentFragment();
	let r = [];

	const {
		He, His,
		he, his, him, himself, woman, girl, wife
	} = getPronouns(slave);

	const {title: Master, say: say} = getEnunciation(slave);

	const {
		hisP, womanP,
	} = getPronouns(V.PC).appendSuffix("P");

	slave.partners.add(-1);
	const isBald = slave.hStyle.includes("bald") || slave.bald === 1;

	r.push(`You tell ${slave.slaveName} to`);
	if (!hasAnyLegs(slave)) {
		r.push(`have another slave set ${him} up onto your desk.`);
	} else if (tooBigBreasts(slave)) {
		r.push(`have another slave help ${him} heft ${his} tits so ${he} can be near you.`);
	} else if (tooBigBelly(slave)) {
		r.push(`have another slave help ${him} heft ${his} belly so ${he} can be near you.`);
	} else if (tooBigButt(slave)) {
		r.push(`have another slave help ${him} heft ${his} ass cheeks so ${he} can be near you.`);
	} else if (tooBigDick(slave)) {
		r.push(`have another slave help ${him} heft ${his} cock so ${he} can be near you.`);
	} else if (tooBigBalls(slave)) {
		r.push(`have another slave help ${him} heft ${his} balls so ${he} can be near you.`);
	} else if (tooFatSlave(slave)) {
		r.push(`have another slave help ${him} up so ${he} can be near you.`);
	} else {
		r.push(`move closer towards you.`);
	}

	/* approach*/

	if (slave.fetish === Fetish.MINDBROKEN && slave.relationship !== -3) {
		r.push(`${He} complies robotically. ${He} remembers that when ${getWrittenTitle(slave)}'s commands are not obeyed, there is punishment.`);
	} else if (slave.relationship === -2) {
		r.push(`${He} eagerly complies, happy to be near the object of ${his} longing. Once ${he}'s close, you hold ${his} face in your palms and gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he} loves overwhelming, and ${his} eyes flick downward after a moment.`);
		} else {
			r.push(`upon ${his} face. ${He} finds the intense look from the ${womanP} ${he} loves overwhelming, and after a moment glances away.`);
		}
		r.push(`${He} blushes furiously.`);
	} else if (slave.relationship === -3) {
		if (slave.fetish === Fetish.MINDBROKEN) {
			r.push(`${He} complies mechanically. ${He} remembers that when ${getWrittenTitle(slave)}'s commands are not obeyed, there is punishment. Once ${he}'s close, you hold ${his} face in your palms and look into ${his} empty ${App.Desc.eyesColor(slave)}. ${He} shows no reaction`);
		} else if (slave.devotion+slave.trust >= 175) {
			r.push(`${He} complies in a ${wife}ly fashion, moving ${his} body as ${he} approaches to best enflame your desire, eager to be close to the ${womanP} who married ${him}. Once ${he}'s close, you hold ${his} face in your palms and gaze`);
			if (canSee(slave)) {
				r.push(`deeply into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to affirming, and looks down with a smile, running ${his} eyes over your`);
				if (V.PC.boobs >= 300) {
					r.push(`bosom.`);
				} else {
					r.push(`chest.`);
				}
			} else {
				r.push(`upon ${his} face. ${He} finds the intense look from the ${womanP} ${he}'s married to affirming, and looks down with a smile.`);
			}
		} else if (slave.devotion < -20 && slave.trust > 20) {
			r.push(`${He} complies. Once ${he}'s close, you hold ${his} face in your palms and take a moment to gaze deeply`);
			if (canSee(slave)) {
				r.push(`into ${his} tearful ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s forcibly married too disturbing, and breaks eye contact.`);
			} else {
				r.push(`upon ${his} face. ${He} can feel the intense gaze of the ${womanP} ${he}'s forcibly married to, and finds it disturbing. ${He} quickly turns ${his} face away.`);
			}
		} else if (slave.devotion < -20) {
			r.push(`${He} complies out of fear. Once ${he}'s close, you hold ${his} quivering face in your palms and take a moment to gaze deeply`);
			if (canSee(slave)) {
				r.push(`into ${his} teary ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s forcibly married to terrifying, and quickly breaks eye contact.`);
			} else {
				r.push(`upon ${his} tear-streaked face. ${He} can feel the intense look from the ${womanP} ${he}'s forcibly married to, and it is horrifying, causing ${him} to turn ${his} face away after only a moment.`);
			}
		} else {
			r.push(`${He} complies obediently. Once ${he}'s close, you hold ${his} face in your palms and take a moment to gaze deeply`);
			if (canSee(slave)) {
				r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to reassuring, and looks down with a slight smile, running ${his} eyes over your`);
				if (V.PC.boobs >= 300) {
					r.push(`bosom.`);
				} else {
					r.push(`chest.`);
				}
			} else {
				r.push(`upon ${his} face. The intense look from the ${womanP} ${he}'s married to is reassuring to ${him}, and ${he} looks down with a slight smile.`);
			}
		}
	} else if (slave.devotion > 75) {
		r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you hold ${his} face in your palms and take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from ${his} beloved ${getWrittenTitle(slave)} disconcerting, and ${his} eyes flick downward after a moment.`);
		} else {
			r.push(`upon ${his} face. ${He} can feel the intense look from ${his} beloved ${Master} and it is disconcerting, causing ${him} to glance away after only a moment, ${his} face flushed.`);
		}
		r.push(`${He} blushes furiously.`);
	} else if (slave.devotion > 50) {
		r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you hold ${his} face in your palms and take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} disconcerting, and ${he} looks down after a moment, blushing.`);
		} else {
			r.push(`upon ${his} face. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} disconcerting, and it causes ${him} to glance away after only a moment, blushing.`);
		}
	} else if (slave.devotion > 20) {
		r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you hold ${his} face in your palms and take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and ${he} looks down after a moment, blushing nervously.`);
		} else {
			r.push(`upon ${his} face. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and ${he} looks down after a moment, blushing nervously.`);
		}
	} else if (slave.devotion < -20 && slave.trust >= 20) {
		r.push(`${He} seems to visibly consider disobedience, but apparently decides your order is harmless enough. ${He} does as ${he} is told,`);
		if (canSee(slave)) {
			r.push(`giving you a defiant stare as ${he} does so.`);
		} else {
			r.push(`defiantly staring in your direction.`);
		}
	} else if (slave.devotion >= -20 && slave.trust >= -20) {
		r.push(`${He} visibly considers disobedience, but decides that complying with such an apparently harmless order is safe, for now. Once ${he}'s close, you hold ${his} face in your palms and take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his}`);
			getWrittenTitle(slave);
			r.push(`troubling, and ${he} looks down after a moment, ${his} lower lip trembling with nervousness.`);
		} else {
			r.push(`upon ${his} face. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and turns away after a moment, ${his} lower lip trembling with nervousness.`);
		}
	} else if (slave.trust < -20) {
		r.push(`The command terrifies ${him}, but ${he}'s more frightened still of the consequences of disobedience, and ${he} complies. Once ${he}'s close, you hold ${his} face in your palms and take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. After a mere instant of locked faces, ${he} looks down fearfully and begins to shake with terror, tears leaking silently down ${his} cheeks.`);
		} else {
			r.push(`upon ${his} face. After a mere instant of locked faces, ${he} looks down fearfully and begins to shake with terror, tears leaking silently down ${his} cheeks.`);
		}
	} else {
		r.push(`${He} pauses, obviously considering whether to resist, but eventually decides to save ${his} strength to fight more onerous orders, and gives in. Once ${he}'s close, you hold ${his} face in your palms and take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} stares back, but after a few moments ${he} loses the contest of wills and looks down.`);
		} else {
			r.push(`upon ${his} face. ${He} faces you defiantly, but after a few moments ${he} loses the contest of wills and looks down.`);
		}
	}

	/* action */

	r.push(`You walk around ${him}, drawing closer and slowly resting your hand on ${his} head. You let it rest for a few seconds to get ${him} accustomed to your touch.`);
	if (slave.fetish === Fetish.MINDBROKEN) {
		r.push(`Tenderly and lovingly you brush your fingers along ${his} head, enjoying the feeling of your poor mentally shattered slave's inability to resist you. ${He} initially reacts slightly to your physical touch, but soon stops reacting completely. Nevertheless, you continue to gingerly stroke ${his}`);
		if (isBald) {
			r.push(`shaven scalp,`);
		} else {
			r.push(`hair,`);
		}
		r.push(`as you gently press ${his} body into your chest${!hasAnyLegs(slave) ? ` and onto your lap` : ``}. The warmth from your slave's body, and the action of petting ${his} head, combined with the sound of ${his} breathing, allow you to feel more relaxed by the minute.`);
	} else if ((slave.relationship === -3) && slave.devotion+slave.trust >= 175) {
		r.push(`Tenderly and lovingly you brush your fingers along ${his} head, enjoying the feeling of your slave's utterly willing submission. ${He} slowly leans ${his} body closer and closer to you${!hasAnyLegs(slave) ? ` and finally onto your lap` : ``}, relaxing as ${he} feels your caress. As ${he} shifts ${his} weight to your chest, ${he} feels all of the daily stresses of the day melt away, and a deep, happy sigh escapes ${his} lips. You smile fondly, allowing all of the troubles of being an arcology owner dissipate, in a similar fashion to your slave. For now, just for now, you are just a ${womanP} and ${hisP} devoted and content ${wife}.`);
	} else if (slave.relationship === -2) {
		r.push(`Tenderly and lovingly you brush your fingers along ${his} head, for a moment, appreciating how easily your slave submits to your desire to pat ${his} head. ${He} slowly leans ${his} body closer and closer to you${!hasAnyLegs(slave) ? ` allowing you to move ${him} onto your lap` : ``}, relaxing as ${he} feels your caresses. As ${his} weight falls onto you, all of the stress from ${his} body melts away, and a small, respectful sigh escapes ${his} pursed lips. You smile fondly, allowing all of the troubles of being an arcology owner drift away, in a similar fashion to your slave. For now, just for now, you are just a ${womanP} and ${hisP} devoted and content servant.`);
	} else if (slave.devotion > 50 && slave.fetish === "dom" && slave.fetishKnown === 1 && slave.fetishStrength > 60 && hasAnyArms(slave)) {
		r.push(`As you start to touch ${him} ${he} smiles at you and takes your hand, following its movements. You tenderly and lovingly kiss it and let it rest on the side of ${his} head, before continuing with your ministrations. As opposed to your more submissive slaves, ${slave.slaveName} takes an active role in your petting, gently guiding where your hand goes along ${his} head. You enjoy the feel of ${his} hand on yours, as well as ${his}`);
		if (isBald) {
			r.push(`smooth scalp.`);
		} else {
			r.push(`hair.`);
		}
	} else if (slave.devotion > 50 && slave.fetish === Fetish.SUBMISSIVE && slave.fetishKnown === 1 && slave.fetishStrength > 60) {
		r.push(`${He} stiffens at your touch but slowly relaxes at the sensation of your hand on ${his} head. You tenderly and lovingly stroke your fingers along ${his} scalp, enjoying the feeling of your slave's subservience. ${He} gently, submissively, presses ${his} head against your hand, like a dog. As you continue`);
		if (isBald) {
			r.push(`kneading ${his} shaved scalp,`);
		} else {
			r.push(`stroking ${his} hair,`);
		}
		r.push(`${he} starts to clutch ${his} thighs, and if you listen you can hear subdued whimpers. ${He} looks up at you with adoring eyes, and relishes in the pureness of this act as ${his} master's pet to ${his} beloved ${getWrittenTitle(slave)}.`);
	} else if (slave.devotion > 50) {
		r.push(`${He} accepts it with devotion, leaning back into your gentle caresses. You tenderly and lovingly brush your fingers along ${his} head, enjoying the feeling of your slave's willingness to set aside ${his} dignity for headpats. ${He} leans ${his} body backward, pressing ${himself} against you. You can feel the intense heat from ${his} body against your`);
		if (V.PC.boobs >= 300) {
			r.push(`soft breasts.`);
		} else {
			r.push(`manly chest.`);
		}
		r.push(`You take your time enjoying the sensation of`);
		if (isBald) {
			r.push(`rubbing your slave's smooth scalp,`);
		} else {
			r.push(`gently running your fingers through your slave's hair,`);
		}
		r.push(`and your slave smiles happily as you do. As you continue with your ministrations, you can see all of the stress present in your slave's shoulders dissipate, and you feel a good deal of your own tension start to melt away as well.`);
	} else if (slave.devotion > 20) {
		r.push(`${He} willingly accepts it. As you tenderly and lovingly brush your fingers along ${his} head, enjoying the feeling of your slave's roiling emotions, and finally submission. You can still sense considerable turmoil in the`);
		if (slave.physicalAge > 30) {
			r.push(`${woman};`);
		} else {
			r.push(`${girl};`);
		}
		r.push(`${he}'s doing ${his} duty as a slave by complying with your wishes, and is probably struggling with the mixture of resistance, obedience and perhaps even devotion forced to the forefront of ${his} mind by your touch. As you continue your ministrations, your slave slowly, and with more then a bit of uncertainty, finally starts to relax. ${He} looks at you with confusion and trepidation. Your eyes betray nothing however — you simply smile and press ${his} head into your`);
		if (V.PC.boobs >= 300) {
			r.push(`soft breasts,`);
		} else {
			r.push(`masculine chest,`);
		}
		r.push(`all the while enjoying the feeling of your`);
		if (isBald) {
			r.push(`hands gliding over ${his} smooth head.`);
		} else {
			r.push(`fingers gliding through ${his} hair.`);
		}
	} else if (slave.devotion < -20 && slave.trust >= 20) {
		r.push(`${He} doesn't react to your touch, remaining as still as statue, the same defiant expression on ${his} face. ${He} still doesn't react when you brush your fingers down the side of ${his} head or when you`);
		if (isBald) {
			r.push(`stroke ${his} smooth head.`);
		} else {
			r.push(`run your fingers through ${his} hair.`);
		}
		r.push(`${He} does react when you gently rest your thumb on ${his} lips, however, by suddenly giving you a fierce bite. Cursing, you pull your hand back and examine it — ${he} didn't bite deep enough to draw blood, but the area is now red and puffy. Furious, you backhand ${him} across the`);
		if (random(1, 100) > 80) {
			slave.minorInjury = either("black eye", "bruise", "split lip");
			r.push(`face, giving ${him} a <span class="health dec">${slave.minorInjury}.</span>`);
		} else {
			r.push(`face.`);
		}
	} else if (slave.devotion >= -20 && slave.trust < -20) {
		r.push(`${He} shakes at your touch fearfully. As you tenderly brush your fingers down ${his} unresisting head, you appreciate this expression of your slave's subservience, ${his} eagerness to avoid punishment making ${him} stiffen, ${his} nervousness easily apparent. You continue stroking ${him}, enjoying ${his} fear, as the physical intimacy slowly does its work. ${He} starts to relax, ${his} resistance easing as ${his} eyes start to close. Your hands continue to gently scratch at ${his} scalp, and you enjoy the sensation as well as the feeling of power over your hapless slave. Gently, slowly, so not as to spook ${him}, you ease your property's head back into your`);
		if (V.PC.boobs >= 300) {
			r.push(`breasts.`);
		} else {
			r.push(`chest.`);
		}
		r.push(`Nevertheless your slave starts at the action, but at your insistence finally gives in to the motion, and finally relaxes against you.`);
	} else if (slave.trust < -50) {
		r.push(`${He} is nearly frozen with fear and does not resist as you tenderly and lovingly brush your fingers along ${his} head, enjoying your slave's complete and utter submission to you. In fact, ${he} barely reacts at all. But being an arcology owner has taught you many things, not least of which is patience. With time and a gentle hand, your slave's shoulders slowly start to relax, so slowly if you weren't paying attention you wouldn't have noticed. With a sense of satisfaction, you continue your actions, enjoying the feeling of your`);
		if (isBald) {
			r.push(`hand gliding over ${his} smooth head.`);
		} else {
			r.push(`fingers combing through ${his} hair and gently scritching ${his} scalp.`);
		}
		r.push(`You settle with this for now, knowing that any attempt at further intimacy will likely scare your slave off, but you enjoy it nonetheless.`);
	} else {
		r.push(`${He} reflexively turns away from you, but you tenderly hold ${his} chin and maneuver ${him} in position with one hand and slowly but gently move your other hand to the top of ${his} head. Spluttering, ${he} leans backwards, but you catch ${him} by the shoulder and pin ${him} against you, where you feel the intense heat from ${his} body against your`);
		if (V.PC.boobs >= 300) {
			r.push(`soft breasts,`);
		} else {
			r.push(`manly chest,`);
		}
		r.push(`before resuming your gentle stroking. ${He} desperately tries to wriggle out of your grasp, but ${his} struggles slowly subside as ${he} realizes that you're not taking this any farther. Tenderly and lovingly you stroke your fingers over ${his} head, appreciating the feeling of your slave's rebelliousness.`);
	}

	r.push(`You pat ${him} softly move your palm down the side of ${his} head with a soothing touch as you pet ${him}. Gently you start to run your hand down the back of ${his} head, softly stroking and caressing ${him}. You delicately lift ${his} head and touch your fingertips to ${his} chin, tenderly brushing along the line of ${his} mouth with your`);
	if (V.PC.title === 1) {
		r.push(`manly`);
	} else {
		r.push(`feminine`);
	}
	r.push(`thumb.`);

	if (isBald) {
		r.push(`Then, you gently touch ${his}`);
	} else {
		r.push(`You hold a strand of ${his} hair and softly place it behind ${his} ear, taking the chance to gently caress ${his}`);
	}
	if (slave.face > 95) {
		r.push(`overwhelmingly stunning`);
	} else if (slave.face > 10) {
		r.push(`alluring`);
	} else if (slave.face >= -10) {
		r.push(`appealing`);
	} else if (slave.face >= -40) {
		r.push(`plain`);
	} else {
		r.push(`rough`);
	}
	r.push(`face and lightly touch ${his}`);
	if (slave.lips > 95) {
		r.push(`facepussy`);
	} else {
		if (slave.lips > 70) {
			r.push(`pillowlike`);
		} else if (slave.lips > 40) {
			r.push(`generous`);
		} else if (slave.lips > 20) {
			r.push(`plush`);
		}
		r.push(`lips`);
	}
	r.push(`with your fingertips. You move your hand to the side of your slave's head, stroking ${his} temple gently.`);
	if (slave.fetish === Fetish.MINDBROKEN) {
		r.push(`This causes an unconscious shiver to travel down ${his} spine.`);
	} else if (slave.devotion > 50) {
		r.push(`This causes ${him} to shudder in delight and to move ${his} hand to your hip, squeezing it gently.`);
	} else if (slave.devotion > 20) {
		r.push(`This causes ${him} to shudder in delight.`);
	} else if (slave.devotion >= -20) {
		r.push(`This causes ${him} to shiver unconsciously.`);
	} else if (slave.trust <= -50) {
		r.push(`This forces ${his} back rigid, in an effort not to move`);
		if (V.showInches === 2) {
			r.push(`an inch,`);
		} else {
			r.push(`a centimeter,`);
		}
		r.push(`out of fear.`);
	} else if (slave.trust < -20) {
		r.push(`This would cause ${him} to shiver with delight, but ${his} distaste for the situation makes that impossible.`);
	}

	r.push(`You move your hand down to caress ${his} forehead, and then slide your hand along ${his} cheek. The last thing you do is take ${his} head lightly and trace around it, gently massaging as you go. Finally you pat ${him} a few times before letting ${him} up.`);

	/* outro + reaction */

	if (slave.fetish === Fetish.MINDBROKEN) {
		r.push(`When you stop,`);
		if (canSee(slave)) {
			r.push(`${his} ${App.Desc.eyesColor(slave)} track the movements of your hands briefly before returning to their usual stare,`);
		} else {
			r.push(`${he} stands at attention before you,`);
		}
		r.push(`awaiting further use of ${his} body.`);
	} else if (slave.relationship === -2) {
		r.push(`When you finally stop petting ${him},`);
		if (canSee(slave)) {
			r.push(`${his} eyes remain closed just for a second`);
		}
		r.push(`and ${his} mouth stands open in slack-jawed joy, before ${he} slowly`);
		if (canSee(slave)) {
			r.push(`opens ${his} eyes`);
		} else {
			r.push(`turns ${his} gaze towards you`);
		}
		r.push(`and smiles warmly at you. Pleasure lights up ${his} face`);
		if (hasAnyArms(slave)) {
			r.push(`as ${his} hand traces the path yours took up to ${his} head and mimics your last movements.`);
		} else {
			r.push(`as ${his} gaze drifts off to the right in memory, tilting ${his} head from side to side in sympathetic memory of how it felt to have your hand on ${his} head.`);
		}
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate love with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)},`);
			} else {
				r.push(`facial expressions,`);
			}
			r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`);
		} else if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${He} does ${his} best to communicate love with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)}.`);
			} else {
				r.push(`facial expressions.`);
			}
		} else if (!canTalk(slave)) {
			r.push(`${He} signs that ${he} loves you.`);
		} else {
			r.push(
				Spoken(slave, `"I love you, ${Master},"`),
				`${he} ${say}s, dreamily.`
			);
		}
		r.push(`${He} looks as though ${he} wants much more than your mere caress.`);
	} else if (slave.devotion > 50 && slave.fetish === "dom" && slave.fetishKnown === 1 && slave.fetishStrength > 60 && hasAnyArms(slave)) {
		r.push(`${He} tries hard to stop from losing ${himself} in your incredibly skilled hands. ${He} takes ${his} tendency towards sexual dominance right up to the edge of insubordination, when ${he} starts to caress your face in turn. When you finally stop, ${his} eyes are closed and ${he}'s smiling. When you are finally finished stroking your slave, they remove their hand from yours. Then you give them a playful flick on the nose, and the mischievous twinkle in your eye is only half playful, reminding ${him} of ${his} place in these walls.`);
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate enjoyment with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)},`);
			} else {
				r.push(`facial expressions,`);
			}
			r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`);
		} else if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${He} does ${his} best to communicate enjoyment with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)}.`);
			} else {
				r.push(`facial expressions.`);
			}
		} else if (!canTalk(slave)) {
			r.push(`${He} signs that ${he} liked that and would love to pet you next time.`);
		} else {
			r.push(
				Spoken(slave, `"That was nice, ${Master},"`),
				`${he} ${say}s cheerfully.`,
				Spoken(slave, `"Maybe next time I can stroke you..."`)
			);
		}
		r.push(`${He} looks at you, ${his}`);
		if (canSee(slave)) {
			r.push(`lovely ${App.Desc.eyesColor(slave)}`);
		} else {
			r.push(`face`);
		}
		r.push(`practically begging you to let ${him} take this farther.`);
	} else if (slave.devotion > 50 && slave.fetish === Fetish.SUBMISSIVE && slave.fetishKnown === 1 && slave.fetishStrength > 60) {
		r.push(`As you stroke ${his} head, ${he} reacts almost as though you're stroking ${his} nether regions, and begins to moan and press ${himself} lewdly against your`);
		if (V.PC.boobs >= 1400) {
			r.push(`giant tits.`);
		} else if (V.PC.boobs >= 1200) {
			r.push(`huge breasts.`);
		} else if (V.PC.boobs >= 1000) {
			r.push(`big breasts.`);
		} else if (V.PC.boobs >= 800) {
			r.push(`prominent breasts.`);
		} else if (V.PC.boobs >= 650) {
			r.push(`unremarkable breasts.`);
		} else if (V.PC.boobs >= 500) {
			r.push(`breasts.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`tiny breasts.`);
		} else if (V.PC.title > 0) {
			r.push(`manly chest.`);
		} else {
			r.push(`non-existent breasts.`);
		}
		r.push(`${He} achieves a weak orgasm before you finally stop caressing ${his} head; ${he} is your pet, after all.`);
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate undiminished lust with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)},`);
			} else {
				r.push(`facial expressions,`);
			}
			r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`);
		} else if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${He} does ${his} best to communicate undiminished lust with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)}.`);
			} else {
				r.push(`facial expressions.`);
			}
		} else if (!canTalk(slave)) {
			r.push(`${He} signs that ${he} liked that.`);
		} else {
			r.push(
				Spoken(slave, `"That was fun, ${Master},"`),
				`${he} ${say}s lustfully.`,
				Spoken(slave, `"But why stop there?"`)
			);
		}
		r.push(`${He} looks at you as if ${he} wants more than your hands touching ${his} head.`);
	} else if (slave.devotion > 50) {
		r.push(`${He} gradually closes ${his} eyes and when you finally stop,`);
		if (hasAnyArms(slave)) {
			r.push(`${he} runs ${his} hand delightedly across ${his} face and`);
		}
		r.push(`a euphoric look quickly lights up ${his} features.`);
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate devotion with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)},`);
			} else {
				r.push(`facial expressions,`);
			}
			r.push(`since ${he}'s not confident in ${his} ability to express it in ${V.language}.`);
		} else if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${He} does ${his} best to communicate devotion with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)}.`);
			} else {
				r.push(`facial expressions.`);
			}
		} else if (!canTalk(slave)) {
			r.push(`${He} signs that ${he} loves you.`);
		} else {
			r.push(
				Spoken(slave, `"I love you, ${Master},"`),
				`${he} ${say}s jubilantly.`
			);
		}
		r.push(`${He}`);
		if (canSee(slave)) {
			r.push(`looks`);
		} else {
			r.push(`gazes`);
		}
		r.push(`at you longingly, almost as if ${he}'s bursting to say that ${he} wants more than your mere caress.`);
	} else if (slave.devotion > 20) {
		r.push(`When you finally move your hand away,`);
		if (canSee(slave)) {
			r.push(`${his} ${App.Desc.eyesColor(slave)} gaze into yours searchingly,`);
		} else {
			r.push(`${he} gazes at you,`);
		}
		r.push(`looking for answers that are not there.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His}`);
			if (canSee(slave)) {
				r.push(`eyes beg`);
			} else {
				r.push(`expression begs`);
			}
			r.push(`for an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs hesitantly, asking if that's all.`);
		} else {
			r.push(
				`${He} asks hesitantly,`,
				Spoken(slave, `"I-is that all, ${Master}?"`)
			);
		}
	} else if (slave.devotion < -20 && slave.trust >= 20) {
		r.push(`${He} does little more than give another defiant glare as you pull away.`);
		/* TODO: write this */
	} else if (slave.devotion >= -20 && slave.trust < -20) {
		r.push(`When you finally move your hand away, ${he}`);
		if (canSee(slave)) {
			r.push(`looks`);
		} else {
			r.push(`gazes`);
		}
		r.push(`at you for a long moment, as if looking for answers, before visibly catching ${himself} with a reminder that ${he}'s a slave and you're ${his} owner.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His}`);
			if (canSee(slave)) {
				r.push(`eyes hesitantly question`);
			} else {
				r.push(`expression hesitantly questions`);
			}
			r.push(`for an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs hesitantly, asking if that's all.`);
		} else {
			r.push(
				`${He} asks hesitantly,`,
				Spoken(slave, `"I-is that all, ${Master}?"`)
			);
		}
	} else if (slave.trust < -50) {
		r.push(`${He} stares`);
		if (canSee(slave)) {
			r.push(`at you`);
		} else {
			r.push(`blankly`);
		}
		r.push(`as you move your fingers across ${his} stiff head, but it's like touching a statue. ${He} is so filled with terror that ${he} remains rigid even as it becomes clear to ${him} you're not going to hurt ${him}. When you bore of touching the`);
		if (slave.physicalAge > 30) {
			r.push(`${woman}`);
		} else {
			r.push(`${girl}`);
		}
		r.push(`and move your hand away, ${he} turns to you in utter incomprehension.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His}`);
			if (canSee(slave)) {
				r.push(`eyes beg`);
			} else {
				r.push(`expression begs`);
			}
			r.push(`beg for an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs spastically, asking fearfully to know if that's all.`);
		} else {
			r.push(
				`${He} stammers fearfully, although somewhat less then before this session,`,
				Spoken(slave, `"I-is that all, ${Master}?"`)
			);
		}
		r.push(`${He} then cringes.`);
	} else {
		r.push(`When you bore of it and take your hand away, ${he} faces you in utter incomprehension.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His}`);
			if (canSee(slave)) {
				r.push(`eyes demand`);
			} else {
				r.push(`expression demands`);
			}
			r.push(`an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs irritably, asking whether that's all.`);
		} else {
			r.push(
				`${He} scowls, muttering,`,
				Spoken(slave, `"Is that all, ${Master}?"`)
			);
		}
	}
	App.Events.addParagraph(node, r);
	return node;
};

repo_name: Ducati/fc

license: mit


code:
/**
 *
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.Interact.fPoolSex = function(slave) {
	const node = new DocumentFragment();
	let r = [];

	const {
		He,
		he, his, him, himself, hers
	} = getPronouns(slave);

	r.push(`You order ${him} to meet you in the spa for some quality time in the penthouse's rejuvenating gelatin pool. When you get there, ${he}'s already in ${his} bathing attire, reclined at the side of the pool farthest from you with ${his} massive ${slave.skin} stomach hanging over the edge and half sunk in the thick, steaming ooze, flushed and sweaty.`);
	if (slave.devotion > 95) {
		if (!isAmputee(slave)) {
			r.push(`${He}'s resting ${his} head on one arm, but ${he} gives you a little wave`);
			if (!hasBothArms(slave)) {
				r.push(`anyway`);
			} else {
				r.push(`with the other`);
			}
			r.push(`before setting it to rubbing the flank of one`);
			if (slave.boobs >= 20000) {
				r.push(`massively overgrown tit`);
			} else if (Math.floor(slave.boobsImplant / slave.boobs) >= .60) {
				r.push(`fat, augmented tit`);
			} else if (slave.boobs >= 3000) {
				r.push(`huge breast`);
			} else {
				r.push(`petite breast`);
			}
			r.push(`as ${he}`);
		} else {
			r.push(`${He}'s resting on a small pile of pillows, enjoying the feeling against the flanks of ${his} colossal belly. ${He} wiggles a welcome to you and then`);
		}
		if (canSee(slave)) {
			r.push(`watches`);
		} else {
			r.push(`waits patiently as`);
		}
		r.push(`you strip down and change into your swimming outfit. When it's clear that you're ready to join ${him}, ${he} motions at the pool's holographic console and coos in delight as its mobility assistance devices kick in, rolling ${him} into the curative gel. You sink yourself into the pool, taking a moment to bask in the feeling of the warm, curative-laced goo as it relaxes your muscles${(V.PC.preg > 30) ? ` and soothes your stretched skin` : ``}, then wade toward your waiting slave.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`${He} smiles and beckons you toward ${him}, rubbing circles in the exploded sides of ${his} colossal belly, then gasps as you take a handful of the ooze and shove it right in ${his} face. ${He} sputters indignantly and then`);
		if (hasAnyArms(slave)) {
			r.push(`scoops up a handful ${himself}, flinging it at you. The two of you spend several minutes goo fighting before, eventually, you decide that your`);
		} else {
			r.push(`wobbles back and forth, ineffectually trying to fight back as you cover ${him} in thick wads of gel, over and over. After several minutes of this, you decide that your`);
		}
		if (V.PC.dick !== 0) {
			r.push(`solid, quivering erection is in need of ${his} tender care.`);
			if (canSee(slave)) {
				r.push(`Seeing`);
			} else {
				r.push(`Sensing`);
			}
			r.push(`the change in your demeanor, ${he} rolls back to recline at the pool's edge and, once you've joined ${him},`);
			if (hasAnyArms(slave)) {
				r.push(`reaches down to masturbate your ooze-lubricated dick.`);
			} else {
				r.push(`rolls forward and reaches down to tease your cockhead with ${his} mouth${(slave.boobs > 600) ? ` and tits` : ``}.`);
			}
			r.push(`When you feel yourself at the edge of orgasm, you slide in between ${his}`);
			if (slave.butt > 11) {
				r.push(`debilitatingly enormous, cushiony ass`);
			} else if (slave.butt > 5) {
				r.push(`massive, cushiony ass`);
			} else if (Math.floor(slave.buttImplant / slave.butt) > .60) {
				r.push(`implant-swollen ass`);
			} else if (slave.butt > 2) {
				r.push(`plush ass`);
			} else {
				r.push(`back`);
			}
			r.push(`and the pool's silk-lined wall. Reaching, you tease ${his}`);
			if (canDoVaginal(slave)) {
				r.push(`kitty`);
			} else {
				r.push(`asshole`);
			}
			r.push(`with your fingers and ${he} crushes backward into you, moaning and rotating ${his} hips in response to your attention. Once you're certain ${he}'s ready, you slide into ${him}, driving you both to orgasm.`);
			if (canDoVaginal(slave)) {
				r.push(VCheck.Vaginal(slave, 1));
			} else {
				r.push(VCheck.Anal(slave, 1));
			}
		} else {
			r.push(`ooze-stimulated quim is in need of ${his} tender care. Seeing the change in your demeanor, ${he} rolls back to recline at the pool's edge and, once you've joined ${him},`);
			if (hasAnyArms(slave)) {
				r.push(`reaches down to masturbate your pussy, squeezing and rubbing your clit.`);
			} else {
				r.push(`rolls sideways and rubs your vulva as best ${he} can.`);
			}
			if (slave.dick >= 1) {
				r.push(`When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate ${him} into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream ${his}`);
				if (canDoVaginal(slave)) {
					r.push(`pussy. ${VCheck.Vaginal(slave, 1)}`);
				} else {
					r.push(`asshole. ${VCheck.Anal(slave, 1)}`);
				}
				r.push(`Satisfied that the angles are right, you grab hold of ${his} hips and slide half on top of ${him}, resting your lower half on the rear swell of ${his} obscenely bloated belly. Pressing your strap-on to ${his} needy hole, you tease ${him} for a moment before ramming home, driving the both of you to repeated orgasm.`);
			} else {
				r.push(`When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate ${him} into a position level with the pool's edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of ${his} hips and slide half on top of ${him}, resting your lower half on the rear swell of ${his} obscenely bloated belly. Pressing your lower lips to ${hers}, you rub your clits together, driving the both of you to repeated orgasm.`);
				seX(slave, "vaginal", V.PC);
			}
		}
	} else if (slave.trust < -20 && slave.devotion > -10) {
		if (hasAnyArms(slave)) {
			r.push(`${He}'s resting ${his} head on one arm, but ${he} nods at you in acknowledgment as`);
		} else {
			r.push(`${He}'s resting on a small pile of pillows, enjoying the sensations against the flanks of ${his} colossal belly. ${He} nods as you enter, not stopping ${his} rubbing, and`);
			if (canSee(slave)) {
				r.push(`watches`);
			} else {
				r.push(`waits patiently as`);
			}
		}
		r.push(`you strip down and change into your swimming outfit. When it's clear that you're ready to join ${him}, ${he} motions at the pool's holographic console and its mobility assistance devices kick in, rolling ${him} into the curative gel. You sink yourself into the pool, taking a moment to bask in the feeling of the warm, curative-laced goo as it relaxes your muscles${(V.PC.preg > 30) ? ` and soothes your stretched skin` : ``}, then wade toward your waiting slave.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`${He} smiles politely, rubbing circles in the exploded sides of ${his} colossal belly, then gasps as you take a handful of the ooze and shove it right in ${his} face. ${He} sputters indignantly and then`);
		if (hasAnyArms(slave)) {
			r.push(`scoops up a handful ${himself}, flinging it at you. The two of you spend several minutes goo fighting before, eventually, you decide that your`);
		} else {
			r.push(`wobbles back and forth, ineffectually trying to fight back as you cover ${him} in thick wads of gel, over and over. After several minutes of this, you decide that your`);
		}
		if (V.PC.dick !== 0) {
			r.push(`solid, quivering erection is in need of ${his} tender care.`);
			if (canSee(slave)) {
				r.push(`Seeing`);
			} else {
				r.push(`Sensing`);
			}
			r.push(`the change in your demeanor, ${he} rolls back to recline at the pool's edge and, once you've joined ${him},`);
			if (hasAnyArms(slave)) {
				r.push(`reaches down to masturbate your ooze-lubricated dick.`);
			} else {
				r.push(`rolls forward and reaches down to tease your cockhead with ${his} mouth${(slave.boobs > 600) ? ` and tits` : ``}.`);
			}
			r.push(`When you feel yourself at the edge of orgasm, you slide in between ${his}`);
			if (slave.butt > 11) {
				r.push(`debilitatingly enormous, cushiony ass`);
			} else if (slave.butt > 5) {
				r.push(`massive, cushiony ass`);
			} else if (Math.floor(slave.buttImplant / slave.butt) > .60) {
				r.push(`implant-swollen ass`);
			} else if (slave.butt > 2) {
				r.push(`plush ass`);
			} else {
				r.push(`back`);
			}
			r.push(`and the pool's silk-lined wall. Reaching, you tease ${his}`);
			if (canDoVaginal(slave)) {
				r.push(`kitty`);
			} else {
				r.push(`asshole`);
			}
			r.push(`with your fingers and ${he} crushes backward into you, moaning and rotating ${his} hips in response to your attention. Once you're certain ${he}'s ready, you slide into ${him}, driving you both to orgasm.`);
			if (canDoVaginal(slave)) {
				r.push(VCheck.Vaginal(slave, 1));
			} else {
				r.push(VCheck.Anal(slave, 1));
			}
		} else {
			r.push(`ooze-stimulated quim is in need of ${his} tender care. Seeing the change in your demeanor, ${he} rolls back to recline at the pool's edge and, once you've joined ${him},`);
			if (hasAnyArms(slave)) {
				r.push(`reaches down to masturbate your pussy, squeezing and rubbing your clit.`);
			} else {
				r.push(`rolls sideways and rubs your vulva as best ${he} can.`);
			}
			if (slave.dick >= 1) {
				r.push(`When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate ${him} into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream ${his}`);
				if (canDoVaginal(slave)) {
					r.push(`pussy. ${VCheck.Vaginal(slave, 1)}`);
				} else {
					r.push(`asshole. ${VCheck.Anal(slave, 1)}`);
				}
				r.push(`Satisfied that the angles are right, you grab hold of ${his} hips and slide half on top of ${him}, resting your lower half on the rear swell of ${his} obscenely bloated belly. Pressing your strap-on to ${his} needy hole, you tease ${him} for a moment before ramming home, driving the both of you to repeated orgasm.`);
			} else {
				r.push(`When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate ${him} into a position level with the pool's edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of ${his} hips and slide half on top of ${him}, resting your lower half on the rear swell of ${his} obscenely bloated belly. Pressing your lower lips to ${hers}, you rub your clits together, driving the both of you to repeated orgasm.`);
				seX(slave, "vaginal", V.PC);
			}
		}
	} else {
		if (hasAnyArms(slave)) {
			r.push(`${He}'s resting ${his} head on one arm, but ${he} starts as you enter, watching tensely as`);
		} else {
			r.push(`${He}'s resting on a small pile of pillows, savoring the sensations against the flanks of ${his} colossal belly and`);
			if (slave.boobs >= 20000) {
				r.push(`massively overgrown tits`);
			} else if (Math.floor(slave.boobsImplant / slave.boobs) >= .60) {
				r.push(`fat, augmented tits`);
			} else if (slave.boobs >= 3000) {
				r.push(`huge breasts`);
			} else {
				r.push(`petite breasts`);
			}
			r.push(`${He} starts as you enter, watching tensely as`);
		}
		r.push(`you strip down and change into your swimming outfit. When you're ready to join ${him}, you motion at the pool's holographic console and its mobility assistance devices kick in, rolling ${him} into the curative gel. You sink yourself into the pool, taking a moment to bask in the feeling of the warm, curative-laced goo as it relaxes your muscles${(V.PC.preg > 30) ? ` and soothes your stretched skin` : ``}, then wade toward your worried looking slave.`);
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`${He} smiles politely, rubbing circles in the exploded sides of ${his} colossal belly, then cries out in surprise as you take a handful of the ooze and shove it right in ${his} face. ${He} sputters, blushing, and wobbles back and forth, clearly trying not to react as you cover ${him} in thick wads of gel, over and over. After several minutes of this, you decide that your`);
		if (V.PC.dick !== 0) {
			r.push(`solid, quivering erection is in need of ${his} tender care. You force ${him} back into a reclining position at the pool's edge and order ${him} to`);
			if (hasAnyArms(slave)) {
				r.push(`masturbate your ooze-lubricated dick.`);
			} else {
				r.push(`tease your cockhead with ${his} mouth.`);
			}
			r.push(`${He} complies, bringing you to the edge of orgasm, and, before ${he} can fully push you over the edge, you slide in between ${his}`);
			if (slave.butt > 7) {
				r.push(`debilitatingly enormous, cushiony ass`);
			} else if (slave.butt > 4) {
				r.push(`massive, cushiony ass`);
			} else if (slave.butt > 2) {
				r.push(`implant-swollen ass`);
			} else if (slave.buttImplant === 1) {
				r.push(`plush ass`);
			} else {
				r.push(`back`);
			}
			r.push(`and the pool's silk-lined wall. Reaching, you tease ${his}`);
			if (canDoVaginal(slave)) {
				r.push(`kitty`);
			} else {
				r.push(`asshole`);
			}
			r.push(`with your fingers and rub one hand back and forth along the line of ${his} tensed shoulders as ${he} slowly gives in to lust. Once you're certain ${he}'s ready, you slide into ${him}, driving you both to orgasm.`);
			if (canDoVaginal(slave)) {
				r.push(VCheck.Vaginal(slave, 1));
			} else {
				r.push(VCheck.Anal(slave, 1));
			}
		} else {
			r.push(`ooze-stimulated quim is in need of ${his} tender care. You force ${him} back to recline at the pool's edge and, once you've joined ${him},`);
			if (hasAnyArms(slave)) {
				r.push(`set ${him} to masturbating your pussy, squeezing and rubbing your clit.`);
			} else {
				r.push(`set ${him} to rubbing your vulva with ${his} belly button.`);
			}
			if (slave.dick >= 1) {
				r.push(`When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate ${him} into a position level with the pool's edge, then hop up on that ledge yourself so that you can don a dildo and ream ${his}`);
				if (canDoVaginal(slave)) {
					r.push(`pussy. ${VCheck.Vaginal(slave, 1)}`);
				} else {
					r.push(`asshole. ${VCheck.Anal(slave, 1)}`);
				}
				r.push(`Satisfied that the angles are right, you grab hold of ${his} hips and slide half on top of ${him}, resting your lower half on the rear swell of ${his} obscenely bloated belly. Pressing your strap-on to ${his} needy hole, you tease ${him} for a moment before ramming home, driving the both of you to repeated orgasm.`);
				r.push(VCheck.Anal(slave, 1));
			} else {
				r.push(`When you feel yourself at the edge of orgasm, you have the pool's mobility aids rotate ${him} into a position level with the pool's edge, then hop up on that ledge yourself so that your pussies are level. Satisfied that the angles are right, you grab hold of ${his} hips and slide half on top of ${him}, resting your lower half on the rear swell of ${his} obscenely bloated belly. Pressing your lower lips to ${hers}, you rub your clits together, driving the both of you to repeated orgasm.`);
				seX(slave, "vaginal", V.PC);
			}
		}
	}
	r.push(`After you've finished with ${him}, you escort ${him} to the spa's attached showers so that the two of you can enjoy a bit more time together as you clean off, then allow ${him} to return to ${his} duties as you return to your own.`);
	App.Events.addParagraph(node, r);
	return node;
};


code:
App.Interact.fRelationChoosePartner = class extends App.Interact.BaseChoosePartnerRenderer {
	constructor(slave) {
		super(slave);
		this.intro = `${this.slave.slaveName} has several relatives available; pick one to start a threesome.`;
		this.execute = App.Interact.fRelation;
	}

	eligible(candidate) {
		return isSlaveAvailable(candidate) && areRelated(this.slave, candidate);
	}

	renderDetail(candidate, container) {
		if (canImpreg(this.slave, candidate) || canImpreg(candidate, this.slave)) {
			App.UI.DOM.appendNewElement("span", container, ` Pregnancy risk`, ["green"]);
		}
	}
};

/**
 * @param {App.Entity.SlaveState} slave - slave to fuck with partner.
 * @param {App.Entity.SlaveState} partner - partner to fuck slave with. Must be a close relative or relationship target of slave.
 * @returns {DocumentFragment}
 */
App.Interact.fRelation = function(slave, partner) {
	const r = new SpacedTextAccumulator();

	const {
		He, His,
		he, his, him, girl, daughter
	} = getPronouns(slave);
	const {title: Master} = getEnunciation(slave);

	let activeSlaveRel;
	let partnerRel;
	if (areRelated(slave, partner)) {
		activeSlaveRel = relativeTerm(partner, slave);
		partnerRel = relativeTerm(slave, partner);
	} else if (partner.ID === slave.relationshipTarget) {
		switch (slave.relationship) {
			case 1:
				activeSlaveRel = "friend";
				partnerRel = "friend";
				break;
			case 2:
				activeSlaveRel = "best friend";
				partnerRel = "best friend";
				break;
			case 3:
				activeSlaveRel = "friend with benefits";
				partnerRel = "friend with benefits";
				break;
			case 4:
				activeSlaveRel = "lover";
				partnerRel = "lover";
				break;
			case 5:
				activeSlaveRel = "slave wife";
				partnerRel = "slave wife";
				break;
		}
	} else {
		throw new Error(`Invalid partner for fRelation: main ${slave ? slave.ID : "undefined"}, partner ${partner ? partner.ID : "undefined"}.`);
	}
	const {
		He: He2,
		he: he2, his: his2, him: him2, himself: himself2, daughter: daughter2
	} = getPronouns(partner);

	r.push(
		`You call both`,
		App.UI.DOM.slaveDescriptionDialog(slave, slave.slaveName),
		`and`,
		App.UI.DOM.slaveDescriptionDialog(partner, partner.slaveName),
		`to your office.`
	);
	if (canMove(slave) && canMove(partner) && (slave.devotion > 50 && partner.devotion > 50) && canPenetrate(slave) && canPenetrate(partner) && (partner.anus > 0 && slave.anus > 0 && V.PC.dick !== 0)) {
		r.push(`There are three stiff pricks available. Since ${slave.slaveName} was already in your office, ${he} goes on the bottom. ${He} lies on the floor, spreads ${his}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`buttocks, relaxes ${his} anus, and then begs ${his} ${partnerRel} to buttfuck ${him}. ${partner.slaveName} does, slipping ${his2} cock into ${his2} ${activeSlaveRel}'s ass. ${He2} then stops and waits for you to buttfuck ${him2} in turn. It isn't a particularly convenient way to fuck, but it's got the virtue of being uncommon. ${partner.slaveName}, both fucking and getting fucked, comes in ${his2} ${activeSlaveRel}'s rectum first. They switch places so ${slave.slaveName} can have a turn in the middle, leaving you to finish into ${slave.slaveName}'s already cum-soaked hole.`);

		seX(slave, "anal", partner, "penetrative", 2);
		seX(slave, "penetrative", partner, "anal", 2);
	} else if (partner.devotion - slave.devotion > 20 && partner.devotion <= 50) {
		r.push(`${partner.slaveName} is a lot more ready and willing for this than ${slave.slaveName}, so`);
		if (V.PC.dick === 0) {
			r.push(`while getting into a strap-on,`);
		}
		r.push(`you sit ${him2} on the couch and make ${slave.slaveName} sit on ${his2} lap, facing ${him2}. In this position, ${partner.slaveName} can reach around and spread ${his2} ${activeSlaveRel}'s`);
		if (V.seeRace === 1) {
			r.push(`${partner.race}`);
		}
		r.push(`buttocks for ${him}, controlling ${him} all the while in case ${he} has hesitations about this. ${slave.slaveName} knows that ${he}'s trapped, and lets ${his} ${partnerRel} hold ${his} ass wide so you can use ${him}. They're face to face, and it's not hard to tell that ${slave.slaveName} is glaring daggers at ${partner.slaveName}. You reward ${partner.slaveName} for ${his2} obedience and punish ${slave.slaveName} for ${his} resistance by forcing ${him} to orally service ${partner.slaveName} while you finish using ${slave.slaveName}.`);
		seX(slave, "oral", partner, "oral");
		r.push(VCheck.Both(slave, 1));
	} else if (slave.devotion - partner.devotion > 20 && partner.devotion <= 50) {
		r.push(`${slave.slaveName} is a lot more ready and willing for this than ${partner.slaveName}, so`);
		if (V.PC.dick === 0) {
			r.push(`while getting into a strap-on,`);
		}
		r.push(`you sit ${him} on the couch and make ${partner.slaveName} sit on ${his} lap, facing ${him}. In this position, ${slave.slaveName} can reach around and spread ${his} ${partnerRel}'s`);
		if (V.seeRace === 1) {
			r.push(`${partner.race}`);
		}
		r.push(`buttocks for ${him2}, controlling ${him2} all the while in case ${he2} has hesitations about this. ${partner.slaveName} knows that ${he2}'s trapped, and lets ${his2} ${activeSlaveRel} hold ${his2} ass wide so you can use ${him2}. They're face to face, and it's not hard to tell that ${partner.slaveName} is glaring daggers at ${slave.slaveName}. You reward ${slave.slaveName} for ${his} obedience and punish ${partner.slaveName} for ${his2} resistance by forcing ${him2} to suck ${slave.slaveName} off while you finish using ${partner.slaveName}.`);
		seX(slave, "oral", partner, "oral");
		r.push(VCheck.Partner(partner, 1));
	} else if (canMove(slave) && canMove(partner) && (slave.devotion > 50 && partner.devotion > 20 && hasAnyArms(slave) && ["mother", "father", "sole parent"].includes(activeSlaveRel))) {
		r.push(`${slave.slaveName} gives you a little smile when ${he}`);
		if (canHear(slave)) {
			r.push(`hears`);
		} else {
			r.push(`learns`);
		}
		r.push(`you wish to fuck ${him} and ${his} ${daughter2} ${partner.slaveName}`);
		if (V.PC.dick === 0) {
			r.push(`and`);
			if (canSee(slave)) {
				r.push(`sees`);
			} else {
				r.push(`acknowledges`);
			}
			r.push(`your strap-on`);
		}
		r.addToLast(`.`);
		r.push(`On your direction, ${slave.slaveName} sits on the couch. When ${partner.slaveName} enters, ${his2} ${activeSlaveRel} spreads ${his} arms and tells ${him2} to sit on ${his} lap. ${partner.slaveName} gets the idea and straddles ${him} so they're face to face. You take ${partner.slaveName} from behind; ${he2} gasps as ${he2} feels ${his2} ${activeSlaveRel}'s ${hasBothArms(partner) ? `hands` : `hand`} stimulate ${him2} from the front. They make out shamelessly while you take your pleasure. When you finish, ${slave.slaveName} lies down on the couch so ${partner.slaveName} can ride ${his}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`face. As ${he} sucks the cum out of ${his} ${daughter2}'s sopping fuckhole, ${partner.slaveName} sucks you hard again. In the mood for something harder this time, you jam yourself into the older ${slave.slaveName}. ${partner.slaveName} gets off ${slave.slaveName}'s face so ${he2} can offer ${himself2} for fondling and groping while you pound ${slave.slaveName}. After you're done, ${partner.slaveName} returns ${his2} ${activeSlaveRel}'s affection and gives ${him} some gentle oral as the older slave lies there exhausted.`);
		seX(slave, "oral", partner, "oral", 2);
		r.push(VCheck.Both(slave, 1));
		r.push(VCheck.Partner(partner, 1));
	} else if (canMove(slave) && canMove(partner) && (slave.devotion > 50 && partner.devotion > 20 && ["daughter", "son"].includes(activeSlaveRel))) {
		r.push(`${slave.slaveName} is enthusiastic when ${he}`);
		if (canHear(slave)) {
			r.push(`hears`);
		} else {
			r.push(`notices`);
		}
		r.push(`you order ${partner.slaveName} to come over. ${His} total immersion in sexual slavery has clearly uncovered a willingness to get very close to ${his} ${partnerRel}. You`);
		if (V.PC.dick === 0) {
			r.push(`don a strap-on,`);
		}
		r.push(`lie on the floor and instruct ${partner.slaveName} to ride you. ${He2} complies, and finds ${his2} ${daughter} ${slave.slaveName}`);
		if (partner.dick > 0) {
			r.push(`stroking ${his2} cock while ${he2} humps ${his2}`);
			if (V.seeRace === 1) {
				r.push(slave.race);
			}
			r.push(`butt up and down on your cock.`);
		} else {
			r.push(`licking ${his2} anus while ${he2} humps ${himself2} up and down on your cock.`);
		}
		r.push(`Your use of ${partner.slaveName}'s`);
		if (partner.physicalAge >= 24) {
			r.push(`mature`);
		} else {
			r.push(`surprisingly young`);
		}
		r.push(`body is the focus. ${He2} finds ${himself2} caught up in a miasma of sexual pleasure and perversion, moaning and blushing as your`);
		if (V.PC.dick === 0) {
			r.push(`strap-on and fingers`);
		} else {
			r.push(`cock`);
		}
		r.push(`and ${slave.slaveName}'s mouth tour ${his2} body. When you finish in ${his2}`);
		if (partner.dick > 0) {
			r.push(`asshole, ${his2} ${daughter} hastens to lavish attention on ${his} ${partnerRel}'s well fucked, cum-filled butt.`);
		} else {
			r.push(`pussy, ${his2} ${daughter} hastens to lavish attention on ${his} ${partnerRel}'s well fucked, cum-filled cunt.`);
		}
		seX(slave, "oral", partner, "oral", 2);
		r.push(VCheck.Partner(partner, 1));
	} else if (canDoVaginal(slave) && canDoVaginal(partner) && canMove(slave) && canMove(partner) && (slave.devotion > 50 && partner.devotion > 50 && ["twin brother", "twin sister"].includes(activeSlaveRel))) {
		r.push(`${slave.slaveName}`);
		r.push(`and ${partner.slaveName} are such devoted sex slaves that they've long since lost any hesitations about their partnership, and generally approach sex as though their bodies were interchangeable. (This means that they almost never masturbate, for one thing, preferring to have sex with each other, instead.) Giggling and kissing each other, they eagerly kneel before your chair and give you simultaneous oral sex, making an effort to play with their symmetry. They kiss around your`);
		if (V.PC.dick === 0) {
			r.push(`pussy,`);
		} else {
			r.push(`cock, making a complete seal around you with their lips`);
		}
		r.push(`one on each side. Then they jump up on your desk and press their,`);
		if (slave.dick > 0 && partner.dick > 0) {
			r.push(`cocks`);
		} else if (slave.dick > 0 || partner.dick > 0) {
			r.push(`cock and pussy`);
		} else {
			r.push(`pussies`);
		}
		r.push(`against one another${(V.PC.dick === 0) ? ` while you don a strap-on` : ``}, spreading their legs to offer you everything. You switch back and forth, with the twin you're not in rubbing and grinding against the one you are, until both of ${partner.slaveName} and ${slave.slaveName} are lying on the desk${(V.PC.dick !== 0) ? ` with cum dripping out of them` : ``}, making out tiredly.`);
		seX(slave, "oral", partner, "oral");
		r.push(VCheck.Both(slave, 1));
		r.push(VCheck.Partner(partner, 1));
	} else if (canMove(slave) && canMove(partner) && (slave.devotion > 50 && partner.devotion > 20 && ["sister", "brother", "half-sister", "half-brother", "twin sister", "twin brother"].includes(activeSlaveRel))) {
		r.push(`You call ${slave.slaveName}'s ${partnerRel} ${partner.slaveName} in for some incestuous fun, but see no reason to wait for ${him2}. When ${he2} arrives, it's to the`);

		if (canSee(partner)) {
			r.push(`sight`);
		} else {
			r.push(`scene`);
		}
		r.push(`of ${slave.slaveName} sitting on the`);
		if (canDoVaginal(slave) || canDoAnal(slave)) {
			r.push(`couch with ${his} ${hasBothLegs(slave) ? `legs` : `leg`} spread with you`);
			if (canDoVaginal(slave)) {
				r.push(`gently fucking ${his} pussy`);
			} else {
				r.push(`using ${his} asshole`);
			}
			if (V.PC.dick === 0) {
				r.push(`with a strap-on`);
			}
			r.addToLast(`. You pull out`);
		} else {
			r.push(`floor with`);
			if (V.PC.dick === 0) {
				r.push(`${his} face buried in your pussy. You pull away`);
			} else {
				r.push(`your dick down ${his} throat. You pull out`);
			}
		}
		r.push(`and order ${partner.slaveName} to orally service ${his2} ${activeSlaveRel}. ${He2} gets down before the spread-eagled slave ${girl} to get to work. After watching ${slave.slaveName} enjoy the attention for a while, you move behind the busy ${partner.slaveName} and pull ${him2} into a good position so you can fuck ${him2} while ${he2} sucks. After a few thrusts, ${slave.slaveName}'s eyes roll back.`);

		if (slave.voice === 0 || slave.accent >= 3) {
			r.push(`${He} gestures that it feels really good when you make ${his} ${partnerRel} moan into ${him}.`);
		} else {
			r.push(
				Spoken(slave, `"Oh ${Master},"`),
				`${he} squeals,`,
				Spoken(slave, `"it feels so good when you make ${him2} moan into me!"`)
			);
			seX(slave, "oral", partner, "oral");
			r.push(VCheck.Both(slave, 1));
			r.push(VCheck.Partner(partner, 1));
		}
	} else if (["daughter", "son", "father", "mother", "sole parent", "half-sister", "half-brother", "sister", "brother", "twin brother", "twin sister"].includes(activeSlaveRel)) {
		r.push(`Since between them they aren't able to enthusiastically perform an incestuous threesome, you simply line ${slave.slaveName} and ${partner.slaveName} up next to one another on the couch next to your desk,`);
		if (V.PC.dick === 0) {
			r.push(`don a strap-on,`);
		}
		r.push(`and fuck`);
		if (V.seeRace === 1) {
			r.push(`${slave.race} holes`);
		}
		r.push(`at will. Whenever a hole begins to pall you just switch to another. ${slave.slaveName} tries hard to ignore the fact that ${he}'s getting fucked next to ${his} ${partnerRel}, and ${partner.slaveName} pretends the cock getting shoved into ${him2} isn't slick from ${his2} ${activeSlaveRel}'s fuckhole.`);
		r.push(VCheck.Both(slave, 1));
		r.push(VCheck.Partner(partner, 1));
	} else if (
		(activeSlaveRel === "friend" || activeSlaveRel === "best friend") &&
		slave.devotion > 20 &&
		partner.devotion > 20
	) {
		r.push(`${slave.slaveName} and ${partner.slaveName} line up next to one another on the couch next to your desk`);
		if (V.PC.dick === 0) {
			r.push(`while you don a strap-on,`);
		}
		r.push(`and offer you their holes. They're just friends, but they're sex slaves and they see nothing wrong with enjoying sex with you, together. They keep up a constant stream of giggling, gasping, and smiling as each of them in turn feels a cock, warm and wet from their friend's body, transferred into them. Each of them does their best to help the other do well, even manually stimulating their friend when necessary${(V.PC.boobs >= 300 || V.PC.title === 0) ? ` and spinning around to lavish attention on your nipples` : ``}.`);
		r.push(VCheck.Both(slave, 1));
		r.push(VCheck.Partner(partner, 1));
	} else if (["friend with benefits", "lover", "slave wife"].includes(activeSlaveRel) && slave.devotion > 20 && partner.devotion > 20) {
		r.push(`${slave.slaveName} and ${partner.slaveName} eagerly retire to the couch and arrange themselves face to face so they can make out and enjoy each other's bodies as you enjoy theirs. You decide not to set up an elaborate threesome, and just`);
		if (V.PC.dick === 0) {
			r.push(`engage in a little tribadism with`);
		} else {
			r.push(`fuck`);
		}
		r.push(`whatever hole catches your eye next. They rarely break their intimate kissing, forming between the two of them a loving entity on the couch with all sorts of interesting parts to experience. They're sex slaves, and you're fucking them, but they're also lovers who are very comfortable in each other's`);
		if (hasBothArms(slave) && hasBothArms(partner)) {
			r.push(`arms,`);
		} else if ((hasAnyArms(slave) && hasAnyArms(partner))) {
			r.push(`embrace,`);
		} else {
			r.push(`presence,`);
		}
		r.push(`kissing, fondling each other, and`);
		if (V.PC.dick === 0) {
			r.push(`enjoying your pussy loving.`);
		} else {
			r.push(`taking your dick.`);
		}
		r.push(VCheck.Both(slave, 1));
		r.push(VCheck.Partner(partner, 1));
	} else {
		r.push(`Since between them they aren't able to enthusiastically perform a threesome, you simply line ${slave.slaveName} and ${partner.slaveName} up next to one another on the couch next to your desk, and fuck`);
		if (V.seeRace === 1) {
			r.push(`${slave.race} holes`);
		}
		r.push(`at will. Whenever a hole begins to pall you just switch to another. ${slave.slaveName} tries hard to ignore the fact that ${he}'s getting fucked next to ${his} ${partnerRel}, and ${partner.slaveName} pretends the`);
		if (V.PC.dick === 0) {
			r.push(`strap-on`);
		} else {
			r.push(`cock`);
		}
		r.push(`getting shoved into ${him2} isn't slick from ${his2} ${activeSlaveRel}'s fuckhole.`);
		r.push(VCheck.Both(slave, 1));
		r.push(VCheck.Partner(partner, 1));
	}

	r.toParagraph();
	return r.container();
};


code:
/**
 *
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.Interact.fRival = function(slave) {
	const node = new DocumentFragment();
	let r = [];

	const {
		He,
		he, his, him, himself
	} = getPronouns(slave);

	const rival = getSlave(slave.rivalryTarget);
	const {
		He2,
		he2, his2, him2
	} = getPronouns(rival).appendSuffix("2");

	r.push(`You call ${slave.slaveName} to your office and let ${him} know you'll be abusing ${rival.slaveName} together.`);
	if (slave.fetish === "sadist" && slave.fetishStrength > 60 && slave.fetishKnown === 1) {
		r.push(`${He} looks overjoyed at the prospect of getting to hurt someone.`);
	}

	r.push(rival.slaveName);
	if (canSee(rival)) {
		r.push(`sees`);
	} else {
		r.push(`senses`);
	}

	r.push(`${slave.slaveName} as ${he2} enters and looks worried.`);

	if (rival.anus === 0 && rival.vagina < 0) {
		r.push(`Since ${he2}'s a sissy bitch and an anal virgin, you tell ${him2} to bend over and`);
		if (V.PC.dick === 0) {
			r.push(`give you head.`);
		} else {
			r.push(`suck your dick.`);
		}
		r.push(`${He2} does, and once ${he2}'s working away, you tell ${slave.slaveName} to come over and start spanking. ${rival.slaveName} begins to lift ${his2} head as though to protest, so you shove ${him2} back down onto your`);
		if (V.PC.dick === 0) {
			r.push(`pussy,`);
		} else {
			r.push(`cock,`);
		}
		r.push(`gagging and struggling. ${slave.slaveName} administers a series of cruel slaps to the quivering`);
		if (V.seeRace === 1) {
			r.push(`${rival.race}`);
		}
		r.push(`buttocks in front of ${him}, making your victim yell delightfully into your`);
		if (V.PC.dick === 0) {
			r.push(`womanhood.`);
		} else {
			r.push(`member.`);
		}
		r.push(`After a short time ${slave.slaveName} decides to be even crueler, and begins to 'miss' frequently, hitting ${rival.slaveName}'s limp dick instead of ${his2} ass.`);

		seX(slave, "oral", rival, "oral");
	} else if (rival.anus === 0 && rival.vagina === 0 && hasAnyArms(slave)) {
		r.push(`Since ${he2}'s a virgin, you tell ${him2} to bend over and`);
		if (V.PC.dick === 0) {
			r.push(`give you head.`);
		} else {
			r.push(`suck your dick.`);
		}
		r.push(`${He2} does, and once ${he2}'s working away, you tell ${slave.slaveName} to come over and start spanking. ${rival.slaveName} begins to lift ${his2} head as though to protest, so you shove ${him2} back down onto your`);
		if (V.PC.dick === 0) {
			r.push(`pussy,`);
		} else {
			r.push(`cock,`);
		}
		r.push(`gagging and struggling. ${slave.slaveName} administers a series of cruel slaps to the quivering`);
		if (V.seeRace === 1) {
			r.push(`${rival.race}`);
		}
		r.push(`buttocks in front of ${him}, making your victim yell delightfully into your`);
		if (V.PC.dick === 0) {
			r.push(`womanhood.`);
		} else {
			r.push(`member.`);
		}
		r.push(`After a short time ${slave.slaveName} decides to be even crueler, and begins to 'miss' frequently, hitting ${rival.slaveName}'s poor pussy instead of ${his2} ass.`);

		seX(slave, "oral", rival, "oral");
	} else if (rival.anus === 0 && rival.vagina > 0 && canPenetrate(slave) && hasAnyArms(slave)) {
		r.push(`You tell ${him2} to bend over and`);
		if (V.PC.dick === 0) {
			r.push(`give you head.`);
		} else {
			r.push(`suck your dick.`);
		}

		r.push(`${He2} does, and once ${he2}'s working away, you tell ${slave.slaveName} to use the bitch. ${rival.slaveName} begins to lift ${his2} head as though to protest, so you shove ${him2} back down onto your`);
		if (V.PC.dick === 0) {
			r.push(`pussy,`);
		} else {
			r.push(`cock,`);
		}
		r.push(`gagging and struggling. ${slave.slaveName} lands a slap on the`);
		if (V.seeRace === 1) {
			r.push(`rival.race`);
		}
		r.push(`butt in front of ${him} as ${he} lines ${his} turgid dick up with ${rival.slaveName}'s pussy. ${He} sinks in with a sigh and begins to enjoy ${himself}, using slaps and pinches to ensure that of the two slaves, the fun is entirely on ${his} side.`);
		seX(V.PC, "penetrative", rival, "vaginal");
		seX(slave, "penetrative", rival, "oral");
	} else if (rival.anus === 0 && rival.vagina > 0 && slave.dick > 0) {
		r.push(`You`);
		if (V.PC.dick === 0) {
			r.push(`step into a strap-on and tell ${him2} to ride it,`);
		} else {
			r.push(`tell ${him2} to ride your dick,`);
		}
		r.push(`facing away from you. ${He2} does, not without trepidation, which increases when you hold ${him2} securely in place. Once ${he2}'s humping away, you tell ${slave.slaveName} to use ${his2} face. ${slave.slaveName} comes over slowly, unsure what to do with the offer since ${his} dick is so useless. ${He} forces ${rival.slaveName}'s face against ${his} useless member anyway. After a bit of this, ${slave.slaveName}, clearly unsatisfied, turns around and rides ${rival.slaveName} with ${his} ass instead. ${rival.slaveName} tries to avoid orally servicing ${his2} rival's asshole, but you hold ${him2} in place and ${slave.slaveName} sighs in contentment.`);
		seX(slave, "anal", rival, "oral");
		seX(V.PC, "penetrative", rival, "vaginal");
	} else if (rival.anus === 0 && rival.vagina > 0) {
		r.push(`You`);
		if (V.PC.dick === 0) {
			r.push(`step into a strap-on and tell ${him2} to ride it,`);
		} else {
			r.push(`tell ${him2} to ride your dick,`);
		}
		r.push(`facing away from you. ${He} does, not without trepidation, which increases when you hold ${him} securely in place. Once ${he2}'s humping away, you tell ${slave.slaveName} to ride ${his2} face. ${slave.slaveName} comes over, gently rubbing ${his} pussy. ${He} forces ${rival.slaveName}'s face against ${his} slick cunt, ignoring ${his2} reluctance. ${rival.slaveName} eventually realizes that ${he2}'s better off getting it over with, and applies ${his2} tongue as best ${he2} can.`);
		seX(V.PC, "penetrative", rival, "vaginal");
		seX(slave, "penetrative", rival, "oral");
	} else if (rival.anus > 0 && rival.vagina < 0 && canPenetrate(slave)) {
		r.push(`You`);
		if (V.PC.dick === 0) {
			r.push(`step into a strap-on and tell ${him2} to ride it,`);
		} else {
			r.push(`tell ${him2} to ride your dick,`);
		}
		r.push(`facing you. ${He2} lowers ${his2} butthole down onto your cock, not without trepidation, which increases when you reach behind ${him2} and spread ${his2} buttocks as wide as they'll go. With ${him2} pinned, you tell ${slave.slaveName} to come over and join you. ${slave.slaveName} comes over, stroking ${himself} hard, not certain what you mean. To make it clear, you hook a single finger up into poor ${rival.slaveName}'s rectum alongside`);

		if (V.PC.dick === 0) {
			r.push(`the fake phallus.`);
		} else {
			r.push(`your dick.`);
		}
		r.push(`It takes ${slave.slaveName} a while to jam ${his} cock up the struggling and sobbing ${rival.slaveName}'s anus. Of the three phalli present, ${rival.slaveName}'s is the only one that's soft as ${he2} cries ${his2} way through a brutal double anal rape.`);
		seX(V.PC, "penetrative", rival, "anal");
		seX(slave, "penetrative", rival, "anal");
	} else if (rival.anus > 0 && rival.vagina === 0 && canPenetrate(slave)) {
		r.push(`You`);
		if (V.PC.dick === 0) {
			r.push(`step into a strap-on and tell ${him2} to ride it`);
		} else {
			r.push(`tell ${him2} to ride your dick`);
		}
		r.push(`anally, facing you. ${He2} lowers ${his2} butthole down onto your cock, not without trepidation, which increases when you reach behind ${him2} and spread ${his2} buttocks as wide as they'll go. With ${him2} pinned, you tell ${slave.slaveName} to come over and join you. ${slave.slaveName} comes over, stroking ${himself} hard, not certain what you mean. To make it clear, you hook a single finger up into poor ${rival.slaveName}'s rectum alongside`);

		if (V.PC.dick === 0) {
			r.push(`the fake phallus.`);
		} else {
			r.push(`your dick.`);
		}
		r.push(`It takes ${slave.slaveName} a while to jam ${his} cock up the struggling and sobbing ${rival.slaveName}'s anus. ${rival.slaveName} buys continued vaginal virginity by taking a brutal double anal rape.`);
		seX(V.PC, "penetrative", rival, "anal");
		seX(slave, "penetrative", rival, "anal");
	} else if (rival.anus > 0 && rival.vagina < 1 && slave.dick > 0) {
		r.push(`You`);
		if (V.PC.dick === 0) {
			r.push(`step into a strap-on and tell ${him2} to ride it`);
		} else {
			r.push(`tell ${him2} to ride your dick`);
		}
		r.push(`anally, facing away from you. ${He2} does, not without trepidation, which increases when you hold ${him2} securely in place as you pump yourself in and out of ${his2} asshole. You tell ${slave.slaveName} to ride ${his2} face. ${slave.slaveName} comes over slowly, unsure what to do with the offer since ${his} dick is so useless. ${He} forces ${rival.slaveName}'s face against ${his} useless member anyway. After a bit of this, ${slave.slaveName}, clearly unsatisfied, turns around and rides ${rival.slaveName} with ${his} ass instead. ${rival.slaveName} tries to avoid orally servicing ${his2} rival's asshole, but you hold ${him2} in place and ${slave.slaveName} sighs in contentment.`);
		seX(V.PC, "penetrative", rival, "anal");
		seX(slave, "penetrative", rival, "oral");
	} else if (rival.anus > 0 && rival.vagina < 1) {
		r.push(`You`);
		if (V.PC.dick === 0) {
			r.push(`step into a strap-on and tell ${him2} to ride it`);
		} else {
			r.push(`tell ${him2} to ride your dick`);
		}
		r.push(`anally, facing away from you. ${He2} does, not without trepidation, which increases when you hold ${him2} securely in place as you pump yourself in and out of ${his2} asshole. You tell ${slave.slaveName} to ride ${his2} face. ${slave.slaveName} comes over, gently rubbing ${his} pussy. ${He} forces ${rival.slaveName}'s face against ${his} slick cunt, ignoring ${his2} reluctance. ${rival.slaveName} eventually realizes that ${he2}'s better off getting it over with, and applies ${his2} tongue as best ${he2} can.`);
		seX(V.PC, "penetrative", rival, "anal");
		seX(slave, "penetrative", rival, "oral");
	} else if (rival.anus > 0 && rival.vagina > 0 && canPenetrate(slave)) {
		r.push(`You`);
		if (V.PC.dick === 0) {
			r.push(`step into a strap-on and tell ${him2} to ride it,`);
		} else {
			r.push(`tell ${him2} to ride your dick,`);
		}
		r.push(`facing you. ${He2} does, with some trepidation, which increases when you reach behind ${him2} and spread ${his2} buttocks as wide as they'll go. With ${him2} pinned, you tell ${slave.slaveName} to come over and join you. ${slave.slaveName} comes over, stroking ${himself} hard. You squeeze ${rival.slaveName}'s buttocks together and then spread them again, forcing ${his2} anus to wink invitingly. You stop ${rival.slaveName}'s abortive humping and hold ${his2} hips in place while ${slave.slaveName} gets ${his} cock up ${his2} ass. Once ${he}'s set, off the two of you go, with poor ${rival.slaveName} gasping and grimacing as ${he2} gets it rough in both holes.`);
		seX(V.PC, "penetrative", rival, "anal");
		seX(slave, "penetrative", rival, "anal");
	} else if (rival.anus > 0 && rival.vagina > 0 && slave.dick > 0 && hasAnyArms(slave)) {
		r.push(`You`);
		if (V.PC.dick === 0) {
			r.push(`step into a strap-on and tell ${him2} to ride it,`);
		} else {
			r.push(`tell ${him2} to ride your dick,`);
		}
		r.push(`facing you. ${He2} does, with some trepidation, which increases when you reach behind ${him2} and spread ${his2} buttocks as wide as they'll go. With ${him2} pinned, you tell ${slave.slaveName} to come over and join you. ${slave.slaveName} comes over, stroking ${himself} hard, not certain what you mean, since ${his} cock is useless. To make it clear, you push two fingers into ${rival.slaveName}'s butt, finger fucking ${his2} asshole until ${slave.slaveName} takes over. Once ${he}'s set, off the two of you go, with poor ${rival.slaveName} gasping and grimacing as ${he2} gets it rough in both holes. ${slave.slaveName} uses as many fingers as ${he} can, always at least one more than ${rival.slaveName} would like.`);
		seX(V.PC, "penetrative", rival, "vaginal");
		seX(slave, "penetrative", rival, "anal");
	} else if (rival.anus > 0 && rival.vagina > 0) {
		r.push(`You`);
		if (V.PC.dick === 0) {
			r.push(`step into a strap-on and tell ${him2} to ride it,`);
		} else {
			r.push(`tell ${him2} to ride your dick,`);
		}
		r.push(`facing you. ${He2} does, with some trepidation, which increases when you reach behind ${him2} and spread ${his2} buttocks as wide as they'll go. With ${him2} pinned, you tell ${slave.slaveName} to come over and join you, indicating a strap-on for slave use, on a side shelf. ${slave.slaveName} hurries into it and comes over. You stop ${rival.slaveName}'s abortive humping and hold ${his2} hips in place while ${slave.slaveName} gets ${his} fake cock up ${his2} ass. Once ${he}'s set, off the two of you go, with poor ${rival.slaveName} gasping and grimacing as ${he2} gets it rough in both holes. ${slave.slaveName} murmurs calumnies in ${rival.slaveName}'s ear, pinches ${his2} nipples, and generally adds humiliation above and beyond being double penetrated by ${his2} owner and ${his2} rival.`);
		seX(V.PC, "penetrative", rival, "vaginal");
		seX(slave, "penetrative", rival, "anal");
	} else {
		r.push(`Unforeseen combination of rival stats; yell at FC Dev to write a scene for these slaves.`);
	}
	App.Events.addParagraph(node, r);
	return node;
};