From b267325adf260f35a5efa42a2073cdecf6cdbf41 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Tue, 21 Feb 2023 11:44:55 +0800 Subject: [PATCH] fixes a few issues with derobotizing --- .../preference_setup/general/03_body.dm | 21 +++++++++++++++++++ code/modules/organs/organ_external.dm | 2 ++ 2 files changed, 23 insertions(+) diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index b32ab6d357..aea2eba010 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -346,6 +346,27 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O // Destroy/cyborgize organs and limbs. character.synthetic = null //Clear the existing var. + var/list/to_unamputate = list() + for(var/name in list(BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG)) + var/status = pref.organ_data[name] + var/obj/item/organ/external/O = character.organs_by_name[name] + if (!O) + if (status != "amputated") + var/is_robotic = pref.organ_data[BP_TORSO] == "cyborg" + var/obj/item/organ/external/newpath = character.species?.has_limbs[name]?["path"] + if (!newpath) + continue + var/parent_name = initial(newpath.parent_organ) + var/obj/item/organ/external/I = character.organs_by_name[parent_name] + if (!I && pref.organ_data[parent_name] != "amputated") + to_unamputate[parent_name] = list("path" = character.species.has_limbs[parent_name]?["path"], "robotic" = is_robotic, "model" = pref.rlimb_data[BP_TORSO]) + is_robotic ||= I?.robotic + to_unamputate[name] = list("path" = newpath, "robotic" = is_robotic, "model" = pref.rlimb_data[parent_name]||pref.rlimb_data[BP_TORSO]) + for(var/name in to_unamputate) + var/newpath = to_unamputate[name]["path"] + var/obj/item/organ/external/s = new newpath(character) + if (to_unamputate[name]["robotic"]) + s.robotize(to_unamputate[name]["model"]) for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO)) var/status = pref.organ_data[name] var/obj/item/organ/external/O = character.organs_by_name[name] diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 822ce2776f..bb0f377058 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -1155,6 +1155,8 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/derobotize(var/restore_organs = TRUE) . = ..() if (!.) return + var/obj/item/organ/external/parent = owner?.organs_by_name[parent_organ] + if (parent && parent.robotic) return FALSE var/datum/robolimb/R = all_robolimbs[model] if (R) brute_mod /= R.robo_brute_mod