diff --git a/css/gui/lists.css b/css/gui/lists.css new file mode 100644 index 0000000000000000000000000000000000000000..aea8edd67f6e6d5686167a295d8f85d10c1bcb8b --- /dev/null +++ b/css/gui/lists.css @@ -0,0 +1,3 @@ +.no-bullet { + list-style-type: none; +} diff --git a/src/pregmod/eliteBreedingExam.js b/src/pregmod/eliteBreedingExam.js index beb22d8315ad887e767ab1d260779706d4fbaa90..09d7df4aae8fefc6935a30969a74e86663df2c18 100644 --- a/src/pregmod/eliteBreedingExam.js +++ b/src/pregmod/eliteBreedingExam.js @@ -10,70 +10,69 @@ globalThis.eliteBreedingExam = function(slave = null) { 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 not be inside a fuckdoll suit, infertile or already pregnant.`); + r.push(`The slave 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, null, ["monospace", "card"]); - /** @type {[boolean, string][]} */ + const list = App.UI.DOM.appendNewElement("ul", frag, null, ["monospace", "card", "no-bullet"]); + /** @type {[(slave: FC.SlaveState) => boolean, string][]} */ const checks = []; checks.push( [ - slave.intelligence + slave.intelligenceImplant >= (eliteAngered ? 95 : 50), + slave => slave.intelligence + slave.intelligenceImplant >= (eliteAngered ? 95 : 50), `Must be ${eliteAngered ? 'highly intelligent' : 'very smart'}` ], [ - Beauty(slave) >= (eliteAngered ? 120 : 100), + slave => Beauty(slave) >= (eliteAngered ? 120 : 100), `Must be ${eliteAngered ? 'unbelievably' : ''} beautiful` ], [ - slave.face >= (eliteAngered ? 95 : 40), + slave => slave.face >= (eliteAngered ? 95 : 40), `Must be ${eliteAngered ? 'breathtaking' : 'gorgeous'}` ], [ - slave.chem <= 20, + slave => slave.chem <= 20, `Must not be overly impacted by drug use` ], [ - slave.addict === 0, + slave => 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) { - checks.push([ - slave.physicalAge > targetAge, - `Must be older than ${targetAge}` - ]); - } else { - checks.push([ - slave.physicalAge <= targetAge, - `Must be ${targetAge} or younger` - ]); - } + + if (V.arcologies[0].FSMaturityPreferentialist > 20) { + checks.push([ + slave => slave.physicalAge > targetAge, + `Must be older than ${targetAge}` + ]); + } else { + checks.push([ + slave => slave.physicalAge <= targetAge, + `Must be ${targetAge} or younger` + ]); } } if (V.arcologies[0].FSIntellectualDependency > 20) { checks.push([ - slave.energy >= 96, + slave => slave.energy >= 96, `Must be sexually receptive at all times` ]); } else if (V.arcologies[0].FSSlaveProfessionalism > 20) { checks.push( [ - slave.skill.vaginal + slave.skill.anal + slave.skill.oral + slave.skill.entertainment + slave.skill.whoring >= (eliteAngered ? 500 : 400), + slave => 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, + slave => slave.accent <= 1, `Must be capable of eloquent and accurate speech` ], ); @@ -83,17 +82,17 @@ globalThis.eliteBreedingExam = function(slave = null) { if (V.arcologies[0].FSPetiteAdmiration > 20) { checks.push( [ - (slave.height - (slave.heightImplant * 10)) < targetHeight, + slave => (slave.height - (slave.heightImplant * 10)) < targetHeight, `Must naturally be very short (${targetHeight}cm)` ], [ - (slave.height - (slave.heightImplant * 10)) < Height.mean(slave) - 15, + slave => (slave.height - (slave.heightImplant * 10)) < Height.mean(slave) - 15, `Must naturally be very short for their age` ], ); } else if (V.arcologies[0].FSStatuesqueGlorification > 20) { checks.push([ - (slave.height - (slave.heightImplant * 10)) > targetHeight, + slave => (slave.height - (slave.heightImplant * 10)) > targetHeight, `Must naturally be very tall (${targetHeight}cm)` ]); } @@ -103,95 +102,95 @@ globalThis.eliteBreedingExam = function(slave = null) { const targetRace = V.arcologies[0].FSSupremacist > 20 ? V.arcologies[0].FSSupremacistRace : V.arcologies[0].FSSubjugationistRace; if (V.arcologies[0].FSSupremacist > 20) { checks.push([ - slave.race === targetRace, + slave => slave.race === targetRace, `Must be ${targetRace}` ]); } else { checks.push([ - slave.race !== targetRace, + slave => slave.race !== targetRace, `Must not be ${targetRace}` ]); } } if (V.arcologies[0].FSGenderRadicalist > 20) { checks.push([ - slave.dick >= 1 && slave.balls >= 1, + slave => slave.dick >= 1 && slave.balls >= 1, `Must have a functional penis` ]); } else if (V.arcologies[0].FSGenderFundamentalist > 20) { checks.push([ - slave.dick === 0 && slave.balls === 0, + slave => slave.dick === 0 && slave.balls === 0, `Must be physically female` ]); } if (V.arcologies[0].FSPaternalist > 20) { checks.push([ - slave.intelligenceImplant >= (SlaveProfessionalismEstablished ? 30 : 15), + slave => slave.intelligenceImplant >= (SlaveProfessionalismEstablished ? 30 : 15), `Must be ${SlaveProfessionalismEstablished ? 'well' : ''} educated` ]); checks.push([ - slave.health.condition >= 60, + slave => slave.health.condition >= 60, `Must be in good health` ]); } if (SlaveProfessionalismEstablished) { checks.push([ - slave.intelligenceImplant >= 15, + slave => slave.intelligenceImplant >= 15, `Must be well educated` ]); } if (V.arcologies[0].FSBodyPurist > 20) { checks.push([ - slave.chem <= (eliteAngered ? 0 : 15), + slave => 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, + slave => 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 (V.arcologies[0].FSHedonisticDecadence > 20) { checks.push([ - slave.weight <= 30, + slave => slave.weight <= 30, `May be no larger than "plush"` ]); } else { checks.push([ - slave.weight <= 0, + slave => slave.weight <= 0, `Must be thin` ]); } checks.push([ - slave.butt <= 2, + slave => slave.butt <= 2, `Must have a trim rear` ]); checks.push([ - slave.boobs <= 400, + slave => slave.boobs <= 400, `Must have a sleek chest` ]); } else if (V.arcologies[0].FSAssetExpansionist > 20) { if (V.arcologies[0].FSTransformationFetishist > 20) { checks.push( [ - slave.butt >= 6, + slave => slave.butt >= 6, `Must have a gigantic rear` ], [ - slave.boobs >= 1000, + slave => slave.boobs >= 1000, `Must be busty` ], ); } else { checks.push( [ - slave.butt - slave.buttImplant >= 6, + slave => slave.butt - slave.buttImplant >= 6, `Must have a naturally gigantic rear` ], [ - slave.boobs - slave.boobsImplant >= 1000, + slave => slave.boobs - slave.boobsImplant >= 1000, `Must be naturally busty` ], ); @@ -199,7 +198,7 @@ globalThis.eliteBreedingExam = function(slave = null) { } if (V.arcologies[0].FSPastoralist > 20) { checks.push([ - slave.lactation === 1, + slave => slave.lactation === 1, `Must be lactating naturally` ]); } @@ -210,17 +209,17 @@ globalThis.eliteBreedingExam = function(slave = null) { checks.push( [ - slave.weight <= 30, + slave => slave.weight <= 30, `Must not be overweight` ], [ - slave.muscles.isBetween(musclesMin, musclesMax), + slave => slave.muscles.isBetween(musclesMin, musclesMax), `Must be fit, but not too muscular` ], ); } else { checks.push([ - slave.muscles > 95, + slave => slave.muscles > 95, `Must be extremely muscular` ]); } @@ -229,12 +228,12 @@ globalThis.eliteBreedingExam = function(slave = null) { if (V.arcologies[0].FSSlimnessEnthusiast > 20) { checks.push([ - slave.weight > targetWeight, + slave => slave.weight > targetWeight, `Must be more than "trim"` ]); } else { checks.push([ - slave.weight > targetWeight, + slave => slave.weight > targetWeight, `Must be big, soft and fat` ]); } @@ -242,14 +241,14 @@ globalThis.eliteBreedingExam = function(slave = null) { if (slave) { checks.forEach(check => { - if (!check[0]) { + if (!check[0](slave)) { App.UI.DOM.appendNewElement("li", list, `⌠${check[1]}`); } else { App.UI.DOM.appendNewElement("li", list, `✅ ${check[1]}`); } }); - if (checks.some(check => !check[0])) { + if (checks.some(check => !check[0](slave))) { r.push(`The aforementioned slave has been deemed <span class="red">unsuitable</span> for breeding.`); slave.preg = -3; @@ -279,7 +278,14 @@ globalThis.eliteBreedingExam = function(slave = null) { } cashX(-cost, "capEx"); + } else { + checks + .map(check => check[1]) + .forEach(check => { + App.UI.DOM.appendNewElement("li", list, check); + }); } + App.Events.addNode(frag, r, "div"); return frag;