From ca838d90f8592cb2546220b9523f739d63eab0b5 Mon Sep 17 00:00:00 2001 From: RedWolfie <13683223+RedWolfie@users.noreply.github.com> Date: Sat, 26 Sep 2020 00:40:31 +0200 Subject: [PATCH] [Bugfix] Internal organs rot outside body (#14213) * added processing of internal organs * stop processing after insert organ * refactor --- code/modules/surgery/organs/organ.dm | 6 ------ code/modules/surgery/organs/organ_external.dm | 20 +++++++++++++++++++ code/modules/surgery/organs/organ_internal.dm | 18 ++++++++++++++++- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 5b9b5056604..e85466740e8 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -172,12 +172,6 @@ if(parent.germ_level < germ_level && ( parent.germ_level < INFECTION_LEVEL_ONE * 2 || prob(30))) parent.germ_level++ -/obj/item/organ/internal/handle_germs() - ..() - if(germ_level >= INFECTION_LEVEL_TWO) - if(prob(3)) //about once every 30 seconds - receive_damage(1, silent = prob(30)) - /obj/item/organ/proc/rejuvenate() damage = 0 germ_level = 0 diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 5fdf95f09a9..be3d00faf8e 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -808,3 +808,23 @@ Note that amputating the affected organ does in fact remove the infection from t var/obj/item/organ/external/L = X for(var/obj/item/I in L.embedded_objects) return 1 + +/obj/item/organ/external/emp_act(severity) + if(!is_robotic() || emp_proof) + return + if(tough) + switch(severity) + if(1) + receive_damage(0, 5.5) + if(owner) + owner.Stun(10) + if(2) + receive_damage(0, 2.8) + if(owner) + owner.Stun(5) + else + switch(severity) + if(1) + receive_damage(0, 20) + if(2) + receive_damage(0, 7) diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 5151b347f4d..78fa06122f5 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -36,13 +36,13 @@ log_runtime(EXCEPTION("[src] attempted to insert into a [parent_organ], but [parent_organ] wasn't an organ! [atom_loc_line(M)]"), src) else parent.internal_organs |= src - //M.internal_bodyparts_by_name[src] |= src(H,1) loc = null for(var/X in actions) var/datum/action/A = X A.Grant(M) if(vital) M.update_stat("Vital organ inserted") + STOP_PROCESSING(SSobj, src) // Removes the given organ from its owner. // Returns the removed object, which is usually just itself @@ -71,6 +71,7 @@ for(var/X in actions) var/datum/action/A = X A.Remove(M) + START_PROCESSING(SSobj, src) return src /obj/item/organ/internal/emp_act(severity) @@ -344,3 +345,18 @@ head_organ.f_style = "Very Long Beard" head_organ.facial_colour = "#D8C078" H.update_fhair() + +/obj/item/organ/internal/emp_act(severity) + if(!is_robotic() || emp_proof) + return + switch(severity) + if(1) + receive_damage(20, 1) + if(2) + receive_damage(7, 1) + +/obj/item/organ/internal/handle_germs() + ..() + if(germ_level >= INFECTION_LEVEL_TWO) + if(prob(3)) //about once every 30 seconds + receive_damage(1, silent = prob(30))