diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index 40cbc9e320f33fde57c77d2bd414971bc6a72a5b..0a961c6e2c795278665da1a6499559c08f5c360c 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -629,6 +629,7 @@ App.Data.resetOnNGPlus = { spaSpots: 0, spaUpgrade: 0, spaFix: 0, + spaAggroSpermBan: 1, spaName: "the Spa", incubator: {capacity: 0, tanks: []}, diff --git a/src/endWeek/reports/spaReport.js b/src/endWeek/reports/spaReport.js index 289e11cfc4189669957bcf5da1ce8dcb46fabd48..2053769e0cde89a2d5ac062e58b0b7983f247b1c 100644 --- a/src/endWeek/reports/spaReport.js +++ b/src/endWeek/reports/spaReport.js @@ -294,7 +294,7 @@ App.EndWeek.spaReport = function() { App.Events.addNode(el, r, "p", ["indent", "bold"]); } - if (App.EndWeek.saVars.poolJizzers.length > 0) { + if (App.EndWeek.saVars.poolJizz > ((S.Attendant && canSee(S.Attendant)) ? 5000 : 1000)) { r.push(`The filters${S.Attendant ? ` and ${S.Attendant.slaveName}` : ""} have been overwhelmed by the sheer quantity of resilient sperm swimming around in the pool.`); if (V.seePreg) { r.push(`Any woman that enters these fertile waters is liable to be gifted with new life.`); @@ -305,7 +305,7 @@ App.EndWeek.spaReport = function() { if (S.Attendant) { const slave = App.SlaveAssignment.reportSlave(S.Attendant); tired(slave); - if (isFertile(slave) && slave.preg !== -1 && App.EndWeek.saVars.poolJizz > 5000) { // Free swimming sperm do not respect chastity. + if (isFertile(slave) && slave.preg !== -1 && App.EndWeek.saVars.poolJizz > (canSee(S.Attendant) ? 5000 : 1000)) {) { // Free swimming sperm do not respect chastity and the Attendant can not avoid going in the pool. const spermAtt = weightedRandom(App.EndWeek.saVars.poolJizzers); if (canBreed(slave, getSlave(spermAtt.ID))) { knockMeUp(slave, 25, 2, spermAtt.ID); @@ -341,11 +341,19 @@ App.EndWeek.spaReport = function() { slave.devotion++; slave.trust++; } else if (slave.trust < 40) { - slave.trust += 10; + if (slave.geneMods.aggressiveSperm === 1 && isVirile(slave) && S.Attendant && V.spaAggroSpermBan === 1) { + slave.trust += 5; + } else { + slave.trust += 10; + } } else if (slave.devotion < 40) { - slave.devotion += 10; + if (slave.geneMods.aggressiveSperm === 1 && isVirile(slave) && S.Attendant && V.spaAggroSpermBan === 1) { + slave.devotion += 5; + } else { + slave.devotion += 10; + } } - if (App.EndWeek.saVars.poolJizz > (S.Attendant ? 5000 : 1000)) { + if (App.EndWeek.saVars.poolJizz > ((S.Attendant && canSee(S.Attendant)) ? 5000 : 1000) && (V.spaAggroSpermBan === 0 || slave.breedingMark === 0)) { // 0 breeds all, 1 doesn't reach here, and 2 fails if .breedingMark is 0. if (slave.fetish === "cumslut" && (canSee(slave) || canTaste(slave) || canSmell(slave))) { slave.devotion++; } @@ -420,6 +428,11 @@ App.EndWeek.spaReport = function() { r.push(`${He} remains in the Spa, stubborn in ${his} flaw.`); } else if (slave.trust < 60 || slave.devotion < 60) { r.push(`${He} remains in the Spa, as ${he} is still learning to accept life as a slave.`); + if (slave.geneMods.aggressiveSperm === 1 && isVirile(slave) && S.Attendant && V.spaAggroSpermBan === 1) { + if (slave.devotion < 40 || slave.trust < 40) { + r.push(`${He} wishes ${S.Attendant.slaveName} would allow ${him} to enjoy the main pool.`); + } + } } else if (slave.health.condition < 20) { r.push(`${He} remains in the Spa, as ${he} is benefiting from its healing properties.`); } else if (slave.health.tired > 30) { diff --git a/src/endWeek/saRewardAndPunishment.js b/src/endWeek/saRewardAndPunishment.js index 7169faaa8c9b52dd19fca012543cfd9db71491e6..57bdef76992255e1f7c6a298db6b7232e8dc8b4e 100644 --- a/src/endWeek/saRewardAndPunishment.js +++ b/src/endWeek/saRewardAndPunishment.js @@ -77,7 +77,7 @@ App.SlaveAssignment.rewardAndPunishment = function rewardAndPunish(forSlave) { r.push(`usually spends in bed with you, helping to ease your worries.`); } else if (V.spa !== 0) { r.push(`usually sets aside to spend with you in ${V.spaName}.`); - if (App.EndWeek.saVars.poolJizz > (S.Attendant ? 5000 : 1000)) { + if (App.EndWeek.saVars.poolJizz > ((S.Attendant && canSee(S.Attendant)) ? 5000 : 1000)) { if (V.PC.intelligence + V.PC.intelligenceImplant < 10 || !canSee(V.PC)) { // Free swimming sperm do not respect chastity. let sperm; if (isFertile(slave) && slave.preg !== -1) { @@ -98,10 +98,10 @@ App.SlaveAssignment.rewardAndPunishment = function rewardAndPunish(forSlave) { r.push(`usually spends relaxing with you.`); } } else if (V.spa !== 0) { - const where = (slave.assignment !== Job.SPA) ? V.spaName : `a private bath`; + const where = (slave.assignment !== Job.SPA || slave.breedingMark) ? V.spaName : `a private bath`; const attendant = S.Attendant ? `, enjoying ${S.Attendant.slaveName}'s care` : ``; r.push(`usually spends in ${where}${attendant}.`); - if (slave.assignment !== Job.SPA && App.EndWeek.saVars.poolJizz > (S.Attendant ? 5000 : 1000)) { + if (slave.assignment !== Job.SPA && slave.breedingMark === 0 && App.EndWeek.saVars.poolJizz > ((S.Attendant && canSee(S.Attendant)) ? 5000 : 1000)) { if (slave.fetish === "cumslut" && (canSee(slave) || canTaste(slave) || canSmell(slave))) { r.push(`As an added bonus, ${he} gets to soak in a pool teeming with live sperm; <span class="hotpink">what luck!</span>`); slave.devotion++; diff --git a/src/endWeek/slaveAssignmentReport.js b/src/endWeek/slaveAssignmentReport.js index d8f5edb7670e7e62abb4740a231d637d00401dad..4d600af77eb4a62215b4a516e89540b49fc1425d 100644 --- a/src/endWeek/slaveAssignmentReport.js +++ b/src/endWeek/slaveAssignmentReport.js @@ -166,7 +166,7 @@ App.EndWeek.slaveAssignmentReport = function() { if (facilities.spa.established) { let cum; for (const slave of App.Utils.sortedEmployees(App.Entity.facilities.spa)) { - if (slave.geneMods.aggressiveSperm === 1 && isVirile(slave) && (slave.rules.release.masturbation || App.Utils.hasNonassignmentSex(slave) || slave.rules.release.facilityLeader) && slave.energy > 20) { + if (slave.geneMods.aggressiveSperm === 1 && isVirile(slave) && (slave.rules.release.masturbation || App.Utils.hasNonassignmentSex(slave) || slave.rules.release.facilityLeader) && slave.energy > 20 && (!S.Attendant || V.spaAggroSpermBan !== 1)) { cum = Math.trunc(cumAmount(slave) / 2); App.EndWeek.saVars.poolJizz += cum; App.EndWeek.saVars.poolJizzers.push({ID: slave.ID, weight: cum}); diff --git a/src/facilities/spa/spa.js b/src/facilities/spa/spa.js index f96267172171444d1cee72bcc8be3bbf987d0b6c..3c40411229fbc31f802dec5cced939e0dc8f84df 100644 --- a/src/facilities/spa/spa.js +++ b/src/facilities/spa/spa.js @@ -155,6 +155,45 @@ App.Facilities.Spa.spa = class Spa extends App.Facilities.Facility { }, ], }, + { + property: "spaAggroSpermBan", + prereqs: [ + !!S.Attendant, + optimizedSpermFormula, + ], + options: [ + { + get text() { + const {he} = getPronouns(S.Attendant); + + return `${S.Attendant.slaveName} is to allow all slaves into the main pool, regardless of genetic modifications.`; + }, + link: `Free reign`, + value: 0, + }, + { + get text() { + const {his} = getPronouns(S.Attendant); + + return `${S.Attendant.slaveName} has banned any slaves with the enhanced sperm treatment from entering the main pool ${V.seePreg ? "and causing random pregnancies" : "and clogging up the filters"}.`; + }, + link: `No optimized sperm`, + value: 1, + }, + { + get text() { + const {his} = getPronouns(S.Attendant); + + return `${S.Attendant.slaveName} will make sure that no enhanced sperm will ever reach your breeding harem.`; + }, + link: `Protect your harem`, + value: 2, + prereqs: [ + V.propOutcome === 1, + ], + }, + ], + }, ]; } };