code:
App.Facilities.Pit.fight.lethal = function(fighters) {
	const frag = new DocumentFragment();

	const animal = V.pit.animal;

	const winner = getSlave(getWinner());
	const loser = getSlave(getLoser());

	frag.append(intro(), fighterDeadliness(getSlave(fighters[0])), fighterDeadliness(getSlave(fighters[1])), fight(), postFight());

	return frag;

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

		const fighterOne = getSlave(fighters[0]);
		const fighterTwo = getSlave(fighters[1]);
		const {he, him, girl} = getPronouns(fighterOne);

		const r = [];

		introDiv.classList.add("pit-section");

		App.Events.drawEventArt(introDiv, fighters.map(id => getSlave(id)), "no clothing");

		const an = animal ? animal.articleAn ? 'an' : 'a' : null;
		const anAnimal = animal ? `${an} ${animal.name}` : null;

		r.push(`This week's fight is between ${fighterOne.slaveName} and ${animal ? `${anAnimal}` : `${fighterTwo.slaveName}`}.`);

		if (V.pit.audience === "none") {
			r.push(`You are alone above the pit, left to watch them kill and die in private.`);
		} else if (V.pit.audience === "free") {
			r.push(`Your guests line the rim of the pit, joking and betting, nervous and excited by the close prospect of watching a ${girl} die.`);
		} else {
			r.push(`The attendees line the rim of the pit, betting and arguing, nervous and excited by the close prospect of watching a ${girl} die.`);
		}

		if (V.arcologies[0].FSRomanRevivalist !== "unset") {
			r.push(`They `, App.UI.DOM.makeElement("span", 'passionately approve', ["reputation", "inc"]), ` of your hosting lethal combat between slaves; this advances ideas from antiquity about what public events should be.`);

			repX(20 * V.FSSingleSlaveRep * (V.arcologies[0].FSRomanRevivalist / V.FSLockinLevel), "pit");
			V.arcologies[0].FSRomanRevivalist += (0.4 * V.FSSingleSlaveRep);
		} else if (V.arcologies[0].FSAztecRevivalist !== "unset") {
			r.push(`They `, App.UI.DOM.makeElement("span", 'approve', ["reputation", "inc"]), ` of your hosting lethal combat; this advances ideas that blood must flow as it did in ancient times.`);

			repX(10 * V.FSSingleSlaveRep * (V.arcologies[0].FSAztecRevivalist / V.FSLockinLevel), "pit");
			V.arcologies[0].FSAztecRevivalist += (0.2 * V.FSSingleSlaveRep);
		}

		r.push(`You review the rules — the ${animal ?
			`slave` :
			`combatants`} will use their choice of swords, and the fight will be to the death${!animal ?
			`, with both fighters executed if no decision is reached.` :
			`.`} ${animal ?
			`If ${he} wins, ${he}` :
			`The winner`} will earn two complete days of rest, not to mention continued life. You take a moment to look over your ${animal ?
			`slave` :
			`fighters`} one more time before giving the word. After all, it might be the last time you'll see ${animal ?
			`${him}` :
			`one of them`} alive.`);

		App.Events.addNode(introDiv, r);

		return introDiv;
	}

	/** @param {App.Entity.SlaveState} fighter */
	function fighterDeadliness(fighter) {
		const deadlinessDiv = document.createElement("div");

		const {he, his, him, himself, He, His} = getPronouns(fighter);
		const fighterDeadliness = deadliness(fighter);

		const r = [];

		deadlinessDiv.classList.add("pit-section");

		r.push(
			confidence(),
			willingness(),
			skill(),
			age(),
			muscles(),
			height(),
			health(),
			weight(),
			tired(),
			pregnancy(),
			labor(),
			bellyFluid(),
			sight(),
			hearing(),
			prosthetics(),
		);

		App.Events.addNode(deadlinessDiv, r);

		return deadlinessDiv;

		function confidence() {
			if (fighter.fetish === "mindbroken") {
				return `${fighter.slaveName} is too broken to care about whether ${he} lives or dies;`;
			} else if (fighterDeadliness > 5) {
				return `${fighter.slaveName} seems very confident;`;
			} else if (fighterDeadliness > 3) {
				return `${fighter.slaveName} seems nervous, but steels ${himself};`;
			} else if (fighterDeadliness > 1) {
				return `${fighter.slaveName} seems hesitant and unsure;`;
			} else {
				return `${fighter.slaveName} is obviously terrified, and might flee if there were a way out of the pit;`;
			}
		}

		function willingness() {
			if (fighter.fetish === "mindbroken") {
				return `${he} is indifferent to the prospect of killing, as well.`;
			} else if (fighter.devotion > 95) {
				return `${he} is clearly willing to do ${his} best to kill for you.`;
			} else if (fighter.fetish === "sadist" && fighter.fetishKnown && fighter.fetishStrength > 60) {
				return `the prospect of killing does not seem to concern ${him}.`;
			} else if (fighter.devotion > 50) {
				return `${he} obviously does not want to kill, but will do as you order.`;
			} else if (fighter.devotion > -20) {
				return `${he} is clearly unhappy at the prospect of killing, but knows that the alternative is death.`;
			} else {
				return `${he} knows that it's kill or be killed, and puts aside ${his} hatred of you in an effort to live.`;
			}
		}

		function skill() {
			if (fighter.skill.combat > 0) {
				return `${His} grip on ${his} sword is sure and easy.`;
			}
		}

		function age() {
			if (V.AgePenalty !== 0) {
				if (fighter.physicalAge >= 100) {
					return `${He} seems prepared for death, in a way.`;
				} else if (fighter.physicalAge >= 85) {
					return `${He} tries not to waste ${his} strength before the fight, knowing that ${his} extreme age won't allow ${him} a second wind.`;
				} else if (fighter.physicalAge >= 70) {
					return `${He} steadies ${himself} as well as ${he} can in ${his} advanced age.`;
				}
			}
		}

		function muscles() {
			if (fighter.muscles > 95) {
				return `${He} is wielding a massive two-handed blade few others could even heft.`;
			} else if (fighter.muscles > 30) {
				return `${He} is strong enough to handle a bastard sword.`;
			} else if (fighter.muscles > 5) {
				return `${He} has selected a longsword suited to ${his} strength.`;
			} else if (fighter.muscles < -95) {
				return `${He} has selected a meager dagger; even then ${he} can barely wield it.`;
			} else if (fighter.muscles < -30) {
				return `${He} has selected a dagger, the heaviest weapon ${he} can manage.`;
			} else if (fighter.muscles < -5) {
				return `${He} has selected a short sword, despite being able to barely lift it.`;
			} else {
				return `${He} has selected a short sword, the heaviest weapon ${he} can manage.`;
			}
		}

		function height() {
			if (fighter.height > 170) {
				return `${His} height gives ${him} a reach advantage.`;
			}
		}

		function health() {
			if (fighter.health.condition > 50) {
				return `${His} shining health makes ${him} a better fighter.`;
			} else if (fighter.health.condition) {
				return `${His} poor health makes ${him} a weaker combatant.`;
			}
		}

		function weight() {
			if (fighter.weight > 190) {
				return `${His} extreme weight nearly immobilizes ${him}. ${He} struggles to move let alone fight.`;
			} else if (fighter.weight > 160) {
				return `${His} extreme weight limits ${his} mobility and range of motion, making ${him} an easy target.`;
			} else if (fighter.weight > 130) {
				return `${His} extreme weight holds ${him} back as a pit fighter.`;
			} else if (fighter.weight > 30) {
				return `${His} heavy weight is an impediment as a pit fighter.`;
			} else if (fighter.weight < -10) {
				return `${His} light weight is an impediment as a pit fighter.`;
			}
		}

		function tired() {
			if (fighter.health.tired > 90) {
				return `${He} is exhausted and can barely stay awake; ${he} won't put up a fight.`;
			} else if (fighter.health.tired > 60) {
				return `${He} is fatigued, sapping the strength ${he}'ll need to strike true.`;
			} else if (fighter.health.tired > 30) {
				return `${He} is tired and more likely to take a hit then to give one.`;
			}
		}

		function pregnancy() {
			if (fighter.pregKnown || fighter.bellyPreg > 1500) {
				if (fighter.bellyPreg > 750000) {
					return `${His} monolithic pregnancy guarantees ${his} and ${his} many, many children's deaths; not only is ${he} on the verge of splitting open, but it is an unmissable, indefensible target. ${He} has no hope of attacking around the straining mass, let alone stopping ${his} opponent. ${He} is damned.`;
				} else if (fighter.bellyPreg > 600000) {
					return `${His} titanic pregnancy is practically a death sentence; not only does ${he} risk bursting, but it is an unmissable, indefensible target. ${He} can barely keep it together while thinking about the lives of ${his} brood.`;
				} else if (fighter.bellyPreg > 450000) {
					return `${His} gigantic pregnancy practically damns ${him}; it presents an unmissable, indefensible target for ${his} adversary. ${He} can barely keep it together while thinking about the lives of ${his} brood.`;
				} else if (fighter.bellyPreg > 300000) {
					return `${His} massive pregnancy obstructs ${his} movement and greatly hinders ${him}. ${He} struggles to think of how ${he} could even begin to defend it from harm.`;
				} else if (fighter.bellyPreg > 150000) {
					return `${His} giant pregnancy obstructs ${his} movement and greatly slows ${him} down. ${He} tries not to think of how many lives are depending on ${him}.`;
				} else if (fighter.bellyPreg > 100000) {
					return `${His} giant belly gets in ${his} way and weighs ${him} down. ${He} is terrified for the lives of ${his} many children.`;
				} else if (fighter.bellyPreg > 10000) {
					return `${His} huge belly gets in ${his} way and weighs ${him} down. ${He} is terrified for the ${fighter.pregType > 1 ? `lives of ${his} children` : `life of ${his} child`}.`;
				} else if (fighter.bellyPreg > 5000) {
					return `${His} advanced pregnancy makes ${him} much less effective, not to mention terrified for ${his} child${fighter.pregType > 1 ? `ren` : ``}.`;
				} else if (fighter.bellyPreg > 1500) {
					return `${His} growing pregnancy distracts ${him} with concern over the life growing within ${him}.`;
				} else {
					return `The life just beginning to grow inside ${him} distracts ${him} from the fight.`;
				}
			} else if (fighter.bellyImplant > 1500) {
				if (fighter.bellyImplant > 750000) {
					return `${His} monolithic, ${fighter.bellyImplant}cc implant-filled belly guarantees ${his} death; not only is ${he} on the verge of splitting open, but it is an unmissable, indefensible target that threatens to drag ${him} to the ground. ${He} has no hope of attacking around the straining mass, let alone stopping ${his} opponent.`;
				} else if (fighter.bellyImplant > 600000) {
					return `${His} titanic, ${fighter.bellyImplant}cc implant-filled belly is practically a guaranteed death; ${he} can barely stand let alone fight. Not only is it cripplingly heavy, unwieldy and an easy target, but ${he} can feel it straining to hold the sheer amount of filler forced into it.`;
				} else if (fighter.bellyImplant > 450000) {
					return `${His} gigantic, ${fighter.bellyImplant}cc implant-filled belly is nearly a guaranteed death; it presents an unmissable, indefensible target for ${his} adversary.`;
				} else if (fighter.bellyImplant > 300000) {
					return `${His} massive, ${fighter.bellyImplant}cc implant-filled belly is extremely heavy, unwieldy and an easy target, practically damning ${him} in combat.`;
				} else if (fighter.bellyImplant > 150000) {
					return `${His} giant, ${fighter.bellyImplant}cc implant-filled belly obstructs ${his} movement and greatly slows ${him} down.`;
				} else if (fighter.bellyImplant > 100000) {
					return `${His} giant, ${fighter.bellyImplant}cc implant-filled belly is very heavy and unwieldy, throwing off ${his} weight and making ${him} far less effective.`;
				} else if (fighter.bellyImplant > 10000) {
					return `${His} huge, ${fighter.bellyImplant}cc implant-filled belly is very heavy and unwieldy, throwing off ${his} weight and making ${him} far less effective.`;
				} else if (fighter.bellyImplant > 5000) {
					return `${His} large, ${fighter.bellyImplant}cc implant-filled belly is heavy and unwieldy, rendering ${him} less effective.`;
				} else if (fighter.bellyImplant > 1500) {
					return `${His} swollen, ${fighter.bellyImplant}cc implant-filled belly is heavy and makes ${him} less effective.`;
				}
			}
		}

		function labor() {
			if (isInLabor(fighter)) {
				return `${He}'s feeling labor pains. ${His} ${fighter.pregType > 1 ? `children are` : `child is`} ready to be born, oblivious to the fact that it will mean the death of ${fighter.pregType > 1 ? `their` : `its`} mother.`;
			} else if (fighter.preg > fighter.pregData.normalBirth && fighter.pregControl !== "labor suppressors") {	// FIXME: pregData doesn't exist on SlaveState
				return `${He}'ll be going into labor any time now and ${he} knows it. ${He}'s terrified of the thought of ${his} water breaking during the fight.`;
			}
		}

		function bellyFluid() {
			if (fighter.bellyFluid > 10000) {
				return `${His} hugely bloated, ${fighter.inflationType}-filled belly is taut and painful, hindering ${his} ability to fight.`;
			} else if (fighter.bellyFluid > 5000) {
				return `${His} bloated, ${fighter.inflationType}-stuffed belly is constantly jiggling and moving, distracting ${him} and throwing off ${his} weight.`;
			} else if (fighter.bellyFluid > 2000) {
				return `${His} distended, ${fighter.inflationType}-belly is uncomfortable and heavy, distracting ${him}.`;
			}
		}

		function sight() {
			if (!canSee(fighter)) {
				return `${His} lack of eyesight is certain death.`;
			} else if (!canSeePerfectly(fighter)) {
				return `${His} poor eyesight makes ${him} a weaker combatant.`;
			}
		}

		function hearing() {
			if (!canHear(fighter)) {
				return `${His} lack of hearing is a major detriment.`;
			} else if ((fighter.hears === -1 && fighter.earwear !== "hearing aids") || (fighter.hears === 0 && fighter.earwear === "muffling ear plugs")) {		// TODO: replace with canHearPerfectly
				return `${His} poor hearing is a minor detriment.`;
			}
		}

		function prosthetics() {
			if (hasAnyProstheticLimbs(fighter)) {
				const r = [];

				r.push(`The pit lights gleam on ${his} P-Limbs.`);

				if (getLimbCount(fighter, 6) > 0) {
					r.push(`The limits on ${his} cybernetic limbs have been lifted, turning them deadly.`);
				} else if (getLimbCount(fighter, 5) > 0) {
					r.push(`Their integral weapons are fully uncaged.`);
				}

				return r.join(' ');
			}
		}
	}

	function fight() {
		const fightDiv = document.createElement("div");

		const winnerDeadliness = deadliness(winner);
		const loserDeadliness = deadliness(loser);

		const {he, his, him, himself, girl, He} = getPronouns(winner);
		const {he: he2, his: his2, him: him2, girl: girl2} = getPronouns(loser);

		const r = [];

		fightDiv.classList.add("pit-section");

		r.push(`In any case, ${animal ? `the slave and the ${animal.name} have both` : `both of the slaves`} been dosed with aggression enhancers and inhibition blockers; they'll fight to kill.`);

		if (animal) {
			//
		} else {
			if (!canSee(winner) && !canSee(loser)) {
				r.push(`${winner.slaveName} and ${loser.slaveName} are both blind, making the fight a staredown. Neither slave wants to make the first move, especially with the drowning cacophony coming from the jeering crowd. Slowly, ${winner.slaveName} moves forward, waving ${his} sword side to side in the hopes of finding ${his} opponent before ${he} ${himself} gets found. ${loser.slaveName}'s sword clips the tip of ${winner.slaveName}'s setting off a surprisingly brutal series of slashes. The two slaves violently lay into each other, suffering more and more strikes as the struggle goes on. Less than a minute from first contact, both slaves are lying in their combined blood. As you begin to call it a draw, you notice ${winner.slaveName} start to stir. ${He} staggers to ${his} feet, coated in ${his} and ${loser.slaveName}'s blood, before dropping back to ${his} knees. It seems ${he} lived through this fight; odds aren't likely ${he}'ll do it again.`);

				healthDamage(winner, 50);

				if (V.pit.audience === "free") {
					r.push(`The audience is surprised by the sudden violence after so much standing around, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is modest.`);

					cashX(5000, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `surprised`, ["reputation", "inc"]), ` by the sudden violence after so much standing around.`);

					repX(250, "pit", winner);
				}
			} else if (winnerDeadliness > (loserDeadliness + 1) && getArmCount(winner, 6) > 1) {
				r.push(`Upon your word the two combatants approach each other. ${winner.slaveName} does not carry a sword, raising only ${his} hands, but these are terrifying, modern weapons themselves. ${loser.slaveName} tries a probing sweep, but ${winner.slaveName} catches ${his2} blade in one hand, slides it down to the hilt with a shriek of metal on metal, and snaps the blade cleanly. ${loser.slaveName} ${canSee(loser) ? `watches this` : `freezes in place`}, dumbstruck, before regaining composure and taking a fighting stance again. ${winner.slaveName} manages to touch ${his} opponent's bare skin with ${his} own cybernetics, incapacitating ${loser.slaveName} with an electric shock. While ${loser.slaveName} is temporarily stunned, ${winner.slaveName} strikes ${loser.slaveName} on the head with deadly force, crushing ${his} opponent's skull. Though the fight was short,`);

				if (V.pit.audience === "free") {
					r.push(`the audience is `, App.UI.DOM.makeElement("span", `very impressed`, ["reputation", "inc"]), ` by the display.`);

					repX(500, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`the audience is quite impressed by the display, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is quite good.`);

					cashX(10000, "pit", winner);
				}
			} else if (winnerDeadliness > (loserDeadliness + 1) && getArmCount(winner, 5) > 1) {
				r.push(`Upon your word the two combatants approach each other. ${winner.slaveName} drops ${his} sword as ${he} comes, raising only ${his} hands, but these are terrifying, modern weapons themselves. ${loser.slaveName} tries a probing sweep, but ${winner.slaveName} catches ${his2} blade in one hand, slides it down to the hilt with a shriek of metal on metal, and snaps the blade cleanly. As ${loser.slaveName} watches this, dumbstruck, ${winner.slaveName} places a gentle hand under ${his2} chin and then extends that arm's integral blade up and through ${his} opponent's skull. Though the fight was short,`);

				if (V.pit.audience === "free") {
					r.push(`the audience is `, App.UI.DOM.makeElement("span", `very impressed`, ["reputation", "inc"]), ` by the display.`);

					repX(500, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`the audience is quite impressed by the display, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is quite good.`);

					cashX(10000, "pit", winner);
				}
			} else if (!canSee(winner)) {
				r.push(`${winner.slaveName} centers ${himself} and hones in on ${loser.slaveName}'s rapid breath. ${He} readies ${himself}, knowing ${he} has a single chance to live. With heavy steps, ${loser.slaveName} rushes ${him}, fully prepared to slaughter the helpless combatant. ${winner.slaveName} gambles everything on a single high slash, a slash that cut ${loser.slaveName}'s undefended neck wide open. ${winner.slaveName} collapses to the ground, fully aware of ${loser.slaveName}'s final gurgles, and the sword `, App.UI.DOM.makeElement("span", `firmly planted in ${his} side.`, ["health", "dec"]), ` ${He} lived this time, barely, but ${he} doubts ${he} can do it again.`);

				healthDamage(winner, 80);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `awestruck`, ["reputation", "inc"]), ` by the blind ${girl}'s triumph.`);

					repX(2000, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is awestruck by the blind ${girl}'s triumph, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is enormous.`);

					cashX(40000, "pit", winner);
				}
			} else if (!canSee(loser)) {
				r.push(`${winner.slaveName} sighs at ${loser.slaveName}'s random slashing and calmly struts around the panicking slave. In one quick swoop, ${he} buries ${his} blade in ${loser.slaveName}'s back, ending the poor ${girl2}'s flailing.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `annoyed`, ["reputation", "dec"]), ` by this waste of a fight.`);

					repX(-20, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience found the fight embarrassing, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is pitiful.`);

					cashX(40, "pit", winner);
				}
			} else if (winnerDeadliness > (loserDeadliness + 3)) {
				if (winner.skill.combat > 0) {
					r.push(`${winner.slaveName} wants to win, and ${he} opens the fight with a furious attack. ${loser.slaveName} manages to get ${his2} blade up, blocking a strike with a ringing clash and a few sparks, but by doing so leaves ${his2} abdomen open and obscures ${his2} vision enough that ${he2} is unprepared for the following horizontal slash, which opens ${his2} belly wide. The stricken ${girl2} collapses, feebly trying to push ${his2} viscera back into place. Whether out of mercy or a desire to get it over with, ${winner.slaveName} quickly removes the dying ${girl2}'s head.`);

					if (V.pit.audience === "free") {
						r.push(`The audience is `, App.UI.DOM.makeElement("span", `reasonably impressed`, ["reputation", "inc"]), ` by the gore.`);

						repX(200, "pit", winner);
					} else if (V.pit.audience === "paid") {
						r.push(`The audience is reasonably impressed by the gore, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is reasonable.`);

						cashX(4000, "pit", winner);
					}
				} else {
					r.push(`${winner.slaveName} wants to win and is confident ${he} will, but ${he} isn't particularly sure about how to do so. ${He} fights cautiously, swinging ${his} sword in powerful but inaccurate strokes. It is only a matter of time before one of these strikes gets through; it's telling that rather than hitting what ${he} aimed at, ${winner.slaveName} accidentally opens a massive gash down ${loser.slaveName}'s thigh. Realizing ${he2} has to do something, ${loser.slaveName} makes a desperate counterattack, pouring blood as ${he2} goes. ${winner.slaveName} panics and fails to parry one of the last counterstrikes before loss of blood ends the attack, suffering a `, App.UI.DOM.makeElement("span", `terrible cut`, ["health", "dec"]), ` to ${his} shoulder. Down to one arm, ${winner.slaveName} is forced to make a long, loud butchery of ending the fight.`);

					healthDamage(winner, 20);

					if (V.pit.audience === "free") {
						r.push(`The audience is `, App.UI.DOM.makeElement("span", `reasonably impressed`, ["reputation", "inc"]), ` by the blood.`);

						repX(200, "pit", winner);
					} else if (V.pit.audience === "paid") {
						r.push(`The audience is reasonably impressed by the blood, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is reasonable.`);

						cashX(4000, "pit", winner);
					}
				}
			} else if (winner.skill.combat > 0 && loser.skill.combat > 0) {
				r.push(`Upon your word the two combatants approach each other warily, both knowing the other is reasonably competent. Before long they are trading thrust and parry, swing and block. ${winner.slaveName} is slowly pressed back, so ${he} decides to change the nature of the fight. After three tries ${he} manages to force ${loser.slaveName} to close, suffering a `, App.UI.DOM.makeElement("span", `nearly severed ear`, ["health", "dec"]), ` as ${he} does. ${loser.slaveName} realizes ${he2} only retains an advantage at long range but cannot back up fast enough to avoid close combat. ${loser.slaveName} is forced back fast enough that ${he2} trips; ${he2}'s barely fallen on ${his2} back before ${he2} grunts with shock and pain, dying with a look of surprise as ${he2} stares at the sword growing out of ${his2} chest.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `very impressed`, ["reputation", "inc"]), ` by the expert fight.`);

					repX(500, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is quite impressed by the expert fight, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is quite good.`);

					cashX(10000, "pit", winner);
				}
			} else if (winner.height - loser.height < -10) {
				r.push(`${winner.slaveName} realizes that ${loser.slaveName}'s wingspan gives ${him2} a huge reach advantage. ${He} bores straight in, taking `, App.UI.DOM.makeElement("span", `a glancing scalp wound`, ["health", "dec"]), ` but coming on regardless. ${loser.slaveName} understands ${his2} opponent's intention and backs off, but the pit is small and there isn't much room to retreat. When ${his2} back hits a padded wall, ${winner.slaveName} aims a gutting cut that ${loser.slaveName} struggles to block. ${he2} manages it, but the wall catches ${his2} point, so the block is with ${his2} wrist, not ${his2} sword. The sharp blade cuts almost all the way through the joint, leaving ${him2} in agony and totally incapable of defense. ${winner.slaveName} pushes ${his2} head back against the wall and cuts ${his2} throat down to the spine.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `reasonably impressed`, ["reputation", "inc"]), ` by the blood.`);

					repX(200, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is reasonably impressed by the blood, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is reasonable.`);

					cashX(4000, "pit", winner);
				}
			} else if (winner.muscles > 30) {
				r.push(`${winner.slaveName} is so massively muscular that ${he}'s actually impeded by ${his} lack of speed and flexibility. ${loser.slaveName} is properly afraid of ${his2} strength, though, so ${he2} tries to stay away as much as ${he2} can. The few times their blades clash reinforces this approach, since ${winner.slaveName} is able to beat ${his} opponent's blocks out of the way with contemptuous ease. The fight takes a long, long time, but it takes more out of ${loser.slaveName} to survive than it takes out of ${winner.slaveName} to keep swinging. Eventually the gasping, weeping ${loser.slaveName} trips and does not struggle to ${his2} feet in time. It takes ${his2} tired opponent several overhead butcher's cleaves to end it.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `reasonably impressed`, ["reputation", "inc"]), ` by the show of strength.`);

					repX(50, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is reasonably impressed by the show of strength, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is reasonable.`);

					cashX(1000, "pit", winner);
				}
			} else if (loser.belly > 300000) {
				r.push(`${winner.slaveName} wants to live badly enough that ${he} takes an extremely brutal shortcut to victory. The instant the fight starts, ${he} quickly slices right across ${loser.slaveName}'s massive belly, which is far too large to possibly defend. ${loser.slaveName}'s belly ruptures like a popped water balloon, showering ${winner.slaveName} with`);

				if (loser.pregType > 0) {
					r.push(`blood. ${loser.slaveName} collapses into the pile of organs and babies released from ${his2} body.`);
				} else if (loser.bellyImplant > 0) {
					r.push(`blood and filler. ${loser.slaveName} collapses into the pool of organs and fluid released from ${his2} body.`);
				} else {
					r.push(`blood and ${loser.inflationType}. ${loser.slaveName} collapses into the pool of organs and fluid released from ${his2} body.`);
				}

				r.push(`${winner.slaveName} walks over to the bleeding out slave and quickly cuts ${his2} throat.`);

				if (V.pit.audience === "free") {
					r.push(`the audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy kill.`);

					repX(100, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is not very impressed by this easy kill, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is unimpressive.`);

					cashX(2000, "pit", winner);
				}
			} else if (loser.boobs > 1200) {
				r.push(`${winner.slaveName} takes an extremely simple shortcut to victory. The instant the fight starts, ${he} slices ${loser.slaveName} right across ${his2} huge tits, which are so large they cannot properly be defended. ${loser.slaveName} reflexively drops ${his2} sword to clasp ${his2} ${hasBothArms(loser) ? `hands` : `hand`} over ${his2} ruined breasts, gushing blood${loser.boobsImplant > 400 ? ` and implant fluid` : ``}. ${winner.slaveName}'s follow-up is neither artful nor particularly well planned, but it is effective. ${He} hits the distracted ${girl2}'s neck from the side, almost but not quite separating ${his2} head from ${his2} body.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy kill.`);

					repX(100, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is not very impressed by this easy kill, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is unimpressive.`);

					cashX(2000, "pit", winner);
				}
			} else if (loser.dick > 0) {
				r.push(`${winner.slaveName} wants to live badly enough that ${he} takes an extremely brutal shortcut to victory. The instant the fight starts, ${he} furiously swings for ${loser.slaveName}'s face. ${loser.slaveName} reflexively raises ${his2} sword to block, at which point ${winner.slaveName} simply kicks ${him2} in the dick. ${loser.slaveName} goes down like a marionette with cut strings, ${his2} mouth soundlessly opening and closing and tears leaking from ${his2} closed eyes. ${winner.slaveName} walks over to the prostrate slave and cuts ${his2} throat without much trouble.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy kill.`);

					repX(100, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is not very impressed by this easy kill, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is unimpressive.`);

					cashX(2000, "pit", winner);
				}
			} else {
				r.push(`${winner.slaveName} wants to live badly enough that ${he} takes an extremely brutal shortcut to victory. The instant the fight starts, ${he} furiously swings for ${loser.slaveName}'s face. ${loser.slaveName} reflexively raises ${his2} sword to block, at which point ${winner.slaveName} simply kicks ${him2} in the cunt. ${loser.slaveName} goes down like a marionette with cut strings, ${his2} mouth soundlessly opening and closing and tears leaking from ${his2} closed eyes. ${winner.slaveName} walks over to the prostrate slave and cuts ${his2} throat without much trouble.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy kill.`);

					repX(100, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is not very impressed by this easy kill, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is unimpressive.`);

					cashX(2000, "pit", winner);
				}
			}
		}

		App.Events.addNode(fightDiv, r);

		return fightDiv;
	}

	function postFight() {
		const postFightDiv = document.createElement("div");
		const mindbrokenSpan = App.UI.DOM.makeElement("span", `no longer capable`, "red");
		const experienceSpan = App.UI.DOM.makeElement("span", `learned basic combat skills.`, ["improvement"]);

		const {he, his, him, himself, He} = getPronouns(winner);
		const {sister: sister2} = getPronouns(loser);

		const r = [];

		r.push(`You let the winner ${winner.slaveName}, shaking as ${he} comes off the adrenaline, drugs, and the fear, exit the pit.`);

		if (winner.fetish === "mindbroken") {
			r.push(`${He} was already so broken before today that ${he} will not be seriously affected by having killed with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}.`);
		} else if (winner.devotion > 95) {
			r.push(`${He} is so worshipful of you that ${he} does not see killing ${loser.slaveName} as special in ${his} own internal listing of things that ${he} has willingly done and would willingly do again on your behalf.`);
		} else if (winner.devotion > 80) {
			r.push(`${He} will never forget having killed ${loser.slaveName} with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}. The only way ${he} will be able to live with ${himself} is to `, App.UI.DOM.makeElement("span", `subsume ${his} will to yours,`, ["devotion", "inc"]), ` telling ${himself} that the killing was to serve and obey you.`);

			winner.devotion += 10;
		} else if (winner.fetish === "sadist" && winner.fetishKnown && winner.fetishStrength > 60) {
			r.push(`${He} has sunk even deeper into cruelty, callousness, and a total disregard of the value of other slaves' lives. Going forward, ${he}'s even `, App.UI.DOM.makeElement("span", `less likely to question`, ["devotion", "inc"]), ` even the most abominable commands.`);

			winner.devotion += 10;
		} else if (winner.devotion > 50) {
			r.push(`${He} will never forget having killed ${loser.slaveName} with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}. The only way ${he} will be able to live with ${himself} is to tell ${himself} that the killing was done on your orders.`);
		} else {
			r.push(`${He} will never forget having killed ${loser.slaveName} with ${his} own ${hasBothArms(winner) ? `hands` : `hand`}. The only way ${he} will be able to live with ${himself} is to `, App.UI.DOM.makeElement("span", `blame you,`, ["devotion", "dec"]), ` telling ${himself} that the killing was the only choice you gave ${him} if ${he} wanted to live.`);

			winner.devotion -= 10;
		}

		if (winner.fetish !== "sadist") {
			if (random(1, 100) > 50) {
				r.push(`Cruelty and callousness seeps its way into ${his} sexuality; ${he} has become a `, App.UI.DOM.makeElement("span", `bloody sadist.`, ["fetish", "gain"]));

				winner.fetish = "sadist";
				winner.fetishKnown = 1;
				winner.fetishStrength = 65;
			}
		}

		if (winner.rivalry && loser.ID === winner.rivalryTarget) {
			if (winner.devotion > 75) {
				r.push(`${He} is so accepting of the low value of slave life that ${he} `, App.UI.DOM.makeElement("span", `is pleased`, ["devotion", "inc"]), ` to have killed ${his} rival ${loser.slaveName}.`);

				winner.devotion += 4;
			}
		} else if (winner.relationship && loser.ID === winner.relationshipTarget) {
			if (winner.devotion > 95) {
				r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} only friend at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed slave relationship.`);

				winner.devotion += 4;
			} else {
				r.push(`${He} shows little reaction to the death of ${his} only friend at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`);

				winner.fetish = "mindbroken";
				winner.fetishKnown = 1;
			}
		} else if (isParentP(winner, loser) || isParentP(loser, winner)) {
			if (winner.devotion > 95) {
				r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`);

				winner.devotion += 4;
			} else {
				r.push(`${He} shows little reaction to the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`);

				winner.fetish = "mindbroken";
				winner.fetishKnown = 1;
			}
		} else if (winner.sisters > 0) {
			switch (areSisters(winner, loser)) {
				case 1:
					if (winner.devotion > 95) {
						r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`);

						winner.devotion += 4;
					} else {
						r.push(`${He} shows little reaction to the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`);

						winner.fetish = "mindbroken";
						winner.fetishKnown = 1;
					}
					break;
				case 2:
					if (winner.devotion > 90) {
						r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`);

						winner.devotion += 4;
					} else {
						r.push(`${He} shows little reaction to the death of ${his} ${relativeTerm(winner, loser)} at ${his} own hand. In the coming days, it becomes clear that this is because ${he} is `, mindbrokenSpan, ` of reacting to anything on an emotional level. Ever again.`);

						winner.fetish = "mindbroken";
						winner.fetishKnown = 1;
					}
					break;
				case 3:
					if (winner.devotion > 85) {
						r.push(`${He} is so worshipful of you that ${he} sees the death of ${his} half-${sister2} at ${his} own hand as an `, App.UI.DOM.makeElement("span", `honorable`, ["devotion", "inc"]), ` end to their doomed family.`);

						winner.devotion += 4;
					} else {
						r.push(`${He} is `, App.UI.DOM.makeElement("span", `utterly devastated`, ["devotion", "dec"]), ` at being forced to take the life of ${his} half-${sister2}.`);

						winner.devotion -= 50;
					}
					break;
			}
		}

		V.pit.slaveFightingBodyguard = null;

		if (winner.skill.combat === 0) {
			r.push(`With lethal experience in ${V.pit.name}, ${winner.slaveName} has `, experienceSpan);

			winner.skill.combat++;
		}

		winner.counter.pitKills++;

		if (!V.pit.bodyguardFights || S.Bodyguard.ID !== winner.ID) {
			V.pit.fighterIDs.push(winner.ID);
		}

		V.pitKillsTotal++;

		removeSlave(loser);

		V.pitFightsTotal++;
		winner.counter.pitWins++;

		App.Events.addNode(postFightDiv, r);

		return postFightDiv;
	}

	// MARK: Helper Functions

	/**
	 * @returns {number}
	 */
	function getWinner() {
		if (!animal) {
			if (fighterDeadliness(getSlave(fighters[0])) > fighterDeadliness(getSlave(fighters[1]))) {
				return fighters[0];
			} else if (fighterDeadliness(getSlave(fighters[0])) < fighterDeadliness(getSlave(fighters[1]))) {
				return fighters[1];
			} else if (random(1, 100) > 50) {
				return fighters[0];
			} else {
				return fighters[1];
			}
		}
	}

	/**
	 * @returns {number}
	 */
	function getLoser() {
		return winner.ID === fighters[0] ? fighters[1] : fighters[0];
	}
};


code:
App.Facilities.Pit.fight.nonlethal = function(fighters) {
	const frag = new DocumentFragment();

	const animal = V.pit.animal;

	const winner = getSlave(getWinner());
	const loser = getSlave(getLoser());

	frag.append(intro(), fighterDeadliness(getSlave(fighters[0])), fighterDeadliness(getSlave(fighters[1])), fight(), postFight());

	return frag;

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

		const fighterOne = getSlave(fighters[0]);
		const fighterTwo = getSlave(fighters[1]);

		const r = [];

		introDiv.classList.add("pit-section");

		App.Events.drawEventArt(introDiv, fighters.map(id => getSlave(id)), "no clothing");

		const an = animal ? animal.articleAn ? 'an' : 'a' : null;
		const anAnimal = animal ? `${an} ${animal.name}` : null;

		r.push(`${animal ?
			`This week ${anAnimal} is going to try to use ${fighterOne.slaveName}.` :
			`This week's fight is between ${fighterOne.slaveName} and ${fighterTwo.slaveName}.`}`);

		if (animal) {
			// for future inclusion
		} else {
			if (V.pit.audience === "none") {
				r.push(`You are alone above the pit, left to watch them square off in private.`);
			} else if (V.pit.audience === "free") {
				r.push(`Your guests line the rim of the pit, joking and betting.`);
			} else {
				r.push(`The attendees line the rim of the pit, betting and arguing.`);
			}

			if (V.arcologies[0].FSRomanRevivalist !== "unset") {
				r.push(`They `, App.UI.DOM.makeElement("span", 'strongly approve', ["reputation", "inc"]), ` of your hosting combat between slaves; this advances ideas from antiquity about what public events should be.`);

				repX(10 * V.FSSingleSlaveRep * (V.arcologies[0].FSRomanRevivalist / V.FSLockinLevel), "pit");
				V.arcologies[0].FSRomanRevivalist += (0.2 * V.FSSingleSlaveRep);
			}

			r.push(`You review the rules — the combatants are wearing light gloves, and the fight will be nonlethal, with you as the judge. The winner will have the right to do anything they wish to the loser,`);

			switch (V.pit.virginities) {
				case "all":
					r.push(`except take their virginity,`);
					break;
				case "anal":
					r.push(`except take their anal virginity,`);
					break;
				case "vaginal":
					r.push(`except take virginities,`);
					break;
				case "neither":
					r.push(`even take virginities,`);
					break;
				default:
					throw new Error(`Unexpected V.pit.virginities value of '${V.pit.virginities}' found in App.Facilities.Pit.fight.intro()`);
			}

			r.push(`and earn two complete days of rest. You take a moment to look over your fighters before giving the word.`);
		}

		App.Events.addNode(introDiv, r);

		return introDiv;
	}

	/** @param {App.Entity.SlaveState} fighter */
	function fighterDeadliness(fighter) {
		const deadlinessDiv = document.createElement("div");

		const {he, his, him, himself, He, His} = getPronouns(fighter);
		const fighterDeadliness = deadliness(fighter);

		const r = [];

		deadlinessDiv.classList.add("pit-section");

		r.push(
			confidence(),
			skill(),
			age(),
			muscles(),
			height(),
			health(),
			weight(),
			tired(),
			pregnancy(),
			labor(),
			bellyFluid(),
			sight(),
			hearing(),
			prosthetics(),
			willingness(),
		);

		App.Events.addNode(deadlinessDiv, r);

		return deadlinessDiv;

		function confidence() {
			if (fighter.fetish === "mindbroken") {
				return `${fighter.slaveName} is too broken to care what happens to ${him}.`;
			} else if (fighterDeadliness > 5) {
				return `${fighter.slaveName} seems very confident, even eager to win a break.`;
			} else if (fighterDeadliness > 3) {
				return `${fighter.slaveName} seems nervous, but steels ${himself} to fight for time off.`;
			} else if (fighterDeadliness > 1) {
				return `${fighter.slaveName} seems hesitant and unsure.`;
			} else {
				return `${fighter.slaveName} is obviously terrified, and might flee if there were a way out of the pit.`;
			}
		}

		function willingness() {
			if (fighter.devotion < 20 && fighter.trust < -20) {
				return `${He} is unwilling to fight, but ${he} knows the punishment for refusing to do so will be even worse.`;
			}
		}

		function skill() {
			if (fighter.skill.combat > 0) {
				return `${His} stance is obviously well-practiced.`;
			}
		}

		function age() {
			if (V.AgePenalty !== 0) {
				if (fighter.physicalAge >= 100) {
					return `${He} seems preoccupied, which is unsurprising given ${his} age and resulting fragility.`;
				} else if (fighter.physicalAge >= 85) {
					return `${He} tries not to waste ${his} strength before the fight, knowing that ${his} extreme age won't allow ${him} a second wind.`;
				} else if (fighter.physicalAge >= 70) {
					return `${He} steadies ${himself} as well as ${he} can in ${his} advanced age.`;
				}
			}
		}

		function muscles() {
			if (fighter.muscles > 95 && fighter.height > 185) {
				return `${His} huge muscles are an intimidating sight and, despite their massive size, ${he} is tall enough to not be hindered by them.`;
			} else if (fighter.muscles > 95) {
				return `${His} huge muscles are an intimidating sight, but may hinder ${his} flexibility.`;
			} else if (fighter.muscles > 30) {
				return `${His} muscles are a trim and powerful sight.`;
			} else if (fighter.muscles < -95) {
				return `${He} can barely stand, let alone defend ${himself}.`;
			} else if (fighter.muscles < -30) {
				return `${He} is very weak; a single punch will likely floor ${him}.`;
			} else if (fighter.muscles < -5) {
				return `${He} is rather unfit; ${he} will likely be outmatched by near any real opponent.`;
			} else {
				return `${He} is only somewhat fit and will likely not be able to win through pure strength.`;
			}
		}

		function height() {
			if (fighter.height > 170) {
				return `${His} height gives ${him} a reach advantage with ${his} fists and feet.`;
			}
		}

		function health() {
			if (fighter.health.condition > 50) {
				return `${His} shining health makes ${him} a better fighter.`;
			} else if (fighter.health.condition) {
				return `${His} poor health makes ${him} a weaker combatant.`;
			}
		}

		function weight() {
			if (fighter.weight > 190) {
				return `${His} extreme weight nearly immobilizes ${him}. ${He} is essentially a fleshy punching bag.`;
			} else if (fighter.weight > 160) {
				return `${His} extreme weight limits ${his} mobility and range of motion even if ${he} can take punches like nothing.`;
			} else if (fighter.weight > 130) {
				return `${His} extreme weight holds ${him} back as a pit fighter.`;
			} else if (fighter.weight > 30) {
				return `${His} heavy weight is an impediment as a pit fighter.`;
			} else if (fighter.weight < -10) {
				return `${His} light weight is an impediment as a pit fighter.`;
			}
		}

		function tired() {
			if (fighter.health.tired > 90) {
				return `${He} is exhausted and can barely stay awake; ${he} won't put up a fight.`;
			} else if (fighter.health.tired > 60) {
				return `${He} is fatigued, sapping the strength ${he}'ll need in ${his} strikes.`;
			} else if (fighter.health.tired > 30) {
				return `${He} is tired and more likely to take a hit then to give one.`;
			}
		}

		function pregnancy() {
			if (fighter.pregKnown || fighter.bellyPreg > 1500) {
				if (fighter.bellyPreg > 750000) {
					return `${His} monolithic pregnancy guarantees ${his} loss; not only is ${he} on the verge of splitting open, but it is an unmissable, indefensible target that threatens to drag ${him} to the ground. ${He} has no hope of attacking around the straining mass, let alone stopping ${his} opponent. The fear of what would happen should ${his} adversary land a hit on ${his} belly also weighs upon ${his} mind.`;
				} else if (fighter.bellyPreg > 600000) {
					return `${His} titanic pregnancy is practically a guaranteed loss; ${he} can barely stand let alone fight. The worry of a solid hit striking ${his} life swollen womb also weighs on ${his} mind.`;
				} else if (fighter.bellyPreg > 450000) {
					return `${His} gigantic pregnancy is nearly a guaranteed loss; it presents an unmissable, indefensible target for ${his} adversary.`;
				} else if (fighter.bellyPreg > 300000) {
					return `${His} massive pregnancy obstructs ${his} movement and greatly hinders ${him}. ${He} struggles to think of how ${he} could even begin to defend ${his} bulk.`;
				} else if (fighter.bellyPreg > 150000) {
					return `${His} giant pregnancy obstructs ${his} movement and greatly slows ${him} down.`;
				} else if (fighter.bellyPreg > 100000) {
					return `${His} giant belly gets in ${his} way and weighs ${him} down.`;
				} else if (fighter.bellyPreg > 10000) {
					return `${His} huge belly is unwieldy and hinders ${his} efforts.`;
				} else if (fighter.bellyPreg > 5000) {
					return `${His} advanced pregnancy makes ${him} much less effective.`;
				} else if (fighter.bellyPreg > 1500) {
					return `${His} growing pregnancy distracts ${him} from the fight.`;
				} else {
					return `The life just beginning to grow inside ${him} distracts ${him} from the fight.`;
				}
			} else if (fighter.bellyImplant > 1500) {
				if (fighter.bellyImplant > 750000) {
					return `${His} monolithic, ${fighter.bellyImplant}cc implant-filled belly guarantees ${his} defeat; not only is ${he} on the verge of splitting open, but it is an unmissable, indefensible target that threatens to drag ${him} to the ground. ${He} has no hope of attacking around the straining mass, let alone stopping ${his} opponent.`;
				} else if (fighter.bellyImplant > 600000) {
					return `${His} titanic, ${fighter.bellyImplant}cc implant-filled belly is practically a guaranteed defeat; ${he} can barely stand let alone fight. Not only is it cripplingly heavy, unwieldy and an easy target, but ${he} can feel it straining to hold the sheer amount of filler forced into it.`;
				} else if (fighter.bellyImplant > 450000) {
					return `${His} gigantic, ${fighter.bellyImplant}cc implant-filled belly is nearly a guaranteed defeat; it presents an unmissable, indefensible target for ${his} adversary.`;
				} else if (fighter.bellyImplant > 300000) {
					return `${His} massive, ${fighter.bellyImplant}cc implant-filled belly is extremely heavy, unwieldy and an easy target, practically damning ${him} in combat.`;
				} else if (fighter.bellyImplant > 150000) {
					return `${His} giant, ${fighter.bellyImplant}cc implant-filled belly obstructs ${his} movement and greatly slows ${him} down.`;
				} else if (fighter.bellyImplant > 100000) {
					return `${His} giant, ${fighter.bellyImplant}cc implant-filled belly is very heavy and unwieldy, throwing off ${his} weight and making ${him} far less effective.`;
				} else if (fighter.bellyImplant > 10000) {
					return `${His} huge, ${fighter.bellyImplant}cc implant-filled belly is very heavy and unwieldy, throwing off ${his} weight and making ${him} far less effective.`;
				} else if (fighter.bellyImplant > 5000) {
					return `${His} large, ${fighter.bellyImplant}cc implant-filled belly is heavy and unwieldy, rendering ${him} less effective.`;
				} else if (fighter.bellyImplant > 1500) {
					return `${His} swollen, ${fighter.bellyImplant}cc implant-filled belly is heavy and makes ${him} less effective.`;
				}
			}
		}

		function labor() {
			if (isInLabor(fighter)) {
				return `${He}'s feeling labor pains. ${His} ${fighter.pregType > 1 ? `children are` : `child is`} ready to be born, oblivious to the fact that it will put ${fighter.pregType > 1 ? `their` : `its`} mother at the mercy of ${his} opponent.`;
			} else if (fighter.preg > fighter.pregData.normalBirth && fighter.pregControl !== "labor suppressors") {	// FIXME: pregData doesn't exist on SlaveState
				return `${He}'ll be going into labor any time now and ${he} knows it. ${He}'s terrified of the thought of ${his} water breaking during the fight.`;
			}
		}

		function bellyFluid() {
			if (fighter.bellyFluid > 10000) {
				return `${His} hugely bloated, ${fighter.inflationType}-filled belly is taut and painful, hindering ${his} ability to fight.`;
			} else if (fighter.bellyFluid > 5000) {
				return `${His} bloated, ${fighter.inflationType}-stuffed belly is constantly jiggling and moving, distracting ${him} and throwing off ${his} weight.`;
			} else if (fighter.bellyFluid > 2000) {
				return `${His} distended, ${fighter.inflationType}-belly is uncomfortable and heavy, distracting ${him}.`;
			}
		}

		function sight() {
			if (!canSee(fighter)) {
				return `${His} lack of eyesight means certain defeat.`;
			} else if (!canSeePerfectly(fighter)) {
				return `${His} poor eyesight makes ${him} a weaker fighter.`;
			}
		}

		function hearing() {
			if (!canHear(fighter)) {
				return `${His} lack of hearing is a major detriment.`;
			} else if ((fighter.hears === -1 && fighter.earwear !== "hearing aids") || (fighter.hears === 0 && fighter.earwear === "muffling ear plugs")) {		// TODO: replace with canHearPerfectly
				return `${His} poor hearing is a minor detriment.`;
			}
		}

		function prosthetics() {
			if (hasAnyProstheticLimbs(fighter)) {
				const r = [];

				r.push(`The pit lights gleam on ${his} P-Limbs.`);

				if (getLimbCount(fighter, 6) > 0) {
					r.push(`${His} advanced cybernetic limbs are faster than natural limbs, and their force is amplified, so that they can become potent weapons.`);
				} else if (getLimbCount(fighter, 5) > 0) {
					r.push(`Though their integral weapons are disabled, ${his} upgraded prosthetics are almost as fast as natural limbs, and they can hit much, much harder.`);
				}

				return r.join(' ');
			}
		}
	}

	function fight() {
		const fightDiv = document.createElement("div");

		const winnerDeadliness = deadliness(winner);
		const loserDeadliness = deadliness(loser);

		const {he, his, him, himself, girl, He} = getPronouns(winner);
		const {he: he2, his: his2, him: him2, himself: himself2, girl: girl2, He: He2, His: His2} = getPronouns(loser);

		const r = [];

		fightDiv.classList.add("pit-section");

		if (animal) {
			//
		} else {
			if (!canSee(winner) && !canSee(loser)) {
				r.push(`${winner.slaveName} and ${loser.slaveName} are both blind, making the fight a staredown. Neither slave wants to make the first move, especially with the drowning cacophony coming from the jeering crowd. Slowly, ${winner.slaveName} moves forward, waving feeling for ${his} opponent before ${he} ${himself} gets found. ${loser.slaveName}'s hand meets ${winner.slaveName}'s and the two move to grab each other in a headlock. The two slaves violently thrash against each other, suffering more and more strikes as the struggle goes on. Eventually, ${loser.slaveName} can take no more and releases ${his2} grip on ${winner.slaveName} neck. It takes a moment for ${winner.slaveName} to stop wrestling the submitting ${loser.slaveName} and accept ${his} victory.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `surprised`, ["reputation", "inc"]), ` by the impromptu wrestling match.`);

					repX(50, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is surprised by the sudden wrestling match, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is modest.`);

					cashX(500, "pit", winner);
				}
			} else if (winnerDeadliness > (loserDeadliness + 1) && getArmCount(winner, 6) > 1) {
				r.push(`Upon your word the two combatants approach each other. ${winner.slaveName} keeps ${his} advanced cybernetic limbs up in a protective position. ${loser.slaveName} probes ${him} with some light blows, puzzled by this ironclad defense. Gradually, ${he2} hits harder and harder, ${his2} opponent grunting under the impacts but holding steady. Finally, ${loser.slaveName} tires, gets off balance, and ${winner.slaveName} manages to grab ${his2} forearm. ${winner.slaveName}'s limbs emit an electric shock that temporarily incapacitates ${his} opponent. ${winner.slaveName} uses ${his} grip to pull ${his} stunned opponent in and grab ${his2} neck with the other hand, using it to exert just the right amount of pressure to choke ${him2} out harmlessly. Though the fight was short,`);

				if (V.pit.audience === "free") {
					r.push(`the audience is `, App.UI.DOM.makeElement("span", `very impressed`, ["reputation", "inc"]), ` by the display.`);

					repX(100, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`the audience is quite impressed by the display, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is quite good.`);

					cashX(2000, "pit", winner);
				}
			} else if (winnerDeadliness > (loserDeadliness + 1) && getArmCount(winner, 5) > 1) {
				r.push(`Upon your word the two combatants approach each other. ${winner.slaveName} keeps ${his} artificial limbs up in a protective position. ${loser.slaveName} probes ${him} with some light blows, puzzled by this ironclad defense. Gradually, ${he2} hits harder and harder, ${his2} opponent grunting under the impacts but holding steady. Finally, ${loser.slaveName} overcommits to a body blow, and ${winner.slaveName} grips ${his2} forearm. That is the end. The augmented grip is effectively unbreakable, and ${winner.slaveName} uses it to pull ${his} opponent in and grab ${his2} neck with the other hand, using it to exert just the right amount of pressure to choke ${him2} out harmlessly. Though the fight was short,`);

				if (V.pit.audience === "free") {
					r.push(`the audience is `, App.UI.DOM.makeElement("span", `very impressed`, ["reputation", "inc"]), ` by the display.`);

					repX(100, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`the audience is quite impressed by the display, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is quite good.`);

					cashX(2000, "pit", winner);
				}
			} else if (!canSee(winner)) {
				r.push(`${winner.slaveName} centers ${himself} and hones in on ${loser.slaveName}'s rapid breath. ${He} readies ${himself}, knowing ${he} has a single chance to win. With heavy steps, ${loser.slaveName} rushes ${him}, fully prepared to tackle the helpless combatant. ${winner.slaveName} gambles everything on a single high punch, a strike that slams ${loser.slaveName}'s undefended neck. ${loser.slaveName} falls to the ground before the panicking ${winner.slaveName}, who quickly pins the coughing loser.`);

				healthDamage(winner, 80);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `awestruck`, ["reputation", "inc"]), ` by the blind ${girl}'s triumph.`);

					repX(200, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is awestruck by the blind ${girl}'s triumph, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is enormous.`);

					cashX(4000, "pit", winner);
				}
			} else if (!canSee(loser)) {
				r.push(`${winner.slaveName} grins at ${loser.slaveName}'s random swings and poor form. ${He} centers in on ${his} favorite part of ${loser.slaveName}'s body before rushing between ${his2} strikes and tackling ${him2} to the ground. ${loser.slaveName} lays there, helpless to stop ${winner.slaveName} from molesting ${him2}.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `annoyed`, ["reputation", "dec"]), ` by this lack of a fight.`);

					repX(-20, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience found the fight embarrassing, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is pitiful.`);

					cashX(40, "pit", winner);
				}
			} else if (winnerDeadliness > (loserDeadliness + 3)) {
				if (winner.skill.combat > 0) {
					r.push(`${winner.slaveName} wants to win, and ${he} opens the fight with a furious attack. ${loser.slaveName} manages to get ${his2} ${hasBothArms(loser) ? `forearms` : `forearm`} up, blocking a few blows, but by doing so leaves ${his2} abdomen open and obscures ${his2} vision enough that ${he2} is unprepared for the following kidney strike, which brings ${him2} gasping to one knee. ${winner.slaveName} lets ${him2} rise just a little before delivering a calculated hard right that sends ${loser.slaveName} to the mat.`);

					if (V.pit.audience === "free") {
						r.push(`The audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this execution.`);

						repX(25, "pit", winner);
					} else if (V.pit.audience === "paid") {
						r.push(`The audience is not very impressed by this execution, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is unimpressive.`);

						cashX(500, "pit", winner);
					}
				} else {
					r.push(`${winner.slaveName} wants to win and is confident ${he} will, but ${he} isn't particularly sure about how to do so. ${He} fights cautiously, mostly hitting ${loser.slaveName} from afar. Slowly, the rain of blows begins to tell, opening ${loser.slaveName}'s lip, giving ${him2} a bloody nose, and bruising ${his2} face. Realizing ${he2} has to do something, ${loser.slaveName} makes a desperate counterattack, `, App.UI.DOM.makeElement("span", `dripping blood`, ["health", "dec"]), ` as ${he2} goes. As ${he2} does ${he2} manages to get ${his2} face in the way of another of ${winner.slaveName}'s inexpert strikes and goes down hard. ${He2} makes to rise, but ${winner.slaveName} decides the fight by the simple expedient of kicking ${him2} in the crotch.`);

					healthDamage(winner, 20);

					if (V.pit.audience === "free") {
						r.push(`The audience is `, App.UI.DOM.makeElement("span", `reasonably impressed`, ["reputation", "inc"]), ` by the beating.`);

						repX(50, "pit", winner);
					} else if (V.pit.audience === "paid") {
						r.push(`The audience is reasonably impressed by the beating, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is reasonable.`);

						cashX(100, "pit", winner);
					}
				}
			} else if (winner.belly > 60000 && loser.belly > 60000) {
				r.push(`${winner.slaveName} and ${loser.slaveName} stare each other down and both come to a realization. Neither can reach the other around their massive bellies. Instead, they choose to ram their bulk into each other in hopes of toppling the weaker. After a drawn out struggle, both slaves' middles are `, App.UI.DOM.makeElement("span", `dark red and shuddering,`, ["health", "dec"]), ` ready to burst open. Rather than continue, ${loser.slaveName} lets the next strike down ${him2} hoping that the outcome of this fight isn't fatal.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `very impressed`, ["reputation", "dec"]), ` by the showdown.`);

					repX(75, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is very impressed by the showdown, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is good.`);

					cashX(1500, "pit", winner);
				}
			} else if (winner.belly > 60000 && loser.belly < 30000) {
				r.push(`${loser.slaveName} spies an easy win against ${his2} massively bloated opponent and rushes in to topple ${winner.slaveName}. In an effort to defend ${himself}, ${winner.slaveName} hoists ${his} belly and turns suddenly, accidentally impacting ${loser.slaveName} with ${his} massive middle and knocking ${him2} to the ground. Seeing an opportunity, ${winner.slaveName} releases ${his} grip and slams ${his} weighty womb down on ${loser.slaveName}, bashing the wind out of ${him2}. ${loser.slaveName} struggles to slip out from under the mass, but the weight is too great and ${he2} passes out.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `impressed`, ["reputation", "dec"]), ` by this absurd win.`);

					repX(50, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is impressed by this absurd win, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is reasonably.`);

					cashX(1000, "pit", winner);
				}
			} else if (winner.skill.combat > 0 && loser.skill.combat > 0) {
				const healthSpans = [App.UI.DOM.makeElement("span", `broken nose`, ["health", "dec"]), App.UI.DOM.makeElement("span", `to the point of damage`, ["health", "dec"])];

				r.push(`Upon your word the two combatants approach each other warily, both knowing the other is reasonably competent. Before long they are trading expert blows. ${winner.slaveName} is getting the worst of it, so ${he} decides to change the nature of the fight. After three tries ${he} manages to bring ${loser.slaveName} to the ground, suffering a `, healthSpans[0], ` as ${he} does. ${loser.slaveName} tries to break the imperfect hold but only earns ${himself2} an elbow to the face. ${He2}'s furious and ${winner.slaveName} is obliged to wrench ${his2} arm `, healthSpans[1], ` before ${he2} allows ${himself2} to go limp.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `very impressed`, ["reputation", "inc"]), ` by the expert fight.`);

					repX(100, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is quite impressed by the expert fight, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is quite good.`);

					cashX(2000, "pit", winner);
				}
			} else if (winner.height - loser.height < -10) {
				r.push(`${winner.slaveName} realizes that ${loser.slaveName}'s wingspan gives ${him2} a huge reach advantage. ${He} bores straight in, taking a hit or two but coming on regardless. ${loser.slaveName} understands ${his2} opponent's intention and backs off, but the pit is small and there isn't much room to retreat. When ${his2} back hits a padded wall, ${winner.slaveName} manages to land a light hit to ${his2} stomach that leaves ${loser.slaveName} winded enough that a hard kick to the side of ${his2} knee goes undefended. It causes `, App.UI.DOM.makeElement("span", `considerable damage,`, ["health", "dec"]), ` dropping ${him2} and ending the fight.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `reasonably impressed`, ["reputation", "inc"]), ` by the takedown.`);

					repX(50, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is reasonably impressed by the takedown, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is reasonable.`);

					cashX(1000, "pit", winner);
				}
			} else if (loser.eyebrowPiercing > 0) {
				r.push(`The fight starts slowly, with the two trading jabs. Just as the spectators are getting bored, ${loser.slaveName} takes a glancing blow to the eyebrow. ${His2} piercing catches on ${winner.slaveName}'s glove and tears out. ${loser.slaveName} goes after ${his2} tormentor in fury, streaming blood, the piercing forgotten on the mat. Any tendency ${winner.slaveName} might have had to feel badly about this is extinguished by the assault, and soon ${winner.slaveName} is even willing to follow up on the success by targeting pierced body parts. The fight ends with poor ${loser.slaveName} writhing in pain on the mat, `, App.UI.DOM.makeElement("span", `leaking blood,`, ["health", "dec"]), ` from several terribly shredded areas.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `reasonably impressed`, ["reputation", "dec"]), ` by the gory spectacle.`);

					repX(50, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is reasonably impressed by the gory spectacle, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is reasonable.`);

					cashX(1000, "pit", winner);
				}
			} else if (winner.muscles > 30) {
				r.push(`${winner.slaveName} is so massively muscular that ${he}'s actually impeded by ${his} size. ${loser.slaveName} is properly afraid of ${his} strength, though, so ${he2} tries to stay away as much as ${he2} can. The pit isn't large, however, and eventually ${winner.slaveName} manages to lay a hand on ${him2}. ${He} pulls ${him2} down, and then it's all over but the beating. ${loser.slaveName} rains blows on ${his2} huge oppressor, but all ${winner.slaveName} has to do is hold on with one arm and deliver damage with the other. By the time ${he2} gives up and goes limp, ${loser.slaveName} has collected `, App.UI.DOM.makeElement("span", `many minor injuries.`, ["health", "dec"]));

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `reasonably impressed`, ["reputation", "inc"]), ` by the show of strength.`);

					repX(50, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is reasonably impressed by the show of strength, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is reasonable.`);

					cashX(1000, "pit", winner);
				}
			} else if (loser.belly > 300000) {
				r.push(`${winner.slaveName} wants to win badly enough that ${he} takes an extremely brutal shortcut to victory. The instant the fight starts, ${he} quickly knees ${loser.slaveName} in the stomach. The massively swollen ${loser.slaveName} goes down with a loud thud and plenty of jiggling. ${winner.slaveName} gloats over the struggling ${loser.slaveName} watching as ${he2} is unable to pull ${his2} bloated form off the ground.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy win.`);

					repX(50, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is not very impressed by this easy win, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is unimpressive.`);

					cashX(500, "pit", winner);
				}
			} else if (loser.boobs > 1200) {
				r.push(`${winner.slaveName} wants to win badly enough that ${he} takes an extremely simple shortcut to victory. The instant the fight starts, ${he} hits ${loser.slaveName} right in ${his2} huge tits, as hard as ${he} can. This is a sucker punch of the worst kind; ${loser.slaveName}'s boobs are so big that ${he2} has no real chance of defending them. ${He2} gasps with pain${hasAnyArms(loser) ? ` and wraps ${his2} ${hasBothArms(loser) ? `arms` : `arm`} around ${his2} aching bosom` : ``}, giving ${winner.slaveName} a clear opening to deliver a free and easy blow to the jaw that sends the poor top-heavy slave to the mat. Any chance of ${loser.slaveName} rising is extinguished by ${his2} breasts; it takes ${him2} so long to muster an attempt to get up that ${winner.slaveName} can rain hits on ${him2} while ${he2} does.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy win.`);

					repX(25, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is not very impressed by this easy win, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is unimpressive.`);

					cashX(500, "pit", winner);
				}
			} else if (loser.dick > 0) {
				r.push(`${winner.slaveName} wants to win badly enough that ${he} takes an extremely unpleasant shortcut to victory. The instant the fight starts, ${he} furiously goes for ${loser.slaveName}'s eyes${hasBothArms(winner) ? `, hands forming claws` : hasAnyArms(winner) ? `, ${his} hand forming a claw` : ``}. ${loser.slaveName} ${hasAnyArms(loser) ? `defends ${himself2} with ${his2} ${hasBothArms(loser) ? `arms` : `arm`}` : `tries to defend ${himself} as best ${he} can`}, at which point ${winner.slaveName} delivers a mighty cunt punt. ${loser.slaveName} goes straight down, ${his2} mouth soundlessly opening and closing and tears leaking from ${his2} closed eyes${hasAnyArms(loser) ?
					` while ${his} ${hasBothArms(loser) ?
						`hands desperately shield` :
						`hand desperately shields`} ${his2} outraged pussy` :
					``}. ${winner.slaveName} follows ${him2} down and puts the unresisting ${girl2}'s head in a simple lock.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy win.`);

					repX(25, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is not very impressed by this easy win, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is unimpressive.`);

					cashX(500, "pit", winner);
				}
			} else if (loser.vagina > 0) {
				r.push(`${winner.slaveName} wants to win badly enough that ${he} takes an extremely unpleasant shortcut to victory. The instant the fight starts, ${he} furiously goes for ${loser.slaveName}'s eyes${hasBothArms(winner) ? `, hands forming claws` : hasAnyArms(winner) ? `, ${his} hand forming a claw` : ``}. ${loser.slaveName} ${hasAnyArms(loser) ? `defends ${himself2} with ${his2} ${hasBothArms(loser) ? `arms` : `arm`}` : `tries to defend ${himself} as best ${he} can`}, at which point ${winner.slaveName} delivers a mighty cunt punt. ${loser.slaveName} goes straight down, ${his2} mouth soundlessly opening and closing and tears leaking from ${his2} closed eyes${hasAnyArms(loser) ? `while ${his} ${hasBothArms(loser) ? `hands` : `hand`} desperately shield${!hasBothArms(loser) ? `s` : ``} ${his2} outraged pussy` : ``}. ${winner.slaveName} follows ${him2} down and puts the unresisting ${girl2}'s head in a simple lock.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy win.`);

					repX(25, "pit", winner);
				} else if (V.pit.audience === "paid") {
					r.push(`The audience is not very impressed by this easy win, and your `, App.UI.DOM.makeElement("span", `cut of the betting`, ["cash", "inc"]), ` is unimpressive.`);

					cashX(500, "pit", winner);
				}
			} else {
				r.push(`${winner.slaveName} wants to win badly enough that ${he} takes an extremely unpleasant shortcut to victory. The instant the fight starts, ${he} furiously goes for ${loser.slaveName}'s eyes, hands forming claws. ${loser.slaveName} defends ${himself2} with ${his2} arms, at which point ${winner.slaveName} delivers a clenched fist to ${loser.slaveName}'s throat. ${loser.slaveName} staggers back, wheezing for breath with tears leaking from ${his2} closed eyes. ${winner.slaveName} takes advantage of ${loser.slaveName}'s vulnerability to quickly trip and pin the coughing loser.`);

				if (V.pit.audience === "free") {
					r.push(`The audience is `, App.UI.DOM.makeElement("span", `not very impressed`, ["reputation", "inc"]), ` by this easy win.`);

					repX(25, "pit", winner);
				} else if (V.pit.audience === "paid") {
					const cashSpan = App.UI.DOM.makeElement("span", `cut of the betting`, ["reputation", "inc"]);

					r.push(`The audience is not very impressed by this easy win, and your `, cashSpan, ` is unimpressive.`);

					cashX(500, "pit", winner);
				}
			}
		}

		App.Events.addNode(fightDiv, r);

		return fightDiv;
	}

	function postFight() {
		const postFightDiv = document.createElement("div");

		const {he, his, him, himself, He} = getPronouns(winner);
		const {he: he2, his: his2, him: him2, girl: girl2, He: He2} = getPronouns(loser);

		const r = [];

		const anus = "anus";
		const cunt = "cunt";
		const oral = "oral";
		const vaginal = "vaginal";
		const anal = "anal";

		const facefuck = `${He} considers ${his} options briefly, then hauls the loser to ${his2} knees for a facefuck.`;
		const winnerPenetrates = orifice => `${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`}, and penetrates the loser's ${orifice}.`;
		const loserProtest = `${canTalk(loser) ?
			`${loser.slaveName} starts to scream a protest to stop ${winner.slaveName} raping ${him2} pregnant, but ${winner.slaveName} grinds ${his2} face into the mat to shut ${him2} up` :
			`${loser.slaveName} tries to gesture a protest before ${winner.slaveName} fills ${his2} fertile ${loser.mpreg && V.pit.virginities !== anal ? `asspussy` : `pussy`} with cum, but ${winner.slaveName} grabs ${his2} ${hasBothArms(loser) ? `hands and pins them` : hasAnyArms(loser) ? `hand and pins it` : `neck firmly`} to keep ${him2} from complaining`}.`;

		const virginitySpan = App.UI.DOM.makeElement("span", ``, ["virginity", "loss"]);

		r.push(`You throw the victor's strap-on down to ${winner.slaveName}.`);

		if (canPenetrate(winner)) {
			r.push(`${He} has no need of it, only taking a moment to pump ${his} dick a few times to get it to rock hardness.`);
		} else if (winner.clit > 4) {
			r.push(`${He} has no need of it, since ${his} clit is big enough to use instead.`);
		} else if (winner.dick > 6 && !canAchieveErection(winner)) {
			r.push(`${He} needs it, since ${his} enormous dick can't get hard any longer (not like it would fit in ${loser.slaveName} anyway).`);
		} else if (winner.dick > 0) {
			r.push(`${He} needs it, since ${his} soft dick won't be raping anything.`);
		}

		if (V.pit.virginities === "all") {
			if (loser.vagina === 0 && canDoVaginal(loser) && loser.anus === 0 && canDoAnal(loser)) {
				r.push(`${He} respects ${loser.slaveName}'s virgin holes, and hauls the loser to ${his2} knees for a facefuck.`);

				actX(loser, oral);
			} else if (loser.vagina === 0 && canDoVaginal(loser) && canDoAnal(loser)) {
				r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`);

				if (winner.fetish === "pregnancy") {
					r.push(`and, after ${canSee(winner) ? `eyeing` : `feeling up`} ${his2} virgin vagina with desire, penetrates the loser's anus.`);
				} else {
					r.push(`and respects the rules by penetrating the loser's anus.`);
				}

				if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 1, winner.ID);
				}

				actX(loser, anal);
			} else if (loser.anus === 0 && canDoVaginal(loser) && canDoAnal(loser)) {
				r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`);

				if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) {
					r.push(`and, after ${canSee(winner) ? `eyeing` : `feeling up`} ${his2} virgin anus with desire, penetrates the loser's cunt.`);
				} else {
					r.push(`and respects the rules by penetrating the loser's cunt.`);
				}

				if (canPenetrate(winner) && canImpreg(loser, winner)) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 0, winner.ID);
				}

				actX(loser, vaginal);
			} else if (canDoVaginal(loser)) {
				r.push(winnerPenetrates(cunt));

				if (canPenetrate(winner) && canImpreg(loser, winner)) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 0, winner.ID);
				}

				actX(loser, vaginal);
			} else if (canDoAnal(loser)) {
				r.push(winnerPenetrates(anus));

				if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 1, winner.ID);
				}

				actX(loser, anal);
			} else {
				r.push(facefuck);

				actX(loser, oral);
			}
		} else if (V.pit.virginities === "anal") {
			if (loser.vagina === 0 && canDoVaginal(loser)) {
				r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`);

				if (winner.fetish === "pregnancy") {
					virginitySpan.append(`take ${his2} virginity.`);
					r.push(`and gleefully takes advantage of your rules to `, virginitySpan);
				} else {
					virginitySpan.append(`breaks in ${his2} virgin vagina.`);
					r.push(`and `, virginitySpan);
				}

				if (canPenetrate(winner) && canImpreg(loser, winner)) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 0, winner.ID);
				}

				loser.vagina++;
				actX(loser, vaginal);
			} else if (loser.anus === 0 && canDoAnal(loser)) {
				r.push(`${canTalk(loser) ?
					`${loser.slaveName} starts to scream a protest to stop ${winner.slaveName} raping ${him2} pregnant, but ${winner.slaveName} grinds ${his2} face into the mat to shut ${him2} up` :
					`${loser.slaveName} tries to gesture a protest before ${winner.slaveName} fills ${his2} fertile pussy with cum, but ${winner.slaveName} grabs ${his2} ${hasBothArms(loser) ? `hands and pins them` : hasAnyArms(loser) ? `hand and pins it` : `neck firmly`} to keep ${him2} from complaining`}.`);

				if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) {
					if (canDoVaginal(loser)) {
						r.push(`and penetrates the loser's cunt.`);

						if (canPenetrate(winner) && canImpreg(loser, winner)) {
							r.push(loserProtest);

							knockMeUp(loser, 50, 0, winner.ID);
						}

						loser.counter.vaginal++;
						V.vaginalTotal++;
					} else {
						r.push(`and finds only a pristine butthole waiting for ${him}. Respecting ${his2} anal virginity, ${he} hauls the loser onto ${his2} knees for a facefuck.`);

						actX(loser, oral);
					}
				}
			} else if (canDoVaginal(loser)) {
				r.push(winnerPenetrates(cunt));

				if (canPenetrate(winner) && canImpreg(loser, winner)) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 0, winner.ID);
				}

				actX(loser, vaginal);
			} else if (canDoAnal(loser)) {
				r.push();

				if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 1, winner.ID);
				}

				actX(loser, anal);
			} else {
				r.push(facefuck);

				actX(loser, oral);
			}
		} else if (V.pit.virginities === "vaginal") {
			if (loser.vagina === 0 && canDoVaginal(loser)) {
				r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`);

				if (winner.fetish === "pregnancy") {
					if (canDoAnal(loser)) {
						r.push(`and hungrily eyes ${his2} pristine vagina before penetrating the loser's ass.`);

						if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) {
							r.push(loserProtest);

							knockMeUp(loser, 50, 1, winner.ID);
						}

						actX(loser, anal);
					} else {
						r.push(`and hungrily eyes ${his2} pristine vagina before hauling the loser onto ${his2} knees for a facefuck.`);

						actX(loser, oral);
					}
				} else {
					if (canDoAnal(loser)) {
						r.push(`and penetrates the loser's ass.`);

						if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) {
							r.push(loserProtest);

							knockMeUp(loser, 50, 1, winner.ID);
						}

						actX(loser, anal);
					} else {
						r.push(`and finds only a pristine butthole waiting for ${him}. Respecting ${his2} anal virginity, ${he} hauls the loser onto ${his2} knees for a facefuck.`);

						actX(loser, oral);
					}
				}
			} else if (loser.anus === 0 && canDoAnal(loser)) {
				r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`);

				if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) {
					virginitySpan.append(`take ${his2} anal virginity.`);
					r.push(`and gleefully takes advantage of your rules to `, virginitySpan);
				} else {
					virginitySpan.append(`breaks in ${his2} virgin anus.`);
					r.push(`and `, virginitySpan);
				}

				if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 1, winner.ID);
				}

				loser.anus++;
				actX(loser, anal);
			} else if (canDoVaginal(loser)) {
				r.push(winnerPenetrates(cunt));

				if (canPenetrate(winner) && canImpreg(loser, winner)) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 0, winner.ID);
				}

				actX(loser, vaginal);
			} else if (canDoAnal(loser)) {
				r.push();

				if (canPenetrate(winner) && canImpreg(loser, winner)) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 0, winner.ID);
				}

				actX(loser, anal);
			} else {
				r.push(facefuck);

				actX(loser, oral);
			}
		} else {
			if (loser.vagina === 0 && canDoVaginal(loser)) {
				r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`);

				if (winner.fetish === "pregnancy") {
					virginitySpan.append(`take ${his2} virginity.`);
					r.push(`and gleefully takes advantage of your rules to `, virginitySpan);
				} else {
					virginitySpan.append(`breaks in ${his2} virgin vagina.`);
					r.push(`and `, virginitySpan);
				}

				if (canPenetrate(winner) && canImpreg(loser, winner)) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 0, winner.ID);
				}

				loser.vagina++;
				actX(loser, vaginal);
			} else if (loser.anus === 0 && canDoAnal(loser)) {
				r.push(`${He} pushes ${loser.slaveName}'s back down onto the mat, forces ${his2} ${hasBothLegs(loser) ? `legs apart` : !hasAnyLegs(loser) ? `hips steady` : `leg aside`},`);

				if (winner.fetish === "buttslut" || (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg && winner.fetish === "pregnancy")) {
					virginitySpan.append(`take ${his2} anal virginity.`);
					r.push(`and gleefully takes advantage of your rules to `, virginitySpan);
				} else {
					virginitySpan.append(`breaks in ${his2} virgin anus.`);
					r.push(`and `, virginitySpan);
				}

				if (canPenetrate(winner) && canImpreg(loser, winner) && loser.mpreg) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 1, winner.ID);
				}

				loser.anus++;
				actX(loser, anal);
			} else if (canDoVaginal(loser)) {
				r.push(winnerPenetrates(cunt));

				if (canPenetrate(winner) && canImpreg(loser, winner)) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 0, winner.ID);
				}

				actX(loser, vaginal);
			} else if (canDoAnal(loser)) {
				r.push();

				if (canPenetrate(winner) && canImpreg(loser, winner)) {
					r.push(loserProtest);

					knockMeUp(loser, 50, 1, winner.ID);
				}

				actX(loser, anal);
			} else {
				r.push(facefuck);

				actX(loser, oral);
			}
		}

		r.push(rape(), rapeEffects());

		if (winner.skill.combat === 0 && random(1, 100) < (20 + winner.devotion)) {
			const experienceSpan = App.UI.DOM.makeElement("span", `learned basic combat skills.`, ["improvement"]);

			r.push(`With experience in ${V.pit.name}, ${winner.slaveName} has `, experienceSpan);

			winner.skill.combat++;
		}

		loser.counter.pitLosses++;
		actX(winner, "penetrative");

		if (!V.pit.bodyguardFights || V.BodyguardID !== winner.ID) {
			V.pit.fighterIDs.push(winner.ID);
		}
		if (!V.pit.bodyguardFights || V.BodyguardID !== loser.ID) {
			V.pit.fighterIDs.push(loser.ID);
		}

		V.pitFightsTotal++;
		winner.counter.pitWins++;

		App.Events.addNode(postFightDiv, r);

		return postFightDiv;

		function rape() {
			const rapeDiv = document.createElement("div");
			const repSpan = App.UI.DOM.makeElement("span", ``, ["reputation", "inc"]);

			const r = [];

			if (winner.sexualFlaw === "malicious") {
				r.push(`${winner.slaveName} lives to torment and violate slaves. ${He} uses ${loser.slaveName} for ${his} `, App.UI.DOM.makeElement("span", `pleasure`, ["devotion", "inc"]), ` slapping ${him2} viciously, pinching ${him2} until ${he} draws blood, and showing off for the spectators.`);

				if (V.pit.audience !== "none") {
					repSpan.append(`greatly enjoys`);
					r.push(`The audience `, repSpan, ` the depraved spectacle.`);

					repX(50, "pit", winner);
				}

				winner.devotion++;
			} else if (winner.sexualFlaw === "abusive") {
				r.push(`${winner.slaveName} lives to abuse and violate slaves. ${He} uses ${loser.slaveName} for ${his} `, App.UI.DOM.makeElement("span", `pleasure`, ["devotion", "inc"]), ` raping ${him2} mercilessly, striking ${him2} until ${he2} turns a deep reddish-purple, and showing off for the spectators.`);

				if (V.pit.audience !== "none") {
					repSpan.append(`greatly enjoys`);
					r.push(`The audience `, repSpan, ` the depraved spectacle.`);

					repX(50, "pit", winner);
				}

				winner.devotion++;
			} else if (winner.energy > 95) {
				r.push(`${winner.slaveName} doesn't have to feign willingness to rape a slave ${girl2}. ${He} uses ${loser.slaveName} for ${his} `, App.UI.DOM.makeElement("span", `pleasure`, ["devotion", "inc"]), ` groping ${him2}, kissing ${his2} unwilling mouth, and showing off for the spectators.`);

				if (V.pit.audience !== "none") {
					repSpan.append(`greatly enjoys`);
					r.push(`The audience `, repSpan, ` the depraved spectacle.`);

					repX(50, "pit", winner);
				}

				winner.devotion++;
			} else if (winner.fetish === "sadist" && winner.fetishStrength > 60) {
				r.push(`${winner.slaveName} doesn't have to feign willingness abuse and violate a slave ${girl2}. ${He} uses ${loser.slaveName} for ${his} `, App.UI.DOM.makeElement("span", `pleasure`, ["devotion", "inc"]), ` slapping ${him2} cruelly, pinching ${him2} until ${he} draws blood, and showing off for the spectators.`);

				if (V.pit.audience !== "none") {
					repSpan.append(`greatly enjoys`);
					r.push(`The audience `, repSpan, ` the depraved spectacle.`);

					repX(50, "pit", winner);
				}

				winner.devotion++;
			} else if (winner.devotion > 75) {
				r.push(`${winner.slaveName} is so broken to slavery that ${he} `, App.UI.DOM.makeElement("span", `enjoys`, ["devotion", "inc"]), ` winning the fight and raping ${loser.slaveName}.`);

				if (V.pit.audience !== "none") {
					repSpan.append(`greatly enjoys`);
					r.push(`The audience `, repSpan, ` the depraved spectacle.`);

					repX(50, "pit", winner);
				}

				winner.devotion++;
			} else if (winner.devotion > 20) {
				r.push(`${winner.slaveName} understands ${his} role and thoroughly rapes ${loser.slaveName}.`);

				if (V.pit.audience !== "none") {
					repSpan.append(`enjoys`);
					r.push(`The audience `, repSpan, ` the spectacle.`);

					repX(25, "pit", winner);
				}
			} else {
				r.push(`${winner.slaveName} is unenthusiastic and just thrusts mechanically, to avoid being punished. ${He} `, App.UI.DOM.makeElement("span", `resents`, ["devotion", "dec"]), ` having to fight and fuck.`);

				if (V.pit.audience !== "none") {
					r.push(`The audience barely pays attention.`);
				}

				winner.devotion -= 2;
			}

			App.Events.addNode(rapeDiv, r);

			return rapeDiv;
		}

		function rapeEffects() {
			const rapeEffectsDiv = document.createElement("div");

			const r = [];

			r.push(winnerEffects(), loserEffects());

			if (loser.fetish !== "masochist" && loser.fetish !== "humiliation" && loser.sexualFlaw !== "self hating" && loser.relationship && loser.relationship < 5 && winner.ID === loser.relationshipTarget) {
				r.push(`Fighting and rape have `, App.UI.DOM.makeElement("span", `damaged`, ["relationship", "dec"]), ` the relationship between the slaves.`);
			}

			App.Events.addNode(rapeEffectsDiv, r);

			return rapeEffectsDiv;

			 function winnerEffects() {
				const winnerEffectsDiv = document.createElement("div");

				const r = [];

				if (winner.rivalry && loser.ID === winner.rivalryTarget) {
					r.push(`${He} `, App.UI.DOM.makeElement("span", `relishes`, ["devotion", "inc"]), ` the chance to abuse ${loser.slaveName}, whom ${he} dislikes.`);

					winner.devotion += 5;
				} else if (winner.relationship && loser.ID === winner.relationshipTarget) {
					if (winner.devotion > 20) {
						r.push(`${He} accepts having to abuse ${loser.slaveName}, and plans to make it up to ${him2} later.`);
					} else {
						r.push(`${He} `, App.UI.DOM.makeElement("span", `hates`, ["devotion", "dec"]), ` having to abuse ${loser.slaveName}.`);

						winner.devotion -= 10;
					}
				} else if (areRelated(winner, loser)) {
					if (winner.devotion > 20) {
						r.push(`${He} accepts having to abuse ${his} ${relativeTerm(winner, loser)}, ${loser.slaveName}, and plans to make it up to ${him2} later.`);
					} else {
						r.push(`${He} `, App.UI.DOM.makeElement("span", `hates`, ["devotion", "dec"]), ` having to abuse ${his} ${relativeTerm(winner, loser)}, ${loser.slaveName}.`);

						winner.devotion -= 10;
					}
				}

				if (winner.fetish === "sadist" && winner.fetishStrength > 90 && winner.sexualFlaw !== "malicious" && winner.devotion > 20) {
					r.push(`${He} noticed something while ${he} was raping ${loser.slaveName}; watching the way ${he2} writhed in pain was strangely satisfying, as ${he} was making ${him2} suffer. ${winner.slaveName} cums powerfully at the mere thought; ${he} has become `, App.UI.DOM.makeElement("span", `sexually addicted to inflicting pain and anguish.`, "noteworthy"));

					winner.sexualFlaw = "malicious";
				} else if (winner.fetish === "masochist" && winner.fetishStrength > 90 && winner.sexualFlaw !== "self hating" && winner.devotion < 20) {
					r.push(`${He} feels horrible after forcing ${himself} on ${loser.slaveName}; ${he} is the one that should suffer, not ${him2}. ${winner.slaveName} has `, App.UI.DOM.makeElement("span", `descended into true self hatred.`, "noteworthy"));

					winner.sexualFlaw = "self hating";
				} else if (winner.fetish === "dom" && winner.fetishStrength > 90 && winner.sexualFlaw !== "abusive" && winner.devotion > 20) {
					r.push(`${He} noticed something while ${he} was raping ${loser.slaveName}; watching the way ${he2} cowered before ${hasAnyArms(winner) ? `${his} raised palm` : `${him}`} was strangely satisfying, as were the painful moans that accompanied every forceful thrust. ${winner.slaveName} cums powerfully at the mere thought; ${he} has become `, App.UI.DOM.makeElement("span", `sexually abusive, getting off on the thrill of forcing ${himself} on other slaves.`, "noteworthy"));

					winner.sexualFlaw = "abusive";
				} else if (winner.behavioralFlaw === "none" && random(1, 100) < 5 && winner.devotion < 20) {
					r.push(`${He} begins to act `, App.UI.DOM.makeElement("span", `oddly`, ["flaw", "gain"]), ` after the fight; having to beat down and rape another slave may have affected ${him} mentally.`);

					winner.behavioralFlaw = "odd";
				}

				App.Events.addNode(winnerEffectsDiv, r);

				return winnerEffectsDiv;
			 }

			 function loserEffects() {
				const loserEffectsDiv = document.createElement("div");
				const trustSpan = App.UI.DOM.makeElement("span", `fears`, ["trust", "dec"]);

				const r = [];

				if (loser.sexualFlaw === "self hating") {
					r.push(`${loser.slaveName} feels ${he2} `, App.UI.DOM.makeElement("span", `deserved this.`, ["devotion", "inc"]));

					loser.devotion -= 5;
				} else if (loser.fetish === "masochist" && loser.fetishStrength > 60 && loser.fetishKnown) {
					r.push(`${loser.slaveName} `, App.UI.DOM.makeElement("span", `gets off`, ["devotion", "inc"]), ` on being beaten and molested.`);

					loser.devotion -= 5;
				} else if (loser.fetish === "humiliation" && loser.fetishStrength > 60 && loser.fetishKnown) {
					r.push(`${loser.slaveName} `, App.UI.DOM.makeElement("span", `enjoys`, ["devotion", "inc"]), ` the humiliation of being openly beaten and raped.`);

					loser.devotion -= 5;
				} else if (loser.devotion < 50) {
					r.push(`${loser.slaveName} `, App.UI.DOM.makeElement("span", `resents`, ["devotion", "dec"]), ` being beaten and molested and `, trustSpan, ` that it will happen again.`);

					loser.devotion -= 10;
					loser.trust -= 10;
				}

				if (loser.rivalry && winner.ID === loser.rivalryTarget) {
					r.push(`${He2} is `, App.UI.DOM.makeElement("span", `embarrassed`, ["devotion", "dec"]), ` by losing to and being raped by ${winner.slaveName}, whom ${he2} dislikes, and `, trustSpan, ` that it will happen again.`);

					loser.devotion -= 10;
					loser.trust -= 10;
				} else if (loser.relationship && winner.ID === loser.relationshipTarget) {
					if (loser.devotion > 20) {
						r.push(`${He2} accepts ${winner.slaveName} having to rape ${him2}.`);
					} else {
						r.push(`${He2} `, App.UI.DOM.makeElement("span", `hates`, ["devotion", "dec"]), ` having to accept rape from ${winner.slaveName}, and `, trustSpan, ` that it will happen again.`);

						loser.devotion -= 10;
						loser.trust -= 10;
					}
				} else if (areRelated(loser, winner)) {
					if (loser.devotion > 20) {
						r.push(`${He2} accepts ${his} ${relativeTerm(loser, winner)}, ${winner.slaveName}, having to rape ${him2}, but ${he2} `, trustSpan, ` that it will happen again.`);

						loser.trust -= 10;
					} else {
						r.push(`${He2} `, App.UI.DOM.makeElement("span", `hates`, ["devotion", "dec"]), ` having to accept rape from ${his} ${relativeTerm(loser, winner)}, ${winner.slaveName}, and `, trustSpan, ` that it will happen again.`);

						loser.devotion -= 10;
						loser.trust -= 10;
					}
				}

				if (loser.fetish === "masochist" && loser.fetishStrength > 90 && loser.sexualFlaw !== "self hating") {
					r.push(`${He2} feels strangely content after being abused and violated; ${he2} is the one that should suffer, after all. ${loser.slaveName} has `, App.UI.DOM.makeElement("span", `descended into true self hatred.`, ["flaw", "gain"]));

					loser.sexualFlaw = "self hating";
				} else if (loser.behavioralFlaw === "none" && random(1, 100) < 5 && loser.devotion < 20) {
					r.push(`${He2} begins to act `, App.UI.DOM.makeElement("span", `oddly`, ["flaw", "gain"]), ` after the fight; losing and getting raped may have affected ${him2} mentally.`);

					loser.behavioralFlaw = "odd";
				}

				App.Events.addNode(loserEffectsDiv, r);

				return loserEffectsDiv;
			 }
		}
	}

	/**
	 * @returns {number}
	 */
	function getWinner() {
		if (!animal) {
			if (fighterDeadliness(getSlave(fighters[0])) > fighterDeadliness(getSlave(fighters[1]))) {
				return fighters[0];
			} else if (fighterDeadliness(getSlave(fighters[0])) < fighterDeadliness(getSlave(fighters[1]))) {
				return fighters[1];
			} else if (random(1, 100) > 50) {
				return fighters[0];
			} else {
				return fighters[1];
			}
		}
	}

	/**
	 * @returns {number}
	 */
	function getLoser() {
		return winner.ID === fighters[0] ? fighters[1] : fighters[0];
	}
};

repo_name: Welptard/fc

license: mit