From 663339986d81a18b9a20d6177a9dcf0a8b960cfd Mon Sep 17 00:00:00 2001 From: Pooble <90473506+poobsie@users.noreply.github.com> Date: Thu, 27 Nov 2025 23:08:09 -0500 Subject: [PATCH] IPC arm implant no longer overridden by cybernetic revolution (#31044) * makes cybernetic implant not overwrite arm implant * fix for case of no arms --- code/datums/station_traits/positive_traits.dm | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/code/datums/station_traits/positive_traits.dm b/code/datums/station_traits/positive_traits.dm index 46a5ef8340a..77f6224bd13 100644 --- a/code/datums/station_traits/positive_traits.dm +++ b/code/datums/station_traits/positive_traits.dm @@ -220,4 +220,31 @@ ai.eyeobj.relay_speech = TRUE //surveillance upgrade. the ai gets cybernetics too. return var/obj/item/organ/internal/cybernetic = new cybernetic_type() + + // Prevent replacing existing arm implants (protect IPC arm implant) + if(istype(cybernetic, /obj/item/organ/internal/cyberimp/arm)) + var/obj/item/organ/internal/cyberimp/arm/arm_implant = cybernetic + + var/obj/item/organ/external/left_arm = spawned.get_organ("l_arm") + var/obj/item/organ/external/right_arm = spawned.get_organ("r_arm") + + var/obj/item/organ/internal/left_arm_implant = spawned.get_organ_slot("l_arm_device") + var/obj/item/organ/internal/right_arm_implant = spawned.get_organ_slot("r_arm_device") + + // Try left arm first, then right arm, then replace left arm if both occupied, then just give up. + if(left_arm && !left_arm_implant) + arm_implant.slot = "l_arm_device" + arm_implant.parent_organ = "l_arm" + else if(right_arm && !right_arm_implant) + arm_implant.slot = "r_arm_device" + arm_implant.parent_organ = "r_arm" + else if(left_arm) + left_arm_implant.remove(spawned) + qdel(left_arm_implant) + arm_implant.slot = "l_arm_device" + arm_implant.parent_organ = "l_arm" + else + qdel(arm_implant) + return + INVOKE_ASYNC(cybernetic, TYPE_PROC_REF(/obj/item/organ/internal, insert), spawned, TRUE)