From 7292a9c91e21a0acf30adc6eb3c146fddefb0f17 Mon Sep 17 00:00:00 2001 From: Svornost <11434-svornost@users.noreply.gitgud.io> Date: Thu, 29 Sep 2022 22:38:29 -0400 Subject: [PATCH] Simplify "chooses own job" system. Remove two-pass system (and the "2" state for `slave.choosesOwnAssignment`) and global variable, consolidate job-printing logic, fix a few bugs, and improve error handling. --- js/003-data/gameVariableData.js | 5 --- src/endWeek/reports/arcadeReport.js | 10 +----- src/endWeek/reports/brothelReport.js | 11 ++---- src/endWeek/reports/cellblockReport.js | 11 ++---- src/endWeek/reports/clinicReport.js | 11 ++---- src/endWeek/reports/clubReport.js | 11 ++---- src/endWeek/reports/dairyReport.js | 11 ++---- src/endWeek/reports/farmyardReport.js | 9 ++--- src/endWeek/reports/masterSuiteReport.js | 12 +++---- src/endWeek/reports/nurseryReport.js | 10 ++---- src/endWeek/reports/penthouseReport.js | 9 +++-- src/endWeek/reports/schoolroomReport.js | 19 ++++------ src/endWeek/reports/servantsQuartersReport.js | 10 ++---- src/endWeek/reports/spaReport.js | 11 ++---- src/endWeek/saChoosesOwnJob.js | 35 +++++++++---------- src/endWeek/saSharedVariables.js | 7 +++- src/endWeek/slaveAssignmentReport.js | 2 +- src/endWeek/standardSlaveReport.js | 16 +++++++++ 18 files changed, 73 insertions(+), 137 deletions(-) diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index bb5a6e949ce..1874d1b207d 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -1356,11 +1356,6 @@ App.Data.resetOnNGPlus = { slave: 0 }, tempEventToggle: 0, - /** - * Assignments texts for slaves who choose their own assignment, set at during the first pass in App.SlaveAssignment.choosesOwnJob() - * @type {Object.<number, string>} - */ - choosesOwnAssignmentText: {}, favorites: [], /** * Any loans the player has taken out. diff --git a/src/endWeek/reports/arcadeReport.js b/src/endWeek/reports/arcadeReport.js index 28d89c48b80..ac525bb6afb 100644 --- a/src/endWeek/reports/arcadeReport.js +++ b/src/endWeek/reports/arcadeReport.js @@ -87,14 +87,7 @@ App.EndWeek.arcadeReport = function() { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - slaveEntry.append(`is confined in ${V.arcadeName}.`); - } - App.Events.addNode(slaveEntry, r); + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is confined in ${V.arcadeName}.`)); App.Events.addNode( slaveEntry, @@ -108,7 +101,6 @@ App.EndWeek.arcadeReport = function() { App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { // discard return values silently - App.SlaveAssignment.choosesOwnJob(slave); App.SlaveAssignment.workAGloryHole(slave); } profits += V.cash - oldCash; diff --git a/src/endWeek/reports/brothelReport.js b/src/endWeek/reports/brothelReport.js index 91f1928c02f..f35c44f0632 100644 --- a/src/endWeek/reports/brothelReport.js +++ b/src/endWeek/reports/brothelReport.js @@ -269,7 +269,7 @@ App.EndWeek.brothelReport = function() { if (V.showEWD) { const madamEntry = App.UI.DOM.appendNewElement("div", el, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", madamEntry); - madamEntry.append(App.SlaveAssignment.saSlaveName(madam), `is serving as the Madam.`); + madamEntry.append(App.SlaveAssignment.saSlaveIntro(madam, `is serving as the Madam.`)); madamEntry.append(App.SlaveAssignment.standardSlaveReport(madam, false)); App.SlaveAssignment.appendSlaveArt(artSpan, madam); } else { @@ -328,13 +328,7 @@ App.EndWeek.brothelReport = function() { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - slaveEntry.append(`is working out of ${V.brothelName}.`); - } + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is working out of ${V.brothelName}.`)); App.Events.addNode( slaveEntry, @@ -349,7 +343,6 @@ App.EndWeek.brothelReport = function() { App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { // discard return values silently - App.SlaveAssignment.choosesOwnJob(slave); App.SlaveAssignment.whore(slave); App.SlaveAssignment.standardSlaveReport(slave, true); } diff --git a/src/endWeek/reports/cellblockReport.js b/src/endWeek/reports/cellblockReport.js index 802e2e182c0..131fad1448a 100644 --- a/src/endWeek/reports/cellblockReport.js +++ b/src/endWeek/reports/cellblockReport.js @@ -182,7 +182,7 @@ App.EndWeek.cellblockReport = function() { if (V.showEWD !== 0) { const wardenessEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); const artSpan = App.UI.DOM.appendNewElement("span", wardenessEntry); - wardenessEntry.append(App.SlaveAssignment.saSlaveName(slave), `is serving as the Wardeness in ${V.cellblockName}.`); + wardenessEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is serving as the Wardeness in ${V.cellblockName}.`)); wardenessEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { @@ -295,13 +295,7 @@ App.EndWeek.cellblockReport = function() { if (V.showEWD) { const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - slaveEntry.append(`is confined in ${V.cellblockName}.`); - } + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is confined in ${V.cellblockName}.`)); confinedResults = App.SlaveAssignment.stayConfined(slave); App.Events.addNode(slaveEntry, [He, confinedResults.text], "div", "indent"); @@ -313,7 +307,6 @@ App.EndWeek.cellblockReport = function() { App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { // discard return values silently - App.SlaveAssignment.choosesOwnJob(slave); confinedResults = App.SlaveAssignment.stayConfined(slave); if (confinedResults.broken) { brokenSlaves++; diff --git a/src/endWeek/reports/clinicReport.js b/src/endWeek/reports/clinicReport.js index e6b9f9a1d60..884d2836e15 100644 --- a/src/endWeek/reports/clinicReport.js +++ b/src/endWeek/reports/clinicReport.js @@ -258,7 +258,7 @@ App.EndWeek.clinicReport = function() { if (V.showEWD !== 0) { const nurseEntry = App.UI.DOM.appendNewElement("div", frag, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", nurseEntry); - nurseEntry.append(App.SlaveAssignment.saSlaveName(S.Nurse), `is serving as the clinical nurse.`); + nurseEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is serving as the clinical nurse.`)); nurseEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { @@ -405,13 +405,7 @@ App.EndWeek.clinicReport = function() { if (V.showEWD !== 0) { const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - slaveEntry.append(`is receiving treatment in ${V.clinicName}.`); - } + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is receiving treatment in ${V.clinicName}.`)); let r = []; r.push(He, App.SlaveAssignment.rest(slave)); @@ -423,7 +417,6 @@ App.EndWeek.clinicReport = function() { App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { // discard return values silently - App.SlaveAssignment.choosesOwnJob(slave); App.SlaveAssignment.rest(slave); App.SlaveAssignment.standardSlaveReport(slave, true); } diff --git a/src/endWeek/reports/clubReport.js b/src/endWeek/reports/clubReport.js index ed32c689c12..c491aa5b064 100644 --- a/src/endWeek/reports/clubReport.js +++ b/src/endWeek/reports/clubReport.js @@ -147,7 +147,7 @@ App.EndWeek.clubReport = function() { if (V.showEWD !== 0) { const DJEntry = App.UI.DOM.appendNewElement("div", el, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", DJEntry); - DJEntry.append(App.SlaveAssignment.saSlaveName(dj), `is performing as the DJ in ${V.clubName}.`); + DJEntry.append(App.SlaveAssignment.saSlaveIntro(dj, `is performing as the DJ in ${V.clubName}.`)); DJEntry.append(App.SlaveAssignment.standardSlaveReport(dj, false)); App.SlaveAssignment.appendSlaveArt(artSpan, dj); } else { @@ -187,13 +187,7 @@ App.EndWeek.clubReport = function() { if (V.showEWD) { const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - slaveEntry.append(`is serving in ${V.clubName}.`); - } + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is serving in ${V.clubName}.`)); const {He} = getPronouns(slave); App.Events.addNode( @@ -209,7 +203,6 @@ App.EndWeek.clubReport = function() { App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { // discard return values silently - App.SlaveAssignment.choosesOwnJob(slave); App.SlaveAssignment.serveThePublic(slave); App.SlaveAssignment.standardSlaveReport(slave, true); } diff --git a/src/endWeek/reports/dairyReport.js b/src/endWeek/reports/dairyReport.js index 8ae82f326f4..58793f04762 100644 --- a/src/endWeek/reports/dairyReport.js +++ b/src/endWeek/reports/dairyReport.js @@ -355,7 +355,7 @@ App.EndWeek.dairyReport = function() { if (V.showEWD !== 0) { const milkMaidEntry = App.UI.DOM.appendNewElement("div", el, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", milkMaidEntry); - milkMaidEntry.append(App.SlaveAssignment.saSlaveName(slave), `is serving as your Milkmaid.`); + milkMaidEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is serving as your Milkmaid.`)); milkMaidEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { @@ -455,13 +455,7 @@ App.EndWeek.dairyReport = function() { if (V.showEWD !== 0) { const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - slaveEntry.append(`is serving as a cow in ${V.dairyName}.`); - } + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is serving as a cow in ${V.dairyName}.`)); const {He} = getPronouns(slave); App.Events.addNode( @@ -477,7 +471,6 @@ App.EndWeek.dairyReport = function() { App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { // discard return values silently - App.SlaveAssignment.choosesOwnJob(slave); App.SlaveAssignment.standardSlaveReport(slave, true); } diff --git a/src/endWeek/reports/farmyardReport.js b/src/endWeek/reports/farmyardReport.js index b53c30f4cc2..6ea06f82aa0 100644 --- a/src/endWeek/reports/farmyardReport.js +++ b/src/endWeek/reports/farmyardReport.js @@ -29,7 +29,7 @@ App.EndWeek.farmyardReport = function farmyardReport() { if (V.showEWD) { const farmerEntry = App.UI.DOM.appendNewElement("div", frag, null, ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", farmerEntry); - App.Events.addNode(farmerEntry, [App.SlaveAssignment.saSlaveName(Farmer), `is serving as the Farmer.`, farmerText()]); + App.Events.addNode(farmerEntry, [App.SlaveAssignment.saSlaveIntro(Farmer, `is serving as the Farmer.`), farmerText()]); farmerEntry.append(App.SlaveAssignment.standardSlaveReport(Farmer)); App.SlaveAssignment.appendSlaveArt(artSpan, Farmer); } else { @@ -52,12 +52,7 @@ App.EndWeek.farmyardReport = function farmyardReport() { if (V.showEWD) { const slaveEntry = App.UI.DOM.appendNewElement("div", frag, null, ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - slaveEntry.append(`is working out of ${V.farmyardName}.`); - } + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is working out of ${V.farmyardName}.`)); farmhandLivingRules(slave); farmhandHealth(slave); diff --git a/src/endWeek/reports/masterSuiteReport.js b/src/endWeek/reports/masterSuiteReport.js index bae08cbd9c5..ee505e1731f 100644 --- a/src/endWeek/reports/masterSuiteReport.js +++ b/src/endWeek/reports/masterSuiteReport.js @@ -10,7 +10,8 @@ App.EndWeek.masterSuiteReport = function() { const frag = new DocumentFragment(); let r = []; const {He, he, his, him, himself} = getPronouns(S.Concubine); - r.push(App.SlaveAssignment.saSlaveName(S.Concubine), `is serving as your concubine in ${V.masterSuiteName}. More than any other slave, ${his} sexual brilliance and physical appeal are <span class="green">critical</span> to your reputation.`); + r.push(App.SlaveAssignment.saSlaveIntro(S.Concubine, `is serving as your concubine in ${V.masterSuiteName}.`)); + r.push(`More than any other slave, ${his} sexual brilliance and physical appeal are <span class="green">critical</span> to your reputation.`); if (S.Concubine.prestigeDesc === "You bankrupted and enslaved $him in revenge for $his part in the attack on your arcology by the Daughters of Liberty." && S.Concubine.newGamePlus === 0) { r.push(`${He} was once your rival, and your relationship is widely thought to be <span class="green">the perfect modern romance.</span>`); @@ -100,12 +101,8 @@ App.EndWeek.masterSuiteReport = function() { */ function nonConcubineText(slave) { const frag = new DocumentFragment(); - frag.append(App.SlaveAssignment.saSlaveName(slave)); - if (slave.choosesOwnAssignment) { - $(frag).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - frag.append(`sees to your pleasure in ${V.masterSuiteName}.`); - } + frag.append(App.SlaveAssignment.saSlaveIntro(slave, `sees to your pleasure in ${V.masterSuiteName}.`)); + /* Perform facility based rule changes - FIXME - dev/trust living condition changes probably should be in saRules; there's no text reporting these changes here */ if (V.masterSuiteUpgradeLuxury === 1) { slave.rules.living = "luxurious"; @@ -348,7 +345,6 @@ App.EndWeek.masterSuiteReport = function() { ], "div", ["indent"]); } else { // discard return values silently - App.SlaveAssignment.choosesOwnJob(slave); App.SlaveAssignment.pleaseYou(slave); if (V.servantMilkers === 1 && slave.lactation > 0 && slave.fuckdoll === 0 && slave.fetish !== "mindbroken" && canMove(slave) && slave.intelligence + slave.intelligenceImplant >= -90) { App.SlaveAssignment.getMilked(slave, 0.25); diff --git a/src/endWeek/reports/nurseryReport.js b/src/endWeek/reports/nurseryReport.js index 1fdbb61619d..0b7690e487f 100644 --- a/src/endWeek/reports/nurseryReport.js +++ b/src/endWeek/reports/nurseryReport.js @@ -138,7 +138,7 @@ App.Facilities.Nursery.nurseryReport = function nurseryReport() { if (V.showEWD) { const matronEntry = App.UI.DOM.appendNewElement("div", frag, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", matronEntry); - App.Events.addNode(matronEntry, [App.SlaveAssignment.saSlaveName(slave), `is serving as the Madam.`, matronText()]); + App.Events.addNode(matronEntry, [App.SlaveAssignment.saSlaveIntro(slave, `is serving as your Matron.`), matronText()]); matronEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { @@ -194,13 +194,7 @@ App.Facilities.Nursery.nurseryReport = function nurseryReport() { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - slaveEntry.append(`is working out of ${V.nurseryName}.`); - } + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is working out of ${V.nurseryName}.`)); App.Events.addNode(slaveEntry, [He, App.SlaveAssignment.nanny(slave)], "div", ["indent"]); slaveEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); diff --git a/src/endWeek/reports/penthouseReport.js b/src/endWeek/reports/penthouseReport.js index 4a0fcd51b86..7cc99c17e45 100644 --- a/src/endWeek/reports/penthouseReport.js +++ b/src/endWeek/reports/penthouseReport.js @@ -32,9 +32,9 @@ App.EndWeek.penthouseReport = function() { if (penthouseArtRenderer) { App.UI.DOM.drawOneSlaveRight(hgSlaveEntry, hgSlave, penthouseArtRenderer); } - r.push(App.SlaveAssignment.saSlaveName(hgSlave)); + r.push(App.SlaveAssignment.saSlaveIntro(hgSlave, '')); if (hgSlave.choosesOwnAssignment) { - r.push(App.SlaveAssignment.choosesOwnJob(hgSlave), ` ${He2}`); + r.push(He2); // starts new sentence } r.push(App.SlaveAssignment.liveWithHG(hgSlave)); @@ -62,10 +62,9 @@ App.EndWeek.penthouseReport = function() { let r = []; let milkResults; - r.push(App.SlaveAssignment.saSlaveName(slave)); + r.push(App.SlaveAssignment.saSlaveIntro(slave, '')); if (slave.choosesOwnAssignment) { - r.push(App.SlaveAssignment.choosesOwnJob(slave)); - r.push(He); + r.push(He); // starts new sentence } switch (slave.assignment) { diff --git a/src/endWeek/reports/schoolroomReport.js b/src/endWeek/reports/schoolroomReport.js index 8f1ea58b847..6ec84de5bba 100644 --- a/src/endWeek/reports/schoolroomReport.js +++ b/src/endWeek/reports/schoolroomReport.js @@ -155,7 +155,7 @@ App.EndWeek.schoolroomReport = function() { if (V.showEWD !== 0) { const schoolteacherEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); const artSpan = App.UI.DOM.appendNewElement("span", schoolteacherEntry); - schoolteacherEntry.append(App.SlaveAssignment.saSlaveName(slave), `is serving as your Schoolteacher.`); + schoolteacherEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is serving as your Schoolteacher.`)); App.Events.addNode(schoolteacherEntry, [schoolteacherText()], "div", ["indent"]); schoolteacherEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); App.SlaveAssignment.appendSlaveArt(artSpan, slave); @@ -235,26 +235,19 @@ App.EndWeek.schoolroomReport = function() { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - let leaderTraining = ''; - for (const role of Object.keys(V.slaveTutor)) { - if (V.slaveTutor[role].includes(slave.ID)) { - leaderTraining = ` on being a ${role}`; break; - } + let leaderTraining = ''; + for (const role of Object.keys(V.slaveTutor)) { + if (V.slaveTutor[role].includes(slave.ID)) { + leaderTraining = ` on being a ${role}`; break; } - slaveEntry.append(`is studying in ${V.schoolroomName}${leaderTraining}.`); } + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is studying in ${V.schoolroomName}${leaderTraining}.`)); App.Events.addNode(slaveEntry, [He, App.SlaveAssignment.takeClasses(slave)], "div", ["indent"]); slaveEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { // discard return values silently - App.SlaveAssignment.choosesOwnJob(slave); App.SlaveAssignment.takeClasses(slave); App.SlaveAssignment.standardSlaveReport(slave, true); } diff --git a/src/endWeek/reports/servantsQuartersReport.js b/src/endWeek/reports/servantsQuartersReport.js index 5c5730bf077..44bf43b1e08 100644 --- a/src/endWeek/reports/servantsQuartersReport.js +++ b/src/endWeek/reports/servantsQuartersReport.js @@ -243,7 +243,7 @@ App.EndWeek.servantsQuartersReport = function() { if (V.showEWD) { const stewardessEntry = App.UI.DOM.appendNewElement("div", frag, '', "slave-report"); const artSpan = App.UI.DOM.appendNewElement("span", stewardessEntry); - stewardessEntry.append(App.SlaveAssignment.saSlaveName(slave), `is serving as your Stewardess.`); + stewardessEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is serving as your Stewardess.`)); App.Events.addNode(stewardessEntry, [stewardessText()], "div", ["indent"]) stewardessEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); App.SlaveAssignment.appendSlaveArt(artSpan, slave); @@ -317,12 +317,7 @@ App.EndWeek.servantsQuartersReport = function() { const {He} = getPronouns(slave); const slaveEntry = App.UI.DOM.appendNewElement("div", frag, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - slaveEntry.append(`is working out of ${V.servantsQuartersName}.`); - } + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is working out of ${V.servantsQuartersName}.`)); App.Events.addNode(slaveEntry, [He, App.SlaveAssignment.servant(slave, stewardessBonus)], "div", ["indent"]); if (V.servantMilkers === 1 && slave.lactation > 0) { const milkResults = App.SlaveAssignment.getMilked(slave, 0.5); @@ -334,7 +329,6 @@ App.EndWeek.servantsQuartersReport = function() { App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { // discard return values silently - App.SlaveAssignment.choosesOwnJob(slave); App.SlaveAssignment.servant(slave, stewardessBonus); if (V.servantMilkers === 1 && slave.lactation > 0) { const milkResults = App.SlaveAssignment.getMilked(slave, 0.5); diff --git a/src/endWeek/reports/spaReport.js b/src/endWeek/reports/spaReport.js index 7bf56b54094..57c54fe61e1 100644 --- a/src/endWeek/reports/spaReport.js +++ b/src/endWeek/reports/spaReport.js @@ -293,7 +293,7 @@ App.EndWeek.spaReport = function() { if (V.showEWD !== 0) { const attendantEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report"); const artSpan = App.UI.DOM.appendNewElement("span", attendantEntry); - attendantEntry.append(App.SlaveAssignment.saSlaveName(slave), `is serving as the Attendant in ${V.spaName}.`); + attendantEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is serving as the Attendant in ${V.spaName}.`)); attendantEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false)); App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { @@ -372,13 +372,7 @@ App.EndWeek.spaReport = function() { if (V.showEWD !== 0) { const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', ["slave-report"]); const artSpan = App.UI.DOM.appendNewElement("span", slaveEntry); - slaveEntry.append(App.SlaveAssignment.saSlaveName(slave)); - - if (slave.choosesOwnAssignment) { - $(slaveEntry).append(App.SlaveAssignment.choosesOwnJob(slave)); - } else { - slaveEntry.append(`is resting in ${V.spaName}.`); - } + slaveEntry.append(App.SlaveAssignment.saSlaveIntro(slave, `is resting in ${V.spaName}.`)); r = []; r.push(He); @@ -400,7 +394,6 @@ App.EndWeek.spaReport = function() { App.SlaveAssignment.appendSlaveArt(artSpan, slave); } else { // discard return values silently - App.SlaveAssignment.choosesOwnJob(slave); App.SlaveAssignment.standardSlaveReport(slave, true); } } diff --git a/src/endWeek/saChoosesOwnJob.js b/src/endWeek/saChoosesOwnJob.js index 4f8c9677f8f..48d99989e35 100644 --- a/src/endWeek/saChoosesOwnJob.js +++ b/src/endWeek/saChoosesOwnJob.js @@ -1,4 +1,6 @@ /** + * This function is the old "first pass", which actually picks the job. + * The slaves' reasoning is saved in saVars for later use. * @param {App.Entity.SlaveState} slave * @returns {string} */ @@ -21,27 +23,25 @@ App.SlaveAssignment.choosesOwnJob = function saChoosesOwnJob(slave) { He, he, him, his, himself, girl, } = getPronouns(slave); - /* - "I suspect something might be awry with that too" - Pregmodder - 2021-09-26 - */ - if (slave.choosesOwnAssignment === 0 || slave.fuckdoll > 0 || slave.fetish === Fetish.MINDBROKEN) { - // nothing to do - } else if (slave.choosesOwnAssignment === 2) { - // second pass happens visibly during weekly report for the location where this slave decided to go (or stay) - // display text but don't change assignment (already done) - r.push(V.choosesOwnAssignmentText[slave.ID]); - delete V.choosesOwnAssignmentText[slave.ID]; - slave.choosesOwnAssignment = 1; - // continue cycle for next week + if (slave.fuckdoll > 0 || slave.fetish === Fetish.MINDBROKEN) { + // deal with slaves who are incapable of actually choosing their own assignment + r.push(`was assigned to ${slave.assignment}. ${He}'s allowed to choose ${his} own job, but is <span style="warning">mentally incapable</span> of doing so,`); + if (slave.assignment === Job.CHOICE) { + r.push(`and <span class="job change">rests for the week</span> instead.`); + removeJob(slave, slave.assignment); + } else { + r.push(`and just keeps doing the same thing this week.`); + } + slave.choosesOwnAssignment = 0; + App.EndWeek.saVars.choosesOwnAssignmentText[slave.ID] = r.join(' '); } else { - // first pass happens silently before all reports: give stats bonus, construct decision string for display during second pass, actually change assignment + // give stats bonus, construct decision string for display during slave report, and actually change the assignment slave.devotion++; slave.trust++; - V.choosesOwnAssignmentText[slave.ID] = jobSelection(slave); + App.EndWeek.saVars.choosesOwnAssignmentText[slave.ID] = jobSelection(slave); } - return r.join(" "); - + return; /** * @param {App.Entity.SlaveState} slave @@ -554,8 +554,7 @@ App.SlaveAssignment.choosesOwnJob = function saChoosesOwnJob(slave) { } } - slave.choosesOwnAssignment = 2; - // ready for second pass + slave.choosesOwnAssignment = 1; // removeJob may have cleared this, but we want it to stay return choice.join(" "); } diff --git a/src/endWeek/saSharedVariables.js b/src/endWeek/saSharedVariables.js index 3b7255854e8..c44ea157ee4 100644 --- a/src/endWeek/saSharedVariables.js +++ b/src/endWeek/saSharedVariables.js @@ -38,7 +38,12 @@ App.EndWeek.SASharedVariables = class { * @type {Set<number>} * @see App.EndWeek.getFLSex */ - this.flSex = new Set(); + this.flSex = new Set(); + /** + * Assignments texts for slaves who choose their own assignment, set in App.SlaveAssignment.choosesOwnJob() + * @type {Object.<number, string>} + */ + this.choosesOwnAssignmentText = {}; } /** Compute shared subslave ratio (subslaves per ordinary slave) */ diff --git a/src/endWeek/slaveAssignmentReport.js b/src/endWeek/slaveAssignmentReport.js index 501ff08f446..22c821c75c6 100644 --- a/src/endWeek/slaveAssignmentReport.js +++ b/src/endWeek/slaveAssignmentReport.js @@ -38,7 +38,7 @@ App.EndWeek.slaveAssignmentReport = function() { // fire unqualified special slaves _ensureEmployeeMeetsJobRequirements(slave); - // first pass on choosesOwnJob is silent + // allow slaves to choose their jobs for later output if (slave.choosesOwnAssignment === 1) { App.SlaveAssignment.choosesOwnJob(slave); } diff --git a/src/endWeek/standardSlaveReport.js b/src/endWeek/standardSlaveReport.js index 370f6dd48a7..11250a4184d 100644 --- a/src/endWeek/standardSlaveReport.js +++ b/src/endWeek/standardSlaveReport.js @@ -61,3 +61,19 @@ App.SlaveAssignment.saSlaveName = function(slave) { ); return frag; }; + +/** + * Render linkified slave name with job assignment statement. + * @param {App.Entity.SlaveState} slave + * @param {string} def - this statement will be used if the slave ISN'T choosing her own job. Generally, something like "is <verb>ing in <facility>." Note that penthouse jobs do not have a default job statement, instead leading directly into the job text if the slave is not choosing her own job. + */ +App.SlaveAssignment.saSlaveIntro = function(slave, def) { + const frag = this.saSlaveName(slave); + const choice = App.EndWeek.saVars.choosesOwnAssignmentText[slave.ID]; + if (slave.choosesOwnAssignment && choice) { + $(frag).append(choice); + } else { + $(frag).append(def); + } + return frag; +} -- GitLab