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

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

	slave.partners.add(-1);

	r.push(`You have ${him} brought to you so that you can fuck ${his} hyperpregnant body.`);
	if (tooBigBelly(slave)) {
		r.push(`${He} is pinned to the ground by ${his}`);
		if (slave.bellyPreg >= 1000000) {
			r.push(`impossibly exploded baby bump,`);
		} else if (slave.bellyPreg >= 750000) {
			r.push(`massively swollen baby bump,`);
		} else if (slave.bellyPreg >= 600000) {
			r.push(`titanic baby belly,`);
		} else {
			r.push(`massive belly,`);
		}
		r.push(`and won't be a particularly able lover because of this, but enjoying ${his} immobility is half the point.`);
	} else if (!hasAnyLegs(slave)) {
		r.push(`${He} has no limbs to stand on, so ${he} is left resting atop ${his}`);
		if (slave.bellyPreg >= 1000000) {
			r.push(`impossibly exploded baby bump.`);
		} else if (slave.bellyPreg >= 750000) {
			r.push(`massively swollen baby bump.`);
		} else if (slave.bellyPreg >= 600000) {
			r.push(`titanic baby belly.`);
		} else {
			r.push(`massive belly.`);
		}
		r.push(`${He} won't be a particularly able lover, but enjoying ${his} immobility is half the point.`);
	} else if (!canStand(slave)) {
		r.push(`${He} can't support ${himself}, so ${he} is left leaning against ${his}`);
		if (slave.bellyPreg >= 1000000) {
			r.push(`impossibly exploded baby bump.`);
		} else if (slave.bellyPreg >= 750000) {
			r.push(`massively swollen baby bump.`);
		} else if (slave.bellyPreg >= 600000) {
			r.push(`titanic baby belly.`);
		} else {
			r.push(`massive belly.`);
		}
		r.push(`${He} won't be a particularly able lover, but enjoying ${his} immobility is half the point.`);
	} else {
		r.push(`${He} can still stand despite ${his}`);
		if (slave.bellyPreg >= 1000000) {
			r.push(`impossibly exploded baby bump,`);
		} else if (slave.bellyPreg >= 750000) {
			r.push(`massively swollen baby bump,`);
		} else if (slave.bellyPreg >= 600000) {
			r.push(`titanic baby belly,`);
		} else {
			r.push(`massive belly,`);
		}
		r.push(`and won't be a particularly able lover because of this, but enjoying this obstacle is half the point.`);
	}
	r.push(`Once ${he} is situated in the center of your office, you walk a circle around ${him}, taking special care to`);
	if (slave.bellyTat === "a heart") {
		r.push(`trace a hand over the obliterated heart shaped tattoo on the front of ${his} immensely stretched belly.`);
	} else if (slave.bellyTat === "a star") {
		r.push(`trace a hand over the obliterated star shaped tattoo on the front of ${his} immensely stretched belly.`);
	} else if (slave.bellyTat === "a butterfly") {
		r.push(`trace a hand over the obliterated butterfly tattoo on the front of ${his} immensely stretched belly.`);
	} else {
		r.push(`trace a hand over the obliterated, stretched out expanse of slightly darker flesh where ${his} belly button used to be.`);
	}
	if (slave.devotion > 95) {
		r.push(`${He} purrs in response to your touch, leaning forward against ${his} belly and`);
		if (!hasAnyLegs(slave)) {
			r.push(`wiggles`);
		} else {
			r.push(`lifts ${his} toes off the ground as ${he}`);
			if (hasBothLegs(slave)) {
				r.push(`spreads ${his} legs`);
			} else {
				r.push(`moves ${his} leg`);
			}
		}
		r.push(`in preparation for you.`);
	} else if (slave.trust < -20 && slave.devotion > -10) {
		r.push(`${He} groans at your touch.`);
	} else {
		r.push(`${He} winces at your touch.`);
	}
	r.push(`When you get to ${his} rear, you slap ${his}`);
	if (slave.butt > 11) {
		r.push(`insanely enormous ass,`);
	} else if (slave.butt > 5) {
		r.push(`huge ass,`);
	} else if (Math.floor(slave.buttImplant/slave.butt) > .60) {
		r.push(`jiggly, saline filled ass,`);
	} else if (slave.butt > 2) {
		r.push(`thick ass,`);
	} else {
		r.push(`pert ass,`);
	}
	r.push(`and then spread ${his} cheeks for easier access to ${his}`);
	if (canDoVaginal(slave)) {
		r.push(`cunt.`);
		r.push(VCheck.Vaginal(slave, 1));
	} else {
		r.push(`asshole.`);
		r.push(VCheck.Anal(slave, 1));
	}
	r.push(`Heaving upward, you push ${him} fully onto ${his} belly, then lean into ${him}, fucking ${him} in a unique spin on the wheelbarrow position`);
	if (V.PC.dick === 0) {
		r.push(`with your strap-on`);
	}
	r.push(`and setting ${his} tightly packed gut to jiggling. ${He} moans in mixed pain and pleasure as you bring ${him} over the edge and, by the time you finish with ${him} and allow ${him} to return to ${his} duties, it's clear`);
	if (slave.belly > slave.pregAdaptation*2000) {
		r.push(`that your recent escapades <span class="health dec">have done lasting damage to ${his} body.</span>`);
		healthDamage(slave, 10);
	} else {
		r.push(`that you've left ${him} thoroughly exhausted.`);
	}
	App.Events.addParagraph(node, r);
	return node;
};


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

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

	addPartner(slave, -1);
	seX(slave, "mammary", V.PC, "penetrative");

	r.push(`You call ${him} over so you can play with ${his}`);
	if (slave.boobs >= 20000) {
		r.push(`colossal`);
	} else if (slave.boobs >= 10000) {
		r.push(`massive`);
	} else if (slave.boobs >= 5000) {
		r.push(`monster`);
	} else if (slave.boobs >= 1000) {
		r.push(`huge`);
	} else if (slave.boobsImplant > 250) {
		r.push(`fake`);
	} else if (slave.boobs >= 650) {
		r.push(`big`);
	} else if (slave.boobs >= 300) {
		r.push(`small`);
	} else {
		r.push(`flat`);
	}
	r.push(`tits.`);

	if (slave.boobsTat === "tribal patterns") {
		r.push(`The tattoos on ${his} breasts certainly draw attention to ${his} nipples.`);
	} else if (slave.boobsTat === "scenes") {
		r.push(`The tattoos on ${his} abdomen nicely illustrate what you mean to do with ${him}: a titfuck.`);
	} else if (slave.boobsTat === "degradation") {
		r.push(`The tattoos on ${his} chest are asking you to use those breasts, after all.`);
	}

	if (slave.nipples === "huge") {
		r.push(`${His} nipples are so large they give ${his} breasts an unavoidably lewd appeal as they jut outward.`);
	} else if (slave.nipples === "puffy") {
		r.push(`${His} puffy nipples beg to be sucked.`);
	} else if (slave.nipples === "flat") {
		r.push(`${His} nipples are stretched nearly flat by ${his} implants, reducing them to two lewd little buttons.`);
	} else if (slave.nipples === "partially inverted" && slave.nipplesPiercing === 0) {
		r.push(`${His} partially inverted nipples should protrude at the slightest stimulation.`);
	} else if (slave.nipples === "inverted" && slave.nipplesPiercing === 0) {
		r.push(`${His} inverted nipples form lewd little creases across ${his} areolae.`);
	} else if (slave.nipples === "fuckable") {
		if (slave.lactation) {
			r.push(`${His} nipplecunts are leaking milk and begging to be penetrated.`);
		} else {
			r.push(`${His} nipplecunts form lewd little slits across ${his} areolae.`);
		}
	}

	if (slave.nipplesPiercing > 1 && !hasAnyLegs(slave)) {
		r.push(`You carry ${him} over, playing with the chain between ${his} nipples.`);
	} else if (slave.nipplesPiercing > 1) {
		r.push(`You pull ${him} over by the chain between ${his} nipples.`);
	} else if (slave.nipplesPiercing === 1) {
		r.push(`${His} nipple piercings glint enticingly.`);
	}

	if (V.PC.belly >= 5000) {
		if (V.PC.dick !== 0) {
			r.push(`You lay ${him} down on the couch on ${his} back, lather oil onto ${his} breasts and gingerly straddle ${his} face; your stiff prick between ${his} tits and under your belly, and your needy cunt over ${his} mouth.`);
			if (slave.boobs >= 20000) {
				r.push(`${His} breasts are so colossal you can barely maintain this position. They completely devour your dick and threaten to swallow up your pregnant belly as well. Between ${his} licking, and the fleshy prison surrounding your privates, it doesn't take long for you to soak ${his} face and plant your seed deep into ${his} cleavage.`);
			} else if (slave.boobs >= 10000) {
				r.push(`${His} breasts are so massive you can barely maintain this position. They completely devour your dick and swell around the sides of your pregnancy as well. Between ${his} licking, and the fleshy prison surrounding your privates, it doesn't take long for you to soak ${his} face and plant your seed deep into ${his} cleavage.`);
			} else if (slave.boobs >= 5000) {
				r.push(`${His} breasts are so monstrous they completely devour your dick and tickle your pregnant belly. Pushing ${his} breasts together under your gravidness, you thrust between them and the underside of your middle, all the while rubbing your pussy into ${his} face. With ${his} licking, and all the flesh against your cock, it doesn't take long for you to soak ${his} face and plant your seed deep into ${his} cleavage.`);
			} else if (slave.boobs >= 1000) {
				r.push(`${His} huge breasts fill the area under your pregnancy nicely. Pushing them together under your gravidness, you thrust between them and the underside of your middle, all the while rubbing your pussy into ${his} face. With ${his} licking, and all the flesh against your cock, it doesn't take long for you to soak ${his} face and plant your seed deep into ${his} cleavage.`);
			} else if (slave.boobsImplant > 250) {
				r.push(`${His} fake breasts fill the area under your pregnancy nicely. Pushing them together under your gravidness, you thrust between them and the underside of your middle, all the while rubbing your pussy into ${his} face. With ${his} licking, and all the flesh against your cock, it doesn't take long for you to soak ${his} face and plant your seed deep into ${his} cleavage.`);
			} else if (slave.boobs >= 650) {
				r.push(`${His} big breasts fill the area under your pregnancy nicely. You thrust between them and the underside of your middle, all the while rubbing your pussy into ${his} face. With ${his} licking, and all the flesh against your cock, it doesn't take long for you to soak ${his} face and plant your seed deep into ${his} cleavage.`);
			} else if (slave.boobs >= 300) {
				r.push(`You have to feel around under your pregnancy to hold your cock against ${his} tiny breasts. You thrust against them and your hand, while the other teases your middle, all the while rubbing your pussy against ${his} face. Between ${his} licking, and your own teasing, it doesn't take long for you to soak ${his} face and splatter your seed across ${his} front.`);
			} else {
				r.push(`You have to lean forward and pin your cock against ${his} flat chest with the underside of your own pregnancy to make any real channel to thrust into. You fondle your belly${(V.PC.boobs >= 300) ? ` and breasts` : ``}, all the while rubbing your pussy against ${his} face. Between ${his} licking, and your own teasing, it doesn't take long for you to soak ${his} face and splatter your seed across your underbelly and ${his} front. You turn around and have ${his} lick you clean before pulling your gravid bulk off of ${him}.`);
			}
		} else {
			r.push(`You lay ${him} down on the couch on ${his} back, lather oil onto ${his} breasts and gingerly straddle ${his} face; your needy cunt over ${his} mouth.`);
			if (slave.boobs >= 20000) {
				r.push(`${His} breasts are so colossal you can barely maintain this position, but they are massively fun to play with as ${he} eats you out. You massage your pregnancy with ${his} acres of breast flesh, teasing your own stretched skin with ${hers}. You can visibly see the vibrations running through ${his} tits as you quiver from the mouth working your pussy. Thoroughly soaking ${him}, you fall into ${his} endless cleavage for a short rest.`);
			} else if (slave.boobs >= 10000) {
				r.push(`${His} breasts are so massive you can barely maintain this position, but they are fun to play with as ${he} eats you out. You massage the edges of your pregnancy with ${his} breast flesh, teasing your own stretched skin with ${hers}. You can visibly see the vibrations running through ${his} tits as you quiver from the mouth working your pussy. Thoroughly soaking ${him}, you fall into ${his} immense cleavage for a short rest.`);
			} else if (slave.boobs >= 5000) {
				r.push(`${His} breasts are so monstrous they make a fabulous rest for your pregnancy as ${he} eats you out. You tease ${his} breasts using your baby bump, rubbing it against them and vice versa. You can visibly see the vibrations running through ${his} tits as you quiver from the mouth working your pussy. Thoroughly soaking ${him}, you dismount and lean against ${his} monster breasts for a quick rest.`);
			} else if (slave.boobs >= 1000) {
				r.push(`${His} breasts are huge enough to support your pregnancy as ${he} eats you out. You press your belly more and more into them as ${his} tongue delves deeper into your folds. You can visibly see the vibrations running through the breast flesh forced to the sides of your middle as you quiver from the mouth working your pussy. Thoroughly soaking ${him}, you dismount and lean against ${his} huge breasts for a quick rest.`);
			} else if (slave.boobs >= 650) {
				r.push(`${His} big breasts fill the area under your pregnancy nicely. You press your belly more and more into them as ${his} tongue delves deeper into your folds. You can visibly see the vibrations running through the breast flesh forced to the sides of your middle as you quiver from the mouth working your pussy. Thoroughly soaking ${him}, you dismount and lean against ${his} big breasts for a quick rest.`);
			} else if (slave.boobs >= 300) {
				r.push(`${His} tiny breasts are completely covered by your pregnancy. You reach under yourself, grabbing what you can of ${his} breasts and pushing them against your crotch. Between rubbing ${his} breasts against your self and ${his} tongue in your pussy, you quickly climax, thoroughly soaking ${him}.`);
			} else {
				r.push(`${His} flat chest is completely covered by your pregnancy. Reach under yourself, you feel around until you find ${his} nipples. You tease ${his} flat chest until you're at you limit, thoroughly soaking ${him}, before dismounting and returning to your desk.`);
			}
		}
	} else if (isAmputee(slave)) {
		if (V.PC.dick !== 0) {
			r.push(`${His} limbless`);
			if (V.seeRace === 1) {
				r.push(slave.race);
			}
			r.push(`torso makes ${him} a unique appliance for mammary intercourse. You lay ${him} down on the ground on ${his} back, lube ${his} cleavage, and straddle ${his} torso. With your cock between ${his} breasts, you`);
			if (slave.boobs >= 650) {
				r.push(`squash ${his} tits together to form a nice lubricated channel,`);
			} else {
				r.push(`hold your cock in place,`);
			}
			r.push(`and ride back and forth on ${him}.`);
			if (V.PC.vagina !== -1) {
				r.push(`Your pussylips rub deliciously across ${his} sternum.`);
			}
			r.push(`${He} has some trouble breathing under the assault, but ${he} manages. And for the finale, ${he}'s totally unable to avoid a perfect cumshot.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`You set ${his} limbless torso upright on your lap, facing you, so that your breasts and ${hers} are resting heavily against one another. ${He} turns ${his} head to avoid getting splashed in the eyes as you add a generous coating of oil to the heaving breastflesh. You reach around to grab ${him} by the hips and slide ${him} up and down, giving you both a wonderful mammary oil massage.`);
		} else {
			r.push(`You set ${his} limbless torso on the floor, and tease ${him} for a while until ${his} nipples are rock hard. This done, you kneel down on ${him} with each of your legs aside ${his} torso, and hump your pussy back and forth on the stiff nub of one nipple. ${He} lies there, unable to do anything but comply, squirming with the stimulation.`);
		}
	} else if (tooBigBelly(slave)) {
		if (V.PC.dick !== 0) {
			r.push(`${His} excessively large belly makes ${him} a unique appliance for mammary intercourse. You lay ${him} down on the ground on ${his} back, lube ${his} cleavage, and gingerly fit yourself between ${his} belly and ${his} breasts. With your cock between ${his} breasts, you`);
			if (slave.boobs >= 650) {
				r.push(`squash ${his} tits together to form a nice lubricated channel,`);
			} else {
				r.push(`hold your cock in place,`);
			}
			r.push(`and ride back and forth on ${him}. You blast ${him} in the face with your cum in no time${(V.PC.vagina !== -1) ? `, leaving your pussyjuice on ${his} belly where you rubbed against ${him}` :``}.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`You lie down on top of ${him}, face to face, forced high into the air by ${his} excessively large belly, so that your breasts press into ${his}`);
			if (slave.boobs >= 20000) {
				r.push(`colossal tits.`);
			} else if (slave.boobs >= 10000) {
				r.push(`massive tits.`);
			} else if (slave.boobs >= 5000) {
				r.push(`monster tits.`);
			} else if (slave.boobs >= 1000) {
				r.push(`huge tits.`);
			} else if (slave.boobsImplant > 250) {
				r.push(`fake tits.`);
			} else if (slave.boobs >= 650) {
				r.push(`big tits.`);
			} else if (slave.boobs >= 300) {
				r.push(`small tits.`);
			} else {
				r.push(`flat chest.`);
			}
			r.push(`Scooting around to stimulate your nipples against ${his} warm breastflesh, you kiss the slave while pushing a hand down between you to schlick yourself against ${him}.`);
		} else {
			r.push(`You set ${his} massively distended body on the floor, and tease ${him} for a while until ${his} nipples are rock hard. This done, you kneel down on ${him} with each of your legs aside ${his} torso, rear against the top of ${his} belly, and hump your pussy back and forth on the stiff nub of one nipple. ${He} lies there, desperately trying to reach around ${his} bulk to ${his} own pussy, but unable to do so, resorts to squirming with the stimulation.`);
		}
	} else if (tooBigBreasts(slave)) {
		if (V.PC.dick !== 0) {
			r.push(`${His} excessive breasts make ${him} a unique appliance for mammary intercourse. You lay ${him} down on the ground on ${his} back, lube ${his} cleavage, and straddle ${his} torso. ${He} holds ${his} udders together, creating a warm, wet channel as fuckable as any hole. You blast ${him} in the face with your cum in no time${(V.PC.vagina !== -1) ? `, leaving your pussyjuice on ${his} chest where you rubbed against ${him}` : ``}.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`You lie down on top of ${him}, face to face, so that your much smaller breasts press into the massive pillows formed by ${his} chest. Scooting around to stimulate your nipples against ${his} warm breastflesh, you kiss the slave while pushing a hand down between you to schlick yourself against ${him}.`);
		} else {
			r.push(`You set ${his} nearly helpless body on the floor and then scoot your hips under the massive weight of ${his} tits. The heft feels nice against you, and you worm a naughty hand under there to play with yourself in the warm cave formed by your pelvis and ${his} udders.`);
		}
	} else if (tooBigButt(slave)) {
		if (V.PC.dick !== 0) {
			r.push(`${His} excessive butt makes ${him} a unique appliance for mammary intercourse. You lay ${him} down on the ground on ${his} back, ${his} butt hoisting ${his} crotch high above ${his} head, lube ${his} cleavage, and straddle ${his} torso. With your cock between ${his} breasts, you`);
			if (slave.boobs >= 650) {
				r.push(`squash ${his} tits together to form a nice lubricated channel,`);
			} else {
				r.push(`hold your cock in place,`);
			}
			r.push(`and ride back and forth on ${him}${(V.PC.vagina !== -1) ? `, leaving your pussyjuice on ${his} chest where you rubbed against ${him}` : ``}. ${He} has some trouble breathing under the assault, but ${he} manages. And for the finale, ${he}'s totally unable to avoid a perfect cumshot.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`You set ${him} upright on your lap, facing you, so that your breasts and ${hers} are resting heavily against one another and ${his} massive ass covers your lap. ${He} turns ${his} head to avoid getting splashed in the eyes as you add a generous coating of oil to the combined breastflesh. You reach around to grab ${his} luxurious ass and jiggle ${him} up and down, giving you both a wonderful mammary oil massage.`);
		} else {
			r.push(`You set ${his} nearly helpless body on the floor and then scoot your hips under the massive weight of ${his} tits. The heft feels nice against you, and you worm a naughty hand under there to play with yourself in the warm cave formed by your pelvis and ${his} udders.`);
		}
	} else if (slave.fetish === "boobs" && slave.fetishStrength > 60 && slave.fetishKnown === 1 && V.PC.dick !== 0) {
		r.push(`${He} comes over hurriedly, already presenting ${his} breasts. ${He} gives you a titjob with ${his} lubricated cleavage while you sit at your desk, playing with ${his} own nipples and moaning with pleasure.`);
		if (V.PC.vagina !== -1) {
			r.push(`${He} does ${his} best to push ${his} sternum hard against you, giving your pussy some stimulation, too.`);
		}
		r.push(`As you get close to orgasm, you push ${his} ${hasBothArms(slave) ? `hands` : `hand`} away and take over,`);
		if (slave.nipples === "fuckable") {
			r.push(`running your fingers around the lip of ${his} ${slave.nipples} nipples. When you finish, you drive them in, hard,`);
		} else {
			r.push(`rolling ${his} ${slave.nipples} nipples between your fingers and thumbs. When you finish, you give them a hard pull,`);
		}
		r.push(`sending ${him} gasping over the edge as well.`);
	} else if (slave.fetish === "cumslut" && slave.fetishStrength > 60 && slave.fetishKnown === 1 && slave.chastityPenis === 1) {
		r.push(`${He} comes over eagerly, with hunger in ${his} eyes. ${He} gives you a titjob with ${his} lubricated cleavage while you sit at your desk. As a cumslut ${he}'s almost desperate to get your cum into ${him}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`mouth and rubs a nipple with one hand and ${his} anal opening with the other, since ${he} can't touch ${his} cock. The situation brings ${him} some pleasure, but the first twitches of ${his} cock against ${his} chastity cage are so uncomfortable that ${he} subsides into busy mechanical dick sucking. ${He} writhes uncomfortably, frustrated beyond belief.`);
	} else if (slave.fetish === "cumslut" && slave.fetishStrength > 60 && slave.fetishKnown === 1 && slave.dick !== 0 && V.PC.dick !== 0) {
		r.push(`${He} comes over eagerly, with hunger in ${his} eyes. ${He} gives you a titjob with ${his} lubricated cleavage while you sit at your desk. As a cumslut ${he}'s almost desperate to get your cum into ${him}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`mouth and`);
		if (canAchieveErection(slave)) {
			r.push(`jacks ${himself} off`);
		} else {
			r.push(`rubs ${his} sadly limp member`);
		}
		r.push(`in anticipation. When you finish, ${he} sits back with an ecstatic look on ${his} face and lets your cum rest in ${his} mouth as ${he} climaxes into ${his} hand. ${He} pours ${his} own cum from ${his} hand into ${his} mouth so it can mingle with yours.`);
	} else if (slave.fetish === "cumslut" && slave.fetishStrength > 60 && slave.fetishKnown === 1 && V.PC.dick !== 0) {
		r.push(`${He} comes over eagerly, with hunger in ${his} eyes. ${He} gives you a titjob with ${his} lubricated cleavage while you sit at your desk. As a cumslut ${he}'s almost desperate to get your cum into ${him}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`mouth and rubs ${himself} in anticipation. When you finish, ${he}`);
		if (V.PC.vagina !== -1) {
			r.push(`quickly swallows and then runs ${his} hot tongue down to your wet pussy, eagerly licking your juices.`);
		} else {
			r.push(`sits back with an ecstatic look on ${his} face and lets your cum rest in ${his} mouth as ${he} climaxes.`);
		}
	} else if (slave.devotion < -20) {
		r.push(`${He} tries to refuse you, so you throw ${him} down on the couch next to your desk and`);
		if (V.PC.dick !== 0) {
			r.push(`squeeze lubricant between ${his} ${slave.skin} breasts. You straddle ${his} torso, hold ${his} boobs together, and fuck ${his} cleavage${(V.PC.vagina !== -1) ? `, grinding your hips down against ${him} to stimulate your pussy` : ``}. Your cum splashes ${his} crying face.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`squirt lubricant all over ${his} ${slave.skin} breasts. Then, you lie down atop ${him} with your breasts meshing with ${hers} and begin to slide up and down, stimulating your nipples wonderfully. ${He} tries to turn ${his} head away, but you reach up to force ${his} unwilling mouth to accept your insistent tongue.`);
		} else {
			r.push(`straddle ${his} face, grinding your pussy against ${his} unwilling mouth. You begin to grope ${his} breasts and pinch ${his} nipples to hardness, and when ${he}'s slow at eating you out, you twist them cruelly. The pain makes ${him} squeal into your pussy, a lovely sensation, so you manhandle ${him} without mercy until you climax against ${his} gasping face.`);
		}
	} else if (slave.devotion <= 20 && slave.lactation > 0) {
		r.push(`${He} lies on the couch next to your`);
		if (V.PC.dick !== 0) {
			r.push(`desk and rubs lube over ${his} ${slave.skin} chest so you can fuck ${his} tits. You straddle ${his} torso, hold ${his} boobs together, and fuck ${his} cleavage. As you do, the pressure of your grip causes a thin rivulet of milk to run from each of ${his} nipples. Your cum covers ${his} reluctant face; between your semen${(V.PC.vagina !== -1) ? `, the pussyjuice you left on ${his} chest,` : ``}and ${his} milk ${he}'s quite a mess.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`desk and rubs lube over ${his} ${slave.skin} breasts. Then, you lie down atop ${him} with your breasts meshing with ${hers} and begin to slide up and down, titillating your nipples wonderfully. ${He} cannot ignore the slippery stimulation ${his} nipples are receiving, and you find ${his} mouth quite willing to receive your insistent tongue. ${He} begins to leak milk, adding ${his} cream to the lube between your breasts, and by the time you're done there's quite a mess.`);
		} else {
			r.push(`desk, and you've straddled ${his} face before ${he} can do anything more. You begin to grope ${his} breasts and pinch ${his} nipples to hardness as ${he} eats you out, your ministrations producing prompt jets of creamy milk, straight up into the air. You milk ${him} without mercy, shooting some of the stronger streams into your mouth as you ride ${him}, leaving ${him} to massage ${his} breasts gingerly as you get off ${his} face.`);
		}
	} else if (slave.devotion <= 20) {
		r.push(`${He} lies on the couch next to your`);
		if (V.PC.dick !== 0) {
			r.push(`desk and rubs lube over ${his}`);
			if (V.seeRace === 1) {
				r.push(slave.race);
			}
			r.push(`chest so you can fuck ${his} ${slave.skin} tits. You straddle ${his} torso, hold ${his} boobs together, and fuck ${his} cleavage. Your cum covers ${his} reluctant face${(V.PC.vagina !== -1) ? `, and you hike yourself up a little higher to grind your pussy against ${his} mouth` : ``}.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`desk and rubs lube over ${his} ${slave.skin} breasts. Then, you lie down atop ${him} with your breasts meshing with ${hers} and begin to slide up and down, titillating your nipples wonderfully. ${He} cannot ignore the slippery stimulation ${his} nipples are receiving, and you find ${his} mouth quite willing to receive your insistent tongue.`);
		} else {
			r.push(`desk, and you've straddled ${his} face before ${he} can do anything more. You begin to grope ${his} breasts and pinch ${his} nipples to hardness as ${he} eats you out, your ministrations producing moans that feel quite nice against your clit. You maul ${his} boobs without mercy as you reach your climax, leaving ${him} to massage ${his} breasts gingerly as you get off ${him}.`);
		}
	} else if (slave.lactation > 0) {
		r.push(`Since ${he}'s producing milk, ${he} gets an emotional high from breastfeeding, and ${he} sits on the edge of your desk for a while so you can use ${him} as a beverage dispenser while you work. Once ${he}'s empty, ${he} gets down to`);
		if (V.PC.dick === 0) {
			r.push(`eat you out.`);
			if (hasAnyArms(slave)) {
				r.push(`As ${he} buries ${his} face between your legs, ${he} gently rolls ${his} sore nipples around in ${his} fingers, quietly moaning and whining.`);
			}
		} else {
			r.push(`give you a titjob.`);
			if (hasAnyArms(slave)) {
				r.push(`As you titfuck ${him}, ${he} gently rolls ${his} sore nipples around in ${his} fingers, quietly moaning and whining.`);
			}
			r.push(`Your cum covers ${his}`);
			if (V.seeRace === 1) {
				r.push(slave.race);
			}
			r.push(`face in no time, and ${he}'s left with a spectacular mess to clean. ${He} laps it all up.`);
		}
	} else {
		if (V.PC.dick !== 0) {
			r.push(`${He} massages and toys with ${his} chest for your benefit, languidly rubbing lubricant over not only ${his} cleavage but ${his} entire chest, making sure every`);
			if (V.showInches === 2) {
				r.push(`inch`);
			} else {
				r.push(`centimeter`);
			}
			r.push(`of ${his} ${slave.skin} breasts are nice and shiny. ${He} gives you a titjob with ${his} lubricated cleavage while you sit at your desk${(V.PC.vagina !== -1) ? `, doing ${his} best to run ${his} hard nipples between your pussylips whenever ${he} can` : ``}. Your cum covers ${his}`);
			if (V.seeRace === 1) {
				r.push(slave.race);
			}
			r.push(`face, and ${he} carefully licks it all off while continuing to play with ${his} erect nipples.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`${He} rubs lube over ${his} ${slave.skin} breasts, flirting with you and sticking out ${his} chest, before lying down on the couch. You lie down atop ${him} with your breasts meshing with ${hers} and begin to slide up and down, titillating your nipples wonderfully. You find ${his} mouth quite willing to receive your insistent`);
			if (hasAnyArms(slave)) {
				r.push(`tongue, and while you make out, ${he} slips`);
				if (hasBothArms(slave)) {
					r.push(`a`);
				} else {
					r.push(`${his}`);
				}
				r.push(`hand down between your legs to give you a handjob, too.`);
			} else {
				r.push(`tongue.`);
			}
		} else {
			r.push(`${He} flirts with you and sticks out ${his} chest before lying down on the couch. You've straddled ${his} face before ${he} can do anything more, and ${he} begins to eat you out with enthusiasm. You begin to grope ${his} breasts and pinch ${his} nipples to hardness as ${he} gives you oral, your ministrations producing moans that feel quite nice against your clit. You maul ${his} boobs without mercy as you reach your climax, but ${he} loves it all.`);
		}
	}

	if (random(1, 100) > (100+slave.devotion)) {
		if (slave.fetish !== "boobs" && slave.energy <= 95 && slave.behavioralFlaw === "none") {
			if (V.PC.vagina >= 0 && V.PC.dick === 0) {
				r.push(`Being manhandled and used by you has given ${him} a <span class="flaw gain">hatred of women.</span>`);
				slave.behavioralFlaw = "hates women";
			} else {
				r.push(`Being manhandled and used has given ${him} a <span class="flaw gain">hatred of men.</span>`);
				slave.behavioralFlaw = "hates men";
			}
		}
	} else if (random(1, 100) > (110-slave.devotion)) {
		if (slave.fetish === "none" &&
		(slave.behavioralFlaw !== "hates men" || V.PC.dick === 0) &&
		(slave.behavioralFlaw !== "hates women" || V.PC.dick > 0)
		) {
			r.push(`Having attention and love lavished on ${his} boobs by ${his} ${getWrittenTitle(slave)} has ${him} thinking of ${his} <span class="fetish gain">breasts as sexual organs.</span>`);
			slave.fetish = "boobs";
			slave.fetishKnown = 1;
		}
	}

	if (slave.lactation > 0) {
		slave.lactationDuration = 2;
		slave.boobs -= slave.boobsMilk;
		slave.boobsMilk = 0;
	} else {
		r.push(induceLactation(slave));
	}

	if (hasAnyLegs(slave)) {
		switch (slave.assignment) {
			case "work in the dairy":
				r.push(`${He} goes off to carefully wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage`);
				} else {
					r.push(`chest`);
				}
				r.push(`to keep production in ${V.dairyName} nice and sanitary.`);
				break;
			case "work as a farmhand":
				r.push(`${He} goes off to carefully wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage`);
				} else {
					r.push(`chest`);
				}
				r.push(`to make sure ${he} doesn't taint the food in ${V.farmyardName}.`);
				break;
			case "whore":
				r.push(`${He} heads off to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage`);
				} else {
					r.push(`chest`);
				}
				r.push(`before ${he} returns to prostituting ${himself}.`);
				break;
			case "work in the brothel":
				r.push(`${He} goes to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage,`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage,`);
				} else {
					r.push(`chest,`);
				}
				r.push(`even though it's likely to be splashed with customers' cum soon after ${he} returns to work.`);
				break;
			case "serve the public":
				r.push(`${He} heads off to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage`);
				} else {
					r.push(`chest`);
				}
				r.push(`before ${he} goes back out to fuck passersby.`);
				break;
			case "serve in the club":
				r.push(`${He} goes to beautify ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage`);
				} else {
					r.push(`chest`);
				}
				r.push(`so it can again serve as an ornament to ${V.clubName}.`);
				break;
			case "work as a servant":
				r.push(`${He} rushes to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage,`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage,`);
				} else {
					r.push(`chest,`);
				}
				r.push(`afraid ${he}'s fallen behind on the chores while you used ${him}.`);
				break;
			case "work as a nanny":
				r.push(`${He} rushes to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage,`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage,`);
				} else {
					r.push(`chest,`);
				}
				r.push(`before hurrying to continue taking care of the children in ${V.nurseryName}.`);
				break;
			case "rest":
				r.push(`${He} stumbles off to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage`);
				} else {
					r.push(`chest`);
				}
				r.push(`before crawling back into bed.`);
				break;
			case "be the Schoolteacher":
				r.push(`${He} heads off to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage`);
				} else {
					r.push(`chest`);
				}
				r.push(`before ${he} returns to ${his} classes.`);
				break;
			case "get milked":
				r.push(`${He} hurries off to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage`);
				} else {
					r.push(`chest`);
				}
				if (slave.lactation > 0) {
					r.push(`before going to get ${his} uncomfortably milk-filled tits drained.`);
				} else {
					r.push(`and then rests until ${his} balls are ready to be drained again.`);
				}
				break;
			case "please you":
				r.push(`${He} hurries off to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage`);
				} else {
					r.push(`chest`);
				}
				r.push(`before returning to await use, as though nothing had happened.`);
				break;
			case "be a subordinate slave":
				r.push(`${He} moves off to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage,`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage,`);
				} else {
					r.push(`chest,`);
				}
				r.push(`though it's only a matter of time before another slave decides to play with ${his} tits.`);
				break;
			case "be a servant":
				r.push(`${He} hurries off to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage,`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage,`);
				} else {
					r.push(`chest,`);
				}
				r.push(`since ${his} chores didn't perform themselves while you titfucked ${him}.`);
				break;
			case "be your Head Girl":
				r.push(`${He} hurries off to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage,`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage,`);
				} else {
					r.push(`chest,`);
				}
				r.push(`worried that ${his} charges got up to trouble while ${he} had ${his} breasts around your cock.`);
				break;
			case "guard you":
				r.push(`${He} hurries off to wash ${his}`);
				if (slave.boobs > 1500) {
					r.push(`acre of cleavage`);
				} else if (slave.boobs > 500) {
					r.push(`generous cleavage`);
				} else {
					r.push(`chest`);
				}
				r.push(`so that you will be unguarded for as little time as possible.`);
		}
	}
	App.Events.addParagraph(node, r);
	return node;
};

repo_name: Elohiem/fc

license: mit


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

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

	addPartner(slave, -1);

	r.push(`You call ${him} over so you can`);
	if (!canDoVaginal(slave)) {
		r.push(`use ${his} sole fuckhole.`);
	} else if (slave.vagina > 3) {
		r.push(`fuck ${his} gaping holes.`);
	} else if (slave.vagina > 2) {
		r.push(`fuck ${his} loose holes.`);
	} else if (slave.vagina === 2) {
		r.push(`use ${his} whorish holes.`);
	} else if (slave.vagina === 1) {
		r.push(`use ${his} tight holes.`);
	} else if (slave.vagina === 0 || slave.anus === 0) {
		r.push(`take ${his} virginity.`);
	}

	if (slave.vagina !== -1) {
		if (slave.vaginaTat === "tribal patterns") {
			r.push(`The tattoos on ${his} abdomen certainly draw attention there.`);
		} else if (slave.vaginaTat === "scenes") {
			r.push(`The tattoos on ${his} abdomen nicely illustrate what you mean to do to ${him}.`);
		} else if (slave.vaginaTat === "degradation") {
			r.push(`The tattoos on ${his} abdomen are asking you to, after all.`);
		} else if (slave.vaginaTat === "lewd crest") {
			r.push(`The crest on ${his} abdomen screams debauchery and implores you to use ${him}.`);
		}
	}

	if (slave.vaginaPiercing > 1) {
		r.push(`${His} pierced lips and clit have ${him} nice and wet.`);
		if (slave.dick !== 0) {
			r.push(`Metal glints all up and down ${his} cock.`);
		}
	} else if (slave.vaginaPiercing === 1) {
		r.push(`${His} pierced clit has ${his} nice and moist.`);
		if (slave.dick !== 0) {
			r.push(`Metal glints at the head of ${his} cock.`);
		}
	}

	if (slave.anusPiercing > 1) {
		r.push(`The ring of stud piercings around ${his} anus should massage you delightfully as you sodomize ${him}.`);
	} else if (slave.anusPiercing === 1) {
		r.push(`${His} perineum piercing has a big ring in it, which you should be able to feel when you hilt yourself in ${his} ass.`);
	}

	if (slave.anusTat !== 0 && slave.anusTat !== 4) {
		r.push(`${His} anus is invitingly bleached,`);
		if (slave.vagina > -1) {
			r.push(`which is appropriate: rather than looking like ${he} has a hole for fucking and an ass, it looks like ${he} has two fuckholes.`);
		} else {
			r.push(`making ${his} sole fuckable hole look nice and natural.`);
		}
	}

	if (slave.vagina === 0 && slave.anus === 0 && canDoVaginal(slave)) {
		if (V.PC.dick === 0) {
			r.push(`You step into a strap-on, lubricate it, and break in ${his} holes in quick succession.`);
		} else {
			r.push(`Brooking no resistance, you take ${his} virginity and then break in ${his} virgin butt.`);
		}
		if (slave.devotion > 50) {
			r.push(`You ease yourself into ${his} pussy before gradually working your way into ${his} ass and alternate between the two holes while ${he} begins to moan. In just a few minutes, ${he} has lost ${his} virginity and been assfucked for the first time. ${He} submits utterly to your spoilage of ${his} innocence and thanks you meekly for introducing ${him} to proper sexual slavery. ${His} holes have been broken in.`);
			slave.devotion += 10;
		} else if (slave.devotion > 20) {
			r.push(`You ease yourself into ${his} pussy before gradually working your way into ${his} ass and alternate between the two holes while ${he} begins to moan. In just a few minutes, ${he} has lost ${his} virginity and been assfucked for the first time. ${He}'s so bewildered by the pain and novelty that all ${he} feels is a little fear of further use. ${His} holes have been broken in.`);
			slave.trust -= 5;
		} else {
			r.push(`You force yourself into ${his} pussy before gradually working your way into ${his} ass. ${He} sobs and cries with disgust while you alternate between the two holes. In just a few minutes, ${he} has lost ${his} virginity to rape and ${his} anal virginity to a rough buttfuck. To say ${he} resents you and fears further abuse would be an understatement. ${His} holes have been broken in.`);
			slave.devotion -= 10;
			slave.trust -= 10;
		}
		r.push(VCheck.Both(slave, 1));
	} else if (slave.vagina === 0 && canDoVaginal(slave)) {
		if (slave.devotion > 20) {
			r.push(`${He} accepts your orders without comment and presents ${his} virgin pussy for defloration${(V.PC.dick === 0) ? `, watching with some small trepidation as you don a strap-on` : ``}. You gently ease into ${his} pussy before gradually increasing the intensity of your thrusts into ${him}. Before long, ${he}'s moaning loudly as you pound away. Since ${he} is already well broken, this new connection with ${his} ${getWrittenTitle(slave)} increases ${his} devotion to you. ${His} pussy has been broken in.`);
			slave.devotion += 10;
		} else if (slave.devotion >= -20) {
			r.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.`);
			if (V.PC.dick === 0) {
				r.push(`${His} lower lip quivers with trepidation as ${he} watches you don a strap-on and maneuver to fuck ${his} virgin hole.`);
			}
			r.push(`You gently ease into ${his} pussy before gradually increasing the intensity of your thrusts into ${him}. Before long, ${he}'s moaning as you pound away. Nevertheless, this new connection with ${his} ${getWrittenTitle(slave)} increases ${his} devotion to you. ${His} pussy has been broken in, and ${he} is fearful that sex will continue to be painful.`);
			slave.devotion += 5;
			slave.trust -= 5;
		} else {
			r.push(`As you anticipated, ${he} refuses to give you ${his} virginity. And as you expected, ${he} is unable to resist you. ${He} cries as`);
			if (V.PC.dick === 0) {
				r.push(`your strap-on`);
			} else {
				r.push(`your cock`);
			}
			r.push(`opens ${his} fresh, tight hole. You force your way into ${his} pussy and continue thrusting into ${him}. ${He} sobs and cries with horror as you pound away. The rape decreases ${his} devotion to you. ${His} pussy has been broken in, and ${he} fears further abuse.`);
			slave.devotion -= 10;
			slave.trust -= 15;
		}
		r.push(VCheck.Vaginal(slave, 1));
	} else if (slave.anus === 0) {
		if (slave.devotion > 20) {
			r.push(`${He} accepts your orders without comment and presents ${his} virgin anus for defloration. You`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`gently sodomize ${him}. You gently ease yourself into ${his} butthole and gradually speed up your thrusts while ${he} slowly learns to move ${his} hips along with you. Since ${he} is already well broken, this new connection with ${his} ${getWrittenTitle(slave)} increases ${his} devotion to you. ${His} tight little ass has been broken in.`);
			slave.devotion += 4;
		} else if (slave.devotion >= -20) {
			r.push(`${He} is clearly unhappy at the idea of taking a dick up ${his} butt. ${He} obeys orders anyway, and lies there wincing and moaning as you`);
			if (V.PC.dick === 0) {
				r.push(`don a strap-on and`);
			}
			r.push(`fuck ${his} ass. <span class="virginity loss">${His} tight little ass has been broken in,</span> and ${he} <span class="trust dec">fears further anal pain.</span>`);
			slave.trust -= 5;
		} else {
			r.push(`${He} is appalled at the idea of taking it up the ass${(V.PC.dick === 0) ? ` and cries with fear as you don a strap-on` : ``}. ${He} does anyway though, sobbing into the cushions`);
			if (hasAnyArms(slave)) {
				r.push(`while you hold ${his} ${hasBothArms(slave) ? `arms` : `arm`} behind ${him}`);
			}
			r.push(r.pop() + `.`);
			r.push(`You force yourself into ${his} butthole. ${He} sobs and cries with disgust while you continue thrusting into ${his} ass. The painful anal rape decreases ${his} devotion to you. ${His} tight little ass has been broken in, and ${he} is terrified of further anal pain.`);
			slave.devotion -= 5;
			slave.trust -= 5;
		}
		r.push(VCheck.Anal(slave, 1));
	} else if (slave.devotion < -20) {
		if (V.PC.dick === 0) {
			r.push(`You don a cruelly large strap-on, and you do it so ${he} can`);
			if (canSee(slave)) {
				r.push(`see`);
			} else if (canHear(slave)) {
				r.push(`hear`);
			} else {
				r.push(`notice`);
			}
			r.push(`it.`);
		}
		r.push(`${He} tries to refuse you, so you throw ${him} across the back of the couch next to your desk with ${his}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`ass in the air. You finger ${his} anus`);
		if (slave.vagina !== -1) {
			r.push(`while fucking ${his} pussy`);
		} else if (hasBothLegs(slave)) {
			r.push(`while frotting ${his} thighs`);
		}
		r.push(`for a bit and then switch to ${his} now-ready anus. ${He} sobs as you penetrate ${his} rectum.`);
		if (slave.dick !== 0 && canAchieveErection(slave)) {
			if (slave.prostate === 0) {
				r.push(`${He} lacks a prostate, denying ${him} any real pleasure. ${His} dick stays flaccid as you rape ${him}.`);
			} else if (slave.chastityPenis === 1) {
				r.push(`Despite ${his} unwillingness to be sodomized, the prostate stimulation starts to give ${him} an erection, which ${his} dick chastity makes horribly uncomfortable. ${He} bucks with the pain, ${his} asshole spasming delightfully.`);
			} else {
				r.push(`Despite ${his} unwillingness to be sodomized, the prostate stimulation gives ${him} an erection. ${He}'s mortified that ${he} would get hard while being anally raped.`);
			}
		} else if (slave.chastityPenis === 1) {
			r.push(`${His} dick chastity keeps ${his} bitch cock hidden away while you use ${his} anus like a pussy.`);
		} else if (slave.dick !== 0) {
			r.push(`${His} flaccid dick is ground into the back of the couch as you rape ${him}.`);
		}
		r.push(VCheck.Both(slave, 1));
	} else if (slave.devotion <= 50) {
		r.push(`You throw ${him} across the back of the couch next to your desk with ${his} ass in the air${(V.PC.dick === 0) ? `, and don a strap-on` : ``}. You finger ${his}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`ass while`);
		if (slave.vagina !== -1) {
			r.push(`fucking ${his} pussy`);
		} else {
			r.push(`frotting ${his} thighs`);
		}
		r.push(`for a bit and then switch to ${his} now-ready anus.`);
		if (slave.anus === 1) {
			r.push(`${His} ass is so tight that you have to work yourself in.`);
		} else if (slave.anus === 2) {
			r.push(`Your`);
			if (V.PC.dick === 0) {
				r.push(`fake dick`);
			} else {
				r.push(`cock`);
			}
			r.push(`slides easily up ${his} ass.`);
		} else {
			r.push(`You slide into ${his} already-gaping asspussy with ease.`);
		}
		r.push(`${He} gasps as you penetrate ${his} rectum, but you timed the switch so that ${he} was on the verge of orgasm, and ${he} comes immediately.`);
		if (slave.dick !== 0 && canAchieveErection(slave)) {
			if (slave.chastityPenis) {
				r.push(`${He} managed to stay soft within ${his} dick chastity, but ${he} dribbled a lot of precum onto the couch. You make ${his} lick it up, and ${he} obeys, shuddering with unsatisfied arousal.`);
			} else {
				r.push(`${His} cock spatters the couch with cum, and you make ${his} lick it up.`);
			}
		} else if (slave.clit > 2) {
			r.push(`${His} clit is so large that it bobs slightly with each thrust.`);
		}
		r.push(VCheck.Both(slave, 1));
	} else {
		if (hasAnyLegs(slave)) {
			r.push(`${He} kneels on the floor`);
		} else {
			r.push(`You lay ${him} on the floor`);
		}
		r.push(`so you can take ${him} at will${(V.PC.dick === 0) ? `, and don a strap-on` : ``}. You finger ${his}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`ass while`);
		if (canDoVaginal(slave)) {
			r.push(`fucking ${his} pussy`);
		} else {
			r.push(`frotting ${his}`);
		}
		r.push(`for a bit and then switch to ${his} now-ready anus.`);
		if (slave.anus === 1) {
			r.push(`${His} ass is so tight that you have to work yourself in.`);
		} else if (slave.anus === 2) {
			r.push(`Your cock slides easily up ${his} ass.`);
		} else {
			r.push(`You slide into ${his} already-gaping asspussy with ease.`);
		}
		r.push(`You fuck ${him} there for a while before repeatedly pulling out and stuffing yourself back in. ${He} moans each time you fill`);
		if (canDoVaginal(slave)) {
			r.push(`a`);
		} else {
			r.push(his);
		}
		r.push(`waiting hole.`);
		if (slave.dick !== 0 && canAchieveErection(slave)) {
			if (slave.chastityPenis === 1) {
				r.push(`Whenever ${he} starts to get hard, ${his} dick chastity gives ${him} an awful twinge of pain. You do your best to be up ${his} butt when this happens so you can experience the resulting spasm.`);
			} else {
				r.push(`Every time you penetrate, ${his} erect dick jerks up and slaps ${his} stomach.`);
			}
		} else if (slave.dick !== 0) {
			if (slave.chastityPenis === 1) {
				r.push(`${His} dick chastity keeps ${his} girly bitchclit hidden, just like it belongs.`);
			} else {
				r.push(`Every time you penetrate, ${his} limp dick flops around lamely.`);
			}
		} else if (slave.clit > 2) {
			r.push(`${His} clit is so large that it bobs slightly with each thrust.`);
		}
		r.push(VCheck.Both(slave, 1));
	}

	if (slave.bellyPreg >= 1500) {
		r.push(`The poor ${girl}'s pregnant belly makes taking a rough fuck in both ${his} holes uncomfortable for ${him}.`);
	} else if (slave.bellyImplant >= 1500) {
		r.push(`The poor ${girl}'s implant filled belly makes taking a rough fuck in both ${his} holes uncomfortable for ${him}.`);
	} else if (slave.bellyFluid >= 1500) {
		r.push(`The poor ${girl}'s sloshing belly makes taking a rough fuck in both ${his} holes uncomfortable for ${him}, though the lewd jiggling the pounding sends through it is quite a sight.`);
	}

	if (slave.anusTat === "scenes" && slave.anus === 1) {
		r.push(`As you fucked ${his} butt, the decorative pattern around ${his} ass stretched open. When you pull out, ${his} momentary gape closes the pattern up quickly.`);
	} else if (slave.anusTat === "scenes") {
		r.push(`As you fucked ${his} butt, the decorative pattern around ${his} ass stretched open. When you pull out, ${his} gape leaves the pattern distorted.`);
	} else if (slave.anusTat === "degradation") {
		r.push(`As you fucked ${his} butt, the offensive language around ${his} ass stretched and distorted.`);
	}

	if (random(1, 100) > (100+slave.devotion)) {
		if (slave.fetish !== "buttslut" && slave.energy <= 95 && slave.sexualFlaw !== "hates penetration") {
			r.push(`Being brutally used has given ${him} a <span class="flaw gain">hatred of penetration.</span>`);
			slave.sexualFlaw = "hates penetration";
		}
	} else if (random(1, 100) > (110-slave.devotion)) {
		if (slave.fetish === "none" && slave.sexualFlaw !== "hates penetration") {
			r.push(`Orgasming to your use of ${his} fuckhole <span class="fetish gain">has ${him} eager for more buttsex.</span>`);
			slave.fetish = "buttslut";
			slave.fetishKnown = 1;
		}
	}

	if (V.PC.dick !== 0) {
		if (slave.cervixImplant === 2 || slave.cervixImplant === 3) {
			slave.bellyImplant += random(10, 20);
		}

		if (slave.anus > 3) {
			r.push(`${His} gaping hole drips your cum right out again.`);
		} else if (slave.anus > 2) {
			r.push(`Cum drips out of ${his} loose hole.`);
		} else if (slave.anus === 2) {
			r.push(`Cum drips out of ${his} loosened anus.`);
		} else if (slave.anus === 1) {
			r.push(`${His} still-tight ass keeps your load inside ${him}.`);
		}

		if (canMove(slave) && V.postSexCleanUp > 0) {
			switch (slave.assignment) {
				case "whore":
					r.push(`${He} heads to the bathroom to clean ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes before returning to selling them publicly.`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole before returning to selling it publicly.`);
					} else {
						r.push(`face before returning to selling ${his} mouth publicly.`);
					}
					break;
				case "serve the public":
					r.push(`${He} heads to the bathroom to clean ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes before returning to offering it for free.`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole before returning to offering it for free.`);
					} else {
						r.push(`face before returning to offering ${his} mouth for free.`);
					}
					break;
				case "rest":
					r.push(`${He} stumbles to the bathroom to clean ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole`);
					} else {
						r.push(`face`);
					}
					r.push(`before crawling back into bed.`);
					break;
				case "be the Schoolteacher":
					r.push(`${He} heads to the bathroom to clean ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole`);
					} else {
						r.push(`face`);
					}
					r.push(`before ${he} returns to teaching ${his} classes.`);
					break;
				case "get milked":
					r.push(`${He} hurries to the bathroom to clean ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole`);
					} else {
						r.push(`face`);
					}
					if (slave.lactation > 0) {
						r.push(`before going to get ${his} uncomfortably milk-filled tits drained.`);
					} else {
						r.push(`and then rests until ${his} balls are ready to be drained again.`);
					}
					break;
				case "please you":
					r.push(`${He} hurries to the bathroom to clean ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole`);
					} else {
						r.push(`face`);
					}
					r.push(`before returning to await your next use of ${his} body, as though nothing had happened.`);
					break;
				case "be a subordinate slave":
					r.push(`${He} moves to the bathroom to clean ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes,`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole,`);
					} else {
						r.push(`face,`);
					}
					r.push(`though it's only a matter of time before another slave decides to play with ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`pussy or asshole.`);
					} else if (canDoVaginal(slave)) {
						r.push(`pussy.`);
					} else if (canDoAnal(slave)) {
						r.push(`asshole.`);
					} else {
						r.push(`face.`);
					}
					break;
				case "be a servant":
					r.push(`${He} hurries to the bathroom to clean ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes,`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole,`);
					} else {
						r.push(`face,`);
					}
					r.push(`since ${his} chores didn't perform themselves while you used ${him}.`);
					break;
				case "be your Head Girl":
					r.push(`${He} hurries to the bathroom to clean ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes,`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole,`);
					} else {
						r.push(`face,`);
					}
					r.push(`worried that ${his} charges got up to trouble while you had your cock in ${him}.`);
					break;
				case "guard you":
					r.push(`${He} hurries off to wash ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole`);
					} else {
						r.push(`face`);
					}
					r.push(`so you'll be unguarded for as little time as possible.`);
					break;
				case "work in the brothel":
					r.push(`${He} goes to wash ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole`);
					} else {
						r.push(`face`);
					}
					r.push(`so ${his} next customer can have the illusion that he's the first to use it today.`);
					break;
				case "serve in the club":
					r.push(`${He} goes to wash and delicately perfume ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes so they`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole so it`);
					} else {
						r.push(`face so it`);
					}
					r.push(`can gratify the finest citizen.`);
					break;
				case "work in the dairy":
					r.push(`${He} goes off to carefully wash ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole`);
					} else {
						r.push(`face`);
					}
					r.push(`to avoid besmirching the nice clean dairy.`);
					break;
				case "work as a farmhand":
					r.push(`${He} goes off to wash ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole`);
					} else {
						r.push(`face`);
					}
					r.push(`to avoid tainting the food in ${V.farmyardName}.`);
					break;
				case "work as a servant":
					r.push(`${He} rushes to wash ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes,`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole,`);
					} else {
						r.push(`face,`);
					}
					r.push(`impatient to get back to ${his} undiminished chores.`);
					break;
				case "work as a nanny":
					r.push(`${He} rushes to wash ${his}`);
					if (canDoVaginal(slave) && canDoAnal(slave)) {
						r.push(`holes,`);
					} else if (canDoVaginal(slave) || canDoAnal(slave)) {
						r.push(`fuckhole,`);
					} else {
						r.push(`face,`);
					}
					r.push(`before hurrying to continue taking care of the children in ${V.nurseryName}.`);
			}
		}
	}
	App.Events.addParagraph(node, r);
	return node;
};


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

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

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

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

	r.push(`You tell ${slave.slaveName} to`);
	if (!hasAnyLegs(slave)) {
		r.push(`have another slave set ${him} down on 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.`);
	}

	if (slave.fetish === "mindbroken" && slave.relationship !== -3) {
		r.push(`${He} complies mechanically. ${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} senses the intense look from the ${womanP} ${he} loves and finds it overwhelming, and after a moment glances away.`);
		}
		r.push(`${He} blushes furiously.`);
	} else if (slave.relationship === -3) {
		if (slave.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} blank ${App.Desc.eyesColor(slave)}. ${He} doesn't react.`);
		} else if (slave.devotion+slave.trust >= 175) {
			r.push(`${He} happily complies, eager to be close to the ${womanP} who married ${him}. Once ${he}'s close, you hold ${his} face in your palms and look into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to affirming, and looks down with a`);
			if (canSee(slave)) {
				r.push(`smile, running ${his} eyes over your`);
				if (V.PC.boobs >= 300) {
					r.push(`bosom.`);
				} else {
					r.push(`chest.`);
				}
			} else {
				r.push(`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 look into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s forcibly married to disturbing, and`);
			if (canSee(slave)) {
				r.push(`breaks eye contact.`);
			} else {
				r.push(`turns ${his} face away.`);
			}
		} else if (slave.devotion < -20) {
			r.push(`${He} complies out of fear. Once ${he}'s close, you hold ${his} shaking face in your palms and look into ${his} teary ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s forcibly married to terrifying, and`);
			if (canSee(slave)) {
				r.push(`breaks eye contact.`);
			} else {
				r.push(`turns ${his} face away.`);
			}
		} else {
			r.push(`${He} complies obediently. Once ${he}'s close, you hold ${his} face in your palms and look 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`);
			if (canSee(slave)) {
				r.push(`smile, running ${his} eyes over your`);
				if (V.PC.boobs >= 300) {
					r.push(`bosom.`);
				} else {
					r.push(`chest.`);
				}
			} else {
				r.push(`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 look 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. ${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 look 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 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 look 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 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 look into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and ${he} looks down 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 look into ${his} ${App.Desc.eyesColor(slave)}. ${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 look into ${his} ${App.Desc.eyesColor(slave)}. ${He} stares back, but after a few moments ${he} loses the contest of wills and looks down.`);
	}

	r.push(`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 (slave.lipsTat !== 0) {
		r.push(`Your fingers trace ${his} facial tattoos, slowly picking out the patterns against ${his} ${slave.skin} skin.`);
	}
	if (slave.lipsPiercing+slave.tonguePiercing > 2) {
		r.push(`You touch each of ${his} facial piercings, one by one, feeling the hard metal contrast with ${his} pliant flesh.`);
	}
	r.push(`Then, you gently tilt ${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(`head back 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 use your fingers and thumbs to slowly slide along ${his} mouth, ${his} chin, ${his} cheeks then around ${his} face. You use a deft touch to thoroughly explore the shape of ${his}`);
	if (slave.face > 95) {
		r.push(`gorgeous`);
	} else if (slave.face > 10) {
		r.push(`nice`);
	} else if (slave.face >= -10) {
		r.push(`cute`);
	} else if (slave.face >= -40) {
		r.push(`fair`);
	} else {
		r.push(`prominent`);
	}
	r.push(`cheekbones. Grazing ${his} temple and brushing ${his} forehead simultaneously, you smoothly motion along ${his} eyelids and nose, and tenderly stroke ${his} face with both hands as you take ${his} head lightly and trace around it, gently massaging as you go. You work your way down, slowly and gradually, along ${his} neck with one hand, then the other, briefly pausing before continuing your path down to ${his} shoulders and`);
	if (slave.fetish !== "mindbroken") {
		r.push(`${he} starts to gasp as`);
	} else {
		r.push(`starts to shudder as`);
	}
	r.push(`you slide your hands down ${his} side, across ${his} back and along ${his} belly taking every moment to savor the contours of ${his} body before going back up again to ${his} face.`);

	if (slave.fetish === "mindbroken") {
		r.push(`${His} posture doesn't change. ${He} initially only reacts slightly to your physical touch but then stops reacting completely. When you stop, ${his} ${App.Desc.eyesColor(slave)} track the movements of your hands briefly but then stare blankly ahead of ${him}, awaiting further use of ${his} body.`);
	} else if (slave.relationship === -2) {
		r.push(`${His} eyes gradually close and ${he} slowly leans ${his} head back, relaxing as ${he} feels your caress. ${He} gently gasps as ${he} feels your warm`);
		if (V.PC.title === 1) {
			r.push(`manly`);
		} else {
			r.push(`feminine`);
		}
		r.push(`hand. When you finally stop gently caressing ${him}, ${his} eyes remain closed and ${his} mouth still in a rapturous shape for a moment before ${he} slowly opens ${his} eyes and smiles at you, ${he} has an eager look on ${his} face.`);
		if (hasAnyArms(slave)) {
			r.push(`A hand reaches dumbly up to ${his} face mimicking your last movements.`);
		}
		r.push(``);
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate love with ${his} ${App.Desc.eyesColor(slave)}, 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} ${App.Desc.eyesColor(slave)}.`);
		} 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) {
		r.push(`As you start to touch ${his}`);
		if (slave.face > 95) {
			r.push(`gorgeous`);
		} else if (slave.face > 10) {
			r.push(`lovely`);
		} else if (slave.face >= -10) {
			r.push(`pretty`);
		} else if (slave.face >= -40) {
			r.push(`homely`);
		} else {
			r.push(`ugly`);
		}
		r.push(`face, ${he} smiles at you and takes your hand in ${hers}, following its movements. ${He} tries hard to stop ${himself} from losing ${himself} in your masterful 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.`);
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate excitement with ${his} ${App.Desc.eyesColor(slave)}, 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 excitement with ${his} ${App.Desc.eyesColor(slave)}.`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs that ${he} liked that.`);
		} else {
			r.push(
				Spoken(slave, `"That was fun, ${Master},"`),
				`${he} ${say}s cheerfully.`
			);
		}
		r.push(`${He} looks at you, ${his} eyes almost begging you to give ${him} more than your mere caress.`);
	} else if (slave.devotion > 50 && slave.fetish === "cumslut" && slave.fetishKnown === 1 && slave.fetishStrength > 60) {
		r.push(`${He} stiffens at your touch but slowly relaxes to your fingers on ${his} face. As you move your fingers along ${his} lips, ${he} reacts almost as though ${he}'s receiving oral. ${He} starts to gently suck your fingers, moaning into your hand and pressing ${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.`);
		}
		if (slave.teeth === "pointy") {
			r.push(`${He}'s very careful to avoid spearing your finger with ${his} sharp teeth.`);
		} else if (slave.teeth === "fangs") {
			r.push(`${He} holds perfectly still so you may trace ${his} fangs without getting poked.`);
		} else if (slave.teeth === "fang") {
			r.push(`You give ${his} lone fang a little extra attention as you work.`);
		}
		r.push(`${He} achieves a weak orgasm before you stop caressing ${him}.`);
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate undiminished lust with ${his} ${App.Desc.eyesColor(slave)}, 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} ${App.Desc.eyesColor(slave)}.`);
		} 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.`
			);
		}
		r.push(`${He} looks at you as if ${he} wants more than your hands touching ${him}.`);
	} else if (slave.devotion > 50) {
		r.push(`${He} accepts your touch with devotion, leaning ${his} head back at your gentle caress along ${his} face. ${He} leans ${his} body forward, pressing ${himself} against you, and you feel the intense heat from ${his} body against your`);
		const firm = V.PC.boobsImplant/V.PC.boobs >= .60 ? "firm" : "soft";
		if (V.PC.boobs >= 1400) {
			r.push(`expansive ${firm} chest.`);
		} else if (V.PC.boobs >= 1200) {
			r.push(`huge ${firm} breasts.`);
		} else if (V.PC.boobs >= 1000) {
			r.push(`big ${firm} breasts.`);
		} else if (V.PC.boobs >= 800) {
			r.push(`soft breasts.`);
		} else if (V.PC.boobs >= 500) {
			r.push(`breasts.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`small chest.`);
		} else if (V.PC.title > 0) {
			r.push(`manly chest.`);
		} else {
			r.push(`flat chest.`);
		}
		r.push(`${He} gradually closes ${his} eyes and when you finally stop,`);
		if (hasAnyArms(slave)) {
			r.push(`${he} runs ${his} hand delightfully across ${his} face where you last touched ${him},`);
		} else {
			r.push(`there is`);
		}
		r.push(`a euphoric look on ${his} ${slave.skin} face.`);
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate devotion with ${his} ${App.Desc.eyesColor(slave)}, 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} ${App.Desc.eyesColor(slave)}.`);
		} 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} looks 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(`${He} accepts your touch willingly. As you are so close to ${him}, you 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 across ${his} face. When you finally move your hand away, ${his} ${App.Desc.eyesColor(slave)} gaze into yours searchingly, looking for answers that are not there.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His} eyes beg for an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs hesitantly, asking if that's it.`);
		} else {
			r.push(
				`${He} asks hesitantly,`,
				Spoken(slave, `"I-is that it, ${Master}?"`)
			);
		}
	} else if (slave.devotion >= -20 && slave.trust < -20) {
		r.push(`${He} shakes at your touch fearfully. As you move your hand along ${his} unresisting face, ${his} eagerness to avoid punishment leads ${him} to stiffen, ${his} nervousness is made apparent. You continue stroking ${his} cheek, enjoying ${his} fear, and the physical intimacy slowly does its work. ${He} starts to relax, ${his} resistance easing and ${his} eyes start to close. When finally move your hand away, ${he} looks at you for a long moment, ${his} eyes darting up at you, 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} eyes beg for an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs hesitantly, asking if that's it.`);
		} else {
			r.push(
				`${He} asks hesitantly,`,
				Spoken(slave, `"I-is that it, ${Master}?"`)
			);
		}
	} else if (slave.trust < -50) {
		r.push(`${He} is nearly frozen with fear, and does not resist as you start to caress ${his} face. In fact, ${he} barely reacts at all. ${He} stares at you as you move your fingers across ${his} stiff face, but it's like touching a statue. ${He} is so filled with terror that ${he} remains stiff 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} stares at you in utter incomprehension.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His} eyes beg for an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs spastically, begging fearfully to know if that's it.`);
		} else {
			r.push(
				`${He} asks nervously,`,
				Spoken(slave, `"I-is that it, ${Master}?"`)
			);
		}
		r.push(`Then ${he} cringes.`);
	} else {
		r.push(`${He} reflexively turns away from you, but you catch ${his} head with one hand and slowly but gently move your other hand along ${his} face. Spluttering, ${he} leans backwards, but you tip forward with ${him} and pin ${him} against your desk, not stopping your gentle touch on ${his} head. ${He} tries to wriggle out of your grasp desperately, but ${his} struggles slowly subside as ${he} realizes that you're not taking this any farther. When you bore of it and move your hand away, ${he} stares at you in utter incomprehension.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His} eyes demand an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs irritably, asking whether that's it.`);
		} else {
			r.push(
				`${He} splutters,`,
				Spoken(slave, `"Is that it, ${Master}!?"`)
			);
		}
	}
	App.Events.addParagraph(node, r);
	return node;
};