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 ..()