From b87d31c8d33bfef348a7e27675f5947ead308dc7 Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Fri, 20 Sep 2019 15:32:24 +0200
Subject: [PATCH] add bodymod support to prosthetics

---
 src/js/itemAvailability.js | 16 +++++++++++++-
 src/js/surgery.js          | 43 +++++++++++++++++++++++++-------------
 2 files changed, 44 insertions(+), 15 deletions(-)

diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js
index b2ced24f3d3..130127c6497 100644
--- a/src/js/itemAvailability.js
+++ b/src/js/itemAvailability.js
@@ -185,7 +185,21 @@ 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});
+		}
 	}
 };
 
diff --git a/src/js/surgery.js b/src/js/surgery.js
index 3efd07bcafc..404641a3d10 100644
--- a/src/js/surgery.js
+++ b/src/js/surgery.js
@@ -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);
-- 
GitLab