code:
/**
 * @param {FC.PlayerState} player
 * @param {FC.SlaveState} slave
 * @param {App.UI.SlaveInteract.CharacterState} playerState
 * @param {App.UI.SlaveInteract.CharacterState} slaveState
 */
App.UI.SlaveInteract.useSlave.options = function(player, slave, playerState, slaveState) {
	const refreshArt = () => App.Events.refreshEventArt(slave);

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

	/** @enum {string} */
	const Fetish = {
		NONE: "none",
		MINDBROKEN: "mindbroken",
		SUBMISSIVE: "submissive",
		CUMSLUT: "cumslut",
		HUMILIATION: "humiliation",
		BUTTSLUT: "buttslut",
		BOOBS: "boobs",
		SADIST: "sadist",
		MASOCHIST: "masochist",
		DOM: "dom",
		PREGNANCY: "pregnancy",
	};
	/** @enum {string} */
	const none = "none";
	/** @enum {boolean} */
	const Position = App.UI.SlaveInteract.Position;
	/** @enum {string} */
	const Action = App.UI.SlaveInteract.Action;

	const contextualText = App.UI.SlaveInteract.useSlave.contextualText;
	/** @type {FC.UseSlave.Option[]} */
	const contextual = [
		{
			link: `Keep kissing ${him}`,
			desc: contextualText.keepKissing(slave),
			tooltip: `Because why stop?`,
			prereq: () =>
				slave.mouthAccessory === none &&
				playerState.action === Action.KISSING &&
				slaveState.action === Action.KISSING,
			effect: () => {
				playerState.lust++;
				slaveState.lust++;
			},
			reaction: this.reactionText.keepKissing(slave),
		},
		{
			link: `Keep fucking ${him}`,
			desc: contextualText.keepFucking(slave),
			tooltip: `It feels too good to stop now.`,
			prereq: () =>
				playerState.action === Action.PENETRATING &&
				(slaveState.action === Action.VAGINAL ||
				slaveState.action === Action.ANAL),
			effect: () => {
				playerState.lust++;
				slaveState.lust++;
			},
			reaction: this.reactionText.keepFucking(slave),
		},
		{
			link: `Hold ${him} down`,
			desc: contextualText.holdDown(slave),
			tooltip: `${He}'s not going anywhere if you can help it.`,
			prereq: () =>
				playerState.action === Action.PENETRATING &&
				(slaveState.action === Action.VAGINAL ||
				slaveState.action === Action.ANAL),
			effect: () => {
				playerState.lust++;
				slaveState.lust++;
			},
			reaction: this.reactionText.holdDown(slave),
		},
		{
			link: `Hold ${his} head down`,
			desc: contextualText.holdHeadDown(slave),
			tooltip: `${He} can breathe when you've cum.`,
			prereq: () =>
				playerState.action === Action.PENETRATING &&
				slaveState.action === Action.ORAL,
			effect: () => {
				playerState.lust++;
				slaveState.lust++;
			},
			reaction: this.reactionText.holdHeadDown(slave),
		},
	];

	let clothes = slave.clothes;
	const faceText = App.UI.SlaveInteract.useSlave.faceText;
	/** @type {FC.UseSlave.Option[]} */
	const face = [
		{
			link: `Kiss ${him}`,
			desc: faceText.regularKiss(slave),
			tooltip: `Press your lips to ${hers} and kiss ${him}.`,
			prereq: () => slave.mouthAccessory === none,
			effect: () => {
				playerState.lust++;
				slaveState.lust++;

				playerState.action = Action.KISSING;
				slaveState.action = Action.KISSING;
			},
			reaction: this.reactionText.regularKiss(slave),
		},
		{
			link: `Kiss ${him} passionately`,
			desc: faceText.passionateKiss(slave),
			tooltip: `Press ${his} body to yours and kiss ${him}.`,
			prereq: () => slave.mouthAccessory === none,
			effect: () => {
				playerState.lust++;
				slaveState.lust++;

				playerState.action = Action.KISSING;
				slaveState.action = Action.KISSING;
			},
			reaction: this.reactionText.passionateKiss(slave),
		},
		{
			link: `Kiss ${him} intimately`,
			desc: faceText.intimateKiss(slave),
			tooltip: `Share a romantic kiss.`,
			prereq: () => slave.mouthAccessory === none,
			effect: () => {
				playerState.lust++;
				slaveState.lust++;

				playerState.action = Action.KISSING;
				slaveState.action = Action.KISSING;
			},
			reaction: this.reactionText.intimateKiss(slave),
		},
		{
			link: `Have ${him} go down on you`,
			desc: faceText.slaveGivesOral(slave),
			tooltip: `Have ${him} give you oral.`,
			prereq: () => (slave.mouthAccessory === none || slave.mouthAccessory === "ring gag") &&
				!playerState.isKneeling &&
				!slaveState.isKneeling,
			effect: () => {
				slaveState.position = Position.KNEELING;

				playerState.lust++;
				slaveState.lust++;

				playerState.action = Action.RECEIVING;
				slaveState.action = Action.ORAL;
			},
			reaction: this.reactionText.slaveGivesOral(slave),
		},
		{
			link: `Go down on ${him}`,
			desc: faceText.playerGivesOral(slave),
			tooltip: `Give ${him} oral.`,
			prereq: () => slaveState.clothing.bottom.isOff && !playerState.isKneeling && !slaveState.isKneeling,
			effect: () => {
				playerState.position = Position.KNEELING;

				playerState.lust++;
				slaveState.lust++;

				playerState.action = Action.ORAL;
				slaveState.action = Action.RECEIVING;
			},
			reaction: this.reactionText.playerGivesOral(slave),
		},
	];

	const chestText = App.UI.SlaveInteract.useSlave.chestText;
	/** @type {FC.UseSlave.Option[]} */
	const chest = [
		{
			link: `Grope ${his} chest`,
			desc: chestText.grope(slave),
			tooltip: slave.boobs >= 300 ? `Play with ${his} tits a bit.` : `Stroke ${his} chest a bit.`,
			prereq: () => true,
			effect: () => {
				playerState.lust += 2;
				slaveState.lust += slave.fetish === Fetish.BOOBS ? 7 : 4;

				playerState.action = Action.TOUCHING;
				slaveState.action = Action.RECEIVING;
			},
			reaction: this.reactionText.grope(slave),
		},
		{
			link: `Lick ${his} ${slave.boobs >= 300 ? `tits` : `chest`}`,
			desc: chestText.lick(slave),
			tooltip: slave.boobs >= 300 ? `Give ${his} boobs a taste.` : `Run your tongue along ${his} chest.`,
			prereq: () => true,
			effect: () => {
				playerState.lust += 2;
				slaveState.lust += slave.fetish === Fetish.BOOBS ? 8 : 5;

				playerState.action = Action.KISSING;
				slaveState.action = Action.RECEIVING;
			},
			reaction: this.reactionText.lick(slave),
		},
		{
			link: `Suck on ${his} nipples`,
			desc: chestText.suck(slave),
			tooltip: `See if you can't get any milk.`,
			prereq: () => true,
			effect: () => {
				playerState.lust += 2;
				slaveState.lust += slave.fetish === Fetish.BOOBS ? 9 : 5;

				playerState.action = Action.KISSING;
				slaveState.action = Action.RECEIVING;
			},
			reaction: this.reactionText.suck(slave),
		},
		{
			link: `Bite ${his} nipples`,
			desc: chestText.bite(slave),
			tooltip: `Give them a little nibble.`,
			prereq: () => true,
			effect: () => {
				playerState.lust += 2;
				slaveState.lust += slave.fetish === Fetish.BOOBS ? 8 : 5;

				playerState.action = Action.KISSING;
				slaveState.action = Action.RECEIVING;
			},
			reaction: this.reactionText.bite(slave),
		},
	];

	const crotchText = App.UI.SlaveInteract.useSlave.crotchText;
	/** @type {FC.UseSlave.Option[]} */
	const crotch = [
		{
			link: `Grope ${his} pussy`,
			desc: crotchText.gropePussy(slave),
			tooltip: `Fondle and play with ${his} crotch a bit.`,
			prereq: () => slave.vagina > -1,
			effect: () => {
				playerState.lust++;
				slaveState.lust++;

				playerState.action = Action.TOUCHING;
				slaveState.action = Action.RECEIVING;
			},
			reaction: this.reactionText.gropePussy(slave),
		},
		{
			link: `Grope ${his} dick`,
			desc: crotchText.gropeDick(slave),
			tooltip: `Rub ${his} cock a little.`,
			prereq: () => slave.dick > 0,
			effect: () => {
				playerState.lust++;
				slaveState.lust += 2;

				playerState.action = Action.TOUCHING;
				slaveState.action = Action.RECEIVING;
			},
			reaction: this.reactionText.gropeDick(slave),
		},
		{
			link: `Grope ${his} ass`,
			desc: crotchText.gropeAss(slave),
			tooltip: `Grab ${his} ass and give it a good fondle.`,
			prereq: () => true,
			effect: () => {
				playerState.lust++;
				slaveState.lust++;

				playerState.action = Action.TOUCHING;
				slaveState.action = Action.RECEIVING;
			},
			reaction: this.reactionText.gropeAss(slave),
		},
		{
			link: `Finger ${his} pussy`,
			desc: crotchText.fingerPussy(slave),
			tooltip: `Play with ${his} clit a little, maybe slide a finger in there. Go on, you know you want to.`,
			prereq: () => slave.vagina > -1 && (slaveState.bottomFree || clothes.includes("dress")) && !slave.chastityVagina,
			effect: () => {
				playerState.lust += 2;
				slaveState.lust += 5;

				playerState.action = Action.FINGERING;
				slaveState.action = Action.VAGINAL;
			},
			reaction: this.reactionText.fingerPussy(slave),
		},
		{
			link: `Finger ${his} asshole`,
			desc: crotchText.fingerAnus(slave),
			tooltip: `Play with ${his} backdoor a little. Go on, you know you want to.`,
			prereq: () => slaveState.bottomFree || clothes.includes("dress") && !slave.chastityAnus,
			effect: () => {
				playerState.lust += 2;
				slaveState.lust += slave.fetish === Fetish.BUTTSLUT ? 7 : 4;

				playerState.action = Action.FINGERING;
				slaveState.action = Action.ANAL;
			},
			reaction: this.reactionText.fingerAnus(slave),
		},
		{
			link: `Fuck ${his} pussy`,
			desc: crotchText.fuckPussy(slave),
			tooltip: `Push your ${player.dick ? `dick` : `strapon`} into ${his} pussy.`,
			prereq: () => slave.vagina > -1 &&
				slaveState.bottomFree &&
				!slaveState.clothing.underwear &&
				!slave.chastityVagina &&
				playerState.lust > 5,
			effect: () => {
				playerState.lust += 8;
				slaveState.lust += 8;

				playerState.action = Action.PENETRATING;
				slaveState.action = Action.VAGINAL;
			},
			reaction: this.reactionText.fuckPussy(slave),
		},
		{
			link: `Fuck ${his} asshole`,
			desc: crotchText.fuckAnus(slave),
			tooltip: `Push your ${player.dick ? `dick` : `strapon`} into ${his} asshole.`,
			prereq: () => slaveState.bottomFree &&
				!slaveState.clothing.underwear &&
				!slave.chastityAnus &&
				playerState.lust > 5,
			effect: () => {
				playerState.lust += 8;
				slaveState.lust += slave.fetish === Fetish.BUTTSLUT ? 8 : 5;

				playerState.action = Action.PENETRATING;
				slaveState.action = Action.ANAL;
			},
			reaction: this.reactionText.fuckAnus(slave),
		},
		{
			link: `Start a sixty-nine`,
			desc: crotchText.sixtyNine(slave),
			tooltip: `Show each other some mutual affection.`,
			prereq: () => slaveState.bottomFree && playerState.bottomFree,
			effect: () => {
				playerState.lust += 10;
				slaveState.lust += 10;

				playerState.action = Action.ORAL;
				slaveState.action = Action.ORAL;
			},
			reaction: this.reactionText.sixtyNine(slave),
		},
	];

	const generalText = App.UI.SlaveInteract.useSlave.generalText;
	/** @type {FC.UseSlave.Option[]} */
	const general = [
		{
			link: `Have ${him} dance for you`,
			desc: generalText.dance(slave),
			tooltip: `Make ${him} give you a sensual dance.`,
			prereq: () => !slaveState.isKneeling && !slaveState.isLaying,
			effect: () => {
				playerState.lust += 4;
				slaveState.lust += 3;
			},
			reaction: this.reactionText.dance(slave),
		},
		{
			link: `Have ${him} perform a striptease for you`,
			desc: generalText.striptease(slave),
			tooltip: `Make ${him} strip for you.`,
			prereq: () => !slaveState.isKneeling && !slaveState.isLaying && clothes !== "no clothing",
			effect: () => {
				clothes = "no clothing";
				playerState.lust += 5;
				slaveState.lust += 6;
			},
			reaction: this.reactionText.striptease(slave),
		},
		{
			link: `Push ${him} down`,
			desc: generalText.pushDown(slave),
			tooltip: `Put ${him} on ${his} knees.`,
			prereq: () => !slaveState.isKneeling,
			effect: () => {
				slaveState.position = Position.KNEELING;
			},
			reaction: this.reactionText.pushDown(slave),
		},
		{
			link: `Pull ${him} up`,
			desc: generalText.pullUp(slave),
			tooltip: `Have ${him} stand up.`,
			prereq: () => slaveState.isKneeling,
			effect: () => {
				slaveState.position = Position.STANDING;
			},
			reaction: this.reactionText.pullUp(slave),
		},
		{
			link: `Pull ${him} in close`,
			desc: generalText.pullClose(slave),
			tooltip: `Pull ${his} body in close to yours.`,
			prereq: () => !slaveState.close,
			effect: () => {
				slaveState.close = true;
			},
			reaction: this.reactionText.pullClose(slave),
		},
		{
			link: `Push ${him} away`,
			desc: generalText.pushAway(slave),
			tooltip: `Put some distance between you two.`,
			prereq: () => slaveState.close,
			effect: () => {
				slaveState.close = false;
			},
			reaction: this.reactionText.pushAway(slave),
		},
		{
			link: `Put ${him} on your lap`,
			desc: generalText.putOnLap(slave),
			tooltip: `Ask ${him} if ${he}'s been naughty or nice.`,
			prereq: () => !slaveState.onLap && !playerState.onLap,
			effect: () => {
				slaveState.onLap = true;
			},
			reaction: this.reactionText.putOnLap(slave),
		},
		{
			link: `Get ${him} off your lap`,
			desc: generalText.getOffLap(slave),
			tooltip: `That's enough of that.`,
			prereq: () => slaveState.onLap,
			effect: () => {
				slaveState.onLap = false;
			},
			reaction: this.reactionText.getOffLap(slave),
		},
		{
			link: `Take ${him} to bed`,
			desc: generalText.goToBed(slave),
			tooltip: `Take ${him} somewhere a bit more comfortable.`,
			prereq: () => !playerState.isLaying && !slaveState.isLaying,
			effect: () => {
				playerState.position = Position.LAYING;
				slaveState.position = Position.LAYING;
			},
			reaction: this.reactionText.goToBed(slave),
		},
		{
			link: `Get out of bed`,
			desc: generalText.getOutOfBed(slave),
			tooltip: `In case you need a little more maneuverability.`,
			prereq: () => playerState.isLaying && slaveState.isLaying,
			effect: () => {
				playerState.position = Position.STANDING;
				slaveState.position = Position.STANDING;
			},
			reaction: this.reactionText.getOutOfBed(slave),
		},
		{
			link: `Bring in another slave`,
			desc: generalText.bringInSlave(slave),
			tooltip: `Have another slave join the two of you.`,
			prereq: () => V.slaves.length > 1,
			effect: () => {
				return;	// temporarily disabled
			},
			reaction: this.reactionText.bringInSlave(slave),
		},
	];

	if (V.active.canine) {
		general.push({
			link: `Bring in ${getAnimal(V.active.canine).articleAn} ${V.active.canine}`,
			desc: generalText.bringInCanine(slave),
			tooltip: `Spice things up with ${getAnimal(V.active.canine).species === 'dog' ? `man's best friend` : `a four-legged friend`}.`,
			prereq: () => !!V.active.canine,
			effect: () => {
				return;	// temporarily disabled
			},
			reaction: this.reactionText.bringInCanine(slave),
		});
	}

	if (V.active.hooved) {
		general.push({
			link: `Bring in ${getAnimal(V.active.hooved).articleAn} ${V.active.hooved}`,
			desc: generalText.bringInHooved(slave),
			tooltip: `Make things more interesting with something a bit larger.`,
			prereq: () => V.active.hooved !== null,
			effect: () => {
				return;	// temporarily disabled
			},
			reaction: this.reactionText.bringInHooved(slave),
		});
	}

	if (V.active.feline) {
		general.push({
			link: `Bring in ${getAnimal(V.active.feline).articleAn} ${V.active.feline}`,
			desc: generalText.bringInFeline(slave),
			tooltip: `Have some fun with a furry ${getAnimal(V.active.feline).species === 'cat' ? `little` : ``} friend.`,
			prereq: () => V.active.feline !== null,
			effect: () => {
				return;	// temporarily disabled
			},
			reaction: this.reactionText.bringInFeline(slave),
		});
	}

	const clothingText = App.UI.SlaveInteract.useSlave.clothingText;
	/** @type {FC.UseSlave.Option[]} */
	const clothing = [
		{
			link: `Pull up ${his} dress`,
			desc: clothingText.pullUpDress(slave),
			tooltip: `For easier access.`,
			prereq: () => clothes.includes("dress") && !slaveState.clothing.bottom.pulledDown,
			effect: () => {
				slaveState.clothing.bottom.pulledDown = true;

				playerState.lust++;
				slaveState.lust++;

				refreshArt();
			},
			reaction: this.reactionText.pullUpDress(slave),
		},
		{
			link: `Take off ${his} ${slave.clothes.replace('a ', '')}`,
			desc: clothingText.removeClothing(slave),
			tooltip: `Have ${him} take off ${his} outermost layer.`,
			prereq: () => clothes !== "no clothing" && !slaveState.clothing.top.isOff && !slaveState.clothing.bottom.isOff,
			effect: () => {
				slave.clothes = "no clothing";
				slaveState.clothing.top.isOff = true;
				slaveState.clothing.bottom.isOff = true;

				playerState.lust++;
				slaveState.lust += 2;

				refreshArt();
			},
			reaction: this.reactionText.removeClothing(slave),
		},
		{
			link: `Take off ${his} top`,
			desc: clothingText.removeTop(slave),
			tooltip: `For easier access to ${his} ${slave.boobs >= 300 ? `tits` : `chest`}.`,
			prereq: () => !clothes.includes("dress") && !slaveState.clothing.top.isOff,
			effect: () => {
				slaveState.clothing.top.isOff = true;

				playerState.lust++;
				slaveState.lust++;

				refreshArt();
			},
			reaction: this.reactionText.removeTop(slave),
		},
		{
			link: `Take off ${his} bottoms`,
			desc: clothingText.removeBottom(slave),
			tooltip: `For easier access to ${his} crotch.`,
			prereq: () => !clothes.includes("dress") && !slaveState.clothing.bottom.isOff,
			effect: () => {
				slaveState.clothing.bottom.isOff = true;

				playerState.lust++;
				slaveState.lust++;

				refreshArt();
			},
			reaction: this.reactionText.removeBottom(slave),
		},
		{
			link: `Take off ${his} bra`,
			desc: clothingText.removeBra(slave),
			tooltip: `Get ${his} bra out of the way.`,
			prereq: () => slaveState.topFree && slaveState.clothing.bra,
			effect: () => {
				slaveState.clothing.bra = false;

				playerState.lust++;
				slaveState.lust++;

				refreshArt();
			},
			reaction: this.reactionText.removeBra(slave),
		},
		{
			link: `Take off ${his} underwear`,
			desc: clothingText.removeUnderwear(slave),
			tooltip: `Get ${his} ${slave.vagina > -1 ? `panties` : `underwear`} out of the way.`,
			prereq: () => slaveState.bottomFree && slaveState.clothing.underwear,
			effect: () => {
				slaveState.clothing.underwear = false;

				playerState.lust++;
				slaveState.lust++;

				refreshArt();
			},
			reaction: this.reactionText.removeUnderwear(slave),
		},
		{
			link: `Pull aside ${his} underwear`,
			desc: clothingText.pullAsideUnderwear(slave),
			tooltip: `Move ${his} ${slave.vagina > -1 ? `panties` : `underwear`} out of the way for easier access to what's underneath.`,
			prereq: () => slaveState.bottomFree && slaveState.clothing.underwear,
			effect: () => {
				playerState.lust++;
				slaveState.lust++;
			},
			reaction: this.reactionText.pullAsideUnderwear(slave),
		},
		{
			link: `Give ${him} a ball gag`,
			desc: clothingText.addMouthAccessory(slave),
			tooltip: `In case ${he}'s being too mouthy – or just for fun.`,
			prereq: () => slave.mouthAccessory === none,
			effect: () => {
				slave.mouthAccessory = "ball gag";

				refreshArt();
			},
			reaction: this.reactionText.addMouthAccessory(slave),
		},
		{
			link: `Give ${him} a ring gag`,
			desc: clothingText.addMouthAccessory(slave),
			tooltip: `In case ${he}'s being too mouthy, but you still want access to ${his} throat.`,
			prereq: () => slave.mouthAccessory === none,
			effect: () => {
				slave.mouthAccessory = "ring gag";

				refreshArt();
			},
			reaction: this.reactionText.addMouthAccessory(slave),
		},
		{
			link: `Take ${slave.mouthAccessory.includes("dildo") ? `out` : `off`} ${his} ${slave.mouthAccessory}`,
			desc: clothingText.removeMouthAccessory(slave),
			tooltip: `Give ${him} some respite.`,
			prereq: () => slave.mouthAccessory !== none,
			effect: () => {
				slave.mouthAccessory = none;

				refreshArt();
			},
			reaction: this.reactionText.removeMouthAccessory(slave),
		},
		{
			link: `Take off ${his} vaginal chastity device`,
			desc: clothingText.removeChastityVaginal(slave),
			tooltip: `${He} won't be needing it.`,
			prereq: () => (clothes === "no clothing" || clothes.includes("dress")) &&
				slave.chastityVagina === 1,
			effect: () => {
				slave.chastityVagina = 0;

				refreshArt();
			},
			reaction: this.reactionText.removeChastityVaginal(slave),
		},
		{
			link: `Take off ${his} anal chastity device`,
			desc: clothingText.removeChastityAnal(slave),
			tooltip: `${He} won't be needing it.`,
			prereq: () => (clothes === "no clothing" || clothes.includes("dress")) &&
				slave.chastityVagina === 1,
			effect: () => {
				slave.chastityVagina = 0;

				refreshArt();
			},
			reaction: this.reactionText.removeChastityAnal(slave),
		},
		{
			link: `Take the chastity device off of ${his} dick`,
			desc: clothingText.removeChastityPenis(slave),
			tooltip: `${He} won't be needing it.`,
			prereq: () => (clothes === "no clothing" || clothes.includes("dress")) &&
				slave.chastityPenis === 1,
			effect: () => {
				slave.chastityPenis = 0;

				refreshArt();
			},
			reaction: this.reactionText.removeChastityPenis(slave),
		},
		{
			link: `Take your shirt off`,
			desc: clothingText.removePlayerTop(slave),
			tooltip: `You won't be needing this.`,
			prereq: () => !player.clothes.includes("dress") && !playerState.clothing.top.isOff,
			effect: () => {
				playerState.clothing.top.isOff = true;

				playerState.lust++;
				slaveState.lust++;
			},
			reaction: this.reactionText.removePlayerTop(slave),
		},
		{
			link: `Take your pants off`,
			desc: clothingText.removePlayerBottom(slave),
			tooltip: `These will just get in the way.`,
			prereq: () => !player.clothes.includes("dress") && !playerState.clothing.bottom.isOff,
			effect: () => {
				playerState.clothing.bottom.isOff = true;

				playerState.lust++;
				slaveState.lust++;
			},
			reaction: this.reactionText.removePlayerBottom(slave),
		},
		{
			link: `Take off your underwear`,
			desc: clothingText.removePlayerUnderwear(slave),
			tooltip: `For easier access.`,
			prereq: () => playerState.clothing.underwear && playerState.clothing.bottom.isOff,
			effect: () => {
				playerState.clothing.underwear = false;

				playerState.lust++;
				slaveState.lust++;
			},
			reaction: this.reactionText.removePlayerUnderwear(slave),
		},
	];

	return {
		contextual,
		face,
		chest,
		crotch,
		general,
		clothing,
	};
};


code:
App.UI.SlaveInteract.useSlave.contextualText = {
	/** @param {FC.SlaveState} slave */
	keepKissing(slave) {
		// const {He, him} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Continue kissing test 1`;
		} else if (slave.devotion > 20) {
			return `Continue kissing test 2`;
		} else if (slave.devotion > -20) {
			return `Continue kissing test 3`;
		} else {
			return `Continue kissing test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	keepFucking(slave) {
		// const {He, him} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Continue fucking test 1`;
		} else if (slave.devotion > 20) {
			return `Continue fucking test 2`;
		} else if (slave.devotion > -20) {
			return `Continue fucking test 3`;
		} else {
			return `Continue fucking test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	holdDown(slave) {
		// const {He, him} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Hold down test 1`;
		} else if (slave.devotion > 20) {
			return `Hold down test 2`;
		} else if (slave.devotion > -20) {
			return `Hold down test 3`;
		} else {
			return `Hold down test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	holdHeadDown(slave) {
		// const {He, him} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Hold head down test 1`;
		} else if (slave.devotion > 20) {
			return `Hold head down test 2`;
		} else if (slave.devotion > -20) {
			return `Hold head down test 3`;
		} else {
			return `Hold head down test 4`;
		}
	},
};

App.UI.SlaveInteract.useSlave.faceText = {
	/** @param {FC.SlaveState} slave */
	regularKiss(slave) {
		const {He, him} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `${He} gives you a quick smile as you pull ${him} in and kiss ${him} on the lips.`;
		} else if (slave.devotion > 20) {
			return `Face test regular 2`;
		} else if (slave.devotion > -20) {
			return `Face test regular 3`;
		} else {
			return `Face test regular 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	passionateKiss(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Face test passionate 1`;
		} else if (slave.devotion > 20) {
			return `Face test passionate 2`;
		} else if (slave.devotion > -20) {
			return `Face test passionate 3`;
		} else {
			return `Face test passionate 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	intimateKiss(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Face test intimate 1`;
		} else if (slave.devotion > 20) {
			return `Face test intimate 2`;
		} else if (slave.devotion > -20) {
			return `Face test intimate 3`;
		} else {
			return `Face test intimate 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	slaveGivesOral(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Face test slave oral 1`;
		} else if (slave.devotion > 20) {
			return `Face test slave oral 2`;
		} else if (slave.devotion > -20) {
			return `Face test slave oral 3`;
		} else {
			return `Face test slave oral 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	playerGivesOral(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Face test player oral 1`;
		} else if (slave.devotion > 20) {
			return `Face test player oral 2`;
		} else if (slave.devotion > -20) {
			return `Face test player oral 3`;
		} else {
			return `Face test player oral 4`;
		}
	},
};

App.UI.SlaveInteract.useSlave.chestText = {
	/** @param {FC.SlaveState} slave */
	grope(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Chest test grope 1`;
		} else if (slave.devotion > 20) {
			return `Chest test grope 2`;
		} else if (slave.devotion > -20) {
			return `Chest test grope 3`;
		} else {
			return `Chest test grope 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	lick(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Chest test lick 1`;
		} else if (slave.devotion > 20) {
			return `Chest test lick 2`;
		} else if (slave.devotion > -20) {
			return `Chest test lick 3`;
		} else {
			return `Chest test lick 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	suck(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Chest test suck 1`;
		} else if (slave.devotion > 20) {
			return `Chest test suck 2`;
		} else if (slave.devotion > -20) {
			return `Chest test suck 3`;
		} else {
			return `Chest test suck 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	bite(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Chest test bite 1`;
		} else if (slave.devotion > 20) {
			return `Chest test bite 2`;
		} else if (slave.devotion > -20) {
			return `Chest test bite 3`;
		} else {
			return `Chest test bite 4`;
		}
	},
};

App.UI.SlaveInteract.useSlave.crotchText = {
	/** @param {FC.SlaveState} slave */
	gropePussy(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Groping pussy test 1`;
		} else if (slave.devotion > 20) {
			return `Groping pussy test 2`;
		} else if (slave.devotion > -20) {
			return `Groping pussy test 3`;
		} else {
			return `Groping pussy test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	gropeDick(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Groping dick test 1`;
		} else if (slave.devotion > 20) {
			return `Groping dick test 2`;
		} else if (slave.devotion > -20) {
			return `Groping dick test 3`;
		} else {
			return `Groping dick test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	gropeAss(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Groping ass test 1`;
		} else if (slave.devotion > 20) {
			return `Groping ass test 2`;
		} else if (slave.devotion > -20) {
			return `Groping ass test 3`;
		} else {
			return `Groping ass test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	fingerPussy(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Fingering pussy test 1`;
		} else if (slave.devotion > 20) {
			return `Fingering pussy test 2`;
		} else if (slave.devotion > -20) {
			return `Fingering pussy test 3`;
		} else {
			return `Fingering pussy test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	fingerAnus(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Fingering anus test 1`;
		} else if (slave.devotion > 20) {
			return `Fingering anus test 2`;
		} else if (slave.devotion > -20) {
			return `Fingering anus test 3`;
		} else {
			return `Fingering anus test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	fuckPussy(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Fuck pussy test 1`;
		} else if (slave.devotion > 20) {
			return `Fuck pussy test 2`;
		} else if (slave.devotion > -20) {
			return `Fuck pussy test 3`;
		} else {
			return `Fuck pussy test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	fuckAnus(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Fuck asshole test 1`;
		} else if (slave.devotion > 20) {
			return `Fuck asshole test 2`;
		} else if (slave.devotion > -20) {
			return `Fuck asshole test 3`;
		} else {
			return `Fuck asshole test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	sixtyNine(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `69 test 1`;
		} else if (slave.devotion > 20) {
			return `69 test 2`;
		} else if (slave.devotion > -20) {
			return `69 test 3`;
		} else {
			return `69 test 4`;
		}
	}
};

App.UI.SlaveInteract.useSlave.generalText = {
	/** @param {FC.SlaveState} slave */
	dance(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Dance test 1`;
		} else if (slave.devotion > 20) {
			return `Dance test 2`;
		} else if (slave.devotion > -20) {
			return `Dance test 3`;
		} else {
			return `Dance test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	striptease(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Striptease test 1`;
		} else if (slave.devotion > 20) {
			return `Striptease test 2`;
		} else if (slave.devotion > -20) {
			return `Striptease test 3`;
		} else {
			return `Striptease test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	pushDown(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Push down test 1`;
		} else if (slave.devotion > 20) {
			return `Push down test 2`;
		} else if (slave.devotion > -20) {
			return `Push down test 3`;
		} else {
			return `Push down test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	pullUp(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Pull up test 1`;
		} else if (slave.devotion > 20) {
			return `Pull up test 2`;
		} else if (slave.devotion > -20) {
			return `Pull up test 3`;
		} else {
			return `Pull up test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	pushAway(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Push away test 1`;
		} else if (slave.devotion > 20) {
			return `Push away test 2`;
		} else if (slave.devotion > -20) {
			return `Push away test 3`;
		} else {
			return `Push away test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	pullClose(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Pull in test 1`;
		} else if (slave.devotion > 20) {
			return `Pull in test 2`;
		} else if (slave.devotion > -20) {
			return `Pull in test 3`;
		} else {
			return `Pull in test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	putOnLap(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Put on lap test 1`;
		} else if (slave.devotion > 20) {
			return `Put on lap test 2`;
		} else if (slave.devotion > -20) {
			return `Put on lap test 3`;
		} else {
			return `Put on lap test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	getOffLap(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Get off lap test 1`;
		} else if (slave.devotion > 20) {
			return `Get off lap test 2`;
		} else if (slave.devotion > -20) {
			return `Get off lap test 3`;
		} else {
			return `Get off lap test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	goToBed(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Go to bed test 1`;
		} else if (slave.devotion > 20) {
			return `Go to bed test 2`;
		} else if (slave.devotion > -20) {
			return `Go to bed test 3`;
		} else {
			return `Go to bed test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	getOutOfBed(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Get out of bed test 1`;
		} else if (slave.devotion > 20) {
			return `Get out of bed test 2`;
		} else if (slave.devotion > -20) {
			return `Get out of bed test 3`;
		} else {
			return `Get out of bed test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	bringInSlave(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Second slave test 1`;
		} else if (slave.devotion > 20) {
			return `Second slave test 2`;
		} else if (slave.devotion > -20) {
			return `Second slave test 3`;
		} else {
			return `Second slave test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	bringInCanine(slave) {
	// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Canine test 1`;
		} else if (slave.devotion > 20) {
			return `Canine test 2`;
		} else if (slave.devotion > -20) {
			return `Canine test 3`;
		} else {
			return `Canine test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	bringInHooved(slave) {
	// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Hooved test 1`;
		} else if (slave.devotion > 20) {
			return `Hooved test 2`;
		} else if (slave.devotion > -20) {
			return `Hooved test 3`;
		} else {
			return `Hooved test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	bringInFeline(slave) {
	// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Feline test 1`;
		} else if (slave.devotion > 20) {
			return `Feline test 2`;
		} else if (slave.devotion > -20) {
			return `Feline test 3`;
		} else {
			return `Feline test 4`;
		}
	},
};

App.UI.SlaveInteract.useSlave.clothingText = {
	/** @param {FC.SlaveState} slave */
	pullUpDress(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Pull up dress test 1`;
		} else if (slave.devotion > 20) {
			return `Pull up dress test 2`;
		} else if (slave.devotion > -20) {
			return `Pull up dress test 3`;
		} else {
			return `Pull up dress test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removeClothing(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove clothing test 1`;
		} else if (slave.devotion > 20) {
			return `Remove clothing test 2`;
		} else if (slave.devotion > -20) {
			return `Remove clothing test 3`;
		} else {
			return `Remove clothing test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removeTop(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove top test 1`;
		} else if (slave.devotion > 20) {
			return `Remove top test 2`;
		} else if (slave.devotion > -20) {
			return `Remove top test 3`;
		} else {
			return `Remove top test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removeBottom(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove bottom test 1`;
		} else if (slave.devotion > 20) {
			return `Remove bottom test 2`;
		} else if (slave.devotion > -20) {
			return `Remove bottom test 3`;
		} else {
			return `Remove bottom test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removeBra(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove bra test 1`;
		} else if (slave.devotion > 20) {
			return `Remove bra test 2`;
		} else if (slave.devotion > -20) {
			return `Remove bra test 3`;
		} else {
			return `Remove bra test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removeUnderwear(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove underwear test 1`;
		} else if (slave.devotion > 20) {
			return `Remove underwear test 2`;
		} else if (slave.devotion > -20) {
			return `Remove underwear test 3`;
		} else {
			return `Remove underwear test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	pullAsideUnderwear(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Pull aside underwear test 1`;
		} else if (slave.devotion > 20) {
			return `Pull aside underwear test 2`;
		} else if (slave.devotion > -20) {
			return `Pull aside underwear test 3`;
		} else {
			return `Pull aside underwear test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	addMouthAccessory(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Add mouth accessory test 1`;
		} else if (slave.devotion > 20) {
			return `Add mouth accessory test 2`;
		} else if (slave.devotion > -20) {
			return `Add mouth accessory test 3`;
		} else {
			return `Add mouth accessory test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removeMouthAccessory(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove mouth accessory test 1`;
		} else if (slave.devotion > 20) {
			return `Remove mouth accessory test 2`;
		} else if (slave.devotion > -20) {
			return `Remove mouth accessory test 3`;
		} else {
			return `Remove mouth accessory test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removeChastityVaginal(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove chastity vaginal test 1`;
		} else if (slave.devotion > 20) {
			return `Remove chastity vaginal test 2`;
		} else if (slave.devotion > -20) {
			return `Remove chastity vaginal test 3`;
		} else {
			return `Remove chastity vaginal test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removeChastityAnal(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove chastity anal test 1`;
		} else if (slave.devotion > 20) {
			return `Remove chastity anal test 2`;
		} else if (slave.devotion > -20) {
			return `Remove chastity anal test 3`;
		} else {
			return `Remove chastity anal test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removeChastityPenis(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove chastity penis test 1`;
		} else if (slave.devotion > 20) {
			return `Remove chastity penis test 2`;
		} else if (slave.devotion > -20) {
			return `Remove chastity penis test 3`;
		} else {
			return `Remove chastity penis test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removePlayerTop(slave) {
		// const { him, his } = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove player top test 1`;
		} else if (slave.devotion > 20) {
			return `Remove player top test 2`;
		} else if (slave.devotion > -20) {
			return `Remove player top test 3`;
		} else {
			return `Remove player top test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removePlayerBottom(slave) {
		// const { him, his } = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove player bottom test 1`;
		} else if (slave.devotion > 20) {
			return `Remove player bottom test 2`;
		} else if (slave.devotion > -20) {
			return `Remove player bottom test 3`;
		} else {
			return `Remove player bottom test 4`;
		}
	},

	/** @param {FC.SlaveState} slave */
	removePlayerUnderwear(slave) {
		// const { him, his } = getPronouns(slave);

		if (slave.devotion > 50) {
			return `Remove player underwear test 1`;
		} else if (slave.devotion > 20) {
			return `Remove player underwear test 2`;
		} else if (slave.devotion > -20) {
			return `Remove player underwear test 3`;
		} else {
			return `Remove player underwear test 4`;
		}
	},
};

App.UI.SlaveInteract.useSlave.reactionText = {
	/** @param {FC.SlaveState} slave */
	keepKissing(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `keepKissing reaction test 1`;
		} else if (slave.devotion > 20) {
			return `keepKissing reaction test 2`;
		} else if (slave.devotion > -20) {
			return `keepKissing reaction test 3`;
		} else {
			return `keepKissing reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	keepFucking(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `keepFucking reaction test 1`;
		} else if (slave.devotion > 20) {
			return `keepFucking reaction test 2`;
		} else if (slave.devotion > -20) {
			return `keepFucking reaction test 3`;
		} else {
			return `keepFucking reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	holdDown(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `holdDown reaction test 1`;
		} else if (slave.devotion > 20) {
			return `holdDown reaction test 2`;
		} else if (slave.devotion > -20) {
			return `holdDown reaction test 3`;
		} else {
			return `holdDown reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	holdHeadDown(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `holdHeadDown reaction test 1`;
		} else if (slave.devotion > 20) {
			return `holdHeadDown reaction test 2`;
		} else if (slave.devotion > -20) {
			return `holdHeadDown reaction test 3`;
		} else {
			return `holdHeadDown reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	regularKiss(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `regularKiss reaction test 1`;
		} else if (slave.devotion > 20) {
			return `regularKiss reaction test 2`;
		} else if (slave.devotion > -20) {
			return `regularKiss reaction test 3`;
		} else {
			return `regularKiss reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	passionateKiss(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `passionateKiss reaction test 1`;
		} else if (slave.devotion > 20) {
			return `passionateKiss reaction test 2`;
		} else if (slave.devotion > -20) {
			return `passionateKiss reaction test 3`;
		} else {
			return `passionateKiss reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	intimateKiss(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `intimateKiss reaction test 1`;
		} else if (slave.devotion > 20) {
			return `intimateKiss reaction test 2`;
		} else if (slave.devotion > -20) {
			return `intimateKiss reaction test 3`;
		} else {
			return `intimateKiss reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	slaveGivesOral(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `slaveGivesOral reaction test 1`;
		} else if (slave.devotion > 20) {
			return `slaveGivesOral reaction test 2`;
		} else if (slave.devotion > -20) {
			return `slaveGivesOral reaction test 3`;
		} else {
			return `slaveGivesOral reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	playerGivesOral(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `playerGivesOral reaction test 1`;
		} else if (slave.devotion > 20) {
			return `playerGivesOral reaction test 2`;
		} else if (slave.devotion > -20) {
			return `playerGivesOral reaction test 3`;
		} else {
			return `playerGivesOral reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	grope(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `grope reaction test 1`;
		} else if (slave.devotion > 20) {
			return `grope reaction test 2`;
		} else if (slave.devotion > -20) {
			return `grope reaction test 3`;
		} else {
			return `grope reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	lick(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `lick reaction test 1`;
		} else if (slave.devotion > 20) {
			return `lick reaction test 2`;
		} else if (slave.devotion > -20) {
			return `lick reaction test 3`;
		} else {
			return `lick reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	suck(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `suck reaction test 1`;
		} else if (slave.devotion > 20) {
			return `suck reaction test 2`;
		} else if (slave.devotion > -20) {
			return `suck reaction test 3`;
		} else {
			return `suck reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	bite(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `bite reaction test 1`;
		} else if (slave.devotion > 20) {
			return `bite reaction test 2`;
		} else if (slave.devotion > -20) {
			return `bite reaction test 3`;
		} else {
			return `bite reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	gropePussy(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `gropePussy reaction test 1`;
		} else if (slave.devotion > 20) {
			return `gropePussy reaction test 2`;
		} else if (slave.devotion > -20) {
			return `gropePussy reaction test 3`;
		} else {
			return `gropePussy reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	gropeDick(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `gropeDick reaction test 1`;
		} else if (slave.devotion > 20) {
			return `gropeDick reaction test 2`;
		} else if (slave.devotion > -20) {
			return `gropeDick reaction test 3`;
		} else {
			return `gropeDick reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	gropeAss(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `gropeAss reaction test 1`;
		} else if (slave.devotion > 20) {
			return `gropeAss reaction test 2`;
		} else if (slave.devotion > -20) {
			return `gropeAss reaction test 3`;
		} else {
			return `gropeAss reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	fingerPussy(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `fingerPussy reaction test 1`;
		} else if (slave.devotion > 20) {
			return `fingerPussy reaction test 2`;
		} else if (slave.devotion > -20) {
			return `fingerPussy reaction test 3`;
		} else {
			return `fingerPussy reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	fingerAnus(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `fingerAnus reaction test 1`;
		} else if (slave.devotion > 20) {
			return `fingerAnus reaction test 2`;
		} else if (slave.devotion > -20) {
			return `fingerAnus reaction test 3`;
		} else {
			return `fingerAnus reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	fuckPussy(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `fuckPussy reaction test 1`;
		} else if (slave.devotion > 20) {
			return `fuckPussy reaction test 2`;
		} else if (slave.devotion > -20) {
			return `fuckPussy reaction test 3`;
		} else {
			return `fuckPussy reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	fuckAnus(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `fuckAnus reaction test 1`;
		} else if (slave.devotion > 20) {
			return `fuckAnus reaction test 2`;
		} else if (slave.devotion > -20) {
			return `fuckAnus reaction test 3`;
		} else {
			return `fuckAnus reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	sixtyNine(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `sixtyNine reaction test 1`;
		} else if (slave.devotion > 20) {
			return `sixtyNine reaction test 2`;
		} else if (slave.devotion > -20) {
			return `sixtyNine reaction test 3`;
		} else {
			return `sixtyNine reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	dance(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `dance reaction test 1`;
		} else if (slave.devotion > 20) {
			return `dance reaction test 2`;
		} else if (slave.devotion > -20) {
			return `dance reaction test 3`;
		} else {
			return `dance reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	striptease(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `striptease reaction test 1`;
		} else if (slave.devotion > 20) {
			return `striptease reaction test 2`;
		} else if (slave.devotion > -20) {
			return `striptease reaction test 3`;
		} else {
			return `striptease reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	pushDown(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `pushDown reaction test 1`;
		} else if (slave.devotion > 20) {
			return `pushDown reaction test 2`;
		} else if (slave.devotion > -20) {
			return `pushDown reaction test 3`;
		} else {
			return `pushDown reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	pullUp(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `pullUp reaction test 1`;
		} else if (slave.devotion > 20) {
			return `pullUp reaction test 2`;
		} else if (slave.devotion > -20) {
			return `pullUp reaction test 3`;
		} else {
			return `pullUp reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	pullClose(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `pullClose reaction test 1`;
		} else if (slave.devotion > 20) {
			return `pullClose reaction test 2`;
		} else if (slave.devotion > -20) {
			return `pullClose reaction test 3`;
		} else {
			return `pullClose reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	pushAway(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `pushAway reaction test 1`;
		} else if (slave.devotion > 20) {
			return `pushAway reaction test 2`;
		} else if (slave.devotion > -20) {
			return `pushAway reaction test 3`;
		} else {
			return `pushAway reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	putOnLap(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `putOnLap reaction test 1`;
		} else if (slave.devotion > 20) {
			return `putOnLap reaction test 2`;
		} else if (slave.devotion > -20) {
			return `putOnLap reaction test 3`;
		} else {
			return `putOnLap reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	getOffLap(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `getOffLap reaction test 1`;
		} else if (slave.devotion > 20) {
			return `getOffLap reaction test 2`;
		} else if (slave.devotion > -20) {
			return `getOffLap reaction test 3`;
		} else {
			return `getOffLap reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	goToBed(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `goToBed reaction test 1`;
		} else if (slave.devotion > 20) {
			return `goToBed reaction test 2`;
		} else if (slave.devotion > -20) {
			return `goToBed reaction test 3`;
		} else {
			return `goToBed reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	getOutOfBed(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `getOutOfBed reaction test 1`;
		} else if (slave.devotion > 20) {
			return `getOutOfBed reaction test 2`;
		} else if (slave.devotion > -20) {
			return `getOutOfBed reaction test 3`;
		} else {
			return `getOutOfBed reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	bringInSlave(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `bringInSlave reaction test 1`;
		} else if (slave.devotion > 20) {
			return `bringInSlave reaction test 2`;
		} else if (slave.devotion > -20) {
			return `bringInSlave reaction test 3`;
		} else {
			return `bringInSlave reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	bringInCanine(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `bringInCanine reaction test 1`;
		} else if (slave.devotion > 20) {
			return `bringInCanine reaction test 2`;
		} else if (slave.devotion > -20) {
			return `bringInCanine reaction test 3`;
		} else {
			return `bringInCanine reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	bringInHooved(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `bringInHooved reaction test 1`;
		} else if (slave.devotion > 20) {
			return `bringInHooved reaction test 2`;
		} else if (slave.devotion > -20) {
			return `bringInHooved reaction test 3`;
		} else {
			return `bringInHooved reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	bringInFeline(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `bringInFeline reaction test 1`;
		} else if (slave.devotion > 20) {
			return `bringInFeline reaction test 2`;
		} else if (slave.devotion > -20) {
			return `bringInFeline reaction test 3`;
		} else {
			return `bringInFeline reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	pullUpDress(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `pullUpDress reaction test 1`;
		} else if (slave.devotion > 20) {
			return `pullUpDress reaction test 2`;
		} else if (slave.devotion > -20) {
			return `pullUpDress reaction test 3`;
		} else {
			return `pullUpDress reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removeClothing(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removeClothing reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removeClothing reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removeClothing reaction test 3`;
		} else {
			return `removeClothing reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removeTop(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removeTop reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removeTop reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removeTop reaction test 3`;
		} else {
			return `removeTop reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removeBottom(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removeBottom reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removeBottom reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removeBottom reaction test 3`;
		} else {
			return `removeBottom reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removeBra(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removeBra reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removeBra reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removeBra reaction test 3`;
		} else {
			return `removeBra reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removeUnderwear(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removeUnderwear reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removeUnderwear reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removeUnderwear reaction test 3`;
		} else {
			return `removeUnderwear reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	pullAsideUnderwear(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `pullAsideUnderwear reaction test 1`;
		} else if (slave.devotion > 20) {
			return `pullAsideUnderwear reaction test 2`;
		} else if (slave.devotion > -20) {
			return `pullAsideUnderwear reaction test 3`;
		} else {
			return `pullAsideUnderwear reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	addMouthAccessory(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `addMouthAccessory reaction test 1`;
		} else if (slave.devotion > 20) {
			return `addMouthAccessory reaction test 2`;
		} else if (slave.devotion > -20) {
			return `addMouthAccessory reaction test 3`;
		} else {
			return `addMouthAccessory reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removeMouthAccessory(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removeMouthAccessory reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removeMouthAccessory reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removeMouthAccessory reaction test 3`;
		} else {
			return `removeMouthAccessory reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removeChastityVaginal(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removeChastityVaginal reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removeChastityVaginal reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removeChastityVaginal reaction test 3`;
		} else {
			return `removeChastityVaginal reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removeChastityAnal(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removeChastityAnal reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removeChastityAnal reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removeChastityAnal reaction test 3`;
		} else {
			return `removeChastityAnal reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removeChastityPenis(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removeChastityPenis reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removeChastityPenis reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removeChastityPenis reaction test 3`;
		} else {
			return `removeChastityPenis reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removePlayerTop(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removePlayerTop reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removePlayerTop reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removePlayerTop reaction test 3`;
		} else {
			return `removePlayerTop reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removePlayerBottom(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removePlayerBottom reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removePlayerBottom reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removePlayerBottom reaction test 3`;
		} else {
			return `removePlayerBottom reaction test 4`;
		}
	},
	/** @param {FC.SlaveState} slave */
	removePlayerUnderwear(slave) {
		// const {him, his} = getPronouns(slave);

		if (slave.devotion > 50) {
			return `removePlayerUnderwear reaction test 1`;
		} else if (slave.devotion > 20) {
			return `removePlayerUnderwear reaction test 2`;
		} else if (slave.devotion > -20) {
			return `removePlayerUnderwear reaction test 3`;
		} else {
			return `removePlayerUnderwear reaction test 4`;
		}
	},
};

repo_name: Pecanus/fc

license: mit


code:
/**
 * Contains the parameters for the player's custom slave order.
 * Some members are ignored by huskSlave (particularly mental properties).
 * NOTE: V.customSlave/V.huskSlave IS NOT A SLAVE. Do not treat them like you would treat an instance of SlaveState.
 */
App.Entity.CustomSlaveOrder = class CustomSlaveOrder {
	constructor() {
		/** desired age, approximately
		 * Only certain values are valid; check seCustomSlaveDelivery.tw.
		 * @type {number}
		 */
		this.age = 19;

		/** desired health
		 * 0 = healthy, 1 = extremely healthy
		 * @type {number}
		 */
		this.health = 1;

		/** desired musculature
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.muscles = 0;

		/** desired lips
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.lips = 15;

		/** desired voice
		 * -1 = unimportant; other values as in SlaveState.
		 * @type {number}
		 */
		this.voice = -1;

		/** desired height category
		 * "greatly below average", "below average", "normal", "above average", or "greatly above average"
		 * @type {string}
		 */
		this.heightMod = "normal";

		/** desired weight
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.weight = 0;

		/** desired facial attractiveness
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.face = 0;

		/** desired race
		 * "ethnicity is unimportant" or other values as in SlaveState
		 * @type {string}
		 */
		this.race = "white";

		/** desired skin color
		 * "left natural" or other values as in SlaveState
		 * @type {string}
		 */
		this.skin = "left natural";

		/** desired boob size
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.boobs = 500;

		/** desired butt size
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.butt = 3;

		/** desired genetic sex and genitalia
		 * 1 = female (XX), 2 = male (XY), 3 = futanari (XX)
		 * @type {number}
		 */
		this.sex = 1;

		/** virginity required
		 * 0 = yes, 1 = no (and yes, you are reading that correctly)
		 * @type {number}
		 */
		this.virgin = 0;

		/** desired dick and foreskin size, male and futa only
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.dick = 2;

		/** desired balls and scrotum size, male and futa only
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.balls = 2;

		/** desired clit size, female and futa only
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.clit = 0;

		/** desired labia size, female and futa only
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.labia = 0;

		/** desired vaginal lubrication, female and futa only
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.vaginaLube = 1;

		/** anal virginity required
		 * 0 = yes, 1 = no (and yes, you are reading that correctly)
		 * @type {number}
		 */
		this.analVirgin = 0;

		/** desired sex skill rating (anal, oral, and vaginal)
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.skills = 15;

		/** desired skills rating (.whore controls both whoring and entertainment, .combat controls combat)
		 * Values as in SlaveState.
		 * @type {Object.<string, number>}
		 */
		this.skill = {whore: 15, combat: 0};

		/** desired intelligence level
		 * Range -3 to +3 (NOT the same range as SlaveState!)
		 * @type {number}
		 */
		this.intelligence = 0;

		/** desired education
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.intelligenceImplant = 0;

		/** desired nationality
		 * "Nationality is unimportant" or other values as in SlaveState.
		 * @type {string}
		 */
		this.nationality = "Stateless";

		/** desired left and right leg state
		 * @type {{left: App.Entity.LimbState, right: App.Entity.LimbState}}
		 */
		this.leg = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()};

		/** desired left and right arm state
		 * @type {{left: App.Entity.LimbState, right: App.Entity.LimbState}}
		 */
		this.arm = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()};

		/** desired eye state
		 * Only the "vision" property is used, all others are ignored
		 * @type {App.Entity.EyeState}
		 */
		this.eye = new App.Entity.EyeState();

		/** hearing
		 * Values as in SlaveState.
		 * @type {FC.Hearing}
		 */
		this.hears = 0;

		/** sense of smell
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.smells = 0;

		/** sense of taste
		 * Values as in SlaveState.
		 * @type {number}
		 */
		this.tastes = 0;
	}
};

/**
 * Checks to see if the custom slave has accidentally been turned into an actual slave object.
 * IF THIS FUNCTION RETURNS TRUE, YOU HAVE PROBABLY FUCKED UP A BACKCOMPAT. CHANGE YOUR BACKCOMPAT, NOT THIS FUNCTION!
 * @param {App.Entity.CustomSlaveOrder} slaveOrder
 * @returns {boolean}
 */
App.Utils.IsCustomSlaveMutated = function(slaveOrder) {
	/* ensure the absence of a few properties that slave orders definitely should not have, but every real slave has */
	if (slaveOrder.hasOwnProperty("rules") || slaveOrder.hasOwnProperty("pronoun")) {
		return true;
	/* ensure the presence of a few properties that slave orders definitely should have, but no real slave should */
	} else if (!slaveOrder.hasOwnProperty("age") || !slaveOrder.hasOwnProperty("sex")) {
		return true;
	}
	return false;
};