diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index 10b8d580447..e06d9d3788e 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -69,23 +69,35 @@
owner.brain_op_stage = 4.0
var/obj/item/organ/brain/B = src
- if(istype(B) && istype(owner))
+ if(istype(B) && istype(owner) && owner.internal_organs_by_name[organ_tag] == src)
B.transfer_identity(owner)
..()
/obj/item/organ/brain/replaced(var/mob/living/target)
- if(target.key)
- target.ghostize()
- var/mob/living/carbon/C = target
- if(istype(C))
- C.brain_op_stage = 1.0
+ var/brain_already_exists = 0
+ if(istype(target,/mob/living/carbon/human)) // No more IPC multibrain shenanigans
+ var/mob/living/carbon/human/H = target
+ if(organ_tag in H.internal_organs_by_name)
+ brain_already_exists = 1
+
+ if(!brain_already_exists)
+ if(target.key)
+ target.ghostize()
+ var/mob/living/carbon/C = target
+ if(istype(C))
+ C.brain_op_stage = 1.0
+ if(brainmob)
+ if(brainmob.mind)
+ brainmob.mind.transfer_to(target)
+ else
+ target.key = brainmob.key
+ ..()
+
+/obj/item/organ/brain/die()
if(brainmob)
- if(brainmob.mind)
- brainmob.mind.transfer_to(target)
- else
- target.key = brainmob.key
+ brainmob.death(0)
..()
/obj/item/organ/brain/slime
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
index 2a191c46217..1a3ccdf0ca6 100644
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ b/code/modules/mob/living/carbon/brain/life.dm
@@ -4,7 +4,7 @@
radiation -= 3
adjustToxLoss(3)
updatehealth()
- if(!container)
+ if(!container) // The brains are containers - Theory: Everyone on the station is secretly a highly-advanced cyborg, wearing meat shells
src << "You feel weak."
else
src << "STATUS: CRITICAL AMOUNTS OF RADIATION DETECTED."
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index e7d4fd89eba..5176f1a02d8 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -257,12 +257,17 @@ var/list/organ_cache = list()
/obj/item/organ/proc/removed(var/mob/living/user)
+ var/primary_organ = 1
if(!istype(owner))
return
- owner.internal_organs_by_name[organ_tag] = null
- owner.internal_organs_by_name -= organ_tag
- owner.internal_organs_by_name -= null
+ if(owner.internal_organs_by_name[organ_tag] == src)
+ owner.internal_organs_by_name[organ_tag] = null
+ owner.internal_organs_by_name -= organ_tag
+ owner.internal_organs_by_name -= null
+ else
+ primary_organ = 0
+
owner.internal_organs -= src
var/obj/item/organ/external/affected = owner.get_organ(parent_organ)
@@ -275,7 +280,7 @@ var/list/organ_cache = list()
if(!organ_blood || !organ_blood.data["blood_DNA"])
owner.vessel.trans_to(src, 5, 1, 1)
- if(owner && vital)
+ if(owner && vital && primary_organ) // I'd do another check for species or whatever so that you couldn't "kill" an IPC by removing a human head from them, but it doesn't matter since they'll come right back from the dead
if(user)
user.attack_log += "\[[time_stamp()]\] removed a vital organ ([src]) from [key_name(owner)] (INTENT: [uppertext(user.a_intent)])"
owner.attack_log += "\[[time_stamp()]\] had a vital organ ([src]) removed by [key_name(user)] (INTENT: [uppertext(user.a_intent)])"
@@ -291,7 +296,8 @@ var/list/organ_cache = list()
processing_objects -= src
target.internal_organs |= src
affected.internal_organs |= src
- target.internal_organs_by_name[organ_tag] = src
+ if (!(organ_tag in target.internal_organs_by_name))
+ target.internal_organs_by_name[organ_tag] = src // In case multiple of the same type are inserted, only the first one is the primary organ
src.loc = target
if(robotic)
status |= ORGAN_ROBOT