diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 03abe25bd0c..7f1cd544af3 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -567,7 +567,7 @@ SLIME SCANNER
if(!O.is_robotic() || istype(O, /obj/item/organ/internal/cyberimp) || O.stealth_level > 1)
continue
organ_found = TRUE
- msgs += "[capitalize(O.name)]: [O.damage]"
+ msgs += "[capitalize(O.name)]: [O.status & ORGAN_DEAD ? "CRITICAL FAILURE" : O.damage]"
if(!organ_found)
msgs += "No prosthetics located."
msgs += "
"
@@ -578,7 +578,7 @@ SLIME SCANNER
if(I.stealth_level > 1)
continue
organ_found = TRUE
- msgs += "[capitalize(I.name)]: [I.crit_fail ? "CRITICAL FAILURE" : I.damage]"
+ msgs += "[capitalize(I.name)]: [(I.crit_fail || I.status & ORGAN_DEAD) ? "CRITICAL FAILURE" : I.damage]"
if(!organ_found)
msgs += "No implants located."
msgs += "
"
diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm
index 4cc16ad2a2b..474995a6873 100644
--- a/code/game/objects/items/storage/firstaid.dm
+++ b/code/game/objects/items/storage/firstaid.dm
@@ -153,7 +153,7 @@
new /obj/item/weldingtool/mini(src)
new /obj/item/stack/cable_coil(src)
new /obj/item/stack/cable_coil(src)
- new /obj/item/stack/cable_coil(src)
+ new /obj/item/stack/nanopaste(src)
new /obj/item/robotanalyzer(src)
new /obj/item/stack/synthetic_skin(src, 3)
diff --git a/code/modules/research/xenobiology/xenobiology_organs.dm b/code/modules/research/xenobiology/xenobiology_organs.dm
index 00efb06c765..89e30ef4f99 100644
--- a/code/modules/research/xenobiology/xenobiology_organs.dm
+++ b/code/modules/research/xenobiology/xenobiology_organs.dm
@@ -172,6 +172,8 @@
. = ..()
if(!(owner.mob_biotypes & MOB_ORGANIC))
return
+ if(status & ORGAN_DEAD)
+ return FALSE
switch(organ_quality)
if(ORGAN_DAMAGED)
owner.adjustToxLoss(-1)
@@ -819,6 +821,8 @@
/obj/item/organ/internal/kidneys/xenobiology/shivering/on_life()
. = ..()
+ if(status & ORGAN_DEAD)
+ return FALSE
if(owner.get_temperature() < owner.dna.species.cold_level_1 + 40)
switch(organ_quality)
if(ORGAN_DAMAGED)
@@ -837,6 +841,8 @@
/obj/item/organ/internal/kidneys/xenobiology/sweating/on_life()
. = ..()
+ if(status & ORGAN_DEAD)
+ return FALSE
if(owner.get_temperature() > owner.dna?.species.heat_level_1 - 40)
switch(organ_quality)
if(ORGAN_DAMAGED)
@@ -1023,6 +1029,8 @@
/obj/item/organ/internal/appendix/xenobiology/noisemaker/on_life()
. = ..()
+ if(status & ORGAN_DEAD)
+ return FALSE
if(organ_quality == ORGAN_BROKEN && prob(1))
owner.custom_emote("honks") // you just cant help it
playsound(owner.loc, 'sound/items/bikehorn.ogg', 50, FALSE)
@@ -1443,6 +1451,8 @@
/obj/item/organ/internal/ears/xenobiology/colorful/on_life()
. = ..()
+ if(status & ORGAN_DEAD)
+ return FALSE
if(!COOLDOWN_FINISHED(src, hair_change))
return
COOLDOWN_START(src, hair_change, 1 MINUTES)
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index a8cb43c31a3..fccbf75901f 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -175,7 +175,7 @@
return TRUE
/obj/item/organ/internal/cyberimp/arm/ui_action_click()
- if(crit_fail || (!holder && !length(contents)))
+ if(crit_fail || (!holder && !length(contents)) || status & ORGAN_DEAD)
to_chat(owner, "The implant doesn't respond. It seems to be broken...")
return
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
index 231c6b0fcd6..5af55a58f4a 100644
--- a/code/modules/surgery/organs/augments_internal.dm
+++ b/code/modules/surgery/organs/augments_internal.dm
@@ -157,6 +157,8 @@
/obj/item/organ/internal/cyberimp/brain/anti_stam/proc/on_enter()
SIGNAL_HANDLER // COMSIG_CARBON_ENTER_STAMINACRIT
+ if(status & ORGAN_DEAD)
+ return
if(currently_modifying_stamina || !COOLDOWN_FINISHED(src, implant_cooldown))
return
owner.stamina_regen_block_modifier *= stamina_crit_time_multiplier
@@ -195,6 +197,8 @@
..()
if(crit_fail)
return
+ if(status & ORGAN_DEAD)
+ return FALSE
if(owner.stat == UNCONSCIOUS && !cooldown)
owner.AdjustSleeping(-200 SECONDS)
owner.AdjustParalysis(-200 SECONDS)
@@ -637,6 +641,8 @@
return
if(owner.stat == DEAD)
return
+ if(status & ORGAN_DEAD)
+ return FALSE
if(owner.nutrition <= hunger_threshold)
synthesizing = TRUE
to_chat(owner, "You feel less hungry...")
@@ -725,9 +731,13 @@
return our_MA
/obj/item/organ/internal/cyberimp/chest/reviver/dead_process()
+ if(status & ORGAN_DEAD)
+ return FALSE
try_heal() // Allows implant to work even on dead people
/obj/item/organ/internal/cyberimp/chest/reviver/on_life()
+ if(status & ORGAN_DEAD)
+ return FALSE
try_heal()
/obj/item/organ/internal/cyberimp/chest/reviver/proc/try_heal()
@@ -937,6 +947,8 @@
/obj/item/organ/internal/cyberimp/chest/ipc_repair/on_life()
if(crit_fail)
return
+ if(status & ORGAN_DEAD)
+ return FALSE
if(owner.maxHealth == owner.health)
owner.adjust_nutrition(-0.25)
return //Passive damage scanning
diff --git a/code/modules/surgery/organs/organ_helpers.dm b/code/modules/surgery/organs/organ_helpers.dm
index 52fab181d45..0dc2866f1ba 100644
--- a/code/modules/surgery/organs/organ_helpers.dm
+++ b/code/modules/surgery/organs/organ_helpers.dm
@@ -94,6 +94,6 @@
if(!has_battery)
return FALSE
for(var/obj/item/organ/internal/organ in internal_organs)
- if(organ.vital && (organ.damage >= organ.max_damage))
+ if(organ.vital && ((organ.damage >= organ.max_damage) || organ.status & ORGAN_DEAD))
return FALSE
return TRUE
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index f703d85ab59..5012440a0ba 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -228,7 +228,7 @@
"You treat damage to [target]'s [I.name] with [tool_name].",
chat_message_type = MESSAGE_TYPE_COMBAT
)
- I.damage = 0
+ I.rejuvenate()
return SURGERY_STEP_CONTINUE
/datum/surgery_step/internal/manipulate_organs/mend/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index 9798c6cbd6e..b73d0675908 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -423,6 +423,8 @@
)
I.damage = 0
I.surgeryize()
+ if(istype(tool, /obj/item/stack/nanopaste))
+ I.rejuvenate()
target.update_stat("internal organs repaired")
return ..()