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

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

	let doMe;

	const belly = bellyAdjective(slave);
	if (slave.bellyAccessory !== "a support band") {
		slave.bellyAccessory = "none";
	}
	let isDone = slave.inflation-1;
	let pregDiscovery = 0;
	r.push(`You call ${him} over and ask ${him} to wait patiently for a moment.`);
	if (slave.fetish === Fetish.MINDBROKEN) {
		r.push(`${He} shows no response as`);
	} else {
		r.push(`${He} barely has time to ponder why you called for ${him} when`);
	}
	r.push(`another slave carries in a pair of`);
	if (slave.inflation === 3) {
		r.push(`one gallon`);
	} else if (slave.inflation === 2) {
		r.push(`two liter`);
	} else {
		r.push(`one liter`);
	}
	r.push(`buckets overflowing with slave food. ${He} is going to eat it all and you're going to enjoy ${him} as ${he} does it.`);

	if (slave.inflation > 1 && slave.preg > 1) {
		r.push(`${He} looks nauseated by the`);
		if (canSee(slave)) {
			r.push(`sight`);
		} else if (canSmell(slave)) {
			r.push(`smell`);
		} else {
			r.push(`very existence`);
		}
		r.push(`of the food.`);
	} else if (slave.fetish === Fetish.SUBMISSIVE && slave.devotion >= -20) {
		r.push(`${He} blushes at the thought of being forced to eat for another's amusement.`);
	} else if (slave.behavioralFlaw === "gluttonous" && slave.devotion >= -20) {
		r.push(`${He}'s awestruck that you approve of ${his} gluttony enough to present ${him} a feast.`);
	} else if (slave.behavioralFlaw === "gluttonous") {
		r.push(`${He}'s hesitant about your intent, but ${he} gives in as ${his} belly begins to growl at the`);
		if (canSee(slave)) {
			r.push(`sight`);
		} else if (canSmell(slave)) {
			r.push(`smell`);
		} else {
			r.push(`anticipation`);
		}
		r.push(`of ${his} waiting meal.`);
	} else if (slave.behavioralFlaw === "anorexic") {
		r.push(`${He} grimaces at the`);
		if (canSee(slave)) {
			r.push(`sight`);
		} else if (canSmell(slave)) {
			r.push(`smell`);
		} else {
			r.push(`thought`);
		}
		r.push(`of the food that will soon be going into ${him}. ${He} knows you won't let it come back up later.`);
	}

	if (canMove(slave)) {
		r.push(`You instruct ${him} to take a seat on your lap and open`);
		if (slave.fetish === Fetish.MINDBROKEN) {
			r.push(`wide, but ${he} remains still and unresponsive. Talking to a broken mind is pointless.`);
		} else {
			r.push(`wide.`);
		}
		if (slave.devotion < -20) {
			r.push(`Opposed to the thought of being forced to eat all that food, ${he} tries to`);
			if (canWalk(slave)) {
				r.push(`step back,`);
			} else {
				r.push(`crawl away,`);
			}
			r.push(`but you catch ${him} and pull ${him} into your lap, wrapping an arm`);
		} else if (slave.fetish === Fetish.SUBMISSIVE) {
			r.push(`${He} meekly settles into your lap and shudders as ${he} feels your dominant hand wrap`);
		} else if (slave.behavioralFlaw === "gluttonous") {
			r.push(`${He} wastes no time getting into position with ${his} mouth agape as you wrap your hand`);
		} else if (slave.devotion <= 20) {
			r.push(`${He} complies without comment and settles ${himself} onto your lap, shuddering slightly as you wrap your arm`);
		} else if (slave.devotion <= 50) {
			r.push(`${He} hesitates but eventually settles onto your lap as you wrap your arm`);
		} else {
			r.push(`${He} eagerly settles ${himself} onto your lap as you wrap your arm`);
		}
	} else if (isAmputee(slave)) {
		if (slave.devotion < -20) {
			r.push(`${He}'s opposed to the thought of being forced to eat all that food, but as an amputee can do nothing about it. You heft ${him} onto your lap, wrapping an arm`);
		} else if (slave.fetish === Fetish.SUBMISSIVE) {
			r.push(`${He}'s opposed to the thought of being forced to eat all that food, but as an amputee can do nothing about it; not that ${he}'d go against your orders anyway. ${He} shudders with pleasure as you heft ${him} onto your lap, wrapping a dominant arm`);
		} else if (slave.behavioralFlaw === "gluttonous") {
			r.push(`${He} can't wait to chow down, but as an amputee can do nothing to get in position. ${He} shudders with anticipation as you heft ${him} onto your lap, wrapping an arm`);
		} else if (slave.devotion <= 20) {
			r.push(`${He}'s hesitant of being force-fed, but as an amputee can do nothing about it. You heft ${him} onto your lap, wrapping your arm`);
		} else if (slave.devotion <= 50) {
			r.push(`${He}'s mildly hesitant of being force-fed, but as an amputee can do nothing about it. You heft ${him} onto your lap, wrapping your arm`);
		} else {
			r.push(`${He} devotedly`);
			if (canSee(slave)) {
				r.push(`looks`);
			} else {
				r.push(`smiles`);
			}
			r.push(`at you as you heft ${him} onto your lap, wrapping your arm`);
		}
	} else {
		r.push(`You inform ${him} ${he}'ll be taking a seat on your lap and opening wide for ${his} meal.`);
		if (slave.devotion < -20) {
			r.push(`${He}'s opposed to the thought of being forced to eat all that food, but since ${he} is immobile, can't escape. You heft ${him} onto your lap, wrapping an arm`);
		} else if (slave.fetish === Fetish.SUBMISSIVE) {
			r.push(`${He} accepts your orders without question. ${He} shudders with pleasure as you heft ${him} onto your lap, wrapping a dominant arm`);
		} else if (slave.behavioralFlaw === "gluttonous") {
			r.push(`${He} eagerly tries to get to your lap faster. ${He} shudders with anticipation as you heft ${him} onto your lap, wrapping your arm`);
		} else if (slave.devotion <= 20) {
			r.push(`${He} complies without comment. You heft ${him} onto your lap, wrapping an arm`);
		} else if (slave.devotion <= 50) {
			r.push(`${He} hesitates for a moment, before demonstrating acceptance. You heft ${him} onto your lap, wrapping an arm`);
		} else {
			r.push(`${He} squirms with excitement as you heft ${him} onto your lap, wrapping an arm`);
		}
	}
	if (slave.fetish === Fetish.MINDBROKEN) {
		r.push(`You reach out and wrap your arms`);
	}

	r.push(`around ${his}`);
	if (slave.weight > 190) {
		r.push(`immensely soft`);
	} else if (slave.belly >= 150000) {
		r.push(belly);
	} else if (slave.weight > 160) {
		r.push(`massive soft`);
	} else if (slave.weight > 130) {
		r.push(`giant soft`);
	} else if (slave.belly >= 1500) {
		r.push(belly);
	} else if (slave.weight > 95) {
		r.push(`huge soft`);
	} else if (slave.weight > 30) {
		r.push(`big soft`);
	} else if (slave.weight > 10) {
		r.push(`soft`);
	} else if (slave.muscles > 95) {
		r.push(`chiseled`);
	} else if (slave.muscles > 30) {
		r.push(`muscular`);
	} else if (slave.muscles > 5) {
		r.push(`firm, ripped`);
	} else {
		r.push(`firm, flat`);
	}
	if (slave.fetish === Fetish.MINDBROKEN) {
		r.push(`belly, pulling ${him} into your lap.`);
	} else {
		r.push(`belly.`);
	}

	r.push(`You hold ${him} tight as you pull ${his} meal closer, dip in a cup and bring it to ${his} lips.`);
	if (slave.fetish === Fetish.MINDBROKEN) {
		r.push(`It takes little effort to get ${him} to gulp down the contents`);
	} else if (slave.devotion < -20) {
		r.push(`${He} struggles in your lap and refuses to open ${his} mouth. You drop the cup back into the bucket and lean in close. You quickly clip ${his} nose shut, eliciting a panicked thrash from the ${girl}.`);
		if (hasAnyLegs(slave)) {
			r.push(`You warn ${him} that ${his} punishment will be severe if ${he} comes that close to kicking over the buckets again.`);
		}
		r.push(`With ${his} mouth forced open, you now have a clear avenue with which to pour the slave food into ${his} mouth. ${He} sputters as ${he} struggles to swallow with ${his} nose shut. After several cups, tears are streaming down ${his} face from the discomfort. Weeping, ${he} implores you to remove the clamp so that ${he} may drink like a good ${girl}.`);
	} else if (slave.fetish === Fetish.SUBMISSIVE) {
		r.push(`${He} submissively drinks the contents and readies ${his} lips for the next,`);
	} else if (slave.behavioralFlaw === "gluttonous") {
		r.push(`${He} hurriedly gulps down the contents and opens wide for the next,`);
	} else if (slave.devotion <= 20) {
		r.push(`${He} wordless drinks the contents,`);
	} else if (slave.devotion <= 50) {
		r.push(`${He} drinks the contents without hesitation,`);
	} else {
		r.push(`${He} happily downs the contents,`);
	}

	if (slave.fetish !== Fetish.MINDBROKEN && slave.devotion < -20) {
		r.push(`You readily comply and waste no time in bring cupful after cupful to ${his} lips.`);
	} else {
		r.push(`so you keep the cupfuls coming.`);
	}

	r.push(`You can feel ${his} ${slave.skin} belly swelling with ${slave.inflationType} as it pushes out against your hand. Once ${he} has downed two liters, you give ${his} bloated belly a slap, eliciting`);
	if (slave.fetish === Fetish.MINDBROKEN) {
		r.push(`a small burp from the broken slave`);
	} else if (slave.devotion < -20) {
		r.push(`a shudder from the groaning slave`);
	} else if (slave.fetish === Fetish.SUBMISSIVE) {
		r.push(`a subtle belch that the moaning slave quickly apologizes for,`);
	} else if (slave.behavioralFlaw === "gluttonous") {
		r.push(`a subtle belch from the moaning slave`);
	} else if (slave.devotion <= 20) {
		r.push(`a small shudder from the bloated slave`);
	} else if (slave.devotion <= 50) {
		r.push(`a small hiccup that the overfilled slave immediately apologizes for,`);
	} else {
		r.push(`a cute burp from the bloated slave, followed by ${his} tongue running over ${his} lips`);
	}
	r.push(`and a little jiggle from ${his} gut.`);

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

	if (slave.pregKnown === 0 && slave.preg > slave.pregData.normalBirth/13.33 && isDone > 0) {
		r.push(`As soon as the next helping enters ${him} you feel something is wrong. ${He} begins to heave,`);
		if (slave.fetish !== Fetish.MINDBROKEN && slave.devotion > 50) {
			r.push(`struggling to keep down the slave food, however ${he} shortly expels the entirety of ${his} stomach across the floor.`);
		} else {
			r.push(`shortly expelling the entirety of ${his} stomach`);
		}
		if (slave.fetish === Fetish.MINDBROKEN) {
			r.push(`all over ${himself} and your lap.`);
		} else if (slave.devotion < -20) {
			r.push(`all over ${himself} and your lap.`);
		} else if (slave.fetish === Fetish.SUBMISSIVE) {
			r.push(`onto your floor.`);
		} else if (slave.behavioralFlaw === "gluttonous") {
			r.push(`all over ${himself} and your lap.`);
		} else if (slave.devotion <= 20) {
			r.push(`all over ${himself} and your lap.`);
		} else if (slave.devotion <= 50) {
			r.push(`across the floor.`);
		}
		r.push(`It didn't seem to be willful,`);
		if (slave.fetish === Fetish.MINDBROKEN) {
			r.push(`not that much is with ${him}, but is still unacceptable.`);
		} else if (slave.devotion < -20) {
			r.push(`given how pathetically ${he} is cowering from your wrath, but is completely unacceptable.`);
		} else if (slave.fetish === Fetish.SUBMISSIVE) {
			r.push(`given how ${he} is begging to clean it up with ${his} tongue, but is completely unacceptable.`);
		} else if (slave.behavioralFlaw === "gluttonous") {
			r.push(`given how ${he} is in tears over the loss of such a meal, but is completely unacceptable.`);
		} else if (slave.devotion <= 20) {
			r.push(`given how ${he} is begging you to try again, but is completely unacceptable.`);
		} else if (slave.devotion <= 50) {
			r.push(`given how disappointed ${he} is in failing you, but is completely unacceptable.`);
		} else {
			r.push(`given how disappointed ${he} is in failing you, but is worrying. Such a good slave shouldn't do such bad things.`);
		}
		pregDiscovery = 1;
	} else {
		if (isDone > 0) {
			isDone--;
			r.push(`But ${he} isn't done`);
			if (slave.fetish === Fetish.MINDBROKEN) {
				r.push(`yet.`);
			} else if (slave.devotion < -20) {
				r.push(`yet.`);
			} else if (slave.fetish === Fetish.SUBMISSIVE) {
				r.push(`yet, not that ${he} minds.`);
			} else if (slave.behavioralFlaw === "gluttonous") {
				r.push(`yet, much to ${his} delight.`);
			} else if (slave.devotion <= 20) {
				r.push(`yet, much to ${his} dismay.`);
			} else if (slave.devotion <= 50) {
				r.push(`yet, not that ${he}'d risk complaining.`);
			} else {
				r.push(`yet, not that ${he}'d complain about fulfilling your desires.`);
			}
			r.push(`More and more you feed ${him}; ${his} belly swelling ever larger and growing even heavier as ${he}`);
			if (slave.fetish === Fetish.MINDBROKEN) {
				r.push(`guzzles`);
			} else if (slave.devotion < -20) {
				r.push(`painstakingly drinks`);
			} else if (slave.fetish === Fetish.SUBMISSIVE) {
				r.push(`diligently drinks`);
			} else if (slave.behavioralFlaw === "gluttonous") {
				r.push(`desperately sucks down`);
			} else if (slave.devotion <= 20) {
				r.push(`diligently drinks`);
			} else if (slave.devotion <= 50) {
				r.push(`diligently drinks`);
			} else {
				r.push(`diligently drinks`);
			}
			r.push(`the slave food. You reposition yourself to bet a better hold on ${his} bulging food baby. As ${he} passes the gallon mark, you give the swollen orb a good jiggle, eliciting`);
			if (slave.fetish === Fetish.MINDBROKEN) {
				r.push(`a burp from the broken slave and tons of motion under your arm.`);
			} else if (slave.devotion < -20) {
				r.push(`a pained burp from the crying slave and tons of motion under your arm.`);
			} else if (slave.fetish === Fetish.SUBMISSIVE) {
				r.push(`a moan of arousal over your control and tons of motion under your arm.`);
			} else if (slave.behavioralFlaw === "gluttonous") {
				r.push(`a load hiccup, tons of motion under your arm, and a plea for more food.`);
			} else if (slave.devotion <= 20) {
				r.push(`a strained burp from the full slave and tons of motion under your arm.`);
			} else if (slave.devotion <= 50) {
				r.push(`a small hiccup, which the bloated slave immediately apologizes for, and tons of motion under your arm.`);
			} else {
				r.push(`a small sigh followed by a request for more, from the bloated slave and tons of motion under your arm.`);
			}
			App.Events.addParagraph(node, r);
			r = [];
		}
		if (isDone > 0) {
			if (slave.fetish === Fetish.MINDBROKEN) {
				r.push(`${He} squirms a little in discomfort, but ${he} still has another gallon to go, so you continue feeding food into ${his} mouth.`);
			} else if (slave.devotion < -20) {
				r.push(`${He} squirms in discomfort, but ${he} still has another gallon to go and ${he} knows it. You remind ${him} of the ways you can torment ${him} in this state so you can continue feeding food into ${his} mouth without too much resistance.`);
			} else if (slave.fetish === Fetish.SUBMISSIVE) {
				r.push(`${He} gets comfortable as ${he} still has another gallon to go and ${he} knows it. Gulping, ${he} opens ${his} mouth in preparation, eager to obey ${his} dom.`);
			} else if (slave.behavioralFlaw === "gluttonous") {
				r.push(`${He} still has another gallon to go and ${he} knows it, so ${he} wastes no time in letting you know ${he}'s ready.`);
			} else if (slave.devotion <= 20) {
				r.push(`${He} begins to struggle when ${he} realizes ${he} still has another gallon to go. Gulping, ${he} opens up as another helping approaches ${his} mouth.`);
			} else if (slave.devotion <= 50) {
				r.push(`${He} still has another gallon to go and ${he} knows it, so ${he} tries ${his} best to get comfortable and give ${his} belly room to grow. Gulping, ${he} diligently opens up for the next serving.`);
			} else {
				r.push(`${He} still has another gallon to go and ${he} knows it, but if ${getWrittenTitle(slave)} wants ${him} to be stuffed like a turkey, ${he}'ll happily comply. ${He} wastes no time in opening up for your next helping.`);
			}
			r.push(`You can feel the pressure growing in ${his} middle as it fills out under your arm more and more. ${He}`);
			if (slave.fetish === Fetish.MINDBROKEN) {
				r.push(`mechanically downs every sip you give ${him} with no concern for ${his} own health.`);
			} else if (slave.devotion < -20) {
				r.push(`struggles to down every sip you give ${him} and pants heavily whenever ${he} gets the chance.`);
			} else if (slave.fetish === Fetish.SUBMISSIVE) {
				r.push(`struggles to down every sip you give ${him} and pants heavily whenever ${he} gets the chance.`);
			} else if (slave.behavioralFlaw === "gluttonous") {
				r.push(`forces down every sip you give ${him} and pants heavily when ${his} mouth isn't full.`);
			} else if (slave.devotion <= 20) {
				r.push(`struggles to down every sip you give ${him} and pants heavily whenever ${he} gets the chance.`);
			} else if (slave.devotion <= 50) {
				r.push(`obediently downs every gulp you give ${him} and pants heavily between helpings.`);
			} else {
				r.push(`devotedly downs every gulp you give ${him} and catches ${his} breath, while being a tease, between helpings.`);
			}
			r.push(`Once the last of the slave food is in ${his} stomach, you give the firm globe a`);
			if (slave.devotion > 20) {
				r.push(`gentle`);
			}
			r.push(`slap, eliciting`);
			if (slave.fetish === Fetish.MINDBROKEN) {
				r.push(`a large belch from the broken slave.`);
			} else if (slave.devotion < -20) {
				r.push(`a large belch and a glare from the straining slave.`);
			} else if (slave.fetish === Fetish.SUBMISSIVE) {
				r.push(`a large belch and a squeak of shame from the submissive slave.`);
			} else if (slave.behavioralFlaw === "gluttonous") {
				r.push(`a large belch and a content sigh from the bloated glutton.`);
			} else if (slave.devotion <= 20) {
				r.push(`a restrained gag from the overfilled slave.`);
			} else if (slave.devotion <= 50) {
				r.push(`a small hiccup from the overfilled slave, which ${he} immediately apologizes for.`);
			} else {
				r.push(`a large belch and a playfully stuck out tongue from the stuffed slave.`);
			}
			r.push(`${His} belly is as taut as a drum; you`);
			if (slave.devotion > 20) {
				r.push(`rub it some more`);
			} else {
				r.push(`pat it several more times`);
			}
			r.push(`as you appreciate its size.`);
			doMe = 1;
			App.Events.addParagraph(node, r);
			r = [];
		}
		r.push(`Knocking the empty buckets aside, you help ${his}`);
		if (slave.fetish === Fetish.MINDBROKEN) {
			r.push(`hiccupping`);
		} else if (slave.devotion < -20) {
			r.push(`hiccupping`);
		} else if (slave.fetish === Fetish.SUBMISSIVE) {
			r.push(`hiccupping`);
		} else if (slave.behavioralFlaw === "gluttonous") {
			r.push(`hiccupping`);
		} else if (slave.devotion <= 20) {
			r.push(`heaving`);
		} else if (slave.devotion <= 50) {
			r.push(`hefty`);
		} else {
			r.push(`hefty`);
		}
		r.push(`bulk onto the couch to recover.`);
		if (slave.fetish === Fetish.MINDBROKEN) {
			r.push(`After a few minutes of rest, and several glares from you when it appears ${his} meal might be coming back up,`);
		} else if (slave.devotion < -20) {
			r.push(`${He}`);
			if (canSee(slave)) {
				r.push(`looks in your eyes,`);
			} else {
				r.push(`faces you,`);
			}
			r.push(`as though almost demanding answers. ${He} looks apprehensive about what you will do next. After a few minutes of rest, and several glares from you when it appears ${his} meal might be coming back up,`);
		} else if (slave.fetish === Fetish.SUBMISSIVE) {
			r.push(`${He}`);
			if (canSee(slave)) {
				r.push(`looks in your eyes;`);
			} else {
				r.push(`faces you;`);
			}
			r.push(`a satisfied smile on ${his} face. ${He} almost looks sad that it's over, though ${his} gurgling middle says otherwise. After a few minutes of rest,`);
		} else if (slave.behavioralFlaw === "gluttonous") {
			r.push(`${He}`);
			if (canSee(slave)) {
				r.push(`looks in your eyes;`);
			} else {
				r.push(`faces you;`);
			}
			r.push(`a satisfied smile on ${his} face. ${He} almost looks sad that it's over, and ${his} stomach audibly grumbles its displeasure that no more food is working down ${his} throat. After a few minutes of rest,`);
		} else if (slave.devotion <= 20) {
			r.push(`${He} looks up at you quizzically, unsure about what you will do next. ${His} meal attempts to come back up on ${him} several times, but ${he} holds it down for fear of punishment should ${he} vomit. After a few minutes of rest,`);
		} else if (slave.devotion <= 50) {
			r.push(`${He} sighs contently, hoping you'll give ${him} more attention. ${His} meal attempts to come back up on ${him} several times, but ${he} dutifully holds it down. After a few minutes of rest,`);
		} else {
			r.push(`${He} sighs contently, hoping you'll give ${him} more attention. ${He} is proud to let you know that you could fit even more in ${him} if you wanted. After a few minutes of rest,`);
		}
		r.push(`you order ${him} to continue stuffing ${himself} to maintain ${his} current size until you say otherwise.`);
		if (slave.fetish !== Fetish.MINDBROKEN && slave.devotion >= -20 && slave.behavioralFlaw === "gluttonous") {
			r.push(`${He} squeals with glee at the order.`);
		}
		r.push(`You spend ${his} remaining time in recovery`);
		if (slave.fetish === Fetish.MINDBROKEN) {
			r.push(`teasing ${his} belly until you tire of ${him} and send ${him} on ${his} way.`);
		} else if (slave.devotion < -20) {
			r.push(`tormenting ${his} gurgling belly until you tire of ${his} sobbing and send ${him} on ${his} way.`);
		} else if (slave.fetish === Fetish.SUBMISSIVE && slave.devotion <= 20) {
			r.push(`toying with ${his} belly until you tire of ${his} moaning and send ${him} on ${his} way.`);
		} else if (slave.behavioralFlaw === "gluttonous" && slave.devotion <= 20) {
			r.push(`massaging ${his} stuffed belly until you tire of ${him} and send ${him} on ${his} way.`);
		} else if (slave.devotion <= 20) {
			r.push(`tormenting ${his} gurgling belly until you tire of ${his} groaning and send ${him} on ${his} way.`);
		} else if (slave.devotion <= 50) {
			r.push(`lavishing attention on ${his} gurgling belly, much to ${his} delight, until you tire of ${him} and send ${him} on ${his} way.`);
		} else {
			r.push(`playing with ${his} belly. ${He} joins you in the endeavor, happy that you are pleased with the`);
			if (doMe !== 1) {
				r.push(`outcome.`);
			} else {
				r.push(`outcome, but ${his}`);
				if (canSee(slave)) {
					r.push(`eyes tell`);
				} else {
					r.push(`face tells`);
				}
				r.push(`you ${he} wants more.`);
			}
			// Fucks for devoted slaves.
			doMe = 1;
			let sexType;
			if (canDoVaginal(slave) && slave.vagina > 0) {
				sexType = "vaginal";
			} else if (canDoAnal(slave) && slave.anus > 0) {
				sexType = "anal";
			} else {
				sexType = "none";
			}
			if (sexType !== "none") {
				if (V.PC.belly >= 10000) {
					doMe = 0;
					r.push(`${His}`);
					if (sexType === "vaginal") {
						r.push(`pussy`);
					} else {
						r.push(`ass`);
					}
					r.push(`is under a lot of pressure from ${his} swollen middle and surely would feel amazing; it's even`);
					if (sexType === "vaginal") {
						r.push(`sopping wet for`);
					} else {
						r.push(`eagerly winking at`);
					}
					r.push(`you. Unfortunately, no matter how hard you try, you can't find a position that will accommodate both ${his} food-stuffed stomach and your own gravid middle. Sighing, you settle for ${his} mouth instead.`);
				} else {
					if (V.PC.dick !== 0) {
						r.push(`You're already rock hard so you`);
					} else {
						if (sexType === "vaginal") {
							r.push(`You don a strap-on and`);
						} else {
							r.push(`You don a strap-on, lube up,`);
						}
					}
					r.push(`pull ${his} legs apart,`);
					if (sexType === "vaginal") {
						r.push(`revealing ${his}`);
						if (slave.vaginaLube > 1) {
							r.push(`sopping wet,`);
						} else if (slave.vaginaLube > 0) {
							r.push(`moist,`);
						} else {
							r.push(`moist, relative to its usual dryness,`);
						}
						if (slave.vagina >= 10) {
							r.push(`devastated`);
						} else if (slave.vagina > 3) {
							r.push(`cavernous`);
						} else if (slave.vagina > 2) {
							r.push(`loose`);
						} else if (slave.vagina > 1) {
							r.push(`used`);
						} else {
							r.push(`tight`);
						}
						r.push(`pussy.`);
					} else {
						r.push(`and heft ${his} bulk up to reveal ${his}`);
						if (slave.anus > 3) {
							r.push(`gaping asshole.`);
						} else if (slave.anus > 2) {
							r.push(`loose anus.`);
						} else if (slave.anus > 1) {
							r.push(`used asshole.`);
						} else {
							r.push(`tight asshole.`);
						}
					}
					r.push(`${His} belly is putting so much pressure on it that`);
					const looseness = (sexType === "vaginal") ? slave.vagina : slave.anus;
					if (sexType === "vaginal" && looseness >= 10) {
						r.push(`you might be able to get some decent friction now.`);
						if (V.PC.dick !== 0) {
							r.push(`You can actually feel the sides of ${his} cunt as you slide in.`);
						} else {
							r.push(`You slide in like it's still nothing.`);
						}
					} else if (looseness > 3) {
						r.push(`you should be able to get a decent fuck out of it.`);
						if (V.PC.dick !== 0) {
							r.push(`You can't help but be amazed that you're getting some resistance as you slide in.`);
						} else {
							r.push(`You slide in like it's nothing.`);
						}
					} else if (looseness > 2) {
						r.push(`it won't feel so`);
						if (sexType === "vaginal") {
							r.push(`worn out.`);
						} else {
							r.push(`stretched.`);
						}
						if (V.PC.dick !== 0) {
							r.push(`${He} gives some nice resistance as you squeeze into ${him}.`);
						} else {
							r.push(`You squeeze in without problem.`);
						}
					} else if (looseness > 1) {
						r.push(`it'll feel positively tight.`);
						if (V.PC.dick !== 0) {
							r.push(`${His}`);
							if (sexType === "vaginal") {
								r.push(`pussy`);
							} else {
								r.push(`anus`);
							}
							r.push(`feels great, you practically had to squeeze in.`);
						} else {
							r.push(`You squeeze in with a little effort.`);
						}
					} else {
						r.push(`you'll barely be able to fit it in.`);
						if (V.PC.dick !== 0) {
							r.push(`${His}`);
							if (sexType === "vaginal") {
								r.push(`vagina`);
							} else {
								r.push(`rear`);
							}
							r.push(`is so tight you can barely get it in, but with a little work, you manage to squeeze into its tight confines. ${He}'s tighter than any`);
							if (sexType === "anal") {
								r.push(`anal`);
							}
							r.push(`virgin you've ever fucked.`);
						} else {
							r.push(`You have to`);
							if (sexType === "vaginal") {
								r.push(`lube up some,`);
							} else {
								r.push(`get a little rough,`);
							}
							r.push(`but eventually you manage to slide into ${his} extremely tight`);
							if (sexType === "vaginal") {
								r.push(`vagina.`);
							} else {
								r.push(`anus.`);
							}
						}
					}
					r.push(`Once you're hilted, you bring your hands to ${his} distended belly, eager to feel it move as you fuck ${him}.`);
					if (hasAnyArms(slave)) {
						r.push(`${His} own ${hasBothArms(slave) ? `join` : `joins`} yours atop the taut dome.`);
					}
					r.push(`Every thrust into the stuffed ${SlaveTitle(slave)} forces ${his} full middle to leap back before slamming into your stomach alongside a moaning groan. As you pick up the pace, ${he} begins to buck against you, adding even more motion to ${his} body. It doesn't take long for you to reach your peak and, after cumming, catch sight of ${his} own climax. Watching ${his} middle attempt to contract around the mass of slave food inside ${him} invigorates you for a second round.`);
					if (V.PC.balls >= 30) {
						r.push(`By the time you're done, ${he}'s positively massive; your copious seed flows out of ${him} in spurts as ${his} body desperately struggles to relieve the extra pressure your huge balls pumped into ${him}.`);
					}
					r.push(`Once you are spent,`);
					if (V.PC.balls >= 30) {
						r.push(`and ${he}'s forced out all your cum,`);
					}
					r.push(`you settle down beside ${him} and rest your head against ${his} belly; it almost feels like a water-filled pillow, albeit a little noisy. You and ${slave.slaveName} doze off together for a much needed nap. You don't get much rest; ${his} stomach's constant groaning and burbling keeps you up, so you send ${him} on ${his} way. ${He} blows you one last kiss and eagerly looks forward to next time.`);
					if (sexType === "vaginal") {
						r.push(VCheck.Vaginal(slave, 2));
					} else {
						r.push(VCheck.Anal(slave, 2));
					}
				}
			} else {
				doMe = 0;
			}
			if (doMe === 0) {
				if (V.PC.dick !== 0) {
					r.push(`You crawl onto the couch above ${his} head and lower your erect cock straight into ${his} waiting mouth. ${He} eagerly sucks you off, ${his} belly wobbling with every thrust ${canPenetrateThroat(V.PC) ? `into ${his} throat` : `between ${his} lips`}. You cum fast and hard into ${him}, a product of being on the edge during ${his} feeding;`);
					if (slave.behavioralFlaw === "gluttonous") {
						r.push(`${he} takes it like nothing and resumes sucking, ${his} gluttony showing no bounds.`);
					} else {
						r.push(`${he} swallows it promptly and keeps sucking. You'd swear ${he} was a glutton at this point.`);
					}
				} else {
					r.push(`You crawl onto the couch above ${his} head and lower your needy pussy straight onto ${his} outstretched tongue. ${He} eagerly eats you out, ${his} belly wobbling along to ${his} vigorous licking. You cum fast and hard onto ${him}, a product of being on the edge during ${his} feeding;`);
					if (slave.behavioralFlaw === "gluttonous") {
						r.push(`${he} laps it all up and resumes pleasuring you, ${his} gluttony showing no bounds.`);
					} else {
						r.push(`${he} laps it promptly and resumes pleasuring you. You'd swear ${he} was a glutton at this point.`);
					}
				}
				r.push(`Once you are spent, you slide down beside ${him} and rest your head against ${his} belly; it almost feels like a water-filled pillow, albeit a little noisy. You and ${slave.slaveName} doze off together for a much needed nap. You don't get much rest; ${his} stomach's constant groaning and burbling keeping you up, so you send ${him} on ${his} way. ${He} blows you one last kiss and eagerly looks forward to next time.`);

				seX(slave, "oral", V.PC, "penetrative", 2);
			}
		}
	}

	if (pregDiscovery === 1) {
		r.push(`Once you've managed to stop ${his} heaving and clean up, you decide to get to the root of this mess. While most of the tests come back normal, one in particular catches your eye; <span class="lime">${he} is pregnant${(slave.preg > slave.pregData.normalBirth/4) ? ` and surprisingly far along` : ``}.</span>`);
		deflate(slave);
		slave.pregKnown = 1;
	} else {
		if (slave.inflation === 3) {
			if (canWalk(slave) || (canMove(slave) && slave.rules.mobility === "permissive")) {
				r.push(`${He} gingerly leaves your office, massaging ${his} over-stuffed belly as ${he} goes.`);
			} else {
				r.push(`${His} belly wobbles heavily as ${he} is helped from your office.`);
			}
			r.push(`Being filled so full <span class="health dec">surely had negative effects</span> on ${his} health.`);
			healthDamage(slave, 10);
		} else if (slave.inflation === 2) {
			if (canWalk(slave) || (canMove(slave) && slave.rules.mobility === "permissive")) {
				r.push(`${He} gingerly leaves your office, massaging ${his} stuffed belly as ${he} goes.`);
			} else {
				r.push(`${His} belly wobbles heavily as ${he} is helped from your office.`);
			}
		} else if (slave.inflation === 1) {
			if (canWalk(slave) || (canMove(slave) && slave.rules.mobility === "permissive")) {
				r.push(`${He} gingerly leaves your office, massaging ${his} distended belly as ${he} goes.`);
			} else {
				r.push(`${His} belly wobbles as ${he} is helped from your office.`);
			}
		}
		if (slave.fetish === Fetish.MINDBROKEN) {
			r.push(`You question if the broken ${girl} understood your commands, but relish the idea of force-feeding ${him} even more should ${he} fail you.`);
		}
	}

	SetBellySize(slave);
	App.Events.addParagraph(node, r);
	return node;
};


code:
// cSpell:ignore gladius, estoc, Tecpatl, kopesh, katana, scimitar, jian, saber

/** @param {FC.SlaveState} slave */
App.UI.SlaveInteract.killSlave = function(slave) {
	const frag = new DocumentFragment();
	const {He, His, he, him, his, daughter, himself} = getPronouns(slave);

	const FS = {
		FSRomanRevivalist: "gladius",
		FSNeoImperialist: "estoc",
		FSAztecRevivalist: "Tecpatl",
		FSEgyptianRevivalist: "kopesh",
		FSEdoRevivalist: "katana",
		FSArabianRevivalist: "scimitar",
		FSChineseRevivalist: "jian",
		FSAntebellumRevivalist: "saber"
	};

	const oneWeek = V.threatened[1];
	const twoWeeks = V.threatened[2];
	const threeWeeks = V.threatened[3];
	const fourWeeks = V.threatened[4];

	const isDevoted = slave.devotion > 50;
	const isAccepting = slave.devotion > 20 && slave.devotion <= 50;
	const isCareful = slave.devotion > -20 && slave.devotion <= 20;

	let weapon = ["handgun", "pistol", "sidearm"].random();
	let qualifiedFS = false;

	for (const [fs, w] of Object.entries(FS)) {
		if (FutureSocieties.isActive(fs)) {
			qualifiedFS = true;
			weapon = w;
			break;
		}
	}

	App.Events.drawEventArt(frag, slave);

	frag.appendChild(intro());

	if (V.pit && V.pit.slaveFightingBodyguard && getSlave(V.pit.slaveFightingBodyguard) !== undefined) {
		frag.appendChild(plannedFight());
	} else {
		frag.appendChild(links());
	}

	return frag;

	function intro() {
		const introDiv = document.createElement("div");

		introDiv.append(`You ${canWalk(slave)
			? `call ${slave.slaveName}`
			: `have ${slave.slaveName} brought`} into your office. `);

		if (slave.fuckdoll) {
			introDiv.append(introFuckdoll());
		} else {
			introDiv.append(introStandard());
		}

		return introDiv;

		function introFuckdoll() {
			const text = [];

			text.push(`It's hard to tell the expression on the Fuckdoll's face, but your guess is it's`);

			if (slave.fetish !== Fetish.MINDBROKEN) {
				text.push(`one of`);

				if (slave.devotion > 50) {
					text.push(`adoration.`);
				} else if (slave.devotion > 20) {
					text.push(`calm.`);
				} else if (slave.devotion > -20) {
					text.push(`apprehension.`);
				} else {
					text.push(`hatred.`);
				}
			} else {
				text.push(`blank.`);
			}

			text.push(`You tell ${him} that you've gotten tired of having ${him} around and that you decided it is time to get rid of ${him}. ${He} simply nods, not being able to see you ${canHear(slave) ? `quietly ` : ``}reach behind your desk and pull out your trusty ${weapon}.`);

			return text.join(' ');
		}

		function introStandard() {
			const text = [];

			text.push(`${He} looks at you`);

			if (slave.devotion > 50) {
				text.push(`with adoration`);
			} else if (slave.devotion > 20) {
				text.push(`calmly`);
			} else if (slave.devotion > -20) {
				text.push(`with apprehension`);
			} else {
				text.push(`with hatred`);
			}

			text.push(`and waits for you to continue. You tell ${him} that you've gotten tired of having ${him} around and that you decided it is time to get rid of ${him}.`);

			if (slave.fetish !== Fetish.MINDBROKEN) {
				text.push(`${His} expression changes to one of`);

				if (slave.devotion > 50) {
					text.push(`pure sorrow`);
				} else if (slave.devotion > 20) {
					text.push(`sadness`);
				} else {
					text.push(`relief`);
				}

				text.push(`until you`);
			} else {
				text.push(`${He} just nods dumbly and continues to watch you with a vacant expression, even as`);
			}

			text.push(`${canHear(slave) ? `quietly ` : ``}reach behind your desk and pull out your trusty ${weapon}${introReaction()}`);

			return text.join(' ');

			function introReaction() {
				if (oneWeek.includes(slave.ID)) {
					return introReactionOneWeek();
				}
				if (twoWeeks.includes(slave.ID)) {
					return introReactionTwoWeeks();
				}
				if (threeWeeks.includes(slave.ID)) {
					return introReactionThreeWeeks();
				}
				if (fourWeeks.includes(slave.ID)) {
					return introReactionFourWeeks();
				}

				return introReactionOther();
			}

			function introReactionOneWeek() {
				if (isDevoted) {
					return `. ${He} just looks at you warily; you threatened ${him} just last week, and ${he}'s suspecting you won't go through with it this time either.`;
				} else if (isAccepting) {
					return `, at which a brief moment of confusion flashes across ${his} face. You threatened ${him} only a week ago, and ${he}'s beginning to think you won't actually do it.`;
				} else if (isCareful) {
					return `. You can just barely detect a brief moment of scorn cross ${his} face – you threatened ${him} just last week, and ${he}'s starting to think you won't actually go through with it.`;
				} else {
					return `, at which ${he} laughs with derision. You threatened ${him} only last week, and ${he}'s calling your bluff.`;
				}
			}

			function introReactionTwoWeeks() {
				if (isDevoted) {
					return `. ${He} looks at you with a hint of trepidation in ${his} eyes, but it seems for the most part ${he} thinks you won't do it – you did give ${him} an empty threat a couple of weeks ago, after all.`;
				} else if (isAccepting) {
					return `, to which ${he} just raises one eyebrow. You threatened ${him} just a few weeks ago, so why wouldn't you be bluffing now?`;
				} else if (isCareful) {
					return `. ${He} says nothing, but you can tell ${he} seems to think you're bluffing – you did threaten ${him} only a couple of weeks ago, after all.`;
				} else {
					return `, at which ${he} scoffs. You threatened ${him} a couple of weeks ago, and you're probably bluffing again.`;
				}
			}

			function introReactionThreeWeeks() {
				if (isDevoted) {
					return `, at which concern covers ${his} features. You threatened ${him} three weeks ago; surely you're bluffing again – right?`;
				} else if (isAccepting) {
					return `. ${He} looks slightly worried, but also seems to think you might be bluffing. After all, you did threaten ${him} three weeks ago, so why would this threat be any less empty?`;
				} else if (isCareful) {
					return `. ${He} looks somewhat concerned, but mostly seems to think you're probably bluffing. You did threaten ${him} only three weeks ago, after all, so you're probably not going to do it today either... right?`;
				} else {
					return `. ${He} says nothing, but you can tell ${he}'s thinking you're bluffing again. You threatened ${him} three weeks ago, and ${he} seems to doubt you're going to kill ${him} now, either.`;
				}
			}

			function introReactionFourWeeks() {
				if (isDevoted) {
					return `. A look of panic covers ${his} face, but you didn't kill ${him} four weeks ago, so maybe you won't do it now, either. Right?`;
				} else if (isAccepting) {
					return `, at which ${he} becomes visibly nervous. You threatened ${him} four weeks ago and ${he} seems to think you might be bluffing again, but ${he} can't tell.`;
				} else if (isCareful) {
					return `, at which ${he} looks rather unsettled. ${He} seems to think you might be bluffing, like you did four weeks ago when you last threatened ${him}.`;
				} else {
					return `, to which panic flashes across ${his} face. ${He} quickly recovers and puts on a brave face, though – you threatened ${his} life four weeks ago, so you're probably bluffing again. Right?`;
				}
			}

			function introReactionOther() {
				return `, at which point abject terror fills ${his} face. ${He} immediately ${hasBothLegs(slave) ? `drops to ${his} knees and ` : ``}begins openly begging for you to show mercy.`;
			}
		}
	}

	function plannedFight() {
		const plannedFightsDiv = document.createElement("div");

		plannedFightsDiv.append(`${!slave.fuckdoll && slave.fetish !== Fetish.MINDBROKEN ? `You abruptly cut ${his} begging short once you` : `You change your mind as you suddenly`} remember ${getSlave(V.pit.slaveFightingBodyguard).slaveName} is already fighting your bodyguard ${S.Bodyguard.slaveName} for ${his} life this week.`);

		App.UI.DOM.appendNewElement("div", plannedFightsDiv, App.UI.DOM.passageLink(`Cancel the fight`, V.returnTo, () => {
			V.pit.slaveFightingBodyguard = null;
		}), ['margin-top']);

		return plannedFightsDiv;
	}

	function links() {
		const linksDiv = App.UI.DOM.makeElement("div", null, ["margin-top"]);

		const links = [];
		const disabledReasons = getDisabledReasons();

		const combatLinkText = `Let ${him} win ${his} life in combat`;

		links.push(
			App.UI.DOM.link(`Kill ${him}`, () => {
				App.UI.DOM.replace(linksDiv, kill);
			}),
			App.UI.DOM.link(`Have mercy on ${him}`, () => {
				App.UI.DOM.replace(linksDiv, mercy);
			}),
		);

		if (disabledReasons.length) {
			links.push(App.UI.DOM.disabledLink(combatLinkText, disabledReasons));
		} else {
			links.push(App.UI.DOM.link(combatLinkText, () => {
				App.UI.DOM.replace(linksDiv, combat);
			}));
		}

		linksDiv.appendChild(App.UI.DOM.generateLinksStrip(links));

		return linksDiv;

		function getDisabledReasons() {
			const arr = [];

			if (V.pit && V.pit.slaveFightingBodyguard) {
				arr.push(`You already have a slave fighting your bodyguard this week.`);
			}

			if (slave.fuckdoll) {
				arr.push(`Fuckdolls cannot properly fight.`);
			}

			if (slave.fetish === Fetish.MINDBROKEN) {
				arr.push(`Mindbroken slaves cannot properly fight.`);
			}

			if (!S.Bodyguard) {
				arr.push(`You must have a bodyguard for ${slave.slaveName} to fight.`);
			}

			if (!V.pit) {
				arr.push(`You must first build a pit for combat.`);
			}

			return arr;
		}

		function kill() {
			const killDiv = document.createElement("div");

			if (!slave.fuckdoll && slave.fetish !== Fetish.MINDBROKEN) {
				killDiv.append(`You simply smile at ${him} and tell ${him} not to worry `);
			} else {
				killDiv.append(`You say nothing `);
			}

			killDiv.append(`as you continue ${qualifiedFS
				? `sharpening your ${weapon}.`
				: `threading on a suppressor.`} ${slave.slaveName} ${!slave.fuckdoll && slave.fetish !== Fetish.MINDBROKEN
				? `gives an audible sigh of relief and begins to thank you profusely, though ${his} thanks are cut short as the sound of`
				: `continues to stand there ${slave.fetish === Fetish.MINDBROKEN ? `dumbly` : ``} until the sound of`} ${qualifiedFS
				? `a sharp edge slicing through flesh`
				: `a suppressed gunshot`} rings through the room. You have another servant clean up the mess as you continue with what you were previously doing.`);

			killDiv.append(relations(), resetCounters());

			if (isShelterSlave(slave)) {
				App.Events.addParagraph(killDiv, [`You hope word of this won't reach back to the Slave Shelter, but <span class="red">somehow you know it will.</span>`]);
				V.shelterAbuse += 2;
			}

			removeSlave(slave, {dead: true});

			return killDiv;

			function relations() {
				// TODO: potentially expand to allow for checking for more than one relation (i.e. sister/mother/lover, etc)
				const relationsDiv = App.UI.DOM.makeElement("div", null, ['margin-top']);

				const halfSisters = [];
				const sisters = [];
				const twins = [];
				const daughters = [];

				const isWife = slave.relationship === -3;

				let mother = null;
				let father = null;
				let relationshipTarget = null;
				let rival = null;

				for (const target of getSlaves().values()) {
					if (target.devotion > 50 && isWife) {
						target.trust -= 25;
					}

					if (slave.mother === target.ID) {
						mother = target.ID;
						continue;
					}

					if (slave.father === target.ID) {
						father = target.ID;
						continue;
					}

					if (target.mother === slave.ID || target.father === slave.ID) {
						daughters.push(target.ID);
						continue;
					}

					if (areSisters(slave, target)) {
						switch (areSisters(slave, target)) {
							case 1:
								twins.push(target.ID);
								continue;
							case 2:
								sisters.push(target.ID);
								continue;
							case 3:
								halfSisters.push(target.ID);
								continue;
							default:
								throw new Error(`Unexpected value '${areSisters(slave, target)}' found in relations()`);
						}
					}

					if (slave.relationship > 0 && slave.relationshipTarget === target.ID) {
						relationshipTarget = target.ID;
						continue;
					}

					if (slave.rivalry && slave.rivalryTarget === target.ID) {
						rival = target.ID;
						continue;
					}

					if (target.devotion > 50) {
						target.devotion -= 15;
						continue;
					}
				}

				if (mother) {
					relationsDiv.appendChild(getMotherEffects(mother));
				}

				if (father) {
					relationsDiv.appendChild(getFatherEffects(father));
				}

				if (daughters.length) {
					relationsDiv.appendChild(getDaughtersEffects(daughters));
				}

				if (twins.length) {
					relationsDiv.appendChild(getTwinsEffects(twins));
				}

				if (sisters.length) {
					relationsDiv.appendChild(getSistersEffects(sisters));
				}

				if (halfSisters.length) {
					relationsDiv.appendChild(getHalfSistersEffects(halfSisters));
				}

				if (relationshipTarget) {
					relationsDiv.appendChild(getRelationshipEffects(relationshipTarget));
				}

				if (isWife) {
					relationsDiv.appendChild(getWifeEffects());
				}

				if (rival) {
					relationsDiv.appendChild(getRivalEffects(rival));
				}

				if (FutureSocieties.isActive('FSPaternalist')) {
					relationsDiv.appendChild(getFSEffects());
				}

				return relationsDiv;

				function getMotherEffects(ID) {
					const subDiv = document.createElement("div");

					const mother = getSlave(ID);

					App.Events.addParagraph(subDiv, [
						`${His} mother ${mother.slaveName} is <span class="devotion dec">grief-stricken</span> that you would take ${his} ${daughter} from ${getPronouns(mother).him}.`
					]);

					mother.devotion -= 30;

					return subDiv;
				}

				function getFatherEffects(ID) {
					const subDiv = document.createElement("div");

					const father = getSlave(ID);

					App.Events.addParagraph(subDiv, [
						`${His} father ${father.slaveName} is <span class="devotion dec">grief-stricken</span> that you would take ${his} ${daughter} from ${getPronouns(father).him}.`
					]);

					father.devotion -= 30;

					return subDiv;
				}

				function getDaughtersEffects(arr) {
					if (arr.length === 1) {
						const subDiv = document.createElement("div");

						const daughter = getSlave(arr[0]);
						const mother = getPronouns(slave).mother;
						const {him: him2, daughter: daughter2} = getPronouns(daughter);

						App.Events.addParagraph(subDiv, [
							`${His} ${daughter2} ${daughter.slaveName} is <span class="devotion dec">horrified</span> that you would take ${his} ${mother} from ${him2}.`
						]);

						daughter.devotion -= 25;

						return subDiv;
					} else {
						const subDiv = document.createElement("div");

						const mother = getPronouns(slave).mother;

						arr.forEach(i => getSlave(i).devotion -= 25);

						App.Events.addParagraph(subDiv, [
							`${His} children, ${toSentence(arr.map(i => getSlave(i).slaveName))}, are <span class="devotion dec">horrified</span> that you would take their ${mother} from them.`
						]);

						return subDiv;
					}
				}

				function getTwinsEffects(arr) {
					if (arr.length === 1) {
						const subDiv = document.createElement("div");

						const twin = getSlave(arr[0]);
						const sister = getPronouns(slave).sister;
						const {him: him2, his: his2} = getPronouns(twin);

						App.Events.addParagraph(subDiv, [
							`${His} twin ${twin.slaveName} is <span class="devotion dec">devastated</span> that you would take ${his2} ${sister} from ${him2}.`
						]);

						twin.devotion -= 30;

						return subDiv;
					} else {
						const subDiv = document.createElement("div");
						const sister = getPronouns(slave).sister;

						arr.forEach(i => getSlave(i).devotion -= 30);

						App.Events.addParagraph(subDiv, [
							`${His} twins, ${toSentence(arr.map(i => getSlave(i).slaveName))} are <span class="devotion dec">devastated</span> that you would take their ${sister} from them.`
						]);

						return subDiv;
					}
				}

				function getSistersEffects(arr) {
					if (arr.length === 1) {
						const subDiv = document.createElement("div");

						const firstSister = getSlave(arr[0]);
						const sister = getPronouns(slave).sister;
						const {him: him2, his: his2} = getPronouns(firstSister);

						App.Events.addParagraph(subDiv, [
							`${His} sister ${firstSister.slaveName} is <span class="devotion dec">grief-stricken</span> that you would take ${his2} ${sister} from ${him2}.`
						]);

						firstSister.devotion -= 25;

						return subDiv;
					} else {
						const subDiv = document.createElement("div");

						const sister = getPronouns(slave).sister;

						arr.forEach(i => getSlave(i).devotion -= 25);

						App.Events.addParagraph(subDiv, [
							`${His} sisters, ${toSentence(arr.map(i => getSlave(i).slaveName))} are <span class="devotion dec">grief-stricken</span> that you would take their ${sister} from them.`
						]);

						return subDiv;
					}
				}

				function getHalfSistersEffects(arr) {
					if (arr.length === 1) {
						const subDiv = document.createElement("div");

						const halfSister = getSlave(arr[0]);
						const sister = getPronouns(slave).sister;
						const {him: him2} = getPronouns(halfSister);

						App.Events.addParagraph(subDiv, [
							`${His} half-sister ${halfSister.slaveName} is <span class="devotion dec">saddened</span> that you would take ${his} ${sister} from ${him2}.`
						]);

						halfSister.devotion -= 20;

						return subDiv;
					} else {
						const subDiv = document.createElement("div");

						const sister = getPronouns(slave).sister;

						arr.forEach(i => getSlave(i).devotion -= 20);

						App.Events.addParagraph(subDiv, [
							`${His} half-sisters, ${toSentence(arr.map(i => getSlave(i).slaveName))}, are <span class="devotion dec">saddened</span> that you would take their ${sister} from them.`
						]);

						return subDiv;
					}
				}

				function getRelationshipEffects(ID) {
					const target = getSlave(ID);
					if (target.fetish !== Fetish.MINDBROKEN) {
						const subDiv = document.createElement("div");

						App.Events.addParagraph(subDiv, [
							`${target.slaveName} is <span class="devotion dec">grief-stricken</span> that you have killed ${getPronouns(target).his} best source of comfort and companionship in a life of bondage.`
						]);

						target.devotion -= target.relationship * 10;

						return subDiv;
					}
				}

				function getWifeEffects() {
					const subDiv = document.createElement("div");

					getSlaves()
						.filter(slave => slave.devotion > 50)
						.forEach(slave => slave.devotion -= 15);

					App.Events.addParagraph(subDiv, [
						`Killing one of your slave wives is socially unacceptable. In addition, your other devoted slaves are worried that you might not respect their status.`
					]);

					repX(-200, "event", slave);

					return subDiv;
				}

				function getRivalEffects(ID) {
					const subDiv = document.createElement("div");

					const rival = getSlave(ID);

					App.Events.addParagraph(subDiv, [
						`${slave.slaveName}'s rival, ${rival.slaveName}, is <span class="devotion inc">pleased</span> that ${getPronouns(rival).he} won't have to see ${him} anymore.`
					]);

					rival.devotion += rival.rivalry * 5;

					return subDiv;
				}

				function getFSEffects() {
					const subDiv = document.createElement("div");

					App.Events.addParagraph(subDiv, [
						`Taking the life of one of your own slaves is <span class="reputation dec">a shocking notion</span> to your Paternalist society.`
					]);

					FutureSocieties.Change("Paternalist", -20);

					return subDiv;
				}
			}

			function resetCounters() {
				V.threatened = [[], [], [], [], []];

				if (V.threatened[1].length +
					V.threatened[2].length +
					V.threatened[3].length +
					V.threatened[4].length > 0) {
					return `All the slaves you had threatened before know now that you mean business.`;
				}

				return '';
			}
		}

		function mercy() {
			const mercyDiv = document.createElement("div");

			if (!slave.fuckdoll && slave.fetish !== Fetish.MINDBROKEN) {
				App.Events.addParagraph(mercyDiv, [mercyReaction()]);
			} else {
				mercyDiv.append(`You change your mind, and with a wave of your hand, send ${slave.slaveName} back to ${his} duties. Maybe some other time.`);
			}

			oneWeek.push(slave.ID);

			return mercyDiv;

			function mercyReaction() {
				if (oneWeek.includes(slave.ID)) {
					return mercyReactionOneWeek();
				}
				if (twoWeeks.includes(slave.ID)) {
					return mercyReactionTwoWeeks();
				}
				if (threeWeeks.includes(slave.ID)) {
					return mercyReactionThreeWeeks();
				}
				if (fourWeeks.includes(slave.ID)) {
					return mercyReactionFourWeeks();
				}

				return mercyReactionOther();

				// TODO: not sure about some of this text
				function mercyReactionOneWeek() {
					if (isDevoted) {
						slave.devotion -= 5;
						slave.trust -= 10;

						return `You tell ${him} that you've decided to spare ${him} today. ${He} just looks at you with confusion – you've threatened ${him} for weeks in a row now, and you haven't gone through with it. ${He}'s beginning to think you're just full of it and not to be trusted.`;
					} else if (isAccepting) {
						slave.devotion -= 7;
						slave.trust -= 15;

						return `You tell ${him} that, at least for the time being, you've decided to keep ${him} around. ${He} just looks at you warily – if you didn't kill ${him} last week or this week, you must just be full of it, and not to be trusted.`;
					} else if (isCareful) {
						slave.devotion -= 10;
						slave.trust -= 20;

						return `You tell ${him} that you've changed your mind and decided to keep ${him} around, to which ${he} doesn't reply. Clearly, if you're just bluffing for weeks in a row, you're just full of it and not to be trusted.`;
					} else {
						const man = ["XY", "XXY", "XYY", "X0", "X"].includes(V.PC.genes) ? `man` : `woman`;

						slave.devotion -= 15;
						slave.trust -= 25;

						return `You tell ${him} that you've decided to spare ${him} today. ${He} simply scoffs and rolls ${his} eyes – of course you wouldn't; you're full of it. You're obviously not a ${man} of your word, and not someone to be trusted.`;
					}
				}

				function mercyReactionTwoWeeks() {
					if (isDevoted) {
						slave.devotion -= 3;
						slave.trust -= 7;

						return `You've decided to spare ${his} life for the time being, you tell ${him}. ${He} nods and ${canTalk(slave) ? `mumbles` : `signs`} a quick "thank you". You didn't kill ${him} last time you threatened ${him}, and ${he}'s pretty sure you're just full of it and not someone to be trusted.`;
					} else if (isAccepting) {
						slave.devotion -= 5;
						slave.trust -= 10;

						return `You tell ${him} that you've decided to spare ${him} for now. ${He} ${canTalk(slave) ? `mumbles` : `signs`} a quick "thank you", though you can tell ${he} didn't really mean it – you didn't kill ${his} last time you threatened ${him}, and ${he}'s pretty sure you're just full of it and not someone to be trusted.`;
					} else if (isCareful) {
						slave.devotion -= 7;
						slave.trust -= 15;

						return `You tell ${him} you've changed your mind for the time being, to which ${he} doesn't reply. You threatened ${him} a couple of weeks ago, and if you didn't go through with it then, why would you now? As far as ${he}'s concerned, you're obviously just full of it and not someone to be trusted.`;
					} else {
						slave.devotion -= 10;
						slave.trust -= 15;

						return `You tell ${him} that you've decided to spare ${him} today. ${He} simply scoffs and rolls ${his} eyes – of course you wouldn't; you're full of it. You're obviously someone who makes empty threats, and not someone to be trusted.`;
					}
				}

				function mercyReactionThreeWeeks() {
					if (isDevoted) {
						slave.devotion -= 2;
						slave.trust -= 5;

						return `You tell ${him} that you've decided to spare ${his} life for now. ${He} replies with a "thank you", though you can tell ${he} is obviously quite troubled by the fact that you would threaten one of your devoted slaves. Obviously ${he} means very little to you.`;
					} else if (isAccepting) {
						slave.devotion -= 3;
						slave.trust -= 7;

						return `You've decided to spare ${him} for now, you tell ${him}. ${He} hesitantly gives you a quick "thank you", but you can tell ${he} is obviously quite troubled by the fact that you would threaten ${him} in the first place. Obviously ${he} means very little to you.`;
					} else if (isCareful) {
						slave.devotion -= 5;
						slave.trust -= 10;

						return `You tell ${him} that you've changed your mind for now. ${He} nods, seemingly <span class="trust dec">afraid</span> to${canTalk(slave) ? ` say or` : ``} do anything that would make you change your mind. The fact that you value your slaves' lives so little also worries ${him}.`;
					} else {
						slave.devotion -= 7;
						slave.trust -= 10;

						return `You inform that you've changed your mind and are willing to give ${him} another chance. ${He} doesn't seems very grateful, but then, ${he} didn't look too worried to begin with, either – you didn't kill ${him} last time you threatened, so you must just be all bluster and no balls. ${He} obviously can't trust someone who can't keep their word, either.`;
					}
				}

				function mercyReactionFourWeeks() {
					if (isDevoted) {
						slave.devotion -= 2;
						slave.trust -= 3;

						return `You tell ${him} that you've decided to spare ${him} for the time being. You tell ${him} as much, to which ${he} replies with profuse thanks. That you would threaten one of your devoted slaves at all troubles ${him}, though, and ${he} begins to fear how little you value ${his} life.`;
					} else if (isAccepting) {
						slave.devotion--;
						slave.trust -= 5;

						return `You inform ${him} that you've changed your mind for the time being. You can see relief fill ${his} features, and ${he} begins to thank you profusely. Threatening ${him} has given ${him} second thoughts about how much ${he}'s willing to accept you as ${his} owner, though, and ${he} begins to fear how little you value ${his} life.`;
					} else if (isCareful) {
						slave.devotion += 3;
						slave.trust -= 7;

						return `You decide to spare ${him} for now, and you tell ${him} as much. ${He} seems somewhat genuinely grateful for another chance, but also afraid that ${he} means so little to you.`;
					} else {
						slave.devotion += 5;
						slave.trust -= 7;

						return `You've decided to give ${him} another chance, you tell ${him}. ${He} looks genuinely grateful for another chance, but also afraid that ${he} might${canTalk(slave) ? ` say or` : ``} do something to make you change your mind.`;
					}
				}

				function mercyReactionOther() {
					if (isDevoted) {
						slave.devotion += 5;
						slave.trust -= 15;
					} else if (isAccepting) {
						slave.devotion += 10;
						slave.trust -= 25;
					} else if (isCareful) {
						slave.devotion += 15;
						slave.trust -= 30;
					} else {
						slave.devotion += 20;
						slave.trust -= 35;
					}

					return `You make a show of considering sparing ${his} life, then, with a heavy sigh, unbuckle your pants and sit down at your desk. You beckon to ${him}, and ${he} just about trips over ${himself} as ${he} hastily makes ${his} way over to you. ${His} blowjob isn't the best you've ever had, ${him} sobbing as much as ${he} is, but ${his} enthusiasm more than makes up for it. After you finish deep in ${his} ${canPenetrateThroat(V.PC) ? `throat` : `mouth`}, ${he} sits back and wipes away ${his} tears, sniffling and thanking you again for giving ${him} another chance.`;
				}
			}
		}

		function combat() {
			const combatDiv = document.createElement("div");

			let reactionText = `The fear on ${his} face is palpable, though ${he} nods slowly and agrees, not seeing another choice.`;

			if (slave.skill.combat > 30) {
				reactionText = `${He} nods ${his} head and straightens up, as though mentally preparing ${himself} for the fight for ${his} life.`;
			}
			combatDiv.append(bodyguard());

			return combatDiv;

			function bodyguard() {
				const subDiv = document.createElement("div");

				subDiv.append(`You tell ${him} you'll let your bodyguard decide ${his} fate — if ${he} wants to live, ${he}'ll have to beat ${S.Bodyguard.slaveName} in hand-to-hand combat in ${V.pit.name}. `, reactionText);

				V.pit.slaveFightingBodyguard = slave.ID;
				if (V.pit.lethal === 0) {
					V.pit.lethal = 1;
				}

				return subDiv;
			}
		}
	}
};

repo_name: Nithhogg/fc

license: mit


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

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

	r.push(`The remote surgery makes aborting a pregnancy quick and efficient.`);

	if (slave.preg < 4) {
		r.push(`It was so early in ${his} pregnancy that the potential mental effects are diminished.`);
	} else {
		r.push(`${slave.slaveName} is`);
		if (slave.fuckdoll > 0 || slave.fetish === Fetish.MINDBROKEN) {
			r.push(`completely unmoved by the development.`);
		} else if (slave.sexualFlaw === "breeder") {
			r.push(`<span class="red">fundamentally broken.</span> ${His} entire concept of self and sexuality was wrapped up in the life growing within ${him}, and now it is gone.`);
			applyMindbroken(slave);
		} else if (slave.devotion < -50) {
			r.push(`filled with violent, consuming hatred. Even though ${he} knew ${his} baby was destined for a slave orphanage, it seems ${he} cared for it and views you as its killer. ${He} is terrified of your power over ${his} body.`);
			slave.trust -= 10;
			slave.devotion -= 25;
		} else if (slave.devotion < -20) {
			r.push(`afflicted by desperate, inconsolable sobbing. Even though ${he} knew ${his} baby was destined for a slave orphanage, it seems ${he} cared for it. ${He} is terrified of your power over ${his} body.`);
			slave.trust -= 10;
			slave.devotion -= 10;
		} else if (slave.fetish === "pregnancy") {
			r.push(`filled with a deep sorrow. To a pregnancy fetishist, having a pregnancy end like this hurts far worse than birth ever would. ${He} is terrified of a repeat performance.`);
			const fetishModifier = slave.fetishStrength / 2;
			slave.devotion -= 1 * fetishModifier;
			slave.trust -= 1 * fetishModifier;
		} else if (slave.devotion <= 20) {
			r.push(`consumed by muted weeping and enduring sorrow. Even though ${he} knew ${his} baby was destined for a slave orphanage, it seems ${he} cared for it. ${He} is terrified of your power over ${his} body.`);
			slave.trust -= 10;
			slave.devotion -= 5;
		} else if (slave.devotion <= 50) {
			r.push(`dully obedient. ${He} has been broken to slave life so thoroughly that even this is neither surprising nor affecting. ${He} is <span class="trust dec">terrified of your power</span> over ${his} body.`);
			slave.trust -= 10;
		} else {
			r.push(`<span class="devotion inc">pleased by this stark development,</span> since ${he} is so attentive to your will. ${He} also expects ${he}'ll be able to fuck better now.`);
			slave.devotion += 4;
		}
	}

	if (slave.abortionTat > -1) {
		slave.abortionTat++;
		r.push(`The temporary tattoo of a child has been replaced with ${his} ${ordinalSuffix(slave.abortionTat)} crossed out infant.`);
		cashX(forceNeg(V.modCost), "slaveMod", slave);
	}

	slave.preg = rulesDemandContraceptives(slave, V.defaultRules) ? -1 : 0;

	TerminatePregnancy(slave);
	if (V.scenarios.contraceptivesBan) {
		cashX(forceNeg(50000), "abortions");
	}
	actX(slave, "abortions");
	App.Events.addParagraph(node, r);
	return node;
};


code:
/**
 *
 * @param {FC.SlaveState} slave
 * @returns {HTMLElement}
 */
App.Interact.fAnimalImpreg = function(slave) {
	const node = document.createElement("div");
	let r = [];
	let eligibility;
	const {him} = getPronouns(slave);

	App.UI.DOM.appendNewElement("h2", node, `Select an eligible animal to knock ${him} up`);

	/* FIXME: this might not work */
	for (const canine of V.animals.canine) {
		if (canBreed(slave, getAnimal(canine))) {
			App.UI.DOM.appendNewElement("div", node, App.UI.DOM.link(
				`Have a ${getAnimal(canine).species !== "dog" ? getAnimal(canine).species : getAnimal(canine).name} knock ${him} up`,
				() => jQuery(node).empty().append(content(canine))
			));
			eligibility = true;
		}
	}
	for (const hooved of V.animals.hooved) {
		if (canBreed(slave, getAnimal(hooved))) {
			App.UI.DOM.appendNewElement("div", node, App.UI.DOM.link(
				`Have a ${getAnimal(hooved).species} knock ${him} up`,
				() => jQuery(node).empty().append(content(hooved))
			));
			eligibility = true;
		}
	}
	for (const feline of V.animals.feline) {
		if (canBreed(slave, getAnimal(feline))) {
			App.UI.DOM.appendNewElement("div", node, App.UI.DOM.link(
				`Have a ${getAnimal(feline).species !== "cat" ? getAnimal(feline).species : getAnimal(feline).name} knock ${him} up`,
				() => jQuery(node).empty().append(content(feline))
			));
			eligibility = true;
		}
	}
	if (!eligibility) {
		App.UI.DOM.appendNewElement("div", node, `You have no animals capable of inseminating ${him}`, ['note']);
	}
	App.Events.addParagraph(node, r);
	return node;

	function content(animal) {
		const el = new DocumentFragment();
		r.push(`You have a servant lead the`);
		if (animal.species !== "dog" && animal.species !== "cat") {
			r.push(animal.species);
		} else {
			r.push(animal.name);
		}
		r.push(`in on a leash and feed him a special treat, one laced with high amounts of aphrodisiacs and vasodilators. They have an effect very rapidly, and the`);
		if (animal.species !== "dog" && animal.species !== "cat") {
			r.push(`${animal.species}'s`);
		} else {
			r.push(`${animal.name}'s`);
		}
		r.push(`${animal.dickSize} cock quickly stands at attention.`);

		return el;
	}
};