From 5ee44dca28a975dbd2d136b20cec1d53ce0eafe3 Mon Sep 17 00:00:00 2001
From: DCoded <dicoded@email.com>
Date: Sun, 9 Jan 2022 11:00:56 -0500
Subject: [PATCH] Completely reworked Elite Breeding exam

---
 css/gui/slaveList/cardStyle.css  |   2 +-
 src/pregmod/eliteBreedingExam.js | 341 ++++++++++++++++---------------
 2 files changed, 181 insertions(+), 162 deletions(-)

diff --git a/css/gui/slaveList/cardStyle.css b/css/gui/slaveList/cardStyle.css
index 6a07e857601..f560bfb0c5a 100644
--- a/css/gui/slaveList/cardStyle.css
+++ b/css/gui/slaveList/cardStyle.css
@@ -1,4 +1,4 @@
-div.card {
+.card {
 	border: 2px solid #333333;
 	background-color: #1a1a1a;
 	box-shadow: 10px 10px 10px black,
diff --git a/src/pregmod/eliteBreedingExam.js b/src/pregmod/eliteBreedingExam.js
index 88d6900f3df..beb22d8315a 100644
--- a/src/pregmod/eliteBreedingExam.js
+++ b/src/pregmod/eliteBreedingExam.js
@@ -2,247 +2,264 @@ globalThis.eliteBreedingExam = function(slave = null) {
 	const frag = new DocumentFragment();
 	const eliteAngered = V.failedElite > 100;
 	const SlaveProfessionalismEstablished = V.arcologies[0].FSSlaveProfessionalism > 20;
-	const preferYounger = V.arcologies[0].FSYouthPreferentialist > 20;
-	const partyAnimal = V.arcologies[0].FSHedonisticDecadence > 20;
-	const implantsExpected = V.arcologies[0].FSTransformationFetishist > 20;
 	const cost = 5000;
-	let r = [];
-	let test;
-	let passing = 0;
-	let fixable;
 
-	const result = function() {
-		if (slave) {
-			if (test === true) {
-				return App.UI.DOM.makeElement("span", "PASSED", "lime");
-			} else if (fixable) {
-				return App.UI.DOM.makeElement("span", "Within fixable range.", "yellow");
-			} else {
-				passing--;
-				return App.UI.DOM.makeElement("span", "FAILED", "red");
-			}
-		}
-		return ``;
-	};
+	let r = [];
 
 	r.push(`For each slave be to examined, a fee of <span class='yellowgreen'>${cashFormat(cost)}</span> will be deducted from your account.`);
 	r.push(`Updates will be posted periodically. It is your responsibility to keep up to date.`);
 	r.push(`Failures will be sterilized. Please make sure your slave fits the following criteria before submitting them for testing. We shall not be held responsible for time wasted.`);
 	if (!slave) {
-		r.push(`Must be not; already be marked as a breeding slave, inside a fuckdoll suit, infertile and already with child.`);
+		r.push(`Must not be inside a fuckdoll suit, infertile or already pregnant.`);
 	} else {
 		r.push(`${slave.slaveName} is up for review:`);
 	}
 	App.Events.addNode(frag, r, "div");
 	r = [];
-	const list = App.UI.DOM.appendNewElement("ul", frag);
-	if (slave) {
-		test = slave.intelligence + slave.intelligenceImplant >= (eliteAngered ? 95 : 50);
-	}
-	App.UI.DOM.appendNewElement("li", list, `Must be ${eliteAngered ? 'highly intelligent' : 'very smart'}. `).append(result());
-
-	if (slave) {
-		test = Beauty(slave) >= (eliteAngered ? 120 : 100);
-	}
-	App.UI.DOM.appendNewElement("li", list, `Must be ${eliteAngered ? 'unbelievably' : ''} beautiful. `).append(result());
 
-	if (slave) {
-		test = slave.face >= (eliteAngered ? 95 : 40);
-	}
-	App.UI.DOM.appendNewElement("li", list, `Their face must be ${eliteAngered ? 'breathtaking' : 'gorgeous'}. `).append(result());
+	const list = App.UI.DOM.appendNewElement("ul", frag, null, ["monospace", "card"]);
+	/** @type {[boolean, string][]} */
+	const checks = [];
 
-	if (slave) {
-		test = slave.chem <= 20;
-	}
-	App.UI.DOM.appendNewElement("li", list, `Their health must not be overly impacted by drug use. `).append(result());
-
-	if (slave) {
-		test = slave.addict === 0;
-	}
-	App.UI.DOM.appendNewElement("li", list, `They must not be addicted to drugs. `).append(result());
+	checks.push(
+		[
+			slave.intelligence + slave.intelligenceImplant >= (eliteAngered ? 95 : 50),
+			`Must be ${eliteAngered ? 'highly intelligent' : 'very smart'}`
+		],
+		[
+			Beauty(slave) >= (eliteAngered ? 120 : 100),
+			`Must be ${eliteAngered ? 'unbelievably' : ''} beautiful`
+		],
+		[
+			slave.face >= (eliteAngered ? 95 : 40),
+			`Must be ${eliteAngered ? 'breathtaking' : 'gorgeous'}`
+		],
+		[
+			slave.chem <= 20,
+			`Must not be overly impacted by drug use`
+		],
+		[
+			slave.addict === 0,
+			`Must not be addicted to drugs`
+		],
+	);
 
 	if (V.arcologies[0].FSMaturityPreferentialist > 20 || V.arcologies[0].FSYouthPreferentialist > 20) {
 		const targetAge = 24;
 		if (slave) {
 			if (V.arcologies[0].FSMaturityPreferentialist > 20) {
-				test = slave.physicalAge > targetAge;
+				checks.push([
+					slave.physicalAge > targetAge,
+					`Must be older than ${targetAge}`
+				]);
 			} else {
-				test = slave.physicalAge < targetAge;
+				checks.push([
+					slave.physicalAge <= targetAge,
+					`Must be ${targetAge} or younger`
+				]);
 			}
 		}
-		App.UI.DOM.appendNewElement("li", list, `Must be ${preferYounger ? 'younger' : 'older'} than ${targetAge}. `).append(result());
 	}
 
 	if (V.arcologies[0].FSIntellectualDependency > 20) {
-		if (slave) {
-			test = slave.energy >= 96;
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must be sexually receptive at all times. `).append(result());
+		checks.push([
+			slave.energy >= 96,
+			`Must be sexually receptive at all times`
+		]);
 	} else if (V.arcologies[0].FSSlaveProfessionalism > 20) {
-		if (slave) {
-			test = slave.skill.vaginal + slave.skill.anal + slave.skill.oral + slave.skill.entertainment + slave.skill.whoring >= (eliteAngered ? 500 : 400);
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must be capable of mastering skills. `).append(result());
-		if (slave) {
-			test = slave.accent <= 1;
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must be capable of eloquent and accurate speech. `).append(result());
+		checks.push(
+			[
+				slave.skill.vaginal + slave.skill.anal + slave.skill.oral + slave.skill.entertainment + slave.skill.whoring >= (eliteAngered ? 500 : 400),
+				`Must be capable of mastering skills`
+			],
+			[
+				slave.accent <= 1,
+				`Must be capable of eloquent and accurate speech`
+			],
+		);
 	}
 	if (V.arcologies[0].FSPetiteAdmiration > 20 || V.arcologies[0].FSStatuesqueGlorification > 20) {
 		const targetHeight = V.arcologies[0].FSPetiteAdmiration > 20 ? 150 : 186;
 		if (V.arcologies[0].FSPetiteAdmiration > 20) {
-			if (slave) {
-				test = (slave.height - (slave.heightImplant * 10)) < targetHeight;
-			}
-			App.UI.DOM.appendNewElement("li", list, `Must naturally be very short. (${targetHeight} cm) `).append(result());
-			if (slave) {
-				test = (slave.height - (slave.heightImplant * 10)) < Height.mean(slave) - 15;
-			}
-			App.UI.DOM.appendNewElement("li", list, `Must naturally be very short for their age. `).append(result());
+			checks.push(
+				[
+					(slave.height - (slave.heightImplant * 10)) < targetHeight,
+					`Must naturally be very short (${targetHeight}cm)`
+				],
+				[
+					(slave.height - (slave.heightImplant * 10)) < Height.mean(slave) - 15,
+					`Must naturally be very short for their age`
+				],
+			);
 		} else if (V.arcologies[0].FSStatuesqueGlorification > 20) {
-			if (slave) {
-				test = (slave.height - (slave.heightImplant * 10)) > targetHeight;
-			}
-			App.UI.DOM.appendNewElement("li", list, `Must naturally be very tall. (${targetHeight} cm) `).append(result());
+			checks.push([
+				(slave.height - (slave.heightImplant * 10)) > targetHeight,
+				`Must naturally be very tall (${targetHeight}cm)`
+			]);
 		}
 	}
 
 	if (V.arcologies[0].FSSupremacist > 20 || V.arcologies[0].FSSubjugationist > 20) {
 		const targetRace = V.arcologies[0].FSSupremacist > 20 ? V.arcologies[0].FSSupremacistRace : V.arcologies[0].FSSubjugationistRace;
 		if (V.arcologies[0].FSSupremacist > 20) {
-			if (slave) {
-				test = slave.race === targetRace;
-			}
-			App.UI.DOM.appendNewElement("li", list, `Must be ${targetRace}. `).append(result());
+			checks.push([
+				slave.race === targetRace,
+				`Must be ${targetRace}`
+			]);
 		} else {
-			if (slave) {
-				test = slave.race !== targetRace;
-			}
-			App.UI.DOM.appendNewElement("li", list, `Must not be ${targetRace}. `).append(result());
+			checks.push([
+				slave.race !== targetRace,
+				`Must not be ${targetRace}`
+			]);
 		}
 	}
-
 	if (V.arcologies[0].FSGenderRadicalist > 20) {
-		if (slave) {
-			test = slave.dick >= 1 && slave.balls >= 1;
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must have a functional penis. `).append(result());
+		checks.push([
+			slave.dick >= 1 && slave.balls >= 1,
+			`Must have a functional penis`
+		]);
 	} else if (V.arcologies[0].FSGenderFundamentalist > 20) {
-		if (slave) {
-			test = slave.dick === 0 && slave.balls === 0;
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must be physically female. `).append(result());
+		checks.push([
+			slave.dick === 0 && slave.balls === 0,
+			`Must be physically female`
+		]);
 	}
 	if (V.arcologies[0].FSPaternalist > 20) {
-		if (slave) {
-			test = slave.intelligenceImplant >= (SlaveProfessionalismEstablished ? 30 : 15);
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must be ${SlaveProfessionalismEstablished ? 'well' : ''} educated. `).append(result());
-		if (slave) {
-			test = slave.health.condition >= 60;
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must be in good health. `).append(result());
-	// } else if (V.arcologies[0].FSDegradationist > 20) {
+		checks.push([
+			slave.intelligenceImplant >= (SlaveProfessionalismEstablished ? 30 : 15),
+			`Must be ${SlaveProfessionalismEstablished ? 'well' : ''} educated`
+		]);
+		checks.push([
+			slave.health.condition >= 60,
+			`Must be in good health`
+		]);
 	}
 
 	if (SlaveProfessionalismEstablished) {
-		if (slave) {
-			test = slave.intelligenceImplant >= 15;
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must be well educated. `).append(result());
+		checks.push([
+			slave.intelligenceImplant >= 15,
+			`Must be well educated`
+		]);
 	}
 
 	if (V.arcologies[0].FSBodyPurist > 20) {
-		if (slave) {
-			test = slave.chem <= (eliteAngered ? 0 : 15);
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must have low carcinogen levels. `).append(result());
-		if (slave) {
-			test = slave.boobsImplant + slave.buttImplant + slave.lipsImplant + slave.hipsImplant + slave.shouldersImplant === 0 && slave.faceImplant <= 5 && slave.bellyImplant === -1;
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must be implant free. `).append(result());
-	// } else if (V.arcologies[0].FSTransformationFetishist > 20) {
-	//	idealSlave.chem = 20;
+		checks.push([
+			slave.chem <= (eliteAngered ? 0 : 15),
+			`Must have low carcinogen levels`
+		]);
+		checks.push([
+			slave.boobsImplant + slave.buttImplant + slave.lipsImplant + slave.hipsImplant + slave.shouldersImplant === 0 && slave.faceImplant <= 5 && slave.bellyImplant === -1,
+			`Must be implant free`
+		]);
 	}
 	if (V.arcologies[0].FSSlimnessEnthusiast > 20) {
-		if (slave) {
-			test = slave.weight <= (partyAnimal ? 30 : 0);
-		}
-		if (partyAnimal) {
-			App.UI.DOM.appendNewElement("li", list, `May be no larger than "plush". `).append(result());
+		if (V.arcologies[0].FSHedonisticDecadence > 20) {
+			checks.push([
+				slave.weight <= 30,
+				`May be no larger than "plush"`
+			]);
 		} else {
-			App.UI.DOM.appendNewElement("li", list, `Must be thin. `).append(result());
-		}
-		if (slave) {
-			test = slave.butt <= 2;
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must have a trim rear. `).append(result());
-		if (slave) {
-			test = slave.boobs <= 400;
+			checks.push([
+				slave.weight <= 0,
+				`Must be thin`
+			]);
 		}
-		App.UI.DOM.appendNewElement("li", list, `Must have a sleek chest. `).append(result());
+		checks.push([
+			slave.butt <= 2,
+			`Must have a trim rear`
+		]);
+		checks.push([
+			slave.boobs <= 400,
+			`Must have a sleek chest`
+		]);
 	} else if (V.arcologies[0].FSAssetExpansionist > 20) {
-		if (slave) {
-			test = (implantsExpected ? (slave.butt) : (slave.butt - slave.buttImplant)) >= 6;
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must have a ${implantsExpected ? '' : 'naturally'} gigantic rear. `).append(result());
-		if (slave) {
-			test = (implantsExpected ? (slave.boobs) : (slave.boobs - slave.boobsImplant)) >= 1000;
+		if (V.arcologies[0].FSTransformationFetishist > 20) {
+			checks.push(
+				[
+					slave.butt >= 6,
+					`Must have a gigantic rear`
+				],
+				[
+					slave.boobs >= 1000,
+					`Must be busty`
+				],
+			);
+		} else {
+			checks.push(
+				[
+					slave.butt - slave.buttImplant >= 6,
+					`Must have a naturally gigantic rear`
+				],
+				[
+					slave.boobs - slave.boobsImplant >= 1000,
+					`Must be naturally busty`
+				],
+			);
 		}
-		App.UI.DOM.appendNewElement("li", list, `Must be ${implantsExpected ? '' : 'naturally'} busty. `).append(result());
 	}
 	if (V.arcologies[0].FSPastoralist > 20) {
-		if (slave) {
-			test = slave.lactation === 1;
-		}
-		App.UI.DOM.appendNewElement("li", list, `Must be lactating naturally. `).append(result());
+		checks.push([
+			slave.lactation === 1,
+			`Must be lactating naturally`
+		]);
 	}
 	if (V.arcologies[0].FSPhysicalIdealist > 20) {
 		if (V.arcologies[0].FSPhysicalIdealistLaw === 1) {
 			const musclesMin = 20;
 			const musclesMax = 50;
-			if (slave) {
-				test = slave.weight <= 30;
-			}
-			App.UI.DOM.appendNewElement("li", list, `Must not be overweight. `).append(result());
-			if (slave) {
-				test = slave.muscles.isBetween(musclesMin, musclesMax);
-				fixable = (slave.muscles <= musclesMin && slave.muscles > musclesMax - musclesMin) || (slave.muscles >= musclesMax && slave.muscles < musclesMin + 30);
-				if (fixable && passing === 0) {
-					passing = 2;
-				}
-			}
-			App.UI.DOM.appendNewElement("li", list, `Must be fit, but not too muscular. `).append(result());
+
+			checks.push(
+				[
+					slave.weight <= 30,
+					`Must not be overweight`
+				],
+				[
+					slave.muscles.isBetween(musclesMin, musclesMax),
+					`Must be fit, but not too muscular`
+				],
+			);
 		} else {
-			if (slave) {
-				test = slave.muscles > 95;
-			}
-			App.UI.DOM.appendNewElement("li", list, `Must be extremely muscular. `).append(result());
+			checks.push([
+				slave.muscles > 95,
+				`Must be extremely muscular`
+			]);
 		}
 	} else if (V.arcologies[0].FSHedonisticDecadence > 20) {
 		const targetWeight = V.arcologies[0].FSSlimnessEnthusiast > 20 ? 10 : 95;
-		if (slave) {
-			test = slave.weight > targetWeight;
-		}
+
 		if (V.arcologies[0].FSSlimnessEnthusiast > 20) {
-			App.UI.DOM.appendNewElement("li", list, `Must be more than "trim". `).append(result());
+			checks.push([
+				slave.weight > targetWeight,
+				`Must be more than "trim"`
+			]);
 		} else {
-			App.UI.DOM.appendNewElement("li", list, `Must be big, soft and fat. `).append(result());
+			checks.push([
+				slave.weight > targetWeight,
+				`Must be big, soft and fat`
+			]);
 		}
 	}
 
 	if (slave) {
-		if (passing === 2) {
-			r.push(`The aforementioned slave has been deemed <span class="yellow">currently unsuitable</span> for breeding, but may be resubmitted after corrections are applied. We understand the subjective nature of "fit" and do not wish to preclude the use a viable breeder over such a trivial fix. A contraceptive routine has been applied to protect against "accidents" in the interim.`);
-			slave.preg = -1;
-		} else if (passing !== 0) {
+		checks.forEach(check => {
+			if (!check[0]) {
+				App.UI.DOM.appendNewElement("li", list, `❌ ${check[1]}`);
+			} else {
+				App.UI.DOM.appendNewElement("li", list, `✅ ${check[1]}`);
+			}
+		});
+
+		if (checks.some(check => !check[0])) {
 			r.push(`The aforementioned slave has been deemed <span class="red">unsuitable</span> for breeding.`);
+
 			slave.preg = -3;
 		} else {
 			r.push(`The aforementioned slave has been deemed <span class="green">worthy</span> of being used for breeding and has been marked as such. Please note the increased restrictions on breeding slaves.`);
 			r.push(`They are not permitted for public use or anything that may harm their growing child. The child within them is considered a member of the Elite class and as such, any harm that comes to them will result in severe penalties to the breeder's owner. Development of the child will be closely monitored; should the fetus be identified as not of the owner's blood (or any other member of the Elite class), said owner shall face severe fines.`);
+
 			slave.breedingMark = 1;
 			slave.pregControl = "none";
+
 			const job = App.Utils.jobForAssignment(slave.assignment);
 			const consequences = [];
 			if (slave.assignment === Job.BODYGUARD || (job && job.desc.publicSexUse)) {
@@ -260,8 +277,10 @@ globalThis.eliteBreedingExam = function(slave = null) {
 				r.push(`${He} has been automatically ${toSentence(consequences)}.`);
 			}
 		}
+
 		cashX(-cost, "capEx");
 	}
 	App.Events.addNode(frag, r, "div");
+
 	return frag;
 };
-- 
GitLab