From 089aaa9f365eea8fc07ed40069c78daa04bc933a Mon Sep 17 00:00:00 2001 From: ezsh <ezsh.junk@gmail.com> Date: Sat, 22 Feb 2020 13:59:57 +0100 Subject: [PATCH] Add pregnancy termination based on race to RA --- devTools/FC.d.ts | 2 +- src/js/DefaultRules.js | 164 ++++++++++++++++++-------------- src/js/datatypeCleanupJS.js | 3 + src/js/rulesAssistantOptions.js | 14 ++- 4 files changed, 105 insertions(+), 78 deletions(-) diff --git a/devTools/FC.d.ts b/devTools/FC.d.ts index f1186870e85..19c0f79fbcc 100644 --- a/devTools/FC.d.ts +++ b/devTools/FC.d.ts @@ -199,7 +199,7 @@ declare namespace App { XX: number; gelding: number; preg: boolean; - abortion: string; + abortion: string[]; growth: RuleGrowthSetters; hyper_drugs: number; aphrodisiacs: number; diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index 1f1636d69e2..d50b1b87a63 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -1024,89 +1024,107 @@ window.DefaultRules = (function() { */ function ProcessAbortions(slave, rule) { if ((rule.abortion !== undefined) && (rule.abortion !== null)) { - if (rule.abortion === "all") { - if (slave.preg < 4 || (slave.fetish === "mindbroken" || slave.fuckdoll !== 0)) { - r += `<br>${slave.slaveName}'s pregnancy has been terminated.`; - } else { - r += `<br>${slave.slaveName}'s pregnancy has been terminated; `; - if (slave.sexualFlaw === "breeder") { - r += `it broke ${his} mind.`; - slave.fetish = "mindbroken"; - slave.behavioralQuirk = "none"; - slave.behavioralFlaw = "none"; - slave.sexualQuirk = "none"; - slave.sexualFlaw = "none"; - slave.devotion = 0; - slave.trust = 0; - } else if (slave.devotion < -50) { - r += `${he} did not handle it well.`; - slave.trust -= 10; - slave.devotion -= 25; - } else if (slave.devotion < -20) { - r += `${he} did not handle it well.`; - slave.trust -= 10; - slave.devotion -= 10; - } else if (slave.fetish === "pregnancy") { - r += `${he} did not handle it well.`; - let fetishModifier = slave.fetishStrength / 2; - slave.devotion -= fetishModifier; - slave.trust -= fetishModifier; - } else if (slave.devotion <= 20) { - r += `${he} did not handle it well.`; - slave.trust -= 10; - slave.devotion -= 5; - } else if (slave.devotion <= 50) { - r += `${he} did not handle it well.`; - slave.trust -= 10; + for (const ar of rule.abortion) { + if (ar === "all") { + if (slave.preg < 4 || (slave.fetish === "mindbroken" || slave.fuckdoll !== 0)) { + r += `<br>${slave.slaveName}'s pregnancy has been terminated.`; } else { - r += "it had little mental effect."; + r += `<br>${slave.slaveName}'s pregnancy has been terminated; `; + if (slave.sexualFlaw === "breeder") { + r += `it broke ${his} mind.`; + slave.fetish = "mindbroken"; + slave.behavioralQuirk = "none"; + slave.behavioralFlaw = "none"; + slave.sexualQuirk = "none"; + slave.sexualFlaw = "none"; + slave.devotion = 0; + slave.trust = 0; + } else if (slave.devotion < -50) { + r += `${he} did not handle it well.`; + slave.trust -= 10; + slave.devotion -= 25; + } else if (slave.devotion < -20) { + r += `${he} did not handle it well.`; + slave.trust -= 10; + slave.devotion -= 10; + } else if (slave.fetish === "pregnancy") { + r += `${he} did not handle it well.`; + let fetishModifier = slave.fetishStrength / 2; + slave.devotion -= fetishModifier; + slave.trust -= fetishModifier; + } else if (slave.devotion <= 20) { + r += `${he} did not handle it well.`; + slave.trust -= 10; + slave.devotion -= 5; + } else if (slave.devotion <= 50) { + r += `${he} did not handle it well.`; + slave.trust -= 10; + } else { + r += "it had little mental effect."; + } } - } - if (lastPregRule(slave, V.defaultRules)) { - slave.preg = -1; - } else { - slave.preg = 0; - } - if (slave.abortionTat > -1) { - slave.abortionTat++; - cashX(forceNeg(V.modCost), "slaveMod", slave); - } - V.reservedChildren = FetusGlobalReserveCount("incubator"); - V.reservedChildrenNursery = FetusGlobalReserveCount("nursery"); - TerminatePregnancy(slave); - } else if (rule.abortion === "male") { - if (slave.preg < 4) { - let WL = slave.womb.length; - for (let index = 0; index < WL; index++) { - if (slave.womb[index].genetics.gender === "XY") { - WombRemoveFetus(slave, index); - index--; - WL--; - } + if (lastPregRule(slave, V.defaultRules)) { + slave.preg = -1; + } else { + slave.preg = 0; } - if (WL === 0) { - TerminatePregnancy(slave); + if (slave.abortionTat > -1) { + slave.abortionTat++; + cashX(forceNeg(V.modCost), "slaveMod", slave); } - r += `<br>${slave.slaveName}'s male fetuses have been terminated.`; - } - } else if (rule.abortion === "female") { - if (slave.preg < 4) { - let WL = slave.womb.length; - for (let index = 0; index < WL; index++) { - if (slave.womb[index].genetics.gender === "XX") { - WombRemoveFetus(slave, index); - index--; - WL--; + V.reservedChildren = FetusGlobalReserveCount("incubator"); + V.reservedChildrenNursery = FetusGlobalReserveCount("nursery"); + TerminatePregnancy(slave); + } else if (ar === "male") { + if (slave.preg < 4) { + let WL = slave.womb.length; + for (let index = 0; index < WL; index++) { + if (slave.womb[index].genetics.gender === "XY") { + WombRemoveFetus(slave, index); + index--; + WL--; + } + } + if (WL === 0) { + TerminatePregnancy(slave); + } + r += `<br>${slave.slaveName}'s male fetuses have been terminated.`; + } + } else if (ar === "female") { + if (slave.preg < 4) { + let WL = slave.womb.length; + for (let index = 0; index < WL; index++) { + if (slave.womb[index].genetics.gender === "XX") { + WombRemoveFetus(slave, index); + index--; + WL--; + } } + if (WL === 0) { + TerminatePregnancy(slave); + } + r += `<br>${slave.slaveName}'s female fetuses have been terminated.`; } - if (WL === 0) { - TerminatePregnancy(slave); + } else if (ar.startsWith("race:")){ // ar is the race name in the notation "race:<lowercase_race_name>" + const race = ar.substr("race:".length); + if (slave.preg < 4) { + let WL = slave.womb.length; + for (let index = 0; index < WL; index++) { + if (slave.womb[index].genetics.race === race) { + WombRemoveFetus(slave, index); + index--; + WL--; + } + } + if (WL === 0) { + TerminatePregnancy(slave); + } + r += `<br>${slave.slaveName}'s ${race} fetuses have been terminated.`; } - r += `<br>${slave.slaveName}'s female fetuses have been terminated.`; } + SetBellySize(slave); } - SetBellySize(slave); } } diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js index 0e7768d253f..c0163d48b3c 100644 --- a/src/js/datatypeCleanupJS.js +++ b/src/js/datatypeCleanupJS.js @@ -2494,6 +2494,9 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() { if (set.removeLabel === "") { set.removeLabel = null; } + if (typeof (set.abortion) === "string") { + set.abortion = [set.abortion]; + } } }(); diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js index e892c47b231..65bb52811f0 100644 --- a/src/js/rulesAssistantOptions.js +++ b/src/js/rulesAssistantOptions.js @@ -499,6 +499,9 @@ window.rulesAssistantOptions = (function() { setValue(what) { what = what || []; + if (!Array.isArray(what)) { + what = [what]; + } const vs = new Set(what); for (const opt of this.value.options) { opt.selected = vs.has(this.values_.get(opt.value)); @@ -2285,14 +2288,17 @@ window.rulesAssistantOptions = (function() { } } - class AbortionList extends ListSelector { + class AbortionList extends MultiListSelector { constructor() { const pairs = [ - ["abort all", "all"], + ["all", "all"], ]; if (V.pregnancyMonitoringUpgrade === 1 && V.geneticMappingUpgrade >= 1) { - pairs.push(["abort boys", "male"]); - pairs.push(["abort girls", "female"]); + pairs.push(["boys", "male"]); + pairs.push(["girls", "female"]); + for (let i = 0; i < App.Data.misc.filterRaces.length; ++i) { + pairs.push([App.Data.misc.filterRaces[i], "race:" + App.Data.misc.filterRacesLowercase[i]]); + } } super("Pregnancy termination", pairs); this.setValue(current_rule.set.abortion); -- GitLab