From c667766126f3be6ba7465536527f2b43d35a3011 Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Thu, 13 Aug 2020 23:36:58 -0400
Subject: [PATCH] saRelationships.js part 1

---
 src/endWeek/saRelationships.js | 1281 ++++++++++++++++++++++++++++++++
 src/gui/css/mainStyleSheet.css |    2 +-
 2 files changed, 1282 insertions(+), 1 deletion(-)
 create mode 100644 src/endWeek/saRelationships.js

diff --git a/src/endWeek/saRelationships.js b/src/endWeek/saRelationships.js
new file mode 100644
index 00000000000..a1fce0220d7
--- /dev/null
+++ b/src/endWeek/saRelationships.js
@@ -0,0 +1,1281 @@
+App.SlaveAssignment.relationships = (function() {
+	"use strict";
+
+	let r;
+
+	// eslint-disable-next-line no-unused-vars
+	let he, him, his, hers, himself, girl, loli, wife, woman, He, His;
+	// eslint-disable-next-line no-unused-vars
+	let he2, him2, his2, hers2, himself2, girl2, wife2, woman2, loli2, He2, His2;
+	let playerPronouns;
+
+	let PC;
+	let friend;
+
+	return saRelationships;
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * @returns {string}
+	 */
+	function saRelationships(slave) {
+		r = [];
+
+		PC = V.PC;
+		({
+			// eslint-disable-next-line no-unused-vars
+			he, him, his, hers, himself, girl, He, His, loli, wife
+		} = getPronouns(slave));
+		playerPronouns = getPronouns(PC);
+
+		if (slave.fuckdoll === 0) {
+			if (slave.relationship === 0 && slave.fetish !== "mindbroken") {
+				generateRelationship(slave);
+			} else if (slave.relationship !== 0) {
+				if (slave.relationship > 0) {
+					sanityCheck(slave);
+				}
+				if (slave.relationship !== 0) {
+					existingRelationship(slave);
+					if (slave.relationship > 2) {
+						consumateRelationship(slave);
+					}
+				}
+			}
+			if (slave.fetish !== "mindbroken" && totalRelatives(slave) > 0) {
+				familyFeelings(slave);
+			}
+		}
+
+		return r.join(" ");
+	}
+
+	/** Can this slave possibly be a friend?
+	 * @param {App.Entity.SlaveState} slave
+	 * @param {App.Entity.SlaveState} potentialFriend
+	 * @returns {boolean}
+	 */
+	function canStartFriendship(slave, potentialFriend) {
+		return (potentialFriend.relationship === 0 && slave.rivalryTarget !== potentialFriend.ID && potentialFriend.ID !== slave.ID && potentialFriend.fetish !== "mindbroken" && potentialFriend.fuckdoll === 0 && isSlaveAvailable(potentialFriend));
+	}
+
+	/** Does the facility head accept her advances?
+	 * @param {App.Entity.SlaveState} potentialFriend
+	 * @returns {boolean}
+	 */
+	function silverTongue(potentialFriend, manipulationSkill) {
+		return manipulationSkill > (random(1, 100 + ((potentialFriend.intelligence + potentialFriend.intelligenceImplant) / 10)));
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * @param {App.Entity.SlaveState} friend
+	 */
+	function startFriendship(slave, friend, degree) {
+		friend.relationship = degree;
+		friend.relationshipTarget = slave.ID;
+		slave.relationship = degree;
+		slave.relationshipTarget = friend.ID;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 *
+	 */
+	function generateRelationship(slave) {
+		let randomSeed;
+
+		if (slave.devotion + slave.trust > 175 && random(1, 3) === 1) { // player + emotional slut
+			r.push(`${slave.slaveName} is quite devoted to you, and trusts both you and ${his} place as a slave. Since ${he} does not have a strong relationship with another slave,`);
+			if (slave.sexualQuirk === "romantic") {
+				r.push(`and persistently interprets sex in the most romantic possible terms, ${he} has decided that ${he} wants to be yours in ${his} heart as well as ${his}`);
+				if (slave.vagina > 0) {
+					r.push(`pussy.`);
+				} else if (slave.anus > 0) {
+					r.push(`butthole.`);
+				} else {
+					r.push(`mouth.`);
+				}
+				r.push(`<span class="relationship">${He}'s become emotionally bonded to you!</span>`);
+				slave.relationship = -2;
+			} else if (slave.assignment === Job.CONCUBINE) {
+				r.push(`and is your concubine, ${he} almost inevitably comes to view you as much as a lover as an owner. <span class="relationship">${He}'s become emotionally bonded to you!</span>`);
+				slave.relationship = -2;
+			} else if (V.masterSuiteUpgradeLuxury === 2 && slave.assignment === Job.MASTERSUITE) {
+				r.push(`and does nothing but eat, sleep, and make love to your other fucktoys, ${he} slowly loses sight of any distinction between emotional attachment and sexual congress. <span class="relationship">${He}'s become an emotional slut!</span>`);
+				slave.relationship = -1;
+			} else if (slave.assignment === Job.FUCKTOY || slave.assignment === Job.MASTERSUITE) {
+				r.push(`and spends ${his} days worshipping your`);
+				if (V.PC.dick !== 0) {
+					r.push(`cock${PC.vagina !== -1 ? "and" : ","}`);
+				}
+				if (V.PC.vagina !== -1) {
+					r.push(`cunt,`);
+				}
+				r.push(`${he} begins to focus more and more of ${his} happiness on how happy you are. <span class="relationship">${He}'s become emotionally bonded to you!</span>`);
+				slave.relationship = -2;
+			} else if (slave.assignment === Job.PUBLIC || slave.assignment === Job.CLUB) {
+				r.push(`and ${his} life is an endless stream of lovers, ${he} unconsciously loses any sense of emotional attachment outside the intimacy of sex. <span class="relationship">${He}'s become an emotional slut!</span>`);
+				slave.relationship = -1;
+			} else if (slave.energy > 95 && (slave.counter.anal + slave.counter.vaginal + slave.counter.oral + slave.counter.mammary + slave.counter.penetrative > ((V.week - slave.weekAcquired) * random(20, 30)))) {
+				r.push(`is a total sex addict, and has a spectacularly promiscuous sexual history, ${he} begins to think of sex as ${his} only meaningful emotional connection with people. <span class="relationship">${He}'s become an emotional slut!</span>`);
+				slave.relationship = -1;
+			} else {
+				r.push(`and loves you, ${he} begins to think of you as a ${woman} might think of ${his} lover — or spouse. ${He} knows ${he} cannot hope for more of a relationship with you than ${he} has, but ${he} finds emotional support in serving you nonetheless. <span class="relationship">${He}'s become emotionally bonded to you!</span>`);
+				slave.relationship = -2;
+			}
+		} else if (slave.career === "a Futanari Sister" && slave.rules.relationship === "permissive") {
+			for (const potentialFriend of V.slaves) {
+				if (potentialFriend.career === "a Futanari Sister" && potentialFriend.rules.relationship === "permissive" && canStartFriendship(slave, potentialFriend)) {
+					r.push(`${slave.slaveName} greets ${potentialFriend.slaveName} with joy. It's not clear whether they ever knew each other during their lives as Futanari Sisters, but it seems that they believe themselves to be in a relationship by simple virtue of having been Sisters. In any case, ${slave.slaveName} and ${potentialFriend.slaveName} <span class="relationship">become inseparable lovers</span> instantly, as though there's no possibility they would do anything else. They're even surprised when other slaves ask them about it; it's as though they're unaware that other possibilities even exist.`);
+					startFriendship(slave, potentialFriend, 4);
+					break;
+				}
+			}
+		} else if (slave.origin === "You were acquainted with ${him} before you were an arcology owner; your rival tried to use ${him} to manipulate you, but you rescued ${him}." && V.rivalryDuration > 20 && !["Intellectual Dependency", "Paternalism", "Racial Supremacism", "Slave Professionalism"].includes(V.rivalryFS)&& slave.newGamePlus === 0) {
+			potentialFriend = V.slaves.find((s) => (s.prestigeDesc === "You bankrupted and enslaved ${him} in revenge for ${his} part in the attack on your arcology by the Daughters of Liberty." && s.fuckdoll === 0 && s.fetish !== "mindbroken" && s.newGamePlus === 0));
+			if (potentialFriend !== undefined) {
+				r.push(`${slave.slaveName} greets ${potentialFriend.slaveName} with joy, happy to see a familiar face again. Without any regard to you, <span class="relationship">they continue their prior relationship.</span>`);
+				if (potentialFriend.relationship > 0) { // remove me with multi-friend system
+					formerFriend = V.slaves.find((s) => (s.ID === potentialFriend.relationshipTarget));
+					if (formerFriend !== undefined) {
+						formerFriend.relationshipTarget = 0;
+						formerFriend.relationship = 0;
+					}
+				}
+				startFriendship(slave, potentialFriend, 4);
+			}
+		} else if (slave.rules.relationship !== "restrictive") {
+			if (slave.trust > -90) { // used to be devotion > -90. Why a slave hating you wouldn't try to make friends with others that hate you doesn't make sense. Almost tempted to raise it to -50.
+				if (slave.behavioralFlaw === "none" || (slave.intelligence + slave.intelligenceImplant > 50)) {
+					randomSeed = random(1, 100);
+				} else {
+					randomSeed = random(1, 80);
+				}
+				const manipulationSkill = (slave.devotion + slave.trust + ((slave.intelligence + slave.intelligenceImplant) / 10)); // intended for defiant slaves to ingrain themselves with facility heads
+				if (randomSeed > 75) {
+					let resentment = 0;
+					for (const potentialFriend of V.slaves) {
+						({
+							he2, him2, his2, hers2, himself2, girl2, He2, His2, loli2
+						} = getPronouns(potentialFriend).appendSuffix("2"));
+						if (canStartFriendship(slave, potentialFriend) && potentialFriend.assignment !== Job.CONFINEMENT) {
+							if (potentialFriend.ID === V.MadamID && slave.assignment === Job.BROTHEL) {
+								if (potentialFriend.rules.relationship !== "restrictive" && silverTongue(potentialFriend, manipulationSkill)) {
+									r.push(`${slave.slaveName} manages to ingratiate ${himself} with the Madam, ${potentialFriend.slaveName}. The two slaves have <span class="relationship">struck up a friendship.</span>`);
+									startFriendship(slave, potentialFriend, 1);
+									break;
+								} else {
+									if (slave.devotion < -20) {
+										r.push(`${slave.slaveName} tries to strike up a friendship with the Madam, ${potentialFriend.slaveName}, and is <span class="trust dec">punished</span> by ${him2} for disrespect.`);
+										slave.trust -= 4;
+									}
+								}
+							} else if (potentialFriend.ID === V.djID && slave.assignment === Job.CLUB) {
+								if (potentialFriend.rules.relationship !== "restrictive" && silverTongue(potentialFriend, manipulationSkill)) {
+									r.push(`${slave.slaveName} manages to ingratiate ${himself} with the DJ, ${potentialFriend.slaveName}. The two slaves have <span class="relationship">struck up a friendship.</span>`);
+									startFriendship(slave, potentialFriend, 1);
+									break;
+								} else {
+									if (slave.devotion < -20) {
+										r.push(`${slave.slaveName} tries to strike up a friendship with the DJ, ${potentialFriend.slaveName}, and is <span class="trust dec">punished</span> by ${him2} for disrespect.`);
+										slave.trust -= 4;
+									}
+								}
+							} else if (potentialFriend.ID === V.MilkmaidID && slave.assignment === Job.DAIRY) {
+								if (potentialFriend.rules.relationship !== "restrictive" && silverTongue(potentialFriend, manipulationSkill)) {
+									r.push(`${slave.slaveName} manages to ingratiate ${himself} with the Milkmaid, ${potentialFriend.slaveName}. The two slaves have <span class="relationship">struck up a friendship.</span>`);
+									startFriendship(slave, potentialFriend, 1);
+									break;
+								} else {
+									if (slave.devotion < -20) {
+										r.push(`${slave.slaveName} tries to strike up a friendship with the Milkmaid, ${potentialFriend.slaveName}, and is <span class="trust dec">punished</span> by ${him2} for disrespect.`);
+										slave.trust -= 4;
+									}
+								}
+							} else if (potentialFriend.ID === V.FarmerID && slave.assignment === Job.FARMYARD) {
+								if (potentialFriend.rules.relationship !== "restrictive" && silverTongue(potentialFriend, manipulationSkill)) {
+									r.push(`${slave.slaveName} manages to ingratiate ${himself} with the Farmer, ${potentialFriend.slaveName}. The two slaves have <span class="relationship">struck up a friendship.</span>`);
+									startFriendship(slave, potentialFriend, 1);
+									break;
+								} else {
+									if (slave.devotion < -20) {
+										r.push(`${slave.slaveName} tries to strike up a friendship with the Farmer, ${potentialFriend.slaveName}, and is <span class="trust dec">punished</span> by ${him2} for disrespect.`);
+										slave.trust -= 4;
+									}
+								}
+							} else if (potentialFriend.ID === V.SchoolteacherID && slave.assignment === Job.SCHOOL) {
+								if (potentialFriend.rules.relationship !== "restrictive" && silverTongue(potentialFriend, manipulationSkill)) {
+									r.push(`${slave.slaveName} manages to ingratiate ${himself} with the Schoolteacher, ${potentialFriend.slaveName}. The two slaves have <span class="relationship">struck up a friendship.</span>`);
+									startFriendship(slave, potentialFriend, 1);
+									break;
+								} else {
+									if (slave.devotion < -20) {
+										r.push(`${slave.slaveName} tries to strike up a friendship with the Schoolteacher, ${potentialFriend.slaveName}, and is <span class="trust dec">punished</span> by ${him2} for disrespect.`);
+										slave.trust -= 4;
+									}
+								}
+							} else if (potentialFriend.ID === V.AttendantID && slave.assignment === Job.SPA) {
+								if (potentialFriend.rules.relationship !== "restrictive" && silverTongue(potentialFriend, manipulationSkill)) {
+									r.push(`${slave.slaveName} basks in the affection and care of the spa attendant, ${potentialFriend.slaveName}. The two slaves have <span class="relationship">struck up a friendship.</span>`);
+									startFriendship(slave, potentialFriend, 1);
+									break;
+								} else {
+									if (slave.devotion < -20) {
+										r.push(`${slave.slaveName} tries to strike up a friendship with the spa attendant, ${potentialFriend.slaveName}. ${He2} gently <span class="devotion inc">counsels</span> ${him} to obey the rules.`);
+										slave.devotion += 1;
+									}
+								}
+							} else if (potentialFriend.ID === V.StewardessID && slave.assignment === Job.QUARTER) {
+								if (potentialFriend.rules.relationship !== "restrictive" && silverTongue(potentialFriend, manipulationSkill)) {
+									r.push(`${slave.slaveName} manages to ingratiate ${himself} with the Stewardess, ${potentialFriend.slaveName}. The two slaves have <span class="relationship">struck up a friendship.</span>`);
+									startFriendship(slave, potentialFriend, 1);
+									break;
+								} else {
+									if (slave.devotion < -20) {
+										r.push(`${slave.slaveName} tries to strike up a friendship with the Stewardess, ${potentialFriend.slaveName}, and is <span class="trust dec">punished</span> by ${him2} for disrespect.`);
+										slave.trust -= 4;
+									}
+								}
+							} else if (potentialFriend.ID === V.WardenessID && slave.assignment === Job.CELLBLOCK) {
+								if (potentialFriend.rules.relationship !== "restrictive" && silverTongue(potentialFriend, manipulationSkill)) {
+									r.push(`${slave.slaveName} manages to earn the respect of the Wardeness, ${potentialFriend}.slaveName. The two slaves have <span class="relationship">struck up a friendship.</span>`);
+									startFriendship(slave, potentialFriend, 1);
+									break;
+								} else {
+									if (slave.devotion < -20) {
+										r.push(`${slave.slaveName} tries to strike up a friendship with the Wardeness, ${potentialFriend.slaveName}, and is <span class="trust dec">beaten</span> by ${him2} for ${his} trouble.`);
+										slave.trust -= 5;
+									}
+								}
+							} else if (potentialFriend.ID === V.ConcubineID && slave.assignment === Job.MASTERSUITE) {
+								if (potentialFriend.rules.relationship !== "restrictive" && silverTongue(potentialFriend, manipulationSkill)) {
+									r.push(`${slave.slaveName} becomes especially close to the Concubine, ${potentialFriend.slaveName}. The two slaves have <span class="relationship">struck up a friendship.</span>`);
+									startFriendship(slave, potentialFriend, 1);
+									break;
+								} else {
+									if (slave.devotion < -20 && potentialFriend.fetish !== "mindbroken") {
+										r.push(`${slave.slaveName} tries to strike up a friendship with the Concubine, ${potentialFriend.slaveName}, and is gently <span class="devotion inc">counseled</span> by ${him2} that such things are against the rules.`);
+										slave.devotion += 1;
+									}
+								}
+							} else if (potentialFriend.assignment === slave.assignment) {
+								if (random(1, 100) > 50) {
+									if (potentialFriend.rules.relationship !== "restrictive") {
+										r.push(`${slave.slaveName} and ${potentialFriend.slaveName} see a lot of each other`);
+										if (slave.assignment === Job.SCHOOL || slave.assignment === Job.CLASSES) {
+											r.push(`in class`);
+										} else if (slave.assignment === Job.CLINIC) {
+											r.push(`while being treated`);
+										} else if (slave.assignment === Job.CELLBLOCK) {
+											r.push(`while being punished`);
+										} else if (slave.assignment === Job.REST) {
+											r.push(`in their time off`);
+										} else {
+											r.push(`at work`);
+										}
+										r.push(`and <span class="relationship">strike up a friendship.</span>`);
+										startFriendship(slave, potentialFriend, 1);
+										break;
+									} else {
+										if (resentment === 0) {
+											r.push(`${slave.slaveName} tries to strike up a friendship with ${potentialFriend.slaveName} and is <span class="trust dec">punished</span> for breaking the rules against such things; ${he} <span class="devotion dec">resents</span> being castigated for simple sociability.`);
+											slave.devotion -= 2;
+											slave.trust -= 2;
+											resentment++;
+										}
+									}
+								}
+							} else if (mutualChildren(slave, potentialFriend, V.slaves) > 0) {
+								 if (App.Utils.sexAllowed(slave, potentialFriend)) {
+									 if (potentialFriend.rules.relationship === "permissive") {
+										r.push(`${slave.slaveName} and ${potentialFriend.slaveName} have`);
+										if (mutualChildren(slave, potentialFriend, V.slaves) === 0) {
+											r.push(`a child`);
+										} else {
+											r.push(`children`);
+										}
+										r.push(` living in your penthouse, so it's not surprising that their offspring brings them together. They have <span class="relationship">become friends</span> for their child's sake.`);
+										startFriendship(slave, potentialFriend, 1);
+										break;
+									} else {
+										r.push(`${slave.slaveName} tries to renew ${his} relationship with ${potentialFriend.slaveName} and is <span class="trust dec">punished</span> for breaking the rules against such things; ${he} <span class="devotion dec">resents</span> being prevented from reuniting with ${him2}.`);
+										slave.devotion -= 2;
+										slave.trust -= 2;
+									}
+								}
+							} else if (potentialFriend.fetish === slave.fetish || (potentialFriend.fetish === "sadist" && slave.fetish === "masochist") || (slave.fetish === "sadist" && potentialFriend.fetish === "masochist") || (potentialFriend.fetish === "dom" && slave.fetish === "submissive") || (slave.fetish === "submissive" && potentialFriend.fetish === "dom")) {
+								if (slave.fetish !== "none" && App.Utils.sexAllowed(slave, potentialFriend)) {
+									if (potentialFriend.rules.relationship === "permissive") {
+										r.push(`${slave.slaveName} and ${potentialFriend.slaveName} share sexual inclinations, so it's only natural that they <span class="relationship">become friends with benefits.</span>`);
+										startFriendship(slave, potentialFriend, 3);
+										break;
+									} else {
+										if (resentment === 0) {
+											r.push(`${slave.slaveName} tries to strike up a sexual relationship with ${potentialFriend.slaveName} and is <span class="trust dec">punished</span> for breaking the rules against such things; ${he} <span class="devotion dec">resents</span> being prevented from pursuing ${him2}.`);
+											slave.devotion -= 2;
+											slave.trust -= 2;
+											resentment++;
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 *
+	 */
+	function sanityCheck(slave) {
+		const friend = V.slaves.find((s) => (s.ID === slave.relationshipTarget));
+		if (friend === undefined) {
+			r.push(`<span class="error">${slave.slaveName}'s relationship was ${slave.relationship} and relationshipTarget was ${slave.relationshipTarget} but no slave with that ID was found</span>`);
+			slave.relationship = 0;
+			slave.relationshipTarget = 0;
+		} else {
+			if (slave.rivalry !== 0 && slave.rivalryTarget === friend.ID) {
+				friend.rivalry = 0;
+				friend.rivalryTarget = 0;
+				slave.rivalry = 0;
+				slave.rivalryTarget = 0;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 *
+	 */
+	function existingRelationship(slave) {
+		if (slave.relationship > 0) {
+			friend = V.slaves.find((s) => (s.ID === slave.relationshipTarget));
+			({
+				he2, him2, his2, hers2, himself2, girl2, He2, His2, loli2
+			} = getPronouns(friend).appendSuffix("2"));
+		}
+		if (slave.fetish === "mindbroken" && slave.relationship !== -3) {
+			r.push(`Since ${he} is mindbroken, ${he} <span class="relationship dec">can't really maintain</span>`);
+			if (slave.relationship > 0) {
+				r.push(`any meaningful relationship with ${friend.slaveName}.`);
+				friend.relationship = 0;
+				friend.relationshipTarget = 0;
+			} else if (slave.relationship === -1) {
+				r.push(`any emotional dependencies.`);
+			} else {
+				r.push(`any meaningful relationship with you.`);
+			}
+			slave.relationship = 0;
+			slave.relationshipTarget = 0;
+		} else if (slave.relationship === -1) {
+			if ([Job.DJ, Job.CLUB, Job.PUBLIC, Job.WHORE, job.BROTHEL].includes(slave.assignment)) {
+				r.push(`${His} endless stream of lovers maintains and satisfies ${his} emotional reliance on sex.`);
+			} else if (slave.assignment === Job.MASTERSUITE && V.masterSuiteUpgradeLuxury === 2) {
+				r.push(`Forming a part of the pile of copulating bodies in ${V.masterSuiteName} satisfies ${his} voracious sexual appetite.`);
+			} else if ((slave.energy <= 95)) {
+				r.push(`${He} is not a complete nymphomaniac and ${he} doesn't have a constant stream of lovers, so ${he} has <span class="relationship dec">begun to rely less on sex for emotional support</span> than ${he} once did.`);
+				slave.relationship = 0;
+			} else if (slave.energy > 95) {
+				r.push(`${He} is such a nymphomaniac that even without a steady stream of lovers, ${his} emotional reliance on promiscuity remains.`);
+				if (slave.devotion > 60) {
+					r.push(`${He} is <span class="devotion dec">emotionally unfulfilled</span> by ${his} assignment, since it does not afford ${him} the validation of massive promiscuity.`);
+					slave.devotion--;
+				}
+				if (slave.trust > 60) {
+					r.push(`${He} is <span class="trust dec">impatient</span> with ${his} limited field of potential sexual partners, and would prefer to be a publicly available nympho.`);
+					slave.trust--;
+				}
+			}
+		} else if (slave.relationship === -2 || slave.relationship === -3) {
+			if (areRelated(slave, PC)) {
+				const PCrelative = relativeTerm(slave, PC);
+				if (slave.fetish !== "mindbroken") {
+					r.push(`${He}`);
+					if (slave.sexualQuirk === "perverted") {
+						r.push(`is such a pervert that ${he} <span class="devotion inc">enjoys</span> carrying on an incestuous relationship with ${his} own ${PCrelative}.`);
+						slave.devotion += 1;
+					} else if (slave.devotion > 95) {
+						r.push(`is so inured to the perversities of slavery that ${he} <span class="devotion inc">enjoys</span> carrying on an incestuous relationship with ${his} own ${PCrelative}.`);
+						slave.devotion += 1;
+					} else if (slave.behavioralQuirk === "sinful") {
+						r.push(`is torn between sinful delight and deep disgust that ${he}'s carrying on an incestuous relationship with ${his} own ${PCrelative}.`);
+					} else if (slave.devotion > 75) {
+						r.push(`is so devoted to you that ${he} accepts carrying on an incestuous relationship with ${his} own ${PCrelative}.`);
+					} else if (slave.devotion > 50) {
+						r.push(`is somewhat <span class="devotion dec">disturbed</span> that ${he}'s carrying on an incestuous relationship with ${his} own ${PCrelative}.`);
+						slave.devotion -= 2;
+					} else if (slave.devotion > 20) {
+						r.push(`is <span class="devotion dec">disturbed</span> and <span class="trust dec">scared</span> that ${he}'s carrying on an incestuous relationship with ${his} own ${PCrelative}.`);
+						slave.devotion -= 2;
+						slave.trust -= 2;
+					} else {
+						r.push(`is <span class="devotion dec">revolted</span> and <span class="trust dec">scared</span> that ${he}'s carrying on an incestuous relationship with ${his} own ${PCrelative}.`);
+						slave.devotion -= 4;
+						slave.trust -= 4;
+					}
+					if (slave.pregKnown === 1 && slave.pregSource === -1) {
+						if (slave.sexualQuirk === "perverted") {
+							r.push(`${He}'s even <span class="devotion inc">aroused</span> by the constant awareness that ${his} ${PCrelative} is the parent of the child${slave.pregType > 1 ? "ren" : ""} ${he}'s carrying.`);
+							slave.devotion += 1;
+						} else if (slave.behavioralQuirk === "sinful") {
+							r.push(`${His} feelings about carrying ${his} ${PCrelative}'s child${slave.pregType > 1 ? "ren" : ""} are <span class="devotion inc">secretly less mixed,</span> though.`);
+							slave.devotion += 1;
+						} else if (slave.devotion > 95) {
+							r.push(`${He} occasionally remembers that ${he}'s carrying ${his} ${PCrelative}'s child${slave.pregType > 1 ? "ren" : ""}, but does ${his} best to accept it by not thinking about it.`);
+						} else if (slave.devotion > 50) {
+							r.push(`${He}'s <span class="devotion dec">disgusted</span> that the`);
+							if (slave.pregType > 1) {
+								r.push(`babies ${he}'s carrying are`);
+							} else {
+								r.push(`baby ${he}'s carrying is`);
+							}
+							r.push(`${his} ${PCrelative}'s, though ${he} tries ${his} best not to think about it.`);
+							slave.devotion -= 1;
+						} else if (slave.devotion > 20) {
+							r.push(`${He}'s so <span class="devotion dec">disgusted</span> that the`);
+							if (slave.pregType > 1) {
+								r.push(`babies ${he}'s carrying are`);
+							} else {
+								r.push(`baby ${he}'s carrying is`);
+							}
+							r.push(`${his} ${PCrelative}'s that ${he} often wakes up crying about it.`);
+							slave.devotion -= 2;
+						} else {
+							r.push(`${He}'s <span class="devotion dec">passionately hateful</span> of you for making ${him} carry an incestuous pregnancy.`);
+							slave.devotion -= 4;
+						}
+					}
+				}
+				if (V.arcologies[0].FSEgyptianRevivalist !== "unset") {
+					r.push(`Society <span class="reputation inc">strongly approves</span> of your incestuous relationship, which advances the Egyptian revivalist ideal of slave incest.`);
+					repX((2 * V.FSSingleSlaveRep * (V.arcologies[0].FSEgyptianRevivalist / V.FSLockinLevel)), "PCRelationships", slave);
+					V.arcologies[0].FSEgyptianRevivalist += (0.1 * V.FSSingleSlaveRep);
+					if (slave.bellyPreg >= 1500 && slave.pregSource === -1) {
+						r.push(`<span class="reputation inc">The effect is greatly enhanced</span> by ${slave.slaveName}'s pureblooded pregnancy.`);
+						repX((V.FSSingleSlaveRep * (V.arcologies[0].FSEgyptianRevivalist / V.FSLockinLevel)), "PCRelationships", slave);
+						V.arcologies[0].FSEgyptianRevivalist += (0.05 * V.FSSingleSlaveRep * V.pornFameBonus);
+					}
+				} else if (V.arcologies[0].FSEgyptianRevivalistIncestPolicy === 1) {
+					r.push(`Society <span class="reputation inc">enjoys</span> your incestuous relationship since incest is currently trendy.`);
+					repX((1.5 * V.FSSingleSlaveRep), "PCRelationships", slave);
+					if (slave.bellyPreg >= 1500 && slave.pregSource === -1) {
+						r.push(`<span class="reputation inc">The effect is enhanced</span> by ${slave.slaveName}'s pureblooded pregnancy.`);
+						repX(V.FSSingleSlaveRep, "PCRelationships", slave);
+					}
+				}
+			}
+			if (slave.relationship === -3) {
+				 if (slave.fetish === "mindbroken") {
+					switch (slave.assignment) {
+						case Job.HOUSE:
+						case Job.CONCUBINE:
+						case Job.FUCKTOY:
+						case Job.MASTERSUITE:
+						case Job.QUARTER:
+							r.push(`${He} lives a nice life by your side, despite ${his} inability to realize it. Since ${he} is so malleable and willing, you rarely have reason to punish ${him} anymore.`);
+							if (slave.kindness) {
+								slave.kindness += 2;
+							} else {
+								slave.kindness = 2;
+							}
+							break;
+						case Job.WHORE:
+						case Job.BROTHEL:
+						case Job.PUBLIC:
+						case Job.CLUB:
+						case Job.GLORYHOLE:
+						case Job.ARCADE:
+							r.push(`You, others, it doesn't matter. They are all the same to your mindbroken ${wife}. The public, however, is less forgiving of you ordering your slave ${wife} to fuck random citizens, <span class="reputation dec">seriously damaging your reputation.</span>`);
+							repX(-100, "PCRelationships", slave);
+							break;
+						default:
+							r.push(`Being your ${wife} is wasted on ${his} empty mind. If it weren't for the ring`);
+							 if (hasAnyArms(slave)) {
+								r.push(`around ${his} finger,`);
+							} else {
+								r.push(`hanging from ${his} neck,`);
+							}
+							r.push(`nobody would ever realize ${he} was so close to you.`);
+					}
+				} else if (slave.devotion + slave.trust >= 175) {
+					switch (slave.assignment) {
+						case Job.HOUSE:
+						case Job.CONCUBINE:
+						case Job.FUCKTOY:
+						case Job.MASTERSUITE:
+						case Job.QUARTER:
+							r.push(`${He} is <span class="devotion inc">happy</span> to be allowed to live ${his} life close to you, since ${he}'s your ${wife}. In addition, ${his} deep reliance on ${his} formal relationship to you produces a steady increase of both <span class="devotion inc">devotion</span> and <span class="trust inc">trust.</span>`);
+							slave.devotion += 2;
+							break;
+						case Job.WHORE:
+						case Job.BROTHEL:
+						case Job.PUBLIC:
+						case Job.CLUB:
+						case Job.GLORYHOLE:
+						case Job.ARCADE:
+							r.push(`${His} reliance on ${his} formal relationship to you produces a slight increase of both <span class="devotion inc">devotion</span> and <span class="trust inc">trust,</span> though this is reduced by being on a public sexual assignment rather than being kept for you alone. The public is less forgiving of you ordering your slave ${wife} to fuck random citizens, <span class="reputation dec">seriously damaging your reputation.</span>`);
+							slave.devotion++;
+							slave.trust++;
+							repX(-100, "PCRelationships", slave);
+							break;
+						default:
+							r.push(`${His} deep reliance on ${his} formal relationship to you produces a steady increase of both <span class="devotion inc">devotion</span> and <span class="trust inc">trust.</span>`);
+							slave.devotion++;
+							slave.trust++;
+					}
+				} else if (slave.devotion < -20 && slave.trust > 0) {
+					switch (slave.assignment) {
+						case Job.HOUSE:
+						case Job.CONCUBINE:
+						case Job.FUCKTOY:
+						case Job.MASTERSUITE:
+						case Job.QUARTER:
+							r.push(`${He} <span class="defiant inc">takes advantage</span> of your kindness, since ${he} is allowed to live a pampered life just for letting you use ${his} body. ${His} insolence allows ${him} to retain, if not strengthen, <span class="devotion dec">${his} hatred of you.</span>`);
+							slave.devotion -= 7;
+							slave.trust += 5;
+							break;
+						case Job.WHORE:
+						case Job.BROTHEL:
+						case Job.PUBLIC:
+						case Job.CLUB:
+						case Job.GLORYHOLE:
+						case Job.ARCADE:
+							r.push(`Not being a pampered fucktoy to you <span class="trust dec">wounds ${his} expectations as your ${wife},</span> but gives ${him} the space needed to <span class="devotion inc">begin warming up to you.</span> The public, disregarding ${his} opinions, is less forgiving of you ordering your slave ${wife} to fuck random citizens, <span class="reputation dec">seriously damaging your reputation.</span>`);
+							slave.devotion++;
+							slave.trust--;
+							repX(-100, "PCRelationships", slave);
+							break;
+						default:
+							r.push(`${He} <span class="defiant inc">takes advantage</span> of your kindness, since ${he} expects you'd never truly harm your ${wife}. ${His} insolence allows ${him} to remain, if not strengthen, <span class="devotion dec">${his} hatred of you.</span>`);
+							slave.devotion -= 5;
+							slave.trust += 3;
+					}
+				} else if (slave.devotion < -20) {
+					switch (slave.assignment) {
+						case Job.HOUSE:
+						case Job.CONCUBINE:
+						case Job.FUCKTOY:
+						case Job.MASTERSUITE:
+						case Job.QUARTER:
+							r.push(`${He} is <span class="trust dec">thoroughly terrified</span> by having to remain in a formal relationship with the ${playerPronouns.woman} ${he} hates. Being so close to you forces ${him} to slowly <span class="devotion inc">accept</span> ${his} new role as your ${wife}.`);
+							slave.devotion += 1;
+							slave.trust -= 3;
+							break;
+						case Job.WHORE:
+						case Job.BROTHEL:
+						case Job.PUBLIC:
+						case Job.CLUB:
+						case Job.GLORYHOLE:
+						case Job.ARCADE:
+							r.push(`Being forced into public service only reinforces ${his} <span class="trust dec">fears</span> and <span class="devotion dec">perceptions</span> of you. If there was any chance of ${him} thinking you cared, <span class="devotion dec">it's gone now.</span> The public, disregarding ${his} opinions, is less forgiving of you ordering your slave ${wife} to fuck random citizens, <span class="reputation dec">seriously damaging your reputation.</span>`);
+							slave.devotion -= 10;
+							slave.trust -= 10;
+							repX(-100, "PCRelationships", slave);
+							break;
+						default:
+							r.push(`${He} is <span class="trust dec">thoroughly terrified</span> by having to remain in a formal relationship with the ${playerPronouns.woman} ${he} hates. Without you nearby to distract ${him}, ${he} dwells on ${his} situation as ${his} <span class="devotion dec">hate for you grows.</span>`);
+							slave.devotion -= 3;
+							slave.trust -= 5;
+					}
+				} else {
+					switch (slave.assignment) {
+						case Job.HOUSE:
+						case Job.CONCUBINE:
+						case Job.FUCKTOY:
+						case Job.MASTERSUITE:
+						case Job.QUARTER:
+							r.push(`${He} is <span class="devotion inc">happy</span> to be allowed to live a rather nice life close to you, since ${he}'s your ${wife}. In addition, ${his} formal relationship to you produces a steady increase of both <span class="devotion inc">devotion</span> and <span class="trust inc">trust.</span>`);
+							slave.devotion += 2;
+							slave.trust += 2;
+							break;
+						case Job.WHORE:
+						case Job.BROTHEL:
+						case Job.PUBLIC:
+						case Job.CLUB:
+						case Job.GLORYHOLE:
+						case Job.ARCADE:
+							r.push(`${His} formal relationship to you produces a steady increase of both <span class="devotion inc">devotion</span> and <span class="trust inc">trust,</span> though this is reduced by being on a public sexual assignment rather than being kept for you alone, not that ${he} minds; just as you ordered ${him} to marry you, so may you order ${him} to fuck others. The public, however, is less forgiving of you ordering your slave ${wife} to fuck random citizens, <span class="reputation dec">seriously damaging your reputation.</span>`);
+							slave.devotion++;
+							slave.trust++;
+							repX(-100, "PCRelationships", slave);
+							break;
+						default:
+							r.push(`${His} formal relationship to you produces a steady increase of both <span class="devotion inc">devotion</span> and <span class="trust inc">trust</span> as ${he} gradually grows closer to ${his} spouse.`);
+							slave.devotion++;
+							slave.trust++;
+					}
+				}
+			} else {
+				if (slave.devotion + slave.trust < 150) {
+					if (random(1, 100) > 50) {
+						r.push(`${He} is no longer as devoted to you as ${he} once was, and has <span class="relationship dec">begun to look elsewhere for emotional support.</span>`);
+						slave.relationship = 0;
+					} else if (slave.trust < 75 && random(1, 100) > 50) {
+						r.push(`${He} is no longer as trusting of you as ${he} once was, and has <span class="relationship dec">begun to look elsewhere for emotional support.</span>`);
+						slave.relationship = 0;
+					}
+				}
+				if (slave.relationship === -2) {
+					switch (slave.assignment) {
+						case Job.HOUSE:
+						case Job.CONCUBINE:
+						case Job.FUCKTOY:
+						case Job.MASTERSUITE:
+						case Job.QUARTER:
+							r.push(`${He} is <span class="devotion inc">happy</span> to be allowed to serve you personally, since it's as close a relationship to you as ${he} can aspire to. In addition, ${his} deep love for you produces a slow but steady increase of both <span class="devotion inc">devotion</span> and <span class="trust inc">trust.</span>`);
+							slave.devotion++;
+							slave.trust++;
+							break;
+						default:
+							r.push(`${His} deep love for you produces a slow but steady increase of both <span class="devotion inc">devotion</span> and <span class="trust inc">trust.</span>`);
+							slave.devotion++;
+							slave.trust++;
+					}
+				}
+			}
+		} else if (slave.rules.relationship === "restrictive" && slave.relationShip !== 5) {
+			 if (friend.rules.relationship === "restrictive") {
+				r.push(`Since the rules forbid the relationship between ${slave.slaveName} and ${friend.slaveName}, they are <span class="relationship dec">forced apart.</span>`);
+				 if (slave.relationship > 1) {
+					slave.relationship--;
+					friend.relationship = slave.relationship;
+				} else {
+					friend.relationship = 0;
+					friend.relationshipTarget = 0;
+					slave.relationship = 0;
+					slave.relationshipTarget = 0;
+				}
+				if (slave.devotion <= 50 && friend.devotion <= 50) {
+					r.push(`${slave.slaveName} and ${friend.slaveName} both <span class="devotion dec">resent</span> this.`);
+					slave.devotion -= 2;
+					friend.devotion -= 2;
+				} else if (slave.devotion <= 50) {
+					r.push(`${slave.slaveName} <span class="devotion dec">resents</span> this.`);
+					slave.devotion -= 2;
+				} else if (friend.devotion <= 50) {
+					r.push(`${friend.slaveName} <span class="devotion dec">resents</span> this.`);
+					friend.devotion -= 2;
+				}
+			}
+		} else if (slave.rules.relationship === "just friends" && slave.relationShip !== 5 && slave.relationship > 2) {
+			 if (friend.rules.relationship === "restrictive") {
+				r.push(`Since the sexual relationship between ${slave.slaveName} and ${friend.slaveName} is against the rules, they`);
+				if (!hasAnyArms(slave) && !hasAnyArms(friend)) {
+					r.push(`are, metaphorically speaking,`);
+				} else {
+					r.push(`are`);
+				}
+				r.push(`<span class="relationship dec">forced to keep their hands to themselves.</span>`);
+				friend.relationship = 2;
+				slave.relationship = 2;
+				if (slave.devotion <= 50 && friend.devotion <= 50) {
+					r.push(`${slave.slaveName} and ${friend.slaveName} both <span class="devotion dec">resent</span> this.`);
+					slave.devotion -= 2;
+					friend.devotion -= 2;
+				} else if (slave.devotion <= 50) {
+					r.push(`${slave.slaveName} <span class="devotion dec">resents</span> this.`);
+					slave.devotion -= 2;
+				} else if (friend.devotion <= 50) {
+					r.push(`${friend.slaveName} <span class="devotion dec">resents</span> this.`);
+					friend.devotion -= 2;
+				}
+			}
+		} else {
+			let seed = 0;
+			r.push(`${slave.slaveName}`);
+			switch (slave.relationship) {
+				case 1: // friends
+					r.push(`is friends with ${friend.slaveName}.`);
+					if (slave.devotion + slave.trust > 170 && random(1, 2) === 1) {
+						r.push(`${He}'s very devoted to you, and strongly trusts both you and ${his} place as a ${slave}. Since ${he} is just friends with ${friend.slaveName},`);
+						if (slave.sexualQuirk === "romantic") {
+							r.push(`and persistently interprets sex in the most romantic possible terms, ${he} has decided that ${he} wants to be yours in ${his} heart as well as ${his} `);
+							if (slave.vagina > 0) {
+								r.push(`pussy.`);
+							} else if (slave.anus > 0) {
+								r.push(`butthole.`);
+							} else {
+								r.push(`mouth.`);
+							}
+							r.push(`<span class="relationship">${He}'s become emotionally bonded to you!</span>`);
+							slave.relationship = -2;
+						} else if (slave.energy > 90) {
+							r.push(`and is a total sex addict, ${he} begins to think of sex as ${his} only meaningful emotional connection with people. <span class="relationship">${He}'s become an emotional slut!</span>`);
+							slave.relationship = -1;
+						} else {
+							r.push(`and loves you, ${he} begins to think of you as a ${woman} might think of ${his} lover — or spouse. ${He} knows ${he} cannot hope for more of a relationship with you than ${he} has, but ${he} finds emotional support in serving you nonetheless. <span class="relationship">${He}'s become emotionally bonded to you!</span>`);
+							slave.relationship = -2;
+						}
+						friend.relationship = 0;
+						friend.relationshipTarget = 0;
+						slave.relationshipTarget = 0;
+					} else if (areRelated(slave, friend) && (random(1, 100) > 80)) {
+						r.push(`They build on their family relationship and become <span class="relationship">best friends.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (mutualChildren(slave, friend, V.slaves) > 0 && (random(1, 100) < (50+ (10 * mutualChildren(slave, friend, V.slaves))))) {
+						r.push(`Hoping to benefit their mutual children, they draw closer together, becoming <span class="relationship">best friends.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (slave.energy > 95 && random(1, 100) > 70) {
+						r.push(`${slave.slaveName} obviously lusts after ${his} friend, and does everything ${he} can to <span class="relationship">draw ${him2} closer.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (slave.attrXX > 85 && random(1, 100) > 70 && (friend.vagina > -1 || friend.faceShape !== "masculine")) {
+						r.push(`${slave.slaveName} obviously lusts after ${his} friend, and does everything ${he} can to <span class="relationship">draw ${him2} closer.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (slave.attrXY > 85 && random(1, 100) > 70 && (friend.dick > 0 || friend.faceShape === "masculine")) {
+						r.push(`${slave.slaveName} obviously lusts after ${his} friend, and does everything ${he} can to <span class="relationship">draw ${him2} closer.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (random(1, 100) > 90) {
+						r.push(`They support and reassure each other and become <span class="relationship">best friends.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					}
+					break;
+				case 2: // BFFs;
+					r.push(`maintains a close friendship with ${friend.slaveName}.`);
+					 if (slave.sexualQuirk === "romantic") {
+						r.push(`${His} romantic bent drives ${him} to search for a regular sexual partner.`);
+						seed = 10;
+					}
+					if (slave.devotion + slave.trust > 95 && random(1, 2) === 1) {
+						r.push(`${slave.slaveName} is totally devoted to you, and implicitly trusts both you and ${his} place as a slave. Since ${his} relationship with ${friend.slaveName} has not yet turned sexual, and`);
+						if (slave.sexualQuirk === "romantic") {
+							r.push(`${he} persistently interprets sex in the most romantic possible terms, ${he} has decided that ${he} wants to be yours in ${his} heart as well as ${his}`);
+							if (slave.vagina > 0) {
+								r.push(`pussy.`);
+							} else if (slave.anus > 0) {
+								r.push(`butthole.`);
+							} else {
+								r.push(`mouth.`);
+							}
+							r.push(`<span class="relationship">${He}'s become emotionally bonded to you!</span>`);
+							slave.relationship = -2;
+						} else if (slave.energy > 90) {
+							r.push(`${he}'s a total sex addict, ${he} begins to think of sex as ${his} only meaningful emotional connection with people. <span class="relationship">${He}'s become an emotional slut!</span>`);
+							slave.relationship = -1;
+						} else {
+							r.push(`${he} loves you, ${he} begins to think of you as a ${woman} might think of ${his} lover — or spouse. ${He} knows ${he} cannot hope for more of a relationship with you than ${he} has, but ${he} finds emotional support in serving you nonetheless. <span class="relationship">${He}'s become emotionally bonded to you!</span>`);
+							slave.relationship = -2;
+						}
+						friend.relationship = 0;
+						friend.relationshipTarget = 0;
+						slave.relationshipTarget = 0;
+					} else if (mutualChildren(slave, friend, V.slaves) > 0 && random(1, 100) < (50 + (10 * mutualChildren(slave, friend, V.slaves)) + seed)) {
+						r.push(`Having already had kids together, their relationship turns sexual once again, turning them into <span class="relationship">friends with benefits.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (V.seeIncest === 1 && slave.energy > 95 && areRelated(slave, friend) && random(1, 100) > (90-seed)) {
+						r.push(`Driven by nymphomania to attempt to have sex with everyone, ${slave.slaveName} successfully seduces ${his} ${relativeTerm(slave, friend)}, ${friend.slaveName}, making them <span class="relationship">friends with benefits.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (V.seeIncest === 1 && slave.sexualQuirk === "perverted" && areRelated(slave, friend) && random(1, 100) > (80 - seed)) {
+						r.push(`Reveling in the taboo nature of ${his} attraction to ${friend.slaveName}, slave.slaveName successfully seduces ${his} ${relativeTerm(slave, friend)}, making them <span class="relationship">friends with benefits.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (V.seeIncest === 1 && slave.behavioralQuirk === "sinful" && areRelated(slave, friend) && random(1, 100) > (80 - seed)) {
+						r.push(`Aroused by the chance to commit the sin of incest, ${slave.slaveName} successfully seduces  ${his} ${relativeTerm(slave, friend)}, ${friend.slaveName}, making them <span class="relationship">friends with benefits.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (slave.energy > 95 && random(1, 100) > (80 - seed)) {
+						r.push(`${slave.slaveName} successfully seduces ${friend.slaveName}, making them <span class="relationship">friends with benefits.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if ((random(1, 100) > (100 - seed) - (0.2 * slave.attrXX)) && (friend.vagina > -1 || friend.faceShape !== "masculine")) {
+						r.push(`${slave.slaveName} successfully seduces ${friend.slaveName}, making them <span class="relationship">friends with benefits.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if ((random(1, 100) > (100 - seed) - (0.2 * slave.attrXY)) && (canAchieveErection(friend) || friend.faceShape === "masculine")) {
+						r.push(`${slave.slaveName} successfully seduces ${friend.slaveName}, making them <span class="relationship">friends with benefits.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (V.seeIncest === 1 && areRelated(slave, friend) && (random(1, 100) > (95 - seed))) {
+						r.push(`Eventually, they happen to be together and horny, and find themselves fucking without thinking. They have become incestuous <span class="relationship">friends with benefits.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (random(1, 100) > (95 - seed)) {
+						if (friend.vagina !== -1 && slave.behavioralFlaw === "hates women" && random(1, 2) === 1) {
+							r.push(`Despite ${slave.slaveName}'s dislike of pussy,`);
+						} else if ((friend.dick > 0 || friend.faceShape === "masculine") && slave.behavioralFlaw === "hates men" && random(1, 2) === 1) {
+							r.push(`Despite ${slave.slaveName}'s distaste for cock,`);
+						} else {
+							r.push(`Living in an atmosphere of omnipresent sexuality,`);
+						}
+						r.push(`they fuck in a weak moment and find themselves becoming <span class="relationship">friends with benefits.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					}
+					break;
+				case 3: // FWB
+					r.push(`keeps up a sexual friendship with ${friend.slaveName}.`);
+					 if (slave.sexualQuirk === "romantic") {
+						r.push(`${His} romantic bent drives ${him} to do ${his} best to advance ${his} relationship to an emotional level.`);
+						seed = 10;
+					}
+					if (V.seeIncest === 1 && slave.energy > 95 && areRelated(slave, friend) && random(1, 100) > (90 - seed)) {
+						r.push(`${He}'s such a desperate nympho that constant incest is nothing to ${him}. ${He} develops real feelings for ${friend.slaveName} as a romantic partner. Their relationship becomes <span class="relationship">romantically emotional</span> as well as physical and familial.`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (V.seeIncest === 1 && slave.sexualQuirk === "perverted" && areRelated(slave, friend) && random(1, 100) > (80 - seed)) {
+						r.push(`Reveling in the taboo nature of ${his} sexual relationship with ${friend.slaveName}, ${he} not only enjoys ${his} ${relativeTerm(slave, friend)}'s body, but looks after ${his2} pleasure, too. Their relationship becomes <span class="relationship">romantically emotional</span> as well as physical and familial.`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (V.seeIncest === 1 && slave.behavioralQuirk === "sinful" && areRelated(slave, friend) && random(1, 100) > (80 - seed)) {
+						r.push(`${He} gets deep, perverse satisfaction by constant commission of the sin of incest, which is extreme enough to appease even ${his} appetite for transgression. ${His} incestuous relationship becomes <span class="relationship">romantically emotional</span> as well as physical and familial.`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (mutualChildren(slave, friend, V.slaves) > 0 && random(1, 100) < (50 + (10 * mutualChildren(slave, friend, V.slaves)) + seed)) {
+						r.push(`Between their children and common sexual flings, they begin seeing each other as a traditional couple. Their relationship becomes <span class="relationship">strongly emotional</span> as well as physical.`);
+						 if (slave.pregSource === friend.ID && friend.pregSource === slave.ID && slave.pregKnown === 1 && friend.pregKnown === 1) {
+							r.push(`Not very surprising, since they both have the other's child growing in their womb.`);
+						} else if (slave.pregSource === friend.ID && slave.pregKnown === 1) {
+							r.push(`Not very surprising, since ${slave.slaveName} is carrying another of ${friend.slaveName}'s children.`);
+						} else if (friend.pregSource === slave.ID && friend.pregKnown === 1) {
+							r.push(`Not very surprising, since ${friend.slaveName} is carrying another of ${slave.slaveName}'s children.`);
+						}
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (slave.energy > 95 && random(1, 100) > (80 - seed)) {
+						r.push(`${He} not only enjoys ${friend.slaveName}'s body, but looks after ${his2} pleasure, too. Without meaning it to, their relationship becomes <span class="relationship">strongly emotional</span> as well as physical.`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if ((random(1, 100) > (100 - seed) - (0.2 * slave.attrXX)) && (friend.vagina > -1 || friend.faceShape !== "masculine")) {
+						r.push(`${He} not only enjoys ${friend.slaveName}'s body, but looks after ${his2} pleasure, too. Without meaning it to, their relationship becomes <span class="relationship">strongly emotional</span> as well as physical.`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if ((random(1, 100) > (100 - seed) - (0.2 * slave.attrXY)) || (friend.dick > 0 || friend.faceShape === "masculine")) {
+						r.push(`${He} not only enjoys ${friend.slaveName}'s body, but looks after ${his2} pleasure, too. Without meaning it to, their relationship becomes <span class="relationship">strongly emotional</span> as well as physical.`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					} else if (random(1, 100) > (95 - seed)) {
+						r.push(`They've spent enough time looking after each other's sexual and emotional needs that their relationship has become <span class="relationship">very strong.</span>`);
+						slave.relationship++;
+						friend.relationship = slave.relationship;
+					}
+					break;
+				case 4: // lovers
+					r.push(`and ${friend.slaveName} are lovers.`);
+					break;
+				default: // married
+					r.push(`has a slave ${wife2}, ${friend.slaveName}.`);
+					 if (V.arcologies[0].FSChattelReligionist !== "unset") {
+						r.push(`Society <span class="reputation inc">approves</span> of their marriage, which advances the slave sacrament.`);
+						V.arcologies[0].FSChattelReligionist += 0.05 * V.FSSingleSlaveRep;
+						repX(V.FSSingleSlaveRep * (V.arcologies[0].FSChattelReligionist / V.FSLockinLevel), "SlaveRelationships", slave);
+					}
+			}
+			if (slave.relationship > 0) { // catch should she change her relationship status
+				if (slave.devotion <= 95) {
+					if (slave.devotion !== friend.devotion) {
+						r.push(`${slave.slaveName} absorbs`);
+						if (slave.relationship === 1) {
+							r.push(`a touch of ${his} friend's`);
+						} else if (slave.relationship === 2) {
+							r.push(`a little of ${his} best friend's`);
+						} else if (slave.relationship === 3) {
+							r.push(`some of ${his} close friend's`);
+						} else if (slave.relationship === 4) {
+							r.push(`a lot of ${his} lover's`);
+						} else {
+							r.push(`much of ${his} ${wife2}'s`);
+						}
+						if (slave.devotion > friend.devotion) {
+							r.push(`<span class="devotion dec">`);
+							if (friend.devotion > 50) {
+								r.push(`remaining doubts about you.</span>`);
+							} else if (friend.devotion > 20) {
+								r.push(`remaining hesitations about sexual slavery.</span>`);
+							} else if (friend.devotion >= -20) {
+								r.push(`unhappiness about being a sex slave.</span>`);
+							} else {
+								r.push(`anger at being a slave.</span>`);
+							}
+						} else {
+							r.push(`<span class="devotion inc">`);
+							if (friend.devotion > 50) {
+								r.push(`love for you.</span>`);
+							} else if (friend.devotion > 20) {
+								r.push(`acceptance of sexual slavery.</span>`);
+							} else if (friend.devotion >= -20) {
+								r.push(`submission to the reality of being a sex slave.</span>`);
+							} else {
+								r.push(`unwillingness to immediately rebel.</span>`);
+							}
+						}
+						slave.devotion -= Math.trunc((slave.devotion - friend.devotion) * (0.1 * slave.relationship));
+					}
+				} else if (friend.devotion <= 95) {
+					r.push(`${He}'s so devoted to you that ${he}'s unaffected by ${friend.slaveName}'s less abject submission.`);
+				}
+				if (slave.trust <= 95) {
+					r.push(`${slave.slaveName}`);
+					if (slave.trust < -20) {
+						r.push(`cares for ${friend.slaveName} and is <span class="trust dec">terrified</span> of what you might do to ${him2} if either of them misbehave. ${He} <span class="devotion inc">does ${his} best</span> to avoid that.`);
+						slave.trust -= slave.relationship;
+						slave.devotion += slave.relationship;
+					} else {
+						r.push(`<span class="trust inc">trusts you</span>`);
+						 if (slave.relationship <= 2) {
+							r.push(`a little more for allowing ${him} to have a friend.`);
+						} else if (slave.relationship === 3) {
+							r.push(`for letting ${him} have a fuckbuddy.`);
+						} else if (slave.relationship === 4) {
+							r.push(`for permitting ${him} and ${his} lover to be together.`);
+						} else {
+							r.push(`for giving ${him} a ${wife2}.`);
+						}
+						slave.trust += slave.relationship;
+					}
+				} else if (slave.devotion > 95 && slave.relationship > 4) {
+					r.push(`${He} feels`);
+					if (V.arcologies[0].FSChattelReligionist !== "unset") {
+						r.push(`blessed with`);
+					} else {
+						r.push(`${he} has`);
+					}
+					r.push(`a truly good life as your ${slave}.`);
+				}
+			}
+		}
+	}
+
+	/** LONG TERM RELATIONSHIP EFFECTS
+	 * @param {App.Entity.SlaveState} slave
+	 *
+	 */
+	function consumateRelationship(slave) {
+		let lover = V.slaves.find((s) => (s.ID === slave.relationshipTarget));
+		({
+			he2, him2, his2, hers2, himself2, girl2, He2, His2, loli2, wife2
+		} = getPronouns(lover).appendSuffix("2"));
+		const relationType = relativeTerm(slave, lover);
+
+		if (areRelated(slave, lover)) {
+			r.push(`${slave.slaveName}`);
+			if (slave.origin === "${He} offered ${himself} to you for enslavement hoping you would preserve ${his} incestuous relationship with ${his} sibling." || slave.origin === "${He} offered to become your slave to protect ${his} incestuous relationship.") {
+				r.push(`is <span class="devotion inc">grateful</span> and <span class="trust inc">trusting</span> towards you for protecting ${him} in ${his} long-standing incestuous relationship.`);
+				slave.devotion += 2;
+				slave.trust += 2;
+			} else if (slave.sexualQuirk === "perverted") {
+				r.push(`is such a pervert that ${he} <span class="devotion inc">enjoys</span> carrying on an incestuous relationship with ${his} own ${relationType}.`);
+				slave.devotion += 1;
+			} else if (slave.devotion > 95) {
+				r.push(`is so inured to the perversities of slavery that ${he} <span class="devotion inc">enjoys</span> carrying on an incestuous relationship with ${his} own ${relationType}.`);
+				slave.devotion += 1;
+			} else if (slave.behavioralQuirk === "sinful") {
+				r.push(`is torn between sinful delight and deep disgust that ${he}'s carrying on an incestuous relationship with ${his} own ${relationType}.`);
+			} else if (slave.devotion > 75) {
+				r.push(`is so devoted to you that ${he} accepts carrying on an incestuous relationship with ${his} own ${relationType}.`);
+			} else if (slave.devotion > 50) {
+				r.push(`is somewhat <span class="devotion dec">disturbed</span> that ${he}'s carrying on an incestuous relationship with ${his} own ${relationType}.`);
+				slave.devotion -= 2;
+			} else if (slave.devotion > 20) {
+				r.push(`is <span class="devotion dec">disturbed</span> and <span class="trust dec">scared</span> that ${he}'s carrying on an incestuous relationship with ${his} own ${relationType}.`);
+				slave.devotion -= 2;
+				slave.trust -= 2;
+			} else {
+				r.push(`is <span class="devotion dec">revolted</span> and <span class="trust dec">scared</span> that ${he}'s carrying on an incestuous relationship with ${his} own ${relationType}.`);
+				slave.devotion -= 4;
+				slave.trust -= 4;
+			}
+			if (slave.pregKnown === 1 && slave.pregSource === lover.ID) {
+				if (slave.origin === "${He} offered ${himself} to you for enslavement hoping you would preserve ${his} incestuous relationship with ${his} sibling." || slave.origin === "${He} offered to become your slave to protect ${his} incestuous relationship.") {
+					r.push(`${He}'s <span class="devotion inc">overjoyed</span> to be carrying ${his} ${relationType}'s child`);
+					if (slave.pregType > 1) {
+						r.push(`ren`);
+					}
+					r.push(`.`);
+					slave.devotion += 2;
+				} else if (slave.sexualQuirk === "perverted") {
+					r.push(`${He}'s even <span class="devotion inc">aroused</span> by the constant awareness that ${his} ${relationType} is the parent of the child${slave.pregType > 1 ? "ren" : ""} ${he}'s carrying.`);
+					slave.devotion += 1;
+				} else if (slave.behavioralQuirk === "sinful") {
+					r.push(`${His} feelings about carrying ${his} ${relationType}'s child${slave.pregType > 1 ? "ren" : ""} are <span class="devotion inc">secretly less mixed,</span> though.`);
+					slave.devotion += 1;
+				} else if (slave.devotion > 95) {
+					r.push(`${He} occasionally remembers that ${he}'s carrying ${his} ${relationType}'s child${slave.pregType > 1 ? "ren" : ""}, but does ${his} best to accept it by not thinking about it.`);
+				} else if (slave.devotion > 50) {
+					r.push(`${He}'s <span class="devotion dec">disgusted</span> that the`);
+					if (slave.pregType > 1) {
+						r.push(`babies ${he}'s carrying are`);
+					} else {
+						r.push(`baby ${he}'s carrying is`);
+					}
+					r.push(`${his} ${relationType}'s, though ${he} tries ${his} best not to think about it.`);
+					slave.devotion -= 1;
+				} else if (slave.devotion > 20) {
+					r.push(`${He}'s so <span class="devotion dec">disgusted</span> that the`);
+					if (slave.pregType > 1) {
+						r.push(`babies ${he}'s carrying are`);
+					} else {
+						r.push(`baby ${he}'s carrying is`);
+					}
+					r.push(`${his} ${relationType}'s that ${he} often wakes up crying about it.`);
+					slave.devotion -= 2;
+				} else {
+					r.push(`${He}'s <span class="devotion dec">passionately hateful</span> of you for making ${him} carry an incestuous pregnancy.`);
+					slave.devotion -= 4;
+				}
+			}
+			if (V.arcologies[0].FSEgyptianRevivalist !== "unset") {
+				r.push(`Society <span class="reputation inc">strongly approves</span> of their incestuous relationship, which advances the Egyptian revivalist ideal of slave incest.`);
+				repX((2 * V.FSSingleSlaveRep * (V.arcologies[0].FSEgyptianRevivalist / V.FSLockinLevel)), "SlaveRelationships", slave);
+				V.arcologies[0].FSEgyptianRevivalist += (0.1 * V.FSSingleSlaveRep);
+				if (slave.bellyPreg >= 1500 && slave.pregSource === lover.ID) {
+					r.push(`<span class="reputation inc">The effect is greatly enhanced</span> by slave.slaveName's pureblooded pregnancy.`);
+					repX((V.FSSingleSlaveRep * (V.arcologies[0].FSEgyptianRevivalist / V.FSLockinLevel)), "SlaveRelationships", slave);
+					V.arcologies[0].FSEgyptianRevivalist += (0.05 * V.FSSingleSlaveRep * V.pornFameBonus);
+				}
+			} else if (V.arcologies[0].FSEgyptianRevivalistIncestPolicy === 1) {
+				r.push(`Society <span class="reputation inc">enjoys</span> their incestuous relationship since incest is currently trendy.`);
+				repX((1.5 * V.FSSingleSlaveRep), "PCRelationships", slave);
+				if (slave.bellyPreg >= 1500 && slave.pregSource === lover.ID) {
+					r.push(`<span class="reputation inc">The effect is enhanced</span> by slave.slaveName's pureblooded pregnancy.`);
+					repX(V.FSSingleSlaveRep, "SlaveRelationships", slave);
+				}
+			}
+		}
+		if (App.Utils.sexAllowed(slave, lover)) {
+			if (slave.sexualQuirk === "size queen" && canPenetrate(lover)) {
+				if (lover.dick > 5) {
+					r.push(`${He}'s <span class="devotion inc">very happy</span> with ${his} romantic status, since it means ${he} regularly gets monster cock.`);
+					if (canDoAnal(slave) && slave.anus > 0 && slave.anus < 3) {
+						r.push(`${He}'s such a size queen that ${he} takes it up ${his} ass as often as ${he} can bear it, despite ${his} poor anus not being used to such abuse. This <span class="lime">stretches out ${his} sphincter.</span>`);
+						slave.anus++;
+					}
+					if (canDoVaginal(slave) && slave.vagina > 0 && slave.vagina < 3) {
+						r.push(`It's a little big for what ${his} pussy can handle, <span class="lime">but ${he} gets used to it.</span>`);
+						slave.vagina++;
+					}
+					r.push(`For ${his2} part, ${lover.slaveName} <span class="devotion inc">can barely believe ${his2} luck,</span> their sex life is so good.`);
+					slave.devotion += 2;
+					lover.devotion += 2;
+				} else if (lover.dick > 4) {
+					r.push(`${He} <span class="devotion inc">quite likes</span> being in a sexual relationship with a slave who has such an impressive dick.`);
+					if (canDoAnal(slave) && slave.anus > 0 && slave.anus < 2) {
+						r.push(`${He}'s such a size queen that ${he} takes it up ${his} ass as often as ${he} can bear it, despite ${his} tight butt not being used to such abuse. This <span class="lime">stretches out ${his} sphincter.</span>`);
+						slave.anus++;
+					}
+					if (canDoVaginal(slave) && slave.vagina > 0 && slave.vagina < 2) {
+						r.push(`It's a little big for what ${his} tight pussy can handle, <span class="lime">but ${he} gets used to it.</span>`);
+						slave.vagina++;
+					}
+					r.push(`For ${his2} part, lover.slaveName <span class="devotion inc">enjoys</span> the benefits of having a lover so interested in ${his2} junk.`);
+					slave.devotion++;
+					lover.devotion++;
+				} else if (lover.dick > 3) {
+					r.push(`${slave.slaveName} <span class="devotion inc">certainly doesn't mind</span> having reliable access to such a nice big dick. For ${his2} part, ${lover.slaveName} <span class="devotion inc">likes</span> having a lover who finds ${his2} penis appealing.`);
+					slave.devotion++;
+					lover.devotion++;
+				}
+			}
+			if (slave.energy <= 90) {
+				if (lover.energy > 95) {
+					r.push(`${lover.slaveName} is such a sex addict that ${he2} drags ${slave.slaveName} along with ${him2} in their enthusiastic sex life, <span class="improvement">slowly improving ${his} sex drive.</span>`);
+					slave.energy += 3;
+				} else if (lover.fetish === slave.fetish && lover.fetish !== "none") {
+					r.push(`${lover.slaveName} and ${slave.slaveName} enjoy sharing their sexual fetishes so much it <span class="improvement">improves their sex drives</span> in proportion to the strength of their kinks.`);
+					slave.energy += 1 + Math.trunc(slave.fetishStrength / 30);
+				} else if (slave.attrXX > 65 && (lover.vagina > -1 || (lover.face > 0 && lover.faceShape !== "masculine"))) {
+					r.push(`${slave.slaveName} is very much attracted to ${lover.slaveName}, and their fulfilling sexual relationship <span class="improvement">gradually improves ${slave.slaveName}'s sex drive.</span>`);
+					slave.energy++;
+				} else if (slave.attrXY > 65 && lover.dick > 0) {
+					r.push(`${slave.slaveName} enjoys ${lover.slaveName} and ${his2} cock, and their fulfilling sexual relationship <span class="improvement">gradually improves ${slave.slaveName}'s sex drive.</span>`);
+					slave.energy++;
+				}
+			}
+			if (slave.attrXX <= 95 && random(1, 100) < (slave.relationship * 5) && (lover.vagina > -1 || lover.faceShape !== "masculine")) {
+				if (slave.attrKnown === 1) { // just becuase you don't know about it doesn't mean it's not happening.
+					r.push(`After finding comfort with a feminine lover, slave.slaveName begins to experience more attraction to women.`);
+				}
+				slave.attrXX += 2;
+			}
+			if (slave.attrXY <= 95 && random(1, 100) < (slave.relationship * 5) && canAchieveErection(lover)) {
+				if (slave.attrKnown === 1) {
+					r.push(`After growing close to a lover with a dick, slave.slaveName begins to experience more attraction to men.`);
+				}
+				slave.attrXY += 2;
+			}
+			if (lover.fetish !== "none" && lover.fetish !== "mindbroken" && slave.fetishStrength <= 95 && lover.fetish !== slave.fetish && fetishChangeChance(slave) > (random(0, 100) - (slave.relationship * 5))) {
+				switch (lover.fetish) {
+					case "boobs":
+						r.push(`After experiencing ${lover.slaveName}'s love of breasts, both ${his2} own and ${slave.slaveName}'s, ${slave.slaveName} happily joins ${him2} as a <span class="fetish gain">boob fanatic.</span>`);
+						slave.fetish = "boobs";
+						slave.fetishKnown = 1;
+						slave.fetishStrength = 65;
+						break;
+					case "buttslut":
+						r.push(`${lover.slaveName} begs ${slave.slaveName} to fuck ${his2} ass so many times that ${slave.slaveName} reconsiders ${his} stance on buttsex. ${He} becomes just as much of an <span class="fetish gain">anal slut</span> as ${lover.slaveName}.`);
+						slave.fetish = "buttslut";
+						slave.fetishKnown = 1;
+						slave.fetishStrength = 65;
+						break;
+					case "cumslut":
+						r.push(`After sharing blowjobs with ${lover.slaveName} enough times, ${slave.slaveName} develops an <span class="fetish gain">oral fixation</span> of ${his} own.`);
+						slave.fetish = "cumslut";
+						slave.fetishKnown = 1;
+						slave.fetishStrength = 65;
+						break;
+					case "submissive":
+						if (slave.fetish !== "dom") {
+							r.push(`${lover.slaveName} begs ${slave.slaveName} to dominate ${him2} so many times that ${slave.slaveName} gets used to domination, and finds ${he} likes it. ${He} becomes just as much of a <span class="fetish gain">sexual dominant</span> as a slave can be.`);
+							slave.fetish = "dom";
+							slave.fetishKnown = 1;
+							slave.fetishStrength = 65;
+						}
+						break;
+					case "dom":
+						if (slave.fetish !== "submissive") {
+							r.push(`lover.slaveName holds ${slave.slaveName} down and fucks ${him} so many times that ${slave.slaveName} starts to get off on being used. ${He} becomes a true <span class="fetish gain">sexual submissive,</span> and loves ${lover.slaveName} all the more for dominating ${him}.`);
+							slave.fetish = "submissive";
+							slave.fetishKnown = 1;
+							slave.fetishStrength = 65;
+						}
+						break;
+					case "masochist":
+						if (slave.fetish !== "sadist") {
+							r.push(`${lover.slaveName} begs ${slave.slaveName} to hurt ${him2} so many times that ${slave.slaveName} gets used to sadism, and finds ${he} likes it. ${He} becomes just as much of an <span class="fetish gain">sexual sadist</span> as a slave can be.`);
+							slave.fetish = "sadist";
+							slave.fetishKnown = 1;
+							slave.fetishStrength = 65;
+						}
+						break;
+					case "sadist":
+						if (slave.fetish !== "masochist") {
+							r.push(`${lover.slaveName} hits ${slave.slaveName} during sex so often that ${slave.slaveName} starts to get off on being beaten. ${He} becomes a true <span class="fetish gain">masochist,</span> and loves ${lover.slaveName} all the more for abusing ${him}.`);
+							slave.fetish = "masochist";
+							slave.fetishKnown = 1;
+							slave.fetishStrength = 65;
+						}
+						break;
+					case "humiliation":
+						r.push(`${lover.slaveName} begs ${slave.slaveName} to humiliate ${him2} sexually so many times that ${slave.slaveName} can't help but be embarrassed by all the public sex, ${himself}. ${He} gets off on the <span class="fetish gain">humiliation</span> with ${lover.slaveName}.`);
+						slave.fetish = "humiliation";
+						slave.fetishKnown = 1;
+						slave.fetishStrength = 65;
+						break;
+					case "pregnancy":
+						r.push(`${lover.slaveName} shares ${his2} hopes and dreams of pregnancy and children with ${slave.slaveName} all the time, and ${slave.slaveName} can't help but feel`);
+						if (isFertile(slave) && isFertile(lover)) {
+							r.push(`${his} <span class="fetish gain">biological clock</span> tick in time with ${lover.slaveName}'s.`);
+						} else if (lover.pregKnown === 1 && isFertile(slave)) {
+							r.push(`the <span class="fetish gain">need to become pregnant</span> like ${lover.slaveName}.`);
+						} else {
+							r.push(`the <span class="fetish gain">same obsession</span> as ${lover.slaveName}.`);
+						}
+						slave.fetish = "pregnancy";
+						slave.fetishKnown = 1;
+						slave.fetishStrength = 65;
+						break;
+				}
+			}
+			if (lover.actualAge - slave.actualAge > 10 && slave.relationship >= 4 && random(1, 300) > (slave.intelligence + slave.intelligenceImplant + lover.intelligence + lover.intelligenceImplant) && lover.devotion > 75 && lover.trust > 50 && (lover.intelligence + lover.intelligenceImplant > 15) && (slave.devotion > 20 || (slave.devotion >= -20 && slave.trust < -20) || slave.trust > -10)) {
+				if ((lover.skill.oral > slave.skill.oral) || (lover.skill.anal > slave.skill.anal) || (lover.skill.vaginal > slave.skill.vaginal && slave.vagina >= 0 && lover.vagina >= 0) || (lover.trust > slave.trust)) {
+					r.push(`${slave.slaveName}'s `);
+					if (slave.relationship >= 5) {
+						r.push(`${wife2}`);
+					} else {
+						r.push(`lover`);
+					}
+					r.push(`is older, more experienced, and`);
+					if (lover.skill.oral > slave.skill.oral) {
+						r.push(`better at blowjobs than ${he} is. They are such good slaves that the senior ${girl2} serves as a mentor to the junior, improving ${his} oral skills.`);
+						r.push(`${SkillIncrease.Oral(slave, 5)}`);
+					} else if (lover.skill.anal > slave.skill.anal) {
+						r.push(`better at`);
+						if (lover.anus > 0) {
+							r.push(`taking a buttfuck`);
+						} else {
+							r.push(`using ${his2} rear`);
+						}
+						r.push(`than ${he} is, and they are such good slaves that the senior ${girl2} serves as a mentor to the junior, improving ${his} anal skills.`);
+						r.push(`${SkillIncrease.Anal(slave, 5)}`);
+					} else if (lover.skill.vaginal > slave.skill.vaginal && slave.vagina > 0 && lover.vagina > 0) {
+						if (lover.vagina > 0) {
+							r.push(`a better lover`);
+						} else {
+							r.push(`better with a virgin pussy`);
+						}
+						r.push(`than ${he}`);
+						if (slave.vagina > 0) {
+							r.push(`is without one,`);
+						} else {
+							r.push(`is,`);
+						}
+						r.push(`and they are such good slaves that the senior ${girl2} serves as a mentor to the junior, improving ${his} vaginal skills.`);
+						r.push(`${SkillIncrease.Vaginal(slave, 5)}`);
+					} else if (lover.trust > slave.trust) {
+						r.push(`a better slave than ${he} is, and they are such obedient slaves that the senior ${girl2} serves as a mentor to the junior, <span class="trust inc">improving ${his} trust.</span>`);
+						slave.trust += 5;
+					} else {
+						r.push(`a more devoted slave than ${he} is; since they are such obedient slaves, the senior ${girl2} serves as a mentor to the junior, <span class="devotion inc">teaching ${him} to better serve you.</span>`);
+						slave.devotion += 2;
+					}
+				}
+			}
+		} else { // lovers not allowed to have sex...that's just mean
+			r.push(`${He}'s <span class="devotion dec">frustrated,</span> both sexually and mentally, since ${he}'s not allowed to fuck lover.slaveName`);
+			slave.devotion -= 2;
+			if (disobedience(slave) + 5 > random(0, 100)) {
+				r.push(`and tries to defy your rules, <span class="trust dec">earning severe punishment.</span>`);
+				slave.trust -= 3;
+			} else {
+				r.push(`but <span class="trust inc">trusts</span> that you know best.`);
+				slave.trust++;
+			}
+			if (slave.relationship < 5 && random(0, 100) > 90) {
+				r.push(`With the lack of sexual intimacy, ${slave.slaveName} and ${lover.slaveName} find themselves less passionate about each other and suffer a break up, becoming <span class="relationship dec">merely friends.</span> They both <span class="devotion dec">deeply regret</span> the loss of that spark.`);
+				slave.relationship = 2;
+				lover.relationship = 2;
+				slave.devotion -= 10;
+				lover.devotion -= 10;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 *
+	 */
+	function familyFeelings(slave) {
+		if (slave.trust <= 95) {
+			let relatives = V.slaves.filter((s) => areRelated(slave, s)); // Is it possible to move this into the loop?
+			for (const relative of relatives) {
+				({
+					he2, him2
+				} = getPronouns(relative).appendSuffix("2"));
+				if (slave.trust < -20) {
+					if (slave.rivalryTarget !== relative.ID) {
+						if (isParentP(relative, slave)) {
+							r.push(`${slave.slaveName} is <span class="trust dec">agonizingly aware</span> that ${his} child ${relative.slaveName} is also your slave and might suffer if either of them angers you, and <span class="devotion inc">does ${his} best</span> to protect ${him2}.`);
+							slave.trust -= 2;
+							slave.devotion += 6;
+						} else {
+							r.push(`${slave.slaveName} is <span class="trust dec">painfully conscious</span> that ${his} ${relativeTerm(slave, relative)} ${relative.slaveName} is also your slave and might suffer if either of them displeases you, and <span class="devotion inc">tries to obey</span> as best ${he} can.`);
+							slave.trust -= 1;
+							slave.devotion += 3;
+						}
+					}
+				} else {
+					r.push(`${slave.slaveName} knows that ${his} ${relativeTerm(slave, relative)} ${relative.slaveName}`);
+					if (relative.devotion > 50) {
+						r.push(`loves being your sex slave, and is <span class="devotion inc">happy</span> for ${him2}.`);
+						slave.devotion += 4;
+					} else if (relative.devotion > 20 || relative.trust < -20) {
+						r.push(`is an obedient sex slave, and hopes ${he2}'ll avoid punishment.`);
+					} else {
+						r.push(`hates being a sex slave, and is <span class="trust dec">afraid</span> for ${him2}.`);
+						slave.trust -= 1;
+					}
+				}
+			}
+		}
+	}
+})();
diff --git a/src/gui/css/mainStyleSheet.css b/src/gui/css/mainStyleSheet.css
index 02a8878c831..62228ef7621 100644
--- a/src/gui/css/mainStyleSheet.css
+++ b/src/gui/css/mainStyleSheet.css
@@ -202,7 +202,7 @@ span.zeroButton > a:hover { text-decoration: none; }
 .lightcoral, .lightcoral a, .fetish.gain, .fetish.gain a { color: lightcoral } /* compare pink for fetish */
 .lightgreen, .lightgreen a, .relationship, .relationship a, .rivalry.dec, .rivalry.dec a  { color: lightgreen }
 .lightpink, .lightpink a { color: lightpink }
-.lightsalmon, .lightsalmon a, .fetish.inc, .fetish.inc a, .rivalry.inc, .rivalry.inc a { color: lightsalmon }
+.lightsalmon, .lightsalmon a, .fetish.inc, .fetish.inc a, .rivalry.inc, .rivalry.inc a, .relationship.dec, .relationship.dec a { color: lightsalmon }
 .lime, .lime a, .change.positive, .change.positive a, .virginity.loss, .virginity.loss a, .pregnant, .pregnant a { color: lime } /* tight orifices, breast changes, take virginity, not sure on good aliases */
 .limegreen, .limegreen a { color: limegreen } /* multiple questionable uses */
 .magenta, .magenta a, .devotion.worship, .devotion.worship a { color: magenta }
-- 
GitLab