diff --git a/js/utils.js b/js/utils.js index 88bee3fcfd49b26519c4b38ad4ea1e4f6c9ca318..3a3692d0dc26bc03ea93e79d0d649fc83a4a189b 100644 --- a/js/utils.js +++ b/js/utils.js @@ -351,14 +351,16 @@ function sortArrayByArray(sorted, unsorted, key) { */ function deepAssign(target, source) { function isObject(o) { - return (o !== undefined && typeof o === 'object' && !Array.isArray(o)); + return (o !== undefined && o !== null && typeof o === 'object' && !Array.isArray(o)); } if (isObject(target) && isObject(source)) { for (const key in source) { if (!source.hasOwnProperty(key)) { continue; } if (isObject(source[key])) { - if (!target.hasOwnProperty(key)) { target[key] = {}; } + if (!target.hasOwnProperty(key) || !isObject(target[key])) { + target[key] = {}; + } deepAssign(target[key], source[key]); } else { Object.assign(target, { diff --git a/src/js/heroCreator.js b/src/js/heroCreator.js index 8c3cbf55e69723e402d8c12a79f00faeb810b12d..15102be130344723f7dbacdea935cbc94af17957 100644 --- a/src/js/heroCreator.js +++ b/src/js/heroCreator.js @@ -65,11 +65,6 @@ App.Utils.getHeroSlave = function(heroSlave) { } } - let albinismOverride = null; - if (heroSlave.albinismOverride !== null) { - albinismOverride = heroSlave.albinismOverride; - delete heroSlave.albinismOverride; - } if (!heroSlave.hasOwnProperty("birthWeek")) { heroSlave.birthWeek = random(0, 51); } @@ -111,7 +106,6 @@ App.Utils.getHeroSlave = function(heroSlave) { deepAssign(newSlave, heroSlave); V.heroSlaveID = heroSlave.ID; newSlave.ID = generateSlaveID(); - newSlave.albinismOverride = albinismOverride; repairLimbs(newSlave); generatePuberty(newSlave); newSlave.weekAcquired = V.week; diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js index 8a52282cc21b5c2338bf0b2b2cf919d4ed1231e0..af87a9660865fd2d8edb6517642a13fd67e80450 100644 --- a/src/js/slaveCostJS.js +++ b/src/js/slaveCostJS.js @@ -2690,3 +2690,19 @@ window.slaveCostBeauty = (function() { window.startingSlaveCost = function startingSlaveCost(slave) { return slaveCost(slave, true); }; + +/** + * Calculates the expected cost for a hero slave. + * @param {App.Entity.SlaveState} slave + * @param {number} costFloor - if a slave is worth less than this amount, add between 1/2 and 3/2 this much to it + * @returns {number} + */ +window.heroSlaveCost = function(slave, costFloor) { + V.specialSlavesPriceOverride = 1; // TODO: this probably shouldn't be a global + let cost = (10*Math.trunc((slaveCost(slave)/10)*2)); + V.specialSlavesPriceOverride = 0; + if (cost < costFloor) { + cost += jsRandom(Math.trunc(costFloor / 2000), Math.trunc((costFloor * 3) / 2000)) * 1000; + } + return cost; +}; diff --git a/src/uncategorized/completeCatalog.tw b/src/uncategorized/completeCatalog.tw index 2fe58952f8a3c60df8e4070a111d92811655b2a0..6a05425d47d027d38e94b1facb0bd1c531e69d4f 100644 --- a/src/uncategorized/completeCatalog.tw +++ b/src/uncategorized/completeCatalog.tw @@ -22,13 +22,7 @@ <p> <<set $saleDescription = 1>> <<include "Long Slave Description">> - <<set $specialSlavesPriceOverride = 1>> - <<set _slaveCost = slaveCost($activeSlave)>> - <<set $specialSlavesPriceOverride = 0>> - <<set _slaveCost = (10*Math.trunc((_slaveCost/10)*2))>> - <<if _slaveCost < 40000>> - <<set _slaveCost += random(20000,60000)>> - <</if>> + <<set _slaveCost = heroSlaveCost($activeSlave, 40000)>> </p> <p> diff --git a/src/uncategorized/specialSlave.tw b/src/uncategorized/specialSlave.tw index 9cb6971c02221c3ba5aafd8a8b18dd1d0b89f9db..f80618a5f1a1f2f04dac2f018f4580fe4a04668e 100644 --- a/src/uncategorized/specialSlave.tw +++ b/src/uncategorized/specialSlave.tw @@ -10,12 +10,7 @@ <<run slaveSortMinor(_heroSlaves)>> <<set $activeSlave = App.Utils.getHeroSlave(_heroSlaves.random())>> - <<set $specialSlavesPriceOverride = 1>> - <<set _slaveCost = slaveCost($activeSlave)>> - <<set _slaveCost = (10*Math.trunc((_slaveCost/10)*2))>> - <<if _slaveCost < 20000>> - <<set _slaveCost += random(5000,30000)>> - <</if>> + <<set _slaveCost = heroSlaveCost($activeSlave, 20000)>> <<setLocalPronouns $activeSlave>> You review a piece of merchandise via video call, making a few lewd demands to gauge $his obedience. The background of the video feed is luxurious and plush; somewhere offscreen someone is moaning rapturously. @@ -37,6 +32,5 @@ <br><br> <<set $saleDescription = 1>><<include "Long Slave Description">> - <<set $specialSlavesPriceOverride = 0>> <</if>>