diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index d50b1b87a634c54300f1338c25088a5369075e2a..bd0a2bed181a70e3615958ba6347d681ebf3d89a 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -1023,6 +1023,25 @@ window.DefaultRules = (function() { * @param {App.RA.RuleSetters} rule */ function ProcessAbortions(slave, rule) { + function conditionalTermination(slave, predicate) { + let res = false; + if (slave.preg < 4) { + let WL = slave.womb.length; + for (let index = 0; index < WL; index++) { + if (predicate(slave.womb[index])) { + WombRemoveFetus(slave, index); + index--; + WL--; + res = true; + } + } + if (WL === 0) { + TerminatePregnancy(slave); + } + } + return res; + } + if ((rule.abortion !== undefined) && (rule.abortion !== null)) { for (const ar of rule.abortion) { if (ar === "all") { @@ -1077,49 +1096,16 @@ window.DefaultRules = (function() { 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); - } + if (conditionalTermination(slave, fetus => fetus.genetics.gender === "XY")) { 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); - } + if (conditionalTermination(slave, fetus => fetus.genetics.gender === "XX")) { r += `<br>${slave.slaveName}'s female fetuses have been terminated.`; } } 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); - } + if (conditionalTermination(slave, fetus => fetus.genetics.race === race)) { r += `<br>${slave.slaveName}'s ${race} fetuses have been terminated.`; } }