code:
/**
 * @param {App.Entity.SlaveState} slave
 * @returns {HTMLElement}
 */
App.Interact.fSlaveSlaveVag = function(slave) {
	const node = document.createElement("div");

	App.UI.DOM.appendNewElement("div", node, `Select a slave that will fuck ${slave.slaveName}.`);
	App.UI.DOM.appendNewElement("h2", node, `Select an eligible slave`);

	const eligibles = V.slaves.filter((s) => (s.ID !== slave.ID) && isSlaveAvailable(s) && (canPenetrate(s) || s.clit >= 4));
	for (const eligible of eligibles) {
		const div = App.UI.DOM.appendNewElement("div", node);
		div.append(App.UI.DOM.link(
			SlaveFullName(eligible),
			() => {
				App.UI.DOM.replace(node, content(eligible));
			}
		));
		if (eligible.custom.label) {
			App.UI.DOM.appendNewElement("span", div, ` ${eligible.custom.label}`, ["yellow", "bold"]);
		}
		if (canImpreg(eligible, slave)) {
			App.UI.DOM.appendNewElement("span", div, ` Virile`, "green");
		}
		if (totalRelatives(slave) > 0) {
			const relTerm = relativeTerm(slave, eligible);
			if (relTerm !== null) {
				App.UI.DOM.appendNewElement("span", div, ` ${capFirstChar(relTerm)}`, "lightgreen");
			}
		}
	}
	if (eligibles.length === 0) {
		App.UI.DOM.appendNewElement("div", node, `You have no slaves capable of this act.`, "note");
	}
	return node;
	/**
	 *
	 * @param {App.Entity.SlaveState} rapist
	 * @returns {DocumentFragment}
	 */
	function content(rapist) {
		const el = new DocumentFragment();
		let r = [];
		const {
			He, His,
			he, his, him, himself
		} = getPronouns(slave);

		const {
			He2, His2,
			he2, his2, him2, himself2, hers2, wife2
		} = getPronouns(rapist).appendSuffix("2");
		let incestMood;

		addPartner(slave, -1);

		slave.counter.vaginal += 1;
		V.vaginalTotal += 1;
		rapist.counter.penetrative++;
		V.penetrativeTotal++;

		let dickSize;
		if (rapist.dick === 1) {
			dickSize = "pathetic";
		} else if (rapist.dick === 2) {
			dickSize = "tiny";
		} else if (rapist.dick === 3) {
			dickSize = "average";
		} else if (rapist.dick === 4) {
			dickSize = "big";
		} else if (rapist.dick === 5) {
			dickSize = "huge";
		} else if (rapist.dick === 6) {
			dickSize = "gigantic";
		} else if (rapist.dick === 7) {
			dickSize = "titanic";
		} else if (rapist.dick === 8) {
			dickSize = "absurd";
		} else if (rapist.dick === 9) {
			dickSize = "inhuman";
		} else {
			dickSize = "obscene";
		}

		const isIncest = areRelated(slave, rapist);

		r.push(`You take a look at the slave you selected.`);

		if (rapist.fetish === "dom" && rapist.fetishStrength > 20 && rapist.devotion >= -20) {
			r.push(`Since ${rapist.slaveName} loves to dominate others it's not hard to get ${his2}`);
			if (rapist.dick > 0) {
				r.push(`${dickSize} dick`);
			} else {
				r.push(`massive clit`);
			}
			r.push(`ready.`);
			if (rapist.attrXX > 65) {
				r.push(`With ${his2} love of pussy, ${he2} becomes aroused indecently fast.`);
			} else {
				r.push(`${His2}`);
				if (rapist.dick > 0) {
					r.push(`${dickSize} cock`);
				} else {
					r.push(`massive clit`);
				}
				r.push(`quickly swells to a throbbing erection at the prospect of forcing ${himself2} on another slave.`);
			}
		} else if (rapist.fetish === "sadist" && rapist.fetishStrength > 20 && rapist.devotion >= -20) {
			r.push(`With the prospect of torturing another slave`);
			if (rapist.dick > 0) {
				r.push(`${his2} ${dickSize} cock swells to a throbbing erection in seconds.`);
			} else {
				r.push(`${his2} huge clit becomes fully engorged in seconds.`);
			}
		} else if ((rapist.fetish === "pregnancy" && rapist.fetishStrength > 20 && rapist.devotion >= -20) && rapist.dick > 0) {
			r.push(`With the prospect of raping another slave bareback, ${his2} ${dickSize} cock swells to a throbbing erection in seconds.`);
		} else if (rapist.attrXX > 65 && rapist.devotion >= -20) {
			r.push(`Since ${rapist.slaveName} likes sticking ${his2}`);
			if (rapist.dick > 0) {
				r.push(`${dickSize} penis`);
			} else {
				r.push(`massive clit`);
			}
			r.push(`in girls, ${he2} doesn't take much convincing.`);
		} else if (rapist.devotion > 50) {
			r.push(`Since ${rapist.slaveName} is devoted to you, ${he2}'ll eagerly fuck anything you tell ${him2} to fuck.`);
		} else if (rapist.devotion > 20) {
			r.push(`Since ${rapist.slaveName} is obedient, ${he2}'ll fuck anything you tell ${him2} to fuck.`);
		} else if (rapist.devotion >= -20) {
			r.push(`Since ${rapist.slaveName} does not resist your will, ${he2} should comply reasonably well. ${He2} has to work to get ${his2}`);
			if (rapist.dick > 0) {
				r.push(`${dickSize} penis`);
			} else {
				r.push(`massive clit`);
			}
			r.push(`hard despite ${his2} doubts, visibly disturbed that you are ordering ${him2} to fuck someone for your entertainment.`);
		} else {
			r.push(`Since ${rapist.slaveName} is unlikely to comply willingly, you simply restrain ${him2} and administer a massive dose of vasodilators, directly where they will do the most good. ${rapist.slaveName} writhes with the pain of the injection, which is compounded as ${his2}`);
			if (rapist.dick > 0) {
				r.push(`${dickSize} penis`);
			} else {
				r.push(`massive clit`);
			}
			r.push(`quickly reaches an agonizingly full erection.`);
		}

		if (isIncest) {
			r.push(`${rapist.slaveName} is well aware that ${he2} is about to rape`);
			if (rapist.father === slave.ID && rapist.mother === slave.ID) {
				r.push(`the slave that is both ${his2} mother and ${his2} father,`);
			} else if (slave.mother === rapist.ID || slave.father === rapist.ID) {
				r.push(`${his2} own ${relativeTerm(rapist, slave)},`);
			} else if (rapist.mother === slave.ID) {
				r.push(`${his2} own mother,`);
			} else if (rapist.father === slave.ID) {
				r.push(`the slave that fathered ${him2},`);
			} else {
				r.push(`${his2} ${relativeTerm(rapist, slave)},`);
			}
			if (rapist.sexualQuirk === "perverted" || rapist.behavioralQuirk === "sinful") {
				if (rapist.energy > 60) {
					r.push(`and seems quite aroused at just how`);
					if (rapist.sexualQuirk === "perverted") {
						r.push(`perverted`);
					} else {
						r.push(`sinful`);
					}
					r.push(`that is.`);
					if (canSee(rapist)) {
						r.push(`${rapist.slaveName}'s eyes seemed locked on ${slave.slaveName}'s inviting pussy, thoroughly aroused and waiting for your order.`);
					}
				} else {
					r.push(`but despite ${his2} conflicted feelings ${his2} arousal is clear.`);
				}
				incestMood = "Top";
			} else if (rapist.relationshipTarget === slave.ID && rapist.relationship > 2) {
				r.push(`but since ${he2}'s already in a sexual relationship with ${him}, it's only special because ${his2} ${getWrittenTitle(rapist)} is watching.`);
				incestMood = "Top";
			} else {
				if (rapist.devotion > 95) {
					r.push(`but ${his2} deep acceptance of slavery means ${he2} can't help but be eager to please everyone involved with ${his2} performance.`);
					incestMood = "Top";
				} else if (rapist.devotion > 60) {
					r.push(`but ${his2} experience as a slave means ${he2} can mostly ignore it and focus on sex.`);
				} else {
					r.push(`and is understandably disturbed.`);
				}
			}
		}

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

		r.push(`Next, you see to ${slave.slaveName}.`);

		if (isIncest) {
			r.push(`${slave.slaveName} is fully naked and`);
			if (canSee(slave)) {
				r.push(`looking up at`);
			} else {
				r.push(`waiting in front of`);
			}
			if (slave.father === rapist.ID && slave.mother === rapist.ID) {
				r.push(`the slave that is both ${his} mother and ${his} father,`);
			} else if (rapist.mother === slave.ID || rapist.father === slave.ID) {
				r.push(`${his} own ${relativeTerm(slave, rapist)},`);
			} else if (slave.mother === rapist.ID) {
				r.push(`${his} own mother,`);
			} else if (slave.father === rapist.ID) {
				r.push(`the slave that fathered ${him},`);
			} else {
				r.push(`${his} ${relativeTerm(slave, rapist)},`);
			}
			if (slave.sexualQuirk === "perverted" || slave.behavioralQuirk === "sinful") {
				if (slave.energy > 60) {
					r.push(`whose`);
					if (rapist.dick > 0) {
						r.push(`${dickSize} penis`);
					} else {
						r.push(`massive clit`);
					}
					r.push(`is standing firm above ${him}. ${He} seems indecently aroused, flushed and shivering in anticipation.`);
				} else {
					r.push(`but despite ${his} conflicted feelings ${his} growing arousal is clear as ${he}`);
					if (canSee(slave)) {
						r.push(`stares at`);
					} else {
						r.push(`imagines`);
					}
					r.push(`the`);
					if (rapist.dick > 0) {
						r.push(`${dickSize} penis`);
					} else {
						r.push(`massive clit`);
					}
					r.push(`that's soon going inside ${him}.`);
				}
				if (incestMood === "Top") {
					incestMood = "Both";
				} else {
					incestMood = "Bottom";
				}
			} else if (slave.relationshipTarget === rapist.ID && slave.relationship > 2) {
				r.push(`and seems calm and inviting to ${his}`);
				if (slave.relationship === 3) {
					r.push(`sex friend's`);
				} else if (slave.relationship === 4) {
					r.push(`lover's`);
				} else {
					r.push(`slave ${wife2}'s`);
				}
				if (rapist.dick > 0) {
					r.push(`${dickSize} penis`);
				} else {
					r.push(`massive clit`);
				}
				r.push(`that will be penetrating ${him}.`);
				if (incestMood === "Top") {
					incestMood = "Both";
				} else {
					incestMood = "Bottom";
				}
			} else {
				if (slave.devotion > 95) {
					r.push(`and ${his} deep acceptance of ${his} status as a slave has ${him} staring`);
					if (canSee(slave)) {
						r.push(`at`);
					} else {
						r.push(`blindly towards`);
					}
					r.push(`the`);
					if (rapist.dick > 0) {
						r.push(`${dickSize} penis`);
					} else {
						r.push(`massive clit`);
					}
					r.push(`above ${him} with a lusty smile.`);
					if (incestMood === "Top") {
						incestMood = "Both";
					} else {
						incestMood = "Bottom";
					}
				} else if (slave.devotion > 60) {
					r.push(`and if ${he} focuses, ${he} can forget the`);
					if (rapist.dick > 0) {
						r.push(`${dickSize} penis`);
					} else {
						r.push(`massive clit`);
					}
					r.push(`standing erect in front of ${him} belongs to someone related to ${him}.`);
				} else {
					r.push(`and is understandably disturbed,`);
					if (canSee(slave)) {
						r.push(`eyes glued to the`);
						if (rapist.dick > 0) {
							r.push(`${dickSize} penis`);
						} else {
							r.push(`massive clit`);
						}
						r.push(`throbbing before ${him}.`);
					} else if (canHear(slave)) {
						r.push(`listening to the heavy breathing of ${his} relative whose`);
						if (rapist.dick > 0) {
							r.push(`${dickSize} penis`);
						} else {
							r.push(`massive clit`);
						}
						r.push(`will be entering ${him} soon.`);
					} else {
						r.push(`imagining how the`);
						if (rapist.dick > 0) {
							r.push(`${dickSize} penis`);
						} else {
							r.push(`massive clit`);
						}
						r.push(`of ${his} relative will feel inside ${him}`);
					}
				}
			}
		}

		if (slave.fetish === "submissive" && slave.fetishStrength > 60 && slave.fetishKnown === 1 && slave.vagina === 0) {
			r.push(`${He} presents ${his} virgin pussy to ${rapist.slaveName} without protest. This act  breaks in ${his} pussy, and reminds ${him} of ${his} status as a submissive slave.`);
			slave.vagina = 1;
			slave.devotion += 4;
			slave.fetishStrength += 1;
		} else if (slave.fetish === "submissive" && slave.fetishStrength > 60 && slave.fetishKnown === 1) {
			r.push(`${He} smiles as ${he} lays back and presents ${his} pussy to ${rapist.slaveName}. ${He} openly enjoys submitting ${himself} for others to make use of.`);
		} else if ((slave.devotion > 20 && slave.vagina === 0) ) {
			r.push(`${He} accepts your orders without comment and presents ${his} virgin pussy to ${rapist.slaveName}. ${He} gasps in shock when ${he} feels the`);
			if (rapist.dick > 0) {
				r.push(`${dickSize} dick`);
			} else {
				r.push(`massive clit`);
			}
			r.push(`enter ${him}. <span class="devotion inc">${He} is broken to slavery</span> by this application of ${his} body, which naturally <span class="virginity loss">will break in ${his} pussy.</span>`);
			slave.vagina = 1;
			slave.devotion += 10;
		} else if (slave.devotion >= -20 && slave.vagina === 0) {
			r.push(`${He} is clearly unhappy at the idea of losing ${his} pearl of great price to ${rapist.slaveName}; this probably isn't what ${he} imagined ${his} first real sexual encounter would be like. Nevertheless, ${he} is broken to slavery by this application of ${his} body, which naturally will break in ${his} pussy.`);
			slave.vagina = 1;
			slave.devotion += 4;
		} else if (slave.vagina === 0) {
			r.push(`As you anticipated, ${he} refuses to give ${rapist.slaveName} ${his} virginity. Since ${he} is restrained, ${his} horrified tears and frightened begging are ${his} only signs of rebellion. Naturally, this cruel act will break in ${his} pussy.`);
			slave.devotion -= 5;
			slave.trust -= 5;
			slave.vagina = 1;
		}

		if (isAmputee(slave)) {
			r.push(`You set ${his} limbless torso up for ${rapist.slaveName}.`);
		} else if (tooBigBreasts(slave)) {
			r.push(`You set ${him} up for ${rapist.slaveName}, face-down so the weight of ${his} tits pins ${him} helplessly in place.`);
		} else if (tooBigButt(slave)) {
			r.push(`You set ${him} up for ${rapist.slaveName}, face-down so the weight of ${his} giant ass pins ${him} helplessly in place and gives ${rapist.slaveName} a lovely cushion to thrust against.`);
		} else if (tooBigDick(slave)) {
			r.push(`You set ${him} up for ${rapist.slaveName}, face-up so ${he} is pinned under the weight of ${his} giant cock.`);
		} else if (tooBigBalls(slave)) {
			r.push(`You set ${him} up for ${rapist.slaveName}, face-down so the weight of ${his} giant balls anchor ${him} helplessly in place.`);
		} else if (slave.devotion < -20) {
			r.push(`${He} tries to refuse, so you restrain ${him} despite ${his} resistance to the idea of being raped by another slave.`);
		} else if (slave.devotion <= 20) {
			r.push(`${He} obeys your orders reluctantly, arranging ${himself} for vaginal sex despite ${his} obvious hesitation to be raped by another slave.`);
		} else if (slave.devotion < 10) {
			r.push(`${He} obeys your orders, arranging ${himself} for vaginal sex despite ${his} slight hesitation at the idea of being another's slave sex toy.`);
		} else {
			r.push(`${He} happily obeys your orders, getting ready to serve another slave.`);
		}

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

		if (slave.devotion < -20 && rapist.devotion < -20) {
			r.push(`Since you have two restrained slaves, it's up to you to do all the work. ${slave.slaveName} is tied up on the bed with ${his} pussy available, so you maneuver ${rapist.slaveName}'s`);
			if (rapist.dick > 0) {
				r.push(`${dickSize} dick`);
			} else {
				r.push(`strap-on`);
			}
			r.push(`into place. The two slaves make no further moves until you deal ${rapist.slaveName} a terrific swat across the ass and promise to give ${him2} more of the same until ${he2} gets going. ${rapist.slaveName} starts moving very slowly, barely prodding. After watching them mechanically go at it for a while, you use your leg to suddenly push ${him2} deep into ${slave.slaveName}, fully hilting ${him2} in one motion. You occasionally prod them with an electrical jolt to keep them going at a faster pace. Both slaves resent what you made them do for you and fear you'll make them do it again.`);
		} else if (rapist.devotion < -20) {
			r.push(`Since your dick slave is restrained, you order ${slave.slaveName} to present ${himself} on the bed, and then maneuver ${rapist.slaveName}'s`);
			if (rapist.dick > 0) {
				r.push(`${dickSize} dick`);
			} else {
				r.push(`strap-on`);
			}
			r.push(`into place. ${slave.slaveName} does ${his} best to hump ${himself} against the unwilling cock until you deal ${rapist.slaveName} a terrific swat across the ass and promise to give ${him2} more of the same until ${he2} gets going. ${He2} is still unenthusiastic, so you have ${him2} lie down and have ${slave.slaveName} ride ${himself} to orgasm. ${He2} resents what you made ${him2} do and fears you'll force ${him2} to do it again. Though ${slave.slaveName} accepts the situation, ${he} looks into ${rapist.slaveName}'s eyes with obvious apology.`);
		} else if (rapist.fetish === "dom" && rapist.fetishStrength > 20 && rapist.devotion > 20) {
			r.push(`${slave.slaveName} is tied and placed on the bed with ${his} pussy defenseless and available, and then you tell the randy ${rapist.slaveName} that it's all ${hers2}. The slave life has so affected ${rapist.slaveName} that ${he2} is quite eager to rape another slave for ${his2} pleasure. ${He2} penetrates ${him} immediately, fondling, pinching and licking while pistoning away, fully enjoying ${his2} dominant role, edging ${his2} poor toy again and again and making ${him} beg for release.`);
			if (slave.fetish === "dom") {
				if (slave.devotion < -20) {
					r.push(`By the end of the day ${slave.slaveName}'s abused cunt is`);

					if (rapist.dick > 0) {
						r.push(`dripping with cum,`);
					} else {
						r.push(`overflowing with juices,`);
					}
					r.push(`leaving ${him} horrified and disgusted at ${his} lack of control.`);
				} else {
					r.push(`By the end of the day ${slave.slaveName}'s abused cunt is`);

					if (rapist.dick > 0) {
						r.push(`dripping with cum,`);
					} else {
						r.push(`overflowing with juices,`);
					}
					r.push(`leaving ${him} annoyed at ${his} lack of control, though ${he} still somewhat enjoyed ${himself}.`);
				}
			} else if (slave.fetish === "submissive") {
				if (slave.devotion < -20) {
					r.push(`By the end of the day ${slave.slaveName}'s abused cunt is`);

					if (rapist.dick > 0) {
						r.push(`dripping with cum,`);
					} else {
						r.push(`overflowing with juices,`);
					}
					r.push(`leaving the submissive slave horrified that ${he} found the experience sexually satisfying.`);
				} else {
					r.push(`By the end of the day ${slave.slaveName}'s abused cunt is`);

					if (rapist.dick > 0) {
						r.push(`dripping with cum.`);
					} else {
						r.push(`overflowing with juices.`);
					}
					r.push(`This sexual encounter is everything ${he} dreamed of, leaving ${him} utterly satisfied.`);
				}
			}
			r.push(`${rapist.slaveName} is lying next to ${him} on the bed in a state of obvious satiation and bliss.`);
		} else if (rapist.energy > 95 && rapist.devotion > 20 && slave.devotion < -20) {
			r.push(`${slave.slaveName} is tied and placed on the bed with ${his} pussy defenseless and available, and then you tell the randy ${rapist.slaveName} that it's all ${hers2}. The slave life has so affected ${rapist.slaveName} that ${he2} is quite eager to rape another slave, just for the perverted novelty of the act. ${His} high libido keeps ${him} going for a long time, bringing the helpless toy to one forced orgasm after another. By the end of the day ${slave.slaveName} is lying on the bed, all worn out, ${his} cunt`);
			if (rapist.dick > 0) {
				r.push(`dripping with cum`);
			} else {
				r.push(`overflowing with juices`);
			}
			r.push(`to ${his} horror and resentment, while ${rapist.slaveName} is sleeping next to ${him} in a state of obvious satiation and bliss.`);
		} else if (slave.devotion <= 20 || rapist.devotion <= 20) {
			r.push(`You order ${slave.slaveName} onto the couch and tell ${rapist.slaveName} to get on with it. They fuck mechanically, gazing with roiling emotions into each others' eyes. They do seem to come to some sort of a non-verbal understanding on the necessity of getting it done, and there is no real unhappiness in either of them when they finish and disentangle themselves. As they clean themselves and exit, you notice ${rapist.slaveName}'s looking a little more longingly at ${slave.slaveName}.`);
		} else if (slave.devotion <= 50 || rapist.devotion <= 50) {
			r.push(`You order ${slave.slaveName} and ${rapist.slaveName} to get on with it. They fuck mechanically at first, gazing with roiling emotions into each others' eyes. Eventually, they begin to enjoy the intimacy of the act, finding the shared pleasure between them comforting. They finish and resume life as slaves, the light of this intimacy diminishing, softening with ${rapist.slaveName}'s dick and dripping away with the contents of ${slave.slaveName}'s cum-filled pussy.`);
		} else {
			r.push(`The two slaves happily and eagerly get down to business. They take their time with foreplay, humping slowly and gazing into each others' eyes, exchanging kisses almost constantly. After a little while, ${slave.slaveName} looks over ${rapist.slaveName}'s shoulder to where you're sitting, the invitation clear in ${his} eyes. As soon as you stand to come over, they roll over without being ordered to`);
			if (canDoAnal(slave) && slave.anus > 0) {
				r.push(`present ${slave.slaveName}'s butthole.`);

				slave.counter.anal++;
				V.analTotal++;
			} else {
				r.push(`invite you into ${slave.slaveName}'s crowded pussy.`);

				slave.counter.vaginal++;
				V.vaginalTotal++;
			}
			r.push(`You take up the offer and penetrate ${slave.slaveName} with your`);
			if (V.PC.dick > 0) {
				r.push(`dick.`);
			} else {
				r.push(`strap-on.`);
			}
			r.push(`With the added stimulus of penetrating a tight hole alongside ${his2} dear ${getWrittenTitle(rapist)}, ${rapist.slaveName} comes indecently hard, but no where near as hard as the completely overloaded ${slave.slaveName}. All of you collapse into an exhausted, happy pile of flesh.`);
		}

		if (canImpreg(slave, rapist)) {
			knockMeUp(slave, 25, 0, rapist.ID);
		}

		App.Events.addParagraph(el, r);
		return el;
	}
};


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

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

	const desc = SlaveTitle(slave);

	App.UI.DOM.drawOneSlaveRight(node, slave);

	r.push(`You order`, App.UI.DOM.slaveDescriptionDialog(slave, slave.slaveName, {noArt: true}), `to come to your office. The`);
	if (slave.relationship === -2) {
		r.push(`worshipful`);
	} else {
		r.push(`slutty`);
	}
	r.push(`${desc} arrives promptly, greets you correctly, and waits`);
	if (slave.relationship === -2) {
		r.push(`adoringly for a command.`);
	} else {
		r.push(`eagerly for you to fuck ${him}.`);
	}
	r.push(`You consider the situation carefully.`);
	if (slave.relationship === -2) {
		r.push(`${He}'s emotionally bonded to you, and loves you with all ${his} heart. ${He} would probably do anything you command and love you all the more for it. If you were to decide that you were tired of ${his} adoration, you could probably set ${him} up with another similarly broken slave. If you ordered them to love each other like they love you, they'd obey.`);
	} else {
		r.push(`${He}'s an emotional slut, and worships you and values ${himself} primarily in terms of sex. ${He}'s such a perfect sex slave that ${he}'d probably fuck anyone or anything you told ${him} to, and love you all the more for giving ${him} the chance. If you were to decide that even a sex slave like ${him} needs a little more structure than constant omnisexual lust, you could probably set ${him} up with another universal slut.`);
	}
	r.push(`Their relationship would probably be somewhat artificial at first, and they'd have to struggle at it, but after a period of adjustment, you'd have two worshipful slaves again, except that they'd be together. It'd definitely help if they had compatible behavioral quirks and sexual fetishes.`);
	App.Events.addParagraph(node, r);
	r = [];

	const selections = App.UI.DOM.appendNewElement("div", node);
	selections.style.float = "inline-end";

	App.UI.DOM.appendNewElement("h2", selections, `Put ${him} with another worshipful ${(slave.relationship === -2) ? "emotionally bonded slave" : "emotional slut"}`);
	selections.append(App.UI.SlaveList.slaveSelectionList(
		s => s.devotion >= 100 && s.relationship === slave.relationship && s.ID !== slave.ID,
		App.UI.SlaveList.SlaveInteract.stdInteract,
		null,
		(s) => App.UI.DOM.link("Match them", () => {
			// subSlave
			s.relationship = 4;
			s.relationshipTarget = slave.ID;
			s.devotion -= 20;
			// slave
			slave.relationship = 4;
			slave.relationshipTarget = s.ID;
			slave.devotion -= 20;
			jQuery(node).empty().append(matchedScene());
		})
	));

	App.Events.addParagraph(node, r);
	return node;

	function matchedScene() {
		const frag = new DocumentFragment();
		const subSlave = getSlave(slave.relationshipTarget);
		const {
			he2, his2, him2, girl2
		} = getPronouns(subSlave).appendSuffix("2");
		App.Events.drawEventArt(node, [slave, subSlave]);

		r.push(`You decide to set ${slave.slaveName} up with ${subSlave.slaveName}. Telling the former to wait, you have the latter hurry up to your office. When the`);
		if (slave.relationship === -2) {
			r.push(`slaves are waiting adoringly`);
		} else {
			r.push(`sluts are waiting with barely concealed lust`);
		}
		r.push(`in front of your desk together, you inform them of your decision.`);
		if (slave.relationship === -2) {
			r.push(`You commend their love for you, and let them know that it's all right for it to continue, but command them to love each other, too. They look doubtful, but at your orders they obediently take each other by the hand, and share a kiss. It will do for now. You assign them to live together as much as possible for a few days, and inform them that you'll be limiting your personal contact with them during this period. They give you identical looks of horror, and fail to notice how much of a perfect couple they already are.`);
		} else {
			r.push(`You praise their total commitment to sexual slavery, and let them know they'll continue to be sex slaves, but tell them that it's time for them to settle down. They give you identical looks of horror, and fail to notice how much of a perfect couple they already are. Patiently, you explain that their sex lives will remain more or less unchanged; just because two slaves are together doesn't mean they can't and won't have sex with other people. They look doubtful, but cheer up when you inform them that they'll be spending a lot of alone time together for a few days.`);
		}
		App.Events.addParagraph(node, r);
		r = [];
		r.push(`Being ordered into a relationship would be difficult for anyone, but they're so obedient that they do their best and make it work. You ensure that they do, and your determined efforts to do so reduce their devotion to you, though it's mostly by redirection towards each other. And in any case, they remain devoted enough, and will likely return to their earlier worshipfulness in a few weeks at most.`);
		let matched = 1;
		if (slave.fetish === "submissive" && subSlave.fetish === "dom") {
			r.push(`${subSlave.slaveName} is a dom and ${slave.slaveName} is a sub. It's a match out of bad fiction.`);
		} else if (subSlave.fetish === "submissive" && slave.fetish === "dom") {
			r.push(`${slave.slaveName} is a dom and ${subSlave.slaveName} is a sub. It's a match out of bad fiction.`);
		} else if (slave.fetish === "masochist" && subSlave.fetish === "sadist") {
			r.push(`${subSlave.slaveName} is a sadist and ${slave.slaveName} is a masochist. They're a perfect ouroboros of agony.`);
		} else if (subSlave.fetish === "masochist" && slave.fetish === "sadist") {
			r.push(`${slave.slaveName} is a sadist and ${subSlave.slaveName} is a masochist. They're a perfect ouroboros of agony.`);
		} else if (slave.fetish === "cumslut" && subSlave.balls > 0) {
			r.push(`${subSlave.slaveName} has balls and ${slave.slaveName} has the appetite to drain them of every drop of cum.`);
		} else if (subSlave.fetish === "cumslut" && slave.balls > 0) {
			r.push(`${slave.slaveName} has balls and ${subSlave.slaveName} has the appetite to drain them of every drop of cum.`);
		} else if (slave.fetish === "humiliation" && subSlave.fetish === "sadist") {
			r.push(`${slave.slaveName} loves to be humiliated, and ${subSlave.slaveName} can definitely get off on another ${girl}'s shame.`);
		} else if (subSlave.fetish === "humiliation" && slave.fetish === "sadist") {
			r.push(`${subSlave.slaveName} loves to be humiliated, and ${slave.slaveName} can definitely get off on another ${girl2}'s shame.`);
		} else if (slave.fetish === "buttslut" && subSlave.fetish === "dom") {
			r.push(`${subSlave.slaveName} likes fucking other girls, so once ${slave.slaveName} asks ${him2} to just do it to ${his} ass all the time, they're both happy.`);
		} else if (subSlave.fetish === "buttslut" && slave.fetish === "dom") {
			r.push(`${slave.slaveName} likes fucking other girls, so once ${subSlave.slaveName} asks ${him} to just do it to ${his2} ass all the time, they're both happy.`);
		} else if (slave.fetish === "boobs" && subSlave.boobs > 4000) {
			r.push(`${slave.slaveName} fetishized breasts so much that ${he} thinks ${subSlave.slaveName}'s udders are one of the sexiest things ${he}'s ever seen.`);
		} else if (subSlave.fetish === "boobs" && slave.boobs > 4000) {
			r.push(`${subSlave.slaveName} fetishized breasts so much that ${he2} thinks ${slave.slaveName}'s udders are one of the sexiest things ${he2}'s ever seen.`);
		} else if ((slave.fetish === "pregnancy" && subSlave.fetish === "pregnancy") && subSlave.bellyPreg >= 300000 && slave.bellyPreg >= 300000) {
			r.push(`${slave.slaveName} and ${subSlave.slaveName} are both enormously laden with children, much to the other's delight. They can't wait to explore each other's baby filled middle.`);
		} else if ((slave.fetish === "pregnancy" && subSlave.fetish === "pregnancy") && subSlave.preg > subSlave.pregData.normalBirth/2 && slave.preg > slave.pregData.normalBirth/2) {
			r.push(`${slave.slaveName} and ${subSlave.slaveName} are both heavily pregnant, much to the other's delight.`);
		} else if ((subSlave.fetish === "pregnancy") && slave.bellyPreg >= 300000) {
			r.push(`${subSlave.slaveName} fetishizes pregnant bellies so much that ${he2} is awestruck by ${slave.slaveName}'s enormous, baby filled middle.`);
		} else if ((slave.fetish === "pregnancy") && subSlave.bellyPreg >= 300000) {
			r.push(`${slave.slaveName} fetishizes pregnant bellies so much that ${he} is awestruck by ${subSlave.slaveName}'s enormous, baby filled middle.`);
		} else if ((subSlave.fetish === "pregnancy") && slave.preg > slave.pregData.normalBirth/2) {
			r.push(`${subSlave.slaveName} fetishizes pregnant bellies so much that ${he2} thinks ${slave.slaveName} gravid middle is one of the sexiest things ${he2}'s ever seen.`);
		} else if ((slave.fetish === "pregnancy") && subSlave.preg > subSlave.pregData.normalBirth/2) {
			r.push(`${slave.slaveName} fetishizes pregnant bellies so much that ${he} thinks ${subSlave.slaveName}'s gravid middle is one of the sexiest things ${he}'s ever seen.`);
		} else if ((slave.fetish === "pregnancy" && subSlave.fetish === "pregnancy") && subSlave.bellyPreg >= 100 && slave.bellyPreg >= 100) {
			r.push(`${slave.slaveName} and ${subSlave.slaveName} are both pregnant and just beginning to show. They'll both be able to enjoy the other's swelling body.`);
		} else if (slave.fetish === "pregnancy" && canAchieveErection(subSlave)) {
			r.push(`${slave.slaveName} can indulge the fantasy that ${he}'s getting pregnant each and every time ${subSlave.slaveName} cums inside ${him}.`);
		} else if (subSlave.fetish === "pregnancy" && canAchieveErection(slave)) {
			r.push(`${subSlave.slaveName} can indulge the fantasy that ${he2}'s getting pregnant each and every time ${slave.slaveName} cums inside ${him2}.`);
		} else {
			matched = 0;
		}
		if (matched === 1) {
			r.push(`Their sexual compatibility is excellent, and they <span class="mediumaquamarine">trust you more</span> for matching them so perfectly.`);
			slave.trust += 10;
			subSlave.trust += 10;
		} else if (slave.fetish === subSlave.fetish) {
			r.push(`They're a couple of`);
			switch (slave.fetish) {
				case "submissive":
					r.push(`cringing submissives,`);
					break;
				case "cumslut":
					r.push(`hungry oral fiends,`);
					break;
				case "humiliation":
					r.push(`public sex aficionados,`);
					break;
				case "buttslut":
					r.push(`shameless anal whores,`);
					break;
				case "boobs":
					r.push(`breast obsessives,`);
					break;
				case "pregnancy":
					r.push(`breeding bitches,`);
					break;
				case "dom":
					r.push(`dominating spirits,`);
					break;
				case "sadist":
					r.push(`inveterate sadists,`);
					break;
				case "masochist":
					r.push(`pain sluts,`);
					break;
				default:
					r.push(`vanilla girls,`);
			}
			r.push(`and they bond over their shared sexual tastes, easing their acclimation to having another slave play a major role in their sex lives. They're almost as happy sharing stories about their past sexual exploits as they are actually having sex.`);
		} else {
			r.push(`Their fetishes aren't very compatible, and though as a couple of inventive nymphos they do their absolute best to fuck each other senseless, they trust you a less out of doubt in the sexual match.`);
			slave.trust -= 10;
			subSlave.trust -= 10;
		}
		if (slave.behavioralQuirk === subSlave.behavioralQuirk && slave.behavioralQuirk !== "none") {
			r.push(`They're both`);
			switch (slave.behavioralQuirk) {
				case "confident":
					r.push(`confident, and soon come to an understanding that they'll be able to`);
					if (slave.relationship === -2) {
						r.push(`serve you better together.`);
					} else {
						r.push(`fuck third parties better as a pair.`);
					}
					break;
				case "cutting":
					r.push(`witty, and each quickly discovers that their new partner can hold up their end of a battle of quips. Their loving snippiness develops rapidly, and it's pretty cute.`);
					break;
				case "funny":
					r.push(`a little weird. It takes a while for them to adjust to how funny their new partner is, but they learn to support each other soon enough.`);
					break;
				case "adores women":
					r.push(`pretty crazy about ladies. They're both slave girls themselves, which helps, and they've also got a never-ending parade of female bodies to discuss together.`);
					break;
				case "adores men":
					r.push(`guy crazy. They discuss nothing else together, and their discussions frequently turn into makeouts and then mutual masturbation.`);
					break;
				case "fitness":
					r.push(`fitness fanatics, and being together feels natural for them, since they've already worked out together often enough.`);
					break;
				case "insecure":
					r.push(`very insecure. Perhaps unsurprisingly, they soon grow to depend on each other, each relying on their partner to support their low self-esteem.`);
					break;
				case "sinful":
					if (V.arcologies[0].FSChattelReligionist === "unset") {
						r.push(`eagerly sinful, and they grow close by opening up and sharing their fraught histories of faith with each other.`);
					} else {
						r.push(`fanatical about being slave acolytes of the new faith, and their partnership is strengthened by their belief that it's divinely ordained.`);
					}
					break;
				case "advocate":
					r.push(`advocates for slavery. Not only do they share this, but they believe that your orders are good for them, including your order that they be together.`);
			}
		} else {
			r.push(`They approach life as slaves differently, and it's <span class="gold">tough for them to reconcile their differences over their values.</span>`);
			slave.trust -= 10;
			subSlave.trust -= 10;
		}
		App.Events.addParagraph(frag, r);

		return frag;
	}
};

repo_name: Elohiem/fc

license: mit