diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index 4d275c841cb4ef4f07c5eaab416d5424fbd60032..70b8bee2c7aefe72059d4e1ede6e35c545ba50b2 100644 --- a/src/002-config/fc-version.js +++ b/src/002-config/fc-version.js @@ -1,8 +1,8 @@ App.Version = { base: "0.10.8", pmod: "2.8.X", - release: 1051, + release: 1052, }; /* Use release as save version */ -Config.saves.version = App.Version.release; \ No newline at end of file +Config.saves.version = App.Version.release; diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js index 27d628b9666c900a271dc7ad650e9d6354b25122..5a6a0308f62439cebfa070dc5d6799dff2f88b7c 100644 --- a/src/js/SlaveState.js +++ b/src/js/SlaveState.js @@ -2477,6 +2477,7 @@ App.Entity.SlaveState = class SlaveState { return { arm: {left: {}, right: {}}, leg: {left: {}, right: {}}, + readyProsthetics: [], // yes, not an object, but needed for hero slaves counter: {}, brand: {}, scar: {}, diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js index a43564b829d7bcffebca45c0b211c74b070a738c..130127c649794e9d904d9c6d173290c772005132 100644 --- a/src/js/itemAvailability.js +++ b/src/js/itemAvailability.js @@ -170,7 +170,7 @@ window.isItemAccessible = function(string) { } }; -/* +/** * @param {App.Entity.SlaveState} slave * @param {string} prosthetic * @returns {boolean} @@ -185,6 +185,72 @@ window.isProstheticAvailable = function(slave, prosthetic) { */ window.addProsthetic = function(slave, prosthetic) { if (!isProstheticAvailable(slave, prosthetic)) { - slave.readyProsthetics.push({id: prosthetic}); + let limb = prostheticToLimb(prosthetic); + if (limb > 0) { + let p = { + id: prosthetic, + arm: {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}, + leg: {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()} + }; + p.arm.left.type = limb; + p.arm.right.type = limb; + p.leg.left.type = limb; + p.leg.right.type = limb; + slave.readyProsthetics.push(p); + } else { + slave.readyProsthetics.push({id: prosthetic}); + } + } +}; + +/** + * @param {App.Entity.SlaveState} slave + * @param {string} prosthetic + * @returns {{}} + */ +window.findProsthetic = function(slave, prosthetic) { + return slave.readyProsthetics.find(p => p.id === prosthetic); +}; + +/** + * @param {string} prosthetic + * @returns {number} + */ +window.prostheticToLimb = function(prosthetic) { + switch (prosthetic) { + case "basicL": + return 2; + case "sexL": + return 3; + case "beautyL": + return 4; + case "combatL": + return 5; + case "cyberneticL": + return 6; + default: + return 0; + } +}; + +/** + * + * @param {number} limb + * @returns {string} + */ +window.limbToProsthetic = function(limb) { + switch (limb) { + case 2: + return "basicL"; + case 3: + return "sexL"; + case 4: + return "beautyL"; + case 5: + return "combatL"; + case 6: + return "cyberneticL"; + default: + return ""; } }; diff --git a/src/js/surgery.js b/src/js/surgery.js index dcd5c5a92c8e0a80e04afe18b9ebc9cf0197cd51..404641a3d100bab458a7e38df859d7296c4e0d9a 100644 --- a/src/js/surgery.js +++ b/src/js/surgery.js @@ -453,11 +453,11 @@ App.Medicine.Surgery.sizingProcedures = function() { }(); /** -* Clean up extremities on removal or piercings, tats, and brands -* For limbs use removeLimbs() -* @param {App.Entity.SlaveState} slave -* @param {string} part -*/ + * Clean up extremities on removal or piercings, tats, and brands + * For limbs use removeLimbs() + * @param {App.Entity.SlaveState} slave + * @param {string} part + */ window.surgeryAmp = function(slave, part) { switch (part) { case "left ear": @@ -527,10 +527,19 @@ window.surgeryAmp = function(slave, part) { * @param {string} limb */ window.removeLimbs = function(slave, limb) { - // TODO: add bodymod support for prosthetics + function remove(limb, side) { + const prosthetic = findProsthetic(slave, limbToProsthetic(slave[limb][side].type)); + + if (prosthetic) { + prosthetic[limb][side] = slave[limb][side]; + } + + slave[limb][side] = null; + } + switch (limb) { case "left arm": - slave.arm.left = null; + remove("arm", "left"); delete slave.brand["left upper arm"]; delete slave.brand["left lower arm"]; delete slave.brand["left wrist"]; @@ -542,7 +551,7 @@ window.removeLimbs = function(slave, limb) { } break; case "right arm": - slave.arm.right = null; + remove("arm", "right"); delete slave.brand["right upper arm"]; delete slave.brand["right lower arm"]; delete slave.brand["right wrist"]; @@ -554,7 +563,7 @@ window.removeLimbs = function(slave, limb) { } break; case "left leg": - slave.leg.left = null; + remove("leg", "left"); delete slave.brand["left thigh"]; delete slave.brand["left calf"]; delete slave.brand["left ankle"]; @@ -568,7 +577,7 @@ window.removeLimbs = function(slave, limb) { } break; case "right leg": - slave.leg.right = null; + remove("leg", "right"); delete slave.brand["right thigh"]; delete slave.brand["right calf"]; delete slave.brand["right ankle"]; @@ -601,23 +610,29 @@ window.removeLimbs = function(slave, limb) { * @param {number} id */ window.attachLimbs = function(slave, limb, id) { - // TODO: add support for body mods + function attach(limb, side) { + let prosthetic = findProsthetic(slave, limbToProsthetic(id)); + + if (prosthetic) { + slave[limb][side] = prosthetic[limb][side]; + } else { + slave[limb][side] = new App.Entity.LimbState(); + slave[limb][side].type = id; + } + } + switch (limb) { case "left arm": - slave.arm.left = new App.Entity.LimbState(); - slave.arm.left.type = id; + attach("arm", "left"); break; case "right arm": - slave.arm.right = new App.Entity.LimbState(); - slave.arm.right.type = id; + attach("arm", "right"); break; case "left leg": - slave.leg.left = new App.Entity.LimbState(); - slave.leg.left.type = id; + attach("leg", "left"); break; case "right leg": - slave.leg.right = new App.Entity.LimbState(); - slave.leg.right.type = id; + attach("leg", "right"); break; case "all": attachLimbs(slave, "left arm", id); diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw index be7103ae00fe739d3fa55ff1e53255f069cca226..b22449d4445a03ede9b61b86dcaaa031be1d1386 100644 --- a/src/pregmod/widgets/pregmodWidgets.tw +++ b/src/pregmod/widgets/pregmodWidgets.tw @@ -598,6 +598,12 @@ <<run delete $args[0].missingEyes>> <</if>> +<<if $releaseID < 1052>> + <<set _prosthetics = $args[0].readyProsthetics, $args[0].readyProsthetics = []>> + <<for _p range _prosthetics>> + <<run addProsthetic($args[0], _p.id)>> + <</for>> +<</if>> <</widget>> diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 98c46e1fd57f7dfcac5963f679d99b63a9150e50..f9d7bc0acb157aab975c0d9d76a435eea1a4a978 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -4001,10 +4001,6 @@ Done<br> <</if>> <</if>> -<<if $releaseID < App.Version.release>> - <<set $releaseID = App.Version.release>> -<</if>> - <<if def $activeArcology>> <<unset $activeArcology>> <</if>> @@ -4137,5 +4133,10 @@ Done<br> <br>Fixed NaN FS value for FSStatuesqueGlorification <</if>> + +/* leave this at the bottom of BC */ +<<if $releaseID < App.Version.release>> + <<set $releaseID = App.Version.release>> +<</if>> /* reset NaNArray after BC is run */ <<set $NaNArray = findNaN()>> diff --git a/src/uncategorized/multiImplant.tw b/src/uncategorized/multiImplant.tw index 210e0eb9a3e3c99a4043d1eabcfc0b81b15dd0b3..88f76ef94c0921c94f8f6e46f3cff0791c9c04d5 100644 --- a/src/uncategorized/multiImplant.tw +++ b/src/uncategorized/multiImplant.tw @@ -1011,7 +1011,7 @@ You head down to your <<if $surgeryUpgrade == 1>>heavily upgraded and customized <<set _p = $adjustProsthetics[_k]>> <<if _p.slaveID == $activeSlave.ID && _p.workLeft <= 0>> <<set $adjustProsthetics.splice(_k, 1), _k-->> - <<set $activeSlave.readyProsthetics.push({id: _p.id})>> + <<set addProsthetic($activeSlave, _p.id)>> <br><hr> <<switch _p.id>> <<case "ocular">> diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw index 72ec058a913ff57c17a1de0f95e896c4e3a74d77..7cfdff045e767d885eed19ec86dc911495aeed58 100644 --- a/src/uncategorized/remoteSurgery.tw +++ b/src/uncategorized/remoteSurgery.tw @@ -8,7 +8,7 @@ <<if $adjustProstheticsCompleted > 0>> <<set $adjustProsthetics = $adjustProsthetics.filter(function(p) { if (p.workLeft <= 0 && p.slaveID == $activeSlave.ID) { - $activeSlave.readyProsthetics.push({id: p.id}); + addProsthetic($activeSlave, p.id); $adjustProstheticsCompleted--; return false; }