From ee669c557fb15ec674421bdca1d6b2fdeb36c9b8 Mon Sep 17 00:00:00 2001 From: Svornost <11434-svornost@users.noreply.gitgud.io> Date: Wed, 3 Mar 2021 19:39:03 -0800 Subject: [PATCH] Apply PC career bonus only after all starting girls have been created. --- devTools/types/FC/gameState.d.ts | 4 +- src/events/intro/acquisition.js | 6 + src/npc/startingGirls/commitStartingGirl.tw | 1 - src/npc/startingGirls/startingGirls.js | 276 +++++++++--------- src/npc/startingGirls/startingGirlsPassage.js | 8 +- 5 files changed, 152 insertions(+), 143 deletions(-) diff --git a/devTools/types/FC/gameState.d.ts b/devTools/types/FC/gameState.d.ts index 3d16657eefb..cd327f88b18 100644 --- a/devTools/types/FC/gameState.d.ts +++ b/devTools/types/FC/gameState.d.ts @@ -157,7 +157,9 @@ declare namespace FC { AS: number; seed?: number; - applyCareerBonus?: Bool; + applyCareerBonus?: 0 | 1; + careerBonusNeeded?: number[]; + originOverride?: 0 | 1; prostheticsConfig?: string; nationalitiescheck?: object; cellPath?: number[]; diff --git a/src/events/intro/acquisition.js b/src/events/intro/acquisition.js index ae3caef2448..8438577228b 100644 --- a/src/events/intro/acquisition.js +++ b/src/events/intro/acquisition.js @@ -5,6 +5,12 @@ App.Intro.acquisition = function() { const r = []; + if (_.isArray(V.careerBonusNeeded)) { + V.slaves.filter(s => V.careerBonusNeeded.includes(s.ID)).forEach(App.StartingGirls.applyCareerBonus); + delete V.careerBonusNeeded; + delete V.applyCareerBonus; + } + if (V.freshPC === 1 || V.saveImported === 0) { PCSetup(); } diff --git a/src/npc/startingGirls/commitStartingGirl.tw b/src/npc/startingGirls/commitStartingGirl.tw index 5a9c3c4ce7d..c2c4b16801b 100644 --- a/src/npc/startingGirls/commitStartingGirl.tw +++ b/src/npc/startingGirls/commitStartingGirl.tw @@ -19,7 +19,6 @@ <<if $cash < minimumSlaveCost()>><<goto "Acquisition">><</if>> <<run cashX(forceNeg(startingSlaveCost($activeSlave)), "slaveTransfer", $activeSlave)>> -<<run App.StartingGirls.applyCareerBonus(getSlave($activeSlave.ID))>> <<= SlaveFullName($activeSlave)>> has been added to your starting stable of slaves. You now have <<print cashFormat($cash)>> remaining. <br> diff --git a/src/npc/startingGirls/startingGirls.js b/src/npc/startingGirls/startingGirls.js index 4c0d092eb2b..ce2ca87f17c 100644 --- a/src/npc/startingGirls/startingGirls.js +++ b/src/npc/startingGirls/startingGirls.js @@ -154,97 +154,100 @@ App.StartingGirls.applyCareerBonus = function(slave) { } } - if (V.applyCareerBonus) { - switch (V.PC.career) { - case "capitalist": - case "entrepreneur": - case "business kid": - if (slave.skill.whoring < 60) { - slave.skill.whoring += 20; - } - break; - case "mercenary": - case "recruit": - case "child soldier": - if (slave.devotion > 20) { - slave.trust += 10; - } else { - slave.trust -= 10; - } - break; - case "slaver": - case "slave overseer": - case "slave tender": - slave.devotion += 10; - break; - case "medicine": - case "medical assistant": - case "nurse": - slave.boobs += 600; - slave.boobsImplant += 600; - slave.boobsImplantType = "normal"; - slave.butt += 2; - slave.buttImplant += 2; - slave.buttImplantType = "normal"; - slave.lips += 10; - slave.lipsImplant += 10; - slave.waist = -55; - break; - case "celebrity": - case "rising star": - case "child star": - if (slave.skill.entertainment < 60) { - slave.skill.entertainment += 20; - } - break; - case "servant": - case "handmaiden": - case "child servant": + switch (V.PC.career) { + case "capitalist": + case "entrepreneur": + case "business kid": + if (slave.skill.whoring < 60) { + slave.skill.whoring += 20; + } + break; + case "mercenary": + case "recruit": + case "child soldier": + if (slave.devotion > 20) { slave.trust += 10; - slave.devotion += 10; - break; - case "gang": - case "hoodlum": - case "street urchin": - improveCondition(slave, 5); - if (slave.skill.combat < 1) { - slave.skill.combat += 1; - } - break; - case "BlackHat": - case "hacker": - case "script kiddy": - slave.intelligence += 40; - if (slave.intelligence > 100) { - slave.intelligence = 100; - } - break; - case "escort": - case "prostitute": - case "child prostitute": - if (slave.skill.entertainment < 60) { - slave.skill.entertainment += 20; - } - if (slave.skill.whoring < 60) { - slave.skill.whoring += 20; - } - applySexSkillBonus(); - break; - case "wealth": - case "trust fund": - case "rich kid": - applySexSkillBonus(); - break; - default: - slave.devotion += 10; - if (slave.skill.whoring < 60) { - slave.skill.whoring += 20; - } - if (slave.skill.entertainment < 60) { - slave.skill.entertainment += 20; - } - applySexSkillBonus(); - } + } else { + slave.trust -= 10; + } + break; + case "slaver": + case "slave overseer": + case "slave tender": + slave.devotion += 10; + break; + case "medicine": + case "medical assistant": + case "nurse": + slave.boobs += 600; + slave.boobsImplant += 600; + slave.boobsImplantType = "normal"; + slave.butt += 2; + slave.buttImplant += 2; + slave.buttImplantType = "normal"; + slave.lips += 10; + slave.lipsImplant += 10; + slave.waist = -55; + break; + case "celebrity": + case "rising star": + case "child star": + if (slave.skill.entertainment < 60) { + slave.skill.entertainment += 20; + } + break; + case "servant": + case "handmaiden": + case "child servant": + slave.trust += 10; + slave.devotion += 10; + break; + case "gang": + case "hoodlum": + case "street urchin": + improveCondition(slave, 5); + if (slave.skill.combat < 1) { + slave.skill.combat += 1; + } + break; + case "BlackHat": + case "hacker": + case "script kiddy": + slave.intelligence += 40; + if (slave.intelligence > 100) { + slave.intelligence = 100; + } + break; + case "escort": + case "prostitute": + case "child prostitute": + if (slave.skill.entertainment < 60) { + slave.skill.entertainment += 20; + } + if (slave.skill.whoring < 60) { + slave.skill.whoring += 20; + } + applySexSkillBonus(); + break; + case "wealth": + case "trust fund": + case "rich kid": + applySexSkillBonus(); + break; + case "engineer": + case "construction": + case "worksite helper": + // slave bonus disabled for these careers + break; + default: + slave.devotion += 10; + if (slave.skill.whoring < 60) { + slave.skill.whoring += 20; + } + if (slave.skill.entertainment < 60) { + slave.skill.entertainment += 20; + } + applySexSkillBonus(); } }; @@ -1469,62 +1472,61 @@ App.StartingGirls.skills = function(slave, cheat = false) { */ App.StartingGirls.finalize = function(slave) { const el = new DocumentFragment(); - const {him} = getPronouns(slave); const cost = startingSlaveCost(slave); - if (V.cash >= cost) { - let r = []; - if (V.PC.career !== "engineer" && V.PC.career !== "construction" && V.PC.career !== "worksite helper") { - r.push( - App.UI.DOM.link( - "Add this slave", - () => { - V.applyCareerBonus = 1; - }, - [], - "Commit Starting Girl" - ) - ); - r.push(`This will apply your <span class="springgreen">career bonus</span> to ${him}:`); - if (V.PC.career === "capitalist" || V.PC.career === "entrepreneur" || V.PC.career === "business kid") { - r.push(`one free level of <span class="cyan">prostitution skill.</span>`); - } else if (V.PC.career === "mercenary" || V.PC.career === "recruit" || V.PC.career === "child soldier") { - if (slave.devotion > 20) { - r.push(`<span class="mediumaquamarine">+10 trust.</span>`); - } else { - r.push(`<span class="gold">+10 fear.</span>`); - } - } else if (V.PC.career === "slaver" || V.PC.career === "slave overseer" || V.PC.career === "slave tender") { - r.push(`<span class="hotpink">+10 devotion.</span>`); - } else if (V.PC.career === "medicine" || V.PC.career === "medical assistant" || V.PC.career === "nurse") { - r.push(`free <span class="lime">basic implants.</span>`); - } else if (V.PC.career === "celebrity" || V.PC.career === "rising star" || V.PC.career === "child star") { - r.push(`one free level of <span class="cyan">entertainment skill.</span>`); - } else if (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute") { - r.push(`two free levels of <span class="cyan">sex skills,</span> one free level of <span class="cyan">prostitution skill,</span> and one free level of <span class="cyan">entertainment skill.</span>`); - } else if (V.PC.career === "servant" || V.PC.career === "handmaiden" || V.PC.career === "child servant") { - r.push(`<span class="mediumaquamarine">+10 trust</span> and <span class="hotpink">+10 devotion.</span>`); - } else if (V.PC.career === "gang" || V.PC.career === "hoodlum" || V.PC.career === "street urchin") { - r.push(`<span class="green">+5 health</span> and one free level of <span class="cyan">combat skill.</span>`); - } else if (V.PC.career === "wealth" || V.PC.career === "trust fund" || V.PC.career === "rich kid") { - r.push(`two free levels of <span class="cyan">sex skills.</span>`); - } else if (V.PC.career === "BlackHat" || V.PC.career === "hacker" || V.PC.career === "script kiddy") { - r.push(`one free level of <span class="cyan">intelligence.</span>`); - } else { - r.push(`<span class="hotpink">+10 devotion,</span> one free level of <span class="cyan">prostitution skill</span> and <span class="cyan">entertainment skill,</span> and two free levels of <span class="cyan">sex skills.</span>`); - } - App.Events.addNode(el, r, "div", "indent"); + let r = []; + r.push(`If applied, your <span class="springgreen">career bonus</span> will give this slave:`); + if (V.PC.career === "capitalist" || V.PC.career === "entrepreneur" || V.PC.career === "business kid") { + r.push(`one free level of <span class="cyan">prostitution skill.</span>`); + } else if (V.PC.career === "mercenary" || V.PC.career === "recruit" || V.PC.career === "child soldier") { + if (slave.devotion > 20) { + r.push(`<span class="mediumaquamarine">+10 trust.</span>`); + } else { + r.push(`<span class="gold">+10 fear.</span>`); } + } else if (V.PC.career === "slaver" || V.PC.career === "slave overseer" || V.PC.career === "slave tender") { + r.push(`<span class="hotpink">+10 devotion.</span>`); + } else if (V.PC.career === "medicine" || V.PC.career === "medical assistant" || V.PC.career === "nurse") { + r.push(`free <span class="lime">basic implants.</span>`); + } else if (V.PC.career === "celebrity" || V.PC.career === "rising star" || V.PC.career === "child star") { + r.push(`one free level of <span class="cyan">entertainment skill.</span>`); + } else if (V.PC.career === "escort" || V.PC.career === "prostitute" || V.PC.career === "child prostitute") { + r.push(`two free levels of <span class="cyan">sex skills,</span> one free level of <span class="cyan">prostitution skill,</span> and one free level of <span class="cyan">entertainment skill.</span>`); + } else if (V.PC.career === "servant" || V.PC.career === "handmaiden" || V.PC.career === "child servant") { + r.push(`<span class="mediumaquamarine">+10 trust</span> and <span class="hotpink">+10 devotion.</span>`); + } else if (V.PC.career === "gang" || V.PC.career === "hoodlum" || V.PC.career === "street urchin") { + r.push(`<span class="green">+5 health</span> and one free level of <span class="cyan">combat skill.</span>`); + } else if (V.PC.career === "wealth" || V.PC.career === "trust fund" || V.PC.career === "rich kid") { + r.push(`two free levels of <span class="cyan">sex skills.</span>`); + } else if (V.PC.career === "BlackHat" || V.PC.career === "hacker" || V.PC.career === "script kiddy") { + r.push(`one free level of <span class="cyan">intelligence.</span>`); + } else { + r.push(`<span class="hotpink">+10 devotion,</span> one free level of <span class="cyan">prostitution skill</span> and <span class="cyan">entertainment skill,</span> and two free levels of <span class="cyan">sex skills.</span>`); + } + App.Events.addNode(el, r, "div"); + + const options = new App.UI.OptionsGroup(); + options.addOption("Apply Career bonus:", "applyCareerBonus", V) + .addValue("Enable", 1).on() + .addValue("Disable", 0).off(); + el.appendChild(options.render()); + + if (V.cash >= cost) { App.UI.DOM.appendNewElement("div", el, App.UI.DOM.link( - (V.PC.career !== "engineer" && V.PC.career !== "construction" && V.PC.career !== "worksite helper") ? "Add this slave without career bonus" : "Add this slave", + "Add this slave", () => { - V.applyCareerBonus = 0; + if (V.applyCareerBonus) { + if (_.isArray(V.careerBonusNeeded)) { + V.careerBonusNeeded.push(slave.ID); + } else { + V.careerBonusNeeded = [slave.ID]; + } + } }, [], "Commit Starting Girl" - ), - "indent" + ) ); } else { App.UI.DOM.appendNewElement("p", el, `Cannot afford the cost of ${cashFormat(cost)}`, "red"); diff --git a/src/npc/startingGirls/startingGirlsPassage.js b/src/npc/startingGirls/startingGirlsPassage.js index 44e8d4dbf3c..87fefbfb06b 100644 --- a/src/npc/startingGirls/startingGirlsPassage.js +++ b/src/npc/startingGirls/startingGirlsPassage.js @@ -1,6 +1,7 @@ App.StartingGirls.passage = function() { - if (!V.activeSlave) { - V.activeSlave = V.activeSlave ||App.StartingGirls.generate(); + V.activeSlave = V.activeSlave || App.StartingGirls.generate(); + if (!jsDef(V.applyCareerBonus)) { + V.applyCareerBonus = 1; } const el = new DocumentFragment(); let r = []; @@ -317,7 +318,6 @@ App.StartingGirls.passage = function() { }; App.UI.DOM.appendNewElement("div", el, App.UI.DOM.combineNodes(`Relative of slave: `, select)); const linkDiv = App.UI.DOM.appendNewElement("div", el, ``); - App.UI.DOM.appendNewElement("div", el, "Note: finalized slaves have already had your career bonuses applied, and these will transfer to the generated relative; remove them if you don't want to be charged for them.", "note"); App.UI.DOM.appendNewElement("div", el, "Warning: related slaves will influence each others' opinion of you, and may become difficult to control if not properly broken.", "note"); App.UI.DOM.appendNewElement("div", el, App.UI.DOM.passageLink("Back", "Starting Girls")); jQuery(headerLinks).empty().append(el); @@ -360,7 +360,7 @@ App.StartingGirls.passage = function() { App.StartingGirls.applyPlayerOrigin(V.activeSlave); } - App.UI.DOM.appendNewElement("h2", el, "You are customizing this slave:"); + App.UI.DOM.appendNewElement("h2", el, "You are customizing this slave"); el.append(App.Desc.longSlave(V.activeSlave, {market: "generic"})); // TODO: move me -- GitLab