diff --git a/src/SecExp/js/secExp.js b/src/SecExp/js/secExp.js index 3818dcc0ed090fef530916d5823f1edab76ff24a..d3cff6963bb24c358c1b27df25683eed4981817c 100644 --- a/src/SecExp/js/secExp.js +++ b/src/SecExp/js/secExp.js @@ -408,9 +408,11 @@ App.SecExp.Check = (function() { V.SecExp = {settings:{show:V.SecExp.settings.show}}; } + delete V.SecExp.army; + if (V.secExpEnabled > 0) { V.SecExp.core = V.SecExp.core || {}; - V.SecExp.army = V.SecExp.army || {}; + V.SecExp.core.trade = V.SecExp.core.trade || 0; if (passage() === "Acquisition" || V.SecExp.core.trade === 0) { const V = State.variables; @@ -462,58 +464,54 @@ App.SecExp.Check = (function() { V.SecExp.settings.battle.enabled = V.battlesEnabled; delete V.battlesEnabled; } - delete V.SecExp.battle; - V.SecExp.settings.battle.major = V.SecExp.settings.battle.major || {}; - V.SecExp.settings.battle.frequency = V.SecExp.settings.battle.frequency || 1; - if (jsDef(V.battleFrequency)) { - V.SecExp.settings.battle.frequency = V.battleFrequency; - delete V.battleFrequency; - } - V.SecExp.settings.battle.force = V.SecExp.settings.battle.force || 0; - if (jsDef(V.forceBattle)) { - V.SecExp.settings.battle.force = V.forceBattle; - delete V.forceBattle; - } + delete V.SecExp.battle; - if (jsDef(V.readiness)) { - if(V.readiness === 10) { - V.sectionInFirebase = 1; - } - delete V.readiness; + V.SecExp.settings.battle.major = V.SecExp.settings.battle.major || {}; + V.SecExp.settings.battle.frequency = V.SecExp.settings.battle.frequency || 1; + if (jsDef(V.battleFrequency)) { + V.SecExp.settings.battle.frequency = V.battleFrequency; + delete V.battleFrequency; + } + V.SecExp.settings.battle.force = V.SecExp.settings.battle.force || 0; + if (jsDef(V.forceBattle)) { + V.SecExp.settings.battle.force = V.forceBattle; + delete V.forceBattle; + } + + if (jsDef(V.readiness)) { + if(V.readiness === 10) { + V.sectionInFirebase = 1; } + delete V.readiness; + } - V.SecExp.settings.unitDescriptions = V.SecExp.settings.unitDescriptions || 0; + V.SecExp.settings.unitDescriptions = V.SecExp.settings.unitDescriptions || 0; - V.SecExp.settings.battle.allowSlavePrestige = V.SecExp.settings.battle.allowSlavePrestige || 1; - if (jsDef(V.allowPrestigeFromBattles)) { - V.SecExp.settings.battle.allowSlavePrestige = V.allowPrestigeFromBattles; - delete V.allowPrestigeFromBattles; - } + V.SecExp.settings.battle.allowSlavePrestige = V.SecExp.settings.battle.allowSlavePrestige || 1; + if (jsDef(V.allowPrestigeFromBattles)) { + V.SecExp.settings.battle.allowSlavePrestige = V.allowPrestigeFromBattles; + delete V.allowPrestigeFromBattles; + } - V.SecExp.settings.battle.major.enabled = V.SecExp.settings.battle.major.enabled || 1; - if (jsDef(V.majorBattlesEnabled)) { - V.SecExp.settings.battle.major.enabled = V.majorBattlesEnabled; - delete V.majorBattlesEnabled; - } + V.SecExp.settings.battle.major.enabled = V.SecExp.settings.battle.major.enabled || 1; + if (jsDef(V.majorBattlesEnabled)) { + V.SecExp.settings.battle.major.enabled = V.majorBattlesEnabled; + delete V.majorBattlesEnabled; + } - if (V.SecExp.settings.battle.major.enabled > 0) { - V.SecExp.settings.battle.major.gameOver = V.SecExp.settings.battle.major.gameOver || 1; - if (jsDef(V.majorBattleGameOver)) { - V.SecExp.settings.battle.major.gameOver = V.majorBattleGameOver; - delete V.majorBattleGameOver; - } - V.SecExp.settings.battle.major.force = V.SecExp.settings.battle.major.force || 0; - if (jsDef(V.forceMajorBattle)) { - V.SecExp.settings.battle.major.force = V.forceMajorBattle; - delete V.forceMajorBattle; - } + V.SecExp.settings.battle.major.gameOver = V.SecExp.settings.battle.major.gameOver || 1; + if (jsDef(V.majorBattleGameOver)) { + V.SecExp.settings.battle.major.gameOver = V.majorBattleGameOver; + delete V.majorBattleGameOver; + } + V.SecExp.settings.battle.major.force = V.SecExp.settings.battle.major.force || 0; + if (jsDef(V.forceMajorBattle)) { + V.SecExp.settings.battle.major.force = V.forceMajorBattle; + delete V.forceMajorBattle; + } - V.SecExp.settings.battle.major.mult = V.SecExp.settings.battle.major.mult || 1; - if (jsDef(V.majorBattleMult)) { - V.SecExp.settings.battle.major.mult = V.majorBattleMult; - delete V.majorBattleMult; - } - } + delete V.majorBattleMult; + delete V.SecExp.settings.battle.major.mult; V.SecExp.settings.rebellion = V.SecExp.settings.rebellion || {}; V.SecExp.settings.rebellion.enabled = V.SecExp.settings.rebellion.enabled || 1; @@ -522,22 +520,22 @@ App.SecExp.Check = (function() { delete V.rebellionsEnabled; } - V.SecExp.settings.rebellion.force = V.SecExp.settings.rebellion.force || 0; - if (jsDef(V.forceRebellion)) { - V.SecExp.settings.rebellion.force = V.forceRebellion; - delete V.forceRebellion; - } - V.SecExp.settings.rebellion.gameOver = V.SecExp.settings.rebellion.gameOver || 1; - if (jsDef(V.rebellionGameOver)) { - V.SecExp.settings.rebellion.gameOver = V.rebellionGameOver; - delete V.rebellionGameOver; - } + V.SecExp.settings.rebellion.force = V.SecExp.settings.rebellion.force || 0; + if (jsDef(V.forceRebellion)) { + V.SecExp.settings.rebellion.force = V.forceRebellion; + delete V.forceRebellion; + } + V.SecExp.settings.rebellion.gameOver = V.SecExp.settings.rebellion.gameOver || 1; + if (jsDef(V.rebellionGameOver)) { + V.SecExp.settings.rebellion.gameOver = V.rebellionGameOver; + delete V.rebellionGameOver; + } - V.SecExp.settings.rebellion.speed = V.SecExp.settings.rebellion.speed || 1; - if (jsDef(V.rebellionSpeed)) { - V.SecExp.settings.rebellion.speed = V.rebellionSpeed; - delete V.rebellionSpeed; - } + V.SecExp.settings.rebellion.speed = V.SecExp.settings.rebellion.speed || 1; + if (jsDef(V.rebellionSpeed)) { + V.SecExp.settings.rebellion.speed = V.rebellionSpeed; + delete V.rebellionSpeed; + } if (V.SecExp.settings.battle.enabled + V.SecExp.settings.rebellion.enabled > 0) { V.SecExp.settings.showStats = V.SecExp.settings.showStats || 0; diff --git a/src/SecExp/widgets/miscSecExpWidgets.tw b/src/SecExp/widgets/miscSecExpWidgets.tw index 35f83a4f6fb4811af7392ddaa41023c5587cb21d..33318b5a23398af041fd7bd46d523ee04144a553 100644 --- a/src/SecExp/widgets/miscSecExpWidgets.tw +++ b/src/SecExp/widgets/miscSecExpWidgets.tw @@ -251,9 +251,13 @@ <</widget>> <<widget "replenishAllUnits">> - <<set _hasLossesM = 0>> - <<set _hasLossesS = 0>> - <<set _hasLossesMe = 0>> + <<set _hasLossesBots = 0, _hasLossesM = 0>> + <<set _hasLossesS = 0, _hasLossesMe = 0>> + + <<if $secBots.troops < $secBots.maxTroops && $cash >= 500>> + <<set _hasLossesBots = 1>> + <<break>> + <</if>> <<for _i = 0; _i < $militiaUnits.length; _i++>> <<if $militiaUnits[_i].troops < $militiaUnits[_i].maxTroops && $militiaFreeManpower > 0>> @@ -276,9 +280,12 @@ <</if>> <</for>> - <<if _hasLossesM == 1 && $militiaFreeManpower > 0 || _hasLossesS == 1 && $menials > 0 || _hasLossesMe == 1 && $mercFreeManpower > 0>> - + <<if _hasLossesBots == 1 || _hasLossesM == 1 || _hasLossesS == 1 || _hasLossesMe == 1>> <br><br><<link "Replenish all units">> + <<if _hasLossesBots == 1>> + <<run cashX(-((_$secBots.maxTroops - $secBots.troops) * 500), "securityExpansion")>> + <<set $secBots.troops = $secBots.maxTroops>> + <</if>> <<if _hasLossesM == 1>> <<for _i = 0; _i < $militiaUnits.length; _i++>> @@ -349,7 +356,7 @@ <</if>> <</link>> - //Will replenish units as long as manpower is available + //Will replenish units as long as requirements are meet.//<br> <</if>> -<</widget>> \ No newline at end of file +<</widget>> diff --git a/src/data/backwardsCompatibility/updateCustomSlaveOrder.js b/src/data/backwardsCompatibility/updateCustomSlaveOrder.js new file mode 100644 index 0000000000000000000000000000000000000000..79bd6a4bf60318eb4caf1243a127062fe9dd1b56 --- /dev/null +++ b/src/data/backwardsCompatibility/updateCustomSlaveOrder.js @@ -0,0 +1,43 @@ +/** Update custom slave orders (customSlave/huskSlave). + * @param {App.Entity.CustomSlaveOrder} customSlaveOrder + */ +App.Update.CustomSlaveOrder = function(customSlaveOrder) { + if (!customSlaveOrder.hasOwnProperty("leg")) { + if (jsDef(customSlaveOrder.amp) && customSlaveOrder.amp === 1) { + customSlaveOrder.leg = {left: null, right: null}; + } else { + customSlaveOrder.leg = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}; + } + } + + if (!customSlaveOrder.hasOwnProperty("arm")) { + if (jsDef(customSlaveOrder.amp) && customSlaveOrder.amp === 1) { + customSlaveOrder.arm = {left: null, right: null}; + } else { + customSlaveOrder.arm = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}; + } + } + + if (customSlaveOrder.hasOwnProperty("amp")) { + delete customSlaveOrder.amp; + } + + if (!customSlaveOrder.hasOwnProperty("skill")) { + customSlaveOrder.skill = {whore: 15, combat: 0}; + } + + if (customSlaveOrder.hasOwnProperty("whoreSkills")) { + customSlaveOrder.skill.whore = customSlaveOrder.whoreSkills; + delete customSlaveOrder.whoreSkills; + } + + if (customSlaveOrder.hasOwnProperty("combatSkills")) { + customSlaveOrder.skill.combat = customSlaveOrder.combatSkills; + delete customSlaveOrder.combatSkills; + } + + if (V.releaseID < 1059) { + customSlaveOrder.eye = new App.Entity.EyeState(); + delete customSlaveOrder.eyes; + } +}; diff --git a/src/data/backwardsCompatibility/updateSlaveObject.js b/src/data/backwardsCompatibility/updateSlaveObject.js index fed2177e63f0c516129eabbb8850a15d7df63b03..020a52e8b04690a79f104c393ccfc57fdb9c7820 100644 --- a/src/data/backwardsCompatibility/updateSlaveObject.js +++ b/src/data/backwardsCompatibility/updateSlaveObject.js @@ -101,7 +101,7 @@ App.Update.Slave = function(slave) { } } if (slave.prestigeDesc !== undefined && slave.prestigeDesc !== 0) { slave.prestigeDesc = pronounReplacer(slave.prestigeDesc); } - if (slave.prestigeDesc !== undefined && slave.prestigeDesc !== 0) { // This must be defined first, hence the previous line. + if (slave.pornPrestigeDesc !== undefined && slave.pornPrestigeDesc !== 0) { // This must be defined first, hence the previous line. if (V.releaseID < 1050 && slave.prestigeDesc !== undefined && slave.prestigeDesc !== 0) { /* BC absolutely FUCKED this */ switch (slave.porn.fameType) { case "generic": @@ -617,6 +617,13 @@ App.Update.Slave = function(slave) { delete slave.sclerae; } + if (slave.eyes !== undefined) {delete slave.eyes;} + if (slave.eyeColor !== undefined) {delete slave.eyeColor;} + if (slave.eyesImplant !== undefined) {delete slave.eyesImplant;} + if (slave.origEye !== undefined) {delete slave.origEye;} + if (slave.pupil !== undefined) {delete slave.pupil;} + if (slave.sclerae !== undefined) {delete slave.sclerae;} + if (slave.origin === "Shortly after birth, $he was sealed in an aging tank until $he was of age. $He knows only of the terror that awaits $him should $he not obey $his master.") { slave.tankBaby = 2; } else if (slave.origin === "Shortly after birth, $he was sealed in an aging tank until $he was of age. $He knows nothing of the world outside of what the tank imprinted $him with.") { diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index f4ed47570a9be9fd38ef7068d8080bd4ba1f51b9..c4a1f9af801c806f0edef532249d8b3c863c7d9c 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -1514,6 +1514,10 @@ window.DefaultRules = (function() { } } + /** + * @param {App.Entity.SlaveState} slave + * @param {App.RA.RuleSetters} rule + */ function ProcessDiet(slave, rule) { // Diet Setting if ((rule.diet !== undefined && rule.diet !== null) || rule.weight !== null) { @@ -1537,9 +1541,27 @@ window.DefaultRules = (function() { r += `<br>${slave.slaveName} is on drugs designed to expand major body parts, so ${he}'s been put on a fattening diet to provide ${his} body as much fuel for growth as possible.`; } } else { - if (rule.weight !== null) { + // priority to growing/loosing muscles, then general body mass, then rest of the diets + if (!isAmputee(slave) && (App.RA.shallShrink(slave.muscles, rule.muscles, 8) || App.RA.shallGrow(slave.muscles, rule.muscles, 2))) { + if (App.RA.shallShrink(slave.muscles, rule.muscles, 8)) { + if ((slave.diet !== "slimming")) { + slave.diet = "slimming"; + r += `<br>${slave.slaveName} has been put on a slimming exercise regime.`; + } + } else if (App.RA.shallGrow(slave.muscles, rule.muscles, 2)) { + if ((slave.diet !== "muscle building")) { + slave.diet = "muscle building"; + r += `<br>${slave.slaveName} has been put on a muscle building exercise regime.`; + } + } else { + if ((slave.diet !== "healthy")) { + slave.diet = "healthy"; + r += `<br>${slave.slaveName} is at the target weight, so ${his} diet has been normalized.`; + } + } + } else if (rule.weight !== null && (slave.weight > rule.weight.max || slave.weight < rule.weight.min)) { if (slave.weight > rule.weight.max) { - if (slave.diet !== "restricted" ) { + if (slave.diet !== "restricted") { slave.diet = "restricted"; r += `<br>${slave.slaveName} is too fat so ${his} diet has been set to restricted.`; } @@ -1548,23 +1570,6 @@ window.DefaultRules = (function() { slave.diet = "fattening"; r += `<br>${slave.slaveName} is too skinny so ${his} diet has been set to fattening.`; } - } else if ((rule.muscles !== undefined) && (rule.muscles !== null) && !isAmputee(slave)) { - if (App.RA.shallShrink(slave.muscles, rule.muscles, 8)) { - if ((slave.diet !== "slimming")) { - slave.diet = "slimming"; - r += `<br>${slave.slaveName} has been put on a slimming exercise regime.`; - } - } else if (App.RA.shallGrow(slave.muscles, rule.muscles, 2)) { - if ((slave.diet !== "muscle building")) { - slave.diet = "muscle building"; - r += `<br>${slave.slaveName} has been put on a muscle building exercise regime.`; - } - } else { - if ((slave.diet !== "healthy")) { - slave.diet = "healthy"; - r += `<br>${slave.slaveName} is at the target weight, so ${his} diet has been normalized.`; - } - } } else { if ((slave.diet !== "healthy")) { slave.diet = "healthy"; @@ -1582,23 +1587,6 @@ window.DefaultRules = (function() { slave.diet = "fattening"; r += `<br>${slave.slaveName} is too skinny so ${his} diet has been set to fattening.`; } - } else if ((rule.muscles !== undefined) && (rule.muscles !== null) && !isAmputee(slave)) { - if (App.RA.shallShrink(slave.muscles, rule.muscles, 8)) { - if ((slave.diet !== "slimming")) { - slave.diet = "slimming"; - r += `<br>${slave.slaveName} has been put on a slimming exercise regime.`; - } - } else if (App.RA.shallGrow(slave.muscles, rule.muscles, 2)) { - if ((slave.diet !== "muscle building")) { - slave.diet = "muscle building"; - r += `<br>${slave.slaveName} has been put on a muscle building exercise regime.`; - } - } else { - if ((slave.diet !== "healthy")) { - slave.diet = "healthy"; - r += `<br>${slave.slaveName} is at the target weight, so ${his} diet has been normalized.`; - } - } } else { if ((slave.diet !== "healthy")) { slave.diet = "healthy"; @@ -1663,23 +1651,6 @@ window.DefaultRules = (function() { } } } - } else if ((rule.muscles !== undefined) && (rule.muscles !== null) && !isAmputee(slave)) { // no diet rule, muscles only - if (App.RA.shallShrink(slave.muscles, rule.muscles, 8)) { - if ((slave.diet !== "slimming")) { - slave.diet = "slimming"; - r += `<br>${slave.slaveName} has been put on a slimming exercise regime.`; - } - } else if (App.RA.shallGrow(slave.muscles, rule.muscles, 2)) { - if ((slave.diet !== "muscle building")) { - slave.diet = "muscle building"; - r += `<br>${slave.slaveName} has been put on a muscle building exercise regime.`; - } - } else { - if ((slave.diet !== "healthy")) { - slave.diet = "healthy"; - r += `<br>${slave.slaveName} has achieved the target musculature, so ${his} exercise regime has been normalized.`; - } - } } if (slave.drugs === "appetite suppressors" && slave.diet !== "restricted") { diff --git a/src/js/surgery.js b/src/js/surgery.js index c06a812f3ce54dc7c03fc827f7bd9201d021f105..66ab1e64a132a3a7467186e3f42361e8e07ed672 100644 --- a/src/js/surgery.js +++ b/src/js/surgery.js @@ -169,9 +169,10 @@ App.Medicine.Surgery.ListHelpers = class { * @param {string} name * @param {number} implantType * @param {number} size + * @param {number} [implantPrice=0] * @returns {App.Medicine.Surgery.Procedure} */ - replaceImplants(name, implantType, size) { + replaceImplants(name, implantType, size, implantPrice = 0) { return App.Medicine.Surgery.makeOption(this._keys.changeImplant, `${capFirstChar(name)} implants`, size - this._slave.boobsImplant, `replace ${this._pronouns.his} ${this._bodyPart} implants with ${name}${this._showCCs ? ` (${size}cc)` : ''} ones`, @@ -179,7 +180,7 @@ App.Medicine.Surgery.ListHelpers = class { slave[this._bodyPart] += size - slave[`${this._bodyPart}Implant`]; slave[`${this._bodyPart}Implant`] = size; slave[`${this._bodyPart}ImplantType`] = implantType; - }, this._V.surgeryCost, 10, this._bodyPart + }, this._V.surgeryCost + implantPrice, 10, this._bodyPart ); } @@ -248,6 +249,19 @@ App.Medicine.Surgery.sizingProcedures = function() { butt: buttSizingProcedures }; + /** + * for implants that we potentially order abroad :) + * @param {App.Medicine.Surgery.Procedure} op + */ + function _advFillablePriceModifier(op) { + if (V.ImplantProductionUpgrade !== 1) { + op.costs += 10000; + op.label += " (special order)"; + op.description += " (special order)"; + } + return op; + } + /** * Returns list of available surgeries targeted at changing size of the given body part * @param {string} bodyPart @@ -286,17 +300,20 @@ App.Medicine.Surgery.sizingProcedures = function() { const types = App.Medicine.Keys.Surgery.Target.breast; // shortcuts const helper = new App.Medicine.Surgery.ListHelpers(slave, "boobs", types, pronouns, V.showBoobCCs); + const areStringsInstalled = slave.boobsImplantType === 1; + const curSize = slave.boobsImplant; + let r = []; if (options.augmentation) { if (slave.boobs > 50000) { r.push(App.Medicine.Surgery.makeImpossibleOption(types.fillUp, "Increase boobs", `<em>${His} breasts are as large as ${he} can physically support</em>`)); - } else if (slave.boobsImplant > 10000 && !largeImplantsAvailable && slave.boobsImplantType !== 1) { + } else if (curSize > 10000 && !largeImplantsAvailable && !areStringsInstalled) { r.push(App.Medicine.Surgery.makeImpossibleOption(types.fillUp, "Increase boobs", `<em>${His} implants are filled to capacity</em>`)); } else if (slave.indentureRestrictions >= 2) { r.push(App.Medicine.Surgery.makeImpossibleOption(types.installImplant, "Change boob size", `<em>${His} indenture forbids elective surgery</em>`)); } else if (slave.breastMesh === 1) { r.push(App.Medicine.Surgery.makeImpossibleOption(types.installImplant, "Put implants", `<em>${His} supportive mesh implant blocks implantation</em>`)); - } else if (slave.boobsImplant === 0) { + } else if (curSize === 0) { if (options.strings) { r.push(helper.installImplants("string", 1, 400)); } @@ -305,58 +322,72 @@ App.Medicine.Surgery.sizingProcedures = function() { } r.push(helper.installImplants("standard", 0, 400)); r.push(helper.installImplants("small", 0, 200)); - } else if (slave.boobsImplant > 10000 && slave.boobsImplantType !== 1 && advancedFillableImplantsAvailable) { + } else if (curSize > 10000 && !areStringsInstalled && advancedFillableImplantsAvailable) { r.push(helper.fillUp(1000)); - } else if (slave.boobsImplant > 9800 && slave.boobsImplantType !== 1 && advancedFillableImplantsAvailable) { + } else if (curSize > 9800 && !areStringsInstalled && advancedFillableImplantsAvailable) { r.push(helper.replaceImplants("hyper fillable", 0, 11000)); - } else if (slave.boobsImplant > 2000 && slave.boobsImplantType !== 1) { + } else if (curSize > 2000 && !areStringsInstalled) { r.push(helper.fillUp(400)); - } else if (slave.boobsImplant > 1800 && slave.boobsImplantType !== 1) { + } else if (curSize > 1800 && !areStringsInstalled) { r.push(App.Medicine.Surgery.makeImpossibleOption(types.fillUp, "Add inert filler", `<em>${His} implants are filled to capacity</em>`)); - - const advancedFillable = helper.replaceImplants("advanced fillable", 0, 2200); - if (!advancedFillableImplantsAvailable) { - advancedFillable.costs += 10000; - advancedFillable.label += " (special order)"; - advancedFillable.description += " (special order)"; - } - r.push(advancedFillable); - } else if (slave.boobsImplant > 600 && slave.boobsImplantType !== 1) { + r.push(_advFillablePriceModifier(helper.replaceImplants("advanced fillable", 0, 2200))); + } else if (curSize > 600 && !areStringsInstalled) { r.push(helper.fillUp(200)); - } else if (slave.boobsImplant > 400 && slave.boobsImplantType !== 1) { + } else if (curSize > 400 && !areStringsInstalled) { r.push(helper.replaceImplants("fillable", 0, 800)); - } else if (slave.boobsImplant > 200 && slave.boobsImplantType !== 1) { + } else if (curSize > 200 && !areStringsInstalled) { r.push(helper.replaceImplants("large", 0, 600)); - } else if (slave.boobsImplant > 0 && slave.boobsImplantType !== 1) { + } else if (curSize > 0 && !areStringsInstalled) { r.push(helper.replaceImplants("standard", 0, 400)); r.push(helper.replaceImplants("large", 0, 600)); } } - if (options.reduction && (slave.boobs > 300 || slave.boobsImplant > 0)) { - if (slave.boobsImplant > 0) { - if (slave.boobsImplantType === 1 && slave.boobsImplant > 400) { - if (slave.boobsImplant > 8000) { + if (options.replace && slave.indentureRestrictions < 2 && curSize > 0) { + if (!areStringsInstalled && curSize < 600) { + r.push(helper.replaceImplants("string", 1, 400)); + } else if (areStringsInstalled){ + // we have engorged string implants, suggest replacing with normal implants of similar size + if (curSize > 10000) { + if (largeImplantsAvailable) { + if (slave.boobs < 50000) { + r.push(helper.replaceImplants("hyper fillable", 0, Math.round(curSize / 1000) * 1000)); + } + } + } else if (curSize > 2200) { + r.push(_advFillablePriceModifier(helper.replaceImplants("advanced fillable", 0, Math.round(curSize / 400) * 400))); + } else if (curSize > 400) { + r.push(helper.replaceImplants("fillable", 0, Math.round(curSize / 200) * 200)); + } else { + r.push(helper.replaceImplants("standard", 0, 400)); + } + } + } + + if (options.reduction && (slave.boobs > 300 || curSize > 0)) { + if (curSize > 0) { + if (areStringsInstalled && curSize > 400) { + if (curSize > 8000) { r.push(helper.drain(1000)); - } else if (slave.boobsImplant > 5000) { + } else if (curSize > 5000) { r.push(helper.drain(750)); - } else if (slave.boobsImplant > 2000) { + } else if (curSize > 2000) { r.push(helper.drain(500)); - } else if (slave.boobsImplant > 1000) { + } else if (curSize > 1000) { r.push(helper.drain(250)); - } else if (slave.boobsImplant > 500) { + } else if (curSize > 500) { r.push(helper.drain(100)); } } r.push(helper.removeImplants()); } - if ((slave.boobs > 300) && (slave.boobsImplant === 0) && slave.indentureRestrictions < 2) { + if ((slave.boobs > 300) && (curSize === 0) && slave.indentureRestrictions < 2) { r.push(helper.reduce("reduce", 200)); if (slave.boobs < 675) { r.push(helper.reduce("slightly reduce", 25)); } } - if ((slave.boobsImplant === 0) && slave.indentureRestrictions < 2 && (slave.breedingMark !== 1 || V.propOutcome !== 1 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { + if ((curSize === 0) && slave.indentureRestrictions < 2 && (slave.breedingMark !== 1 || V.propOutcome !== 1 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) { if (slave.boobs >= 7000) { r.push(App.Medicine.Surgery.makeOption(types.reduction, "Mastectomy", 300 - slave.boobs, "perform mastectomy", @@ -394,6 +425,9 @@ App.Medicine.Surgery.sizingProcedures = function() { const types = App.Medicine.Keys.Surgery.Target.butt; // shortcuts const helper = new App.Medicine.Surgery.ListHelpers(slave, "butt", types, pronouns, false); + const areStringsInstalled = slave.buttImplantType === 1; + const curSize = slave.buttImplant; + let r = []; if (options.augmentation) { @@ -401,20 +435,20 @@ App.Medicine.Surgery.sizingProcedures = function() { r.push(App.Medicine.Surgery.makeImpossibleOption(types.installImplant, "Change butt size", `<em>${His} indenture forbids elective surgery</em>`)); } else if (slave.butt > 19) { r.push(App.Medicine.Surgery.makeImpossibleOption(types.fillUp, "Increase butt", `<em>${His} butt is as large as it can possibly get</em>`)); - } else if (slave.butt > 7 && !largeImplantsAvailable && thisArcology.FSAssetExpansionist === "unset" && slave.buttImplantType !== 1) { + } else if (slave.butt > 7 && !largeImplantsAvailable && thisArcology.FSAssetExpansionist === "unset" && !areStringsInstalled) { r.push(App.Medicine.Surgery.makeImpossibleOption(types.installImplant, "Increase butt", `<em>${His} butt is as large as ${he} can physically support</em>`)); - } else if (slave.buttImplant > 7 && !largeImplantsAvailable && slave.buttImplantType !== 1) { + } else if (curSize > 7 && !largeImplantsAvailable && !areStringsInstalled) { r.push(App.Medicine.Surgery.makeImpossibleOption(types.installImplant, "Increase butt", `<em>${His} butt implants are filled to capacity</em>`)); - } else if (slave.buttImplant === 0) { + } else if (curSize === 0) { r.push(helper.installImplants("standard", 0, 1)); if (options.strings) { r.push(helper.installImplants("string", 1, 1)); } - } else if (slave.buttImplant === 1 && slave.buttImplantType !== 1) { + } else if (curSize === 1 && !areStringsInstalled) { r.push(helper.replaceImplants("bigger", 0, 2)); - } else if (slave.buttImplant === 2 && slave.buttImplantType !== 1) { + } else if (curSize === 2 && !areStringsInstalled) { r.push(helper.replaceImplants("fillable", 0, 3)); - } else if (slave.buttImplant === 4 && slave.buttImplantType !== 1) { + } else if (curSize === 4 && !areStringsInstalled) { r.push(App.Medicine.Surgery.makeImpossibleOption(types.fillUp, "Increase size", `<em>${His} implants are filled to capacity</em>`)); const advancedFillable = helper.replaceImplants("advanced fillable", 0, 5); if (!advancedFillableImplantsAvailable) { @@ -423,23 +457,44 @@ App.Medicine.Surgery.sizingProcedures = function() { advancedFillable.description += " (special order)"; } r.push(advancedFillable); - } else if (slave.buttImplant === 8 && slave.buttImplantType !== 1 && advancedFillableImplantsAvailable) { + } else if (curSize === 8 && !areStringsInstalled && largeImplantsAvailable) { r.push(helper.replaceImplants("hyper fillable", 0, 9)); - } else if (slave.buttImplant > 2 && slave.buttImplantType !== 1) { + } else if (curSize > 2 && !areStringsInstalled) { r.push(helper.fillUp(1)); } } + if (options.replace && slave.indentureRestrictions < 2 && curSize > 0) { + if (!areStringsInstalled && curSize === 1) { + r.push(helper.replaceImplants("string", 1, 1)); + } else if (areStringsInstalled) { + // we have engorged string implants, suggest replacing with normal implants of similar size + if (curSize >= 9) { + if (largeImplantsAvailable) { + r.push(helper.replaceImplants("hyper fillable", 0, curSize)); + } + } else if (curSize >= 5) { + r.push(_advFillablePriceModifier(helper.replaceImplants("advanced fillable", 0, curSize))); + } else if (curSize >= 3) { + r.push(helper.replaceImplants("fillable", 0, curSize)); + } else if (curSize === 2) { + r.push(helper.replaceImplants("big", 0, curSize)); + } else { + r.push(helper.replaceImplants("standard", 0, curSize)); + } + } + } + if (options.reduction) { - if (slave.buttImplant > 0) { + if (curSize > 0) { if (slave.indentureRestrictions < 2) { - if (slave.buttImplantType === 1 && slave.buttImplant > 1) { + if (areStringsInstalled && curSize > 1) { r.push(helper.drain(1)); } r.push(helper.removeImplants()); } } - if ((slave.butt > 1) && (slave.buttImplant === 0)) { + if ((slave.butt > 1) && (curSize === 0)) { if (slave.indentureRestrictions < 2) { r.push(helper.reduce("reduce", 1)); } diff --git a/src/npc/databases/dSlavesDatabase.tw b/src/npc/databases/dSlavesDatabase.tw index 9e4d448b7f0e993d67470dcabff688184035264e..ef9a7808118b5f1f603bdbbc63493fbd82e86840 100644 --- a/src/npc/databases/dSlavesDatabase.tw +++ b/src/npc/databases/dSlavesDatabase.tw @@ -530,7 +530,7 @@ /*Increased nipples and areolae, changed eye color, added mute -BoneyM*/ <<set _HS = App.Entity.SlaveState.makeSkeleton()>> -<<set _HS.slaveName = "Box", _HS.birthName = "Box", _HS.origin = "When you took $him from $his previous owner, $he was locked into a beautiful rosewood box lined with red velvet, crying.", _HS.ID = _i++, _HS.birthWeek = random(0,51), _HS.actualAge = 21, _HS.physicalAge = 21, _HS.visualAge = 21, _HS.ovaryAge = 21, _HS.devotion = -75, _HS.weight = 20, _HS.eyes = -2, _HS.override_Brow_H_Color = 1, _HS.override_Arm_H_Color = 1, _HS.override_Pubic_H_Color = 1, _HS.eyebrowHColor = "blonde", _HS.pubicHColor = "blonde", _HS.underArmHColor = "blonde", _HS.origSkin = "pale", _HS.origHColor = "golden blonde", _HS.hStyle = "long", _HS.boobs = 400, _HS.butt = 2, _HS.vagina = 1, _HS.vaginaLube = 1, _HS.anus = 1, _HS.ovaries = 1, _HS.skill.vaginal = 15, _HS.skill.oral = 15, _HS.skill.anal = 15, _HS.intelligence = -50, _HS.attrXY = 40, _HS.fetishKnown = 1, _HS.custom.desc = "$His amputation sites have titanium rings that go through to the bone. $He has been chemically blinded.">> +<<set _HS.slaveName = "Box", _HS.birthName = "Box", _HS.origin = "When you took $him from $his previous owner, $he was locked into a beautiful rosewood box lined with red velvet, crying.", _HS.ID = _i++, _HS.birthWeek = random(0,51), _HS.actualAge = 21, _HS.physicalAge = 21, _HS.visualAge = 21, _HS.ovaryAge = 21, _HS.devotion = -75, _HS.weight = 20, _HS.override_Brow_H_Color = 1, _HS.override_Arm_H_Color = 1, _HS.override_Pubic_H_Color = 1, _HS.eyebrowHColor = "blonde", _HS.pubicHColor = "blonde", _HS.underArmHColor = "blonde", _HS.origSkin = "pale", _HS.origHColor = "golden blonde", _HS.hStyle = "long", _HS.boobs = 400, _HS.butt = 2, _HS.vagina = 1, _HS.vaginaLube = 1, _HS.anus = 1, _HS.ovaries = 1, _HS.skill.vaginal = 15, _HS.skill.oral = 15, _HS.skill.anal = 15, _HS.intelligence = -50, _HS.attrXY = 40, _HS.fetishKnown = 1, _HS.custom.desc = "$His amputation sites have titanium rings that go through to the bone. $He has been chemically blinded.">> <<run App.Utils.removeHeroLimbs(_HS, "all"), eyeSurgery(_HS, "both", "blind")>> <<set $heroSlaves.push(_HS)>> /* put some of $his custom description in $his origin (box stuff), tagged as amp, lowered obedience, increased weight but lowered health, changed skin color from white to pale */ diff --git a/src/npc/slaveStats.tw b/src/npc/slaveStats.tw index 63725a368253c8636019e6da1c9750d715dcd84d..3dca1aae144a9f395d5797d3cfa80014c213bbbf 100644 --- a/src/npc/slaveStats.tw +++ b/src/npc/slaveStats.tw @@ -206,7 +206,7 @@ Income: <<= num($activeSlave.lastWeeksRepIncome)>> Override: $activeSlave.override_Pubic_H_Color <br><br>Eyes: - <br>Eyes: <<print JSON.stringify($activeSlave.eyes)>> + <br>Eyes: <<print JSON.stringify($activeSlave.eye)>> <br>Override: $activeSlave.override_Eye_Color <br>eyewear: $activeSlave.eyewear diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 23354d1442f6c9a5fea5d2266ef27885b9a2725e..2efb59b9f0b5d3eddf411622099adfeb6b0024ed 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -113,45 +113,6 @@ <<set $scarDesign = {primary: "generic", local: "generic"}>> <</if>> -<<if !$customSlave.hasOwnProperty("leg")>> - <<if (def $customSlave.amp) && ($customSlave.amp === 1)>> - <<set $customSlave.leg = {left: null, right: null}>> - <<else>> - <<set $customSlave.leg = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}>> - <</if>> -<</if>> - -<<if !$customSlave.hasOwnProperty("arm")>> - <<if (def $customSlave.amp) && ($customSlave.amp === 1)>> - <<set $customSlave.arm = {left: null, right: null}>> - <<else>> - <<set $customSlave.arm = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}>> - <</if>> -<</if>> - -<<if $customSlave.hasOwnProperty("amp")>> - <<run delete $customSlave.amp>> -<</if>> - -<<if !$customSlave.hasOwnProperty("skill")>> - <<set $customSlave.skill = {whore: 15, combat: 0}>> -<</if>> - -<<if $customSlave.hasOwnProperty("whoreSkills")>> - <<set $customSlave.skill.whore = $customSlave.whoreSkills>> - <<run delete $customSlave.whoreSkills>> -<</if>> - -<<if $customSlave.hasOwnProperty("combatSkills")>> - <<set $customSlave.skill.combat = $customSlave.combatSkills>> - <<run delete $customSlave.combatSkills>> -<</if>> - -<<if $releaseID < 1059>> - <<set $customSlave.eye = new App.Entity.EyeState()>> - <<run delete $customSlave.eyes>> -<</if>> - <<if def $servantMilkersJobs>> <<unset $servantMilkersJobs>> <</if>> @@ -1366,6 +1327,9 @@ <<if ndef $huskSlave>> <<set $huskSlave = new App.Entity.CustomSlaveOrder()>> <</if>> +<<run App.Update.CustomSlaveOrder($huskSlave)>> +<<run App.Update.CustomSlaveOrder($customSlave)>> + <<if ndef $pedo_mode>> <<set $pedo_mode = 0>> <</if>>