diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 99a62b83131..b1fc3398af0 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -375,6 +375,13 @@ update_icon() return else + var/obj/item/organ/internal/heart/heart = H.get_int_organ(/obj/item/organ/internal/heart) + if(heart.status & ORGAN_DEAD) + user.visible_message("[defib] buzzes: Resuscitation failed - Heart necrosis detected.") + playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) + busy = 0 + update_icon() + return H.set_heartattack(FALSE) user.visible_message("[defib] pings: Cardiac arrhythmia corrected.") M.visible_message("[M]'s body convulses a bit.") diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index d1b44798b85..c9f89743e7c 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -92,13 +92,14 @@ //Mitocholide is hard enough to get, it's probably fair to make this all internal organs for(var/obj/item/organ/internal/I in H.internal_organs) - I.receive_damage(-0.4) + I.heal_internal_damage(0.4) ..() /datum/reagent/medicine/mitocholide/reaction_obj(obj/O, volume) if(istype(O, /obj/item/organ)) var/obj/item/organ/Org = O - Org.rejuvenate() + if(!Org.is_robotic()) + Org.rejuvenate() /datum/reagent/medicine/cryoxadone name = "Cryoxadone" @@ -520,7 +521,7 @@ var/mob/living/carbon/human/H = M var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) if(istype(E)) - E.receive_damage(-1) + E.heal_internal_damage(1) M.AdjustEyeBlurry(-1) M.AdjustEarDamage(-1) if(prob(50)) diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 43820adbed1..59643723d78 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -32,8 +32,15 @@ return Stop() +/obj/item/organ/internal/heart/necrotize() + ..() + Stop() + /obj/item/organ/internal/heart/attack_self(mob/user) ..() + if(status & ORGAN_DEAD) + to_chat(user, "You can't restart a dead heart.") + return if(!beating) Restart() spawn(80) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index d485c3d87ac..7f54eb60d9d 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -73,13 +73,11 @@ blood_DNA = list() blood_DNA[dna.unique_enzymes] = dna.b_type -/obj/item/organ/proc/necrotize(update_sprite=TRUE) - if(is_robotic()) - return +/obj/item/organ/proc/necrotize(update_sprite = TRUE) damage = max_damage status |= ORGAN_DEAD processing_objects -= src - if(dead_icon) + if(dead_icon && !is_robotic()) icon_state = dead_icon if(owner && vital) owner.death() @@ -221,21 +219,23 @@ /obj/item/organ/proc/receive_damage(amount, silent = 0) if(tough) return - if(is_robotic()) - damage = between(0, damage + (amount * 0.8), max_damage) - else - damage = between(0, damage + amount, max_damage) + damage = between(0, damage + amount, max_damage) - //only show this if the organ is not robotic - if(owner && parent_organ && amount > 0) - var/obj/item/organ/external/parent = owner.get_organ(parent_organ) - if(parent && !silent) - owner.custom_pain("Something inside your [parent.name] hurts a lot.") + //only show this if the organ is not robotic + if(owner && parent_organ && amount > 0) + var/obj/item/organ/external/parent = owner.get_organ(parent_organ) + if(parent && !silent) + owner.custom_pain("Something inside your [parent.name] hurts a lot.") //check if we've hit max_damage if(damage >= max_damage) necrotize() +/obj/item/organ/proc/heal_internal_damage(amount, robo_repair = FALSE) + if(is_robotic() && !robo_repair) + return + damage = max(damage - amount, 0) + /obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc status &= ~ORGAN_BROKEN status &= ~ORGAN_SPLINTED diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 7fbfedf849f..11e16d10b1a 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -208,7 +208,12 @@ for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage) - if(I.is_robotic() && istype(tool, /obj/item/stack/nanopaste)) + if(!I.is_robotic() && !istype (tool, /obj/item/stack/nanopaste)) + if(!(I.sterile)) + spread_germs_to_organ(I, user, tool) + user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ + "You start treating damage to [target]'s [I.name] with [tool_name]." ) + else if(I.is_robotic() && istype(tool, /obj/item/stack/nanopaste)) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) @@ -241,7 +246,11 @@ if(I) I.surgeryize() if(I && I.damage) - if(I.is_robotic() && istype(tool, /obj/item/stack/nanopaste)) + if(!I.is_robotic() && !istype (tool, /obj/item/stack/nanopaste)) + user.visible_message(" [user] treats damage to [target]'s [I.name] with [tool_name].", \ + " You treat damage to [target]'s [I.name] with [tool_name]." ) + I.damage = 0 + else if(I.is_robotic() && istype (tool, /obj/item/stack/nanopaste)) user.visible_message(" [user] treats damage to [target]'s [I.name] with [tool_name].", \ " You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0