diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index c59d39dc14c..8f072f3e131 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -391,3 +391,7 @@ #define MOUSE_OPACITY_TRANSPARENT 0 #define MOUSE_OPACITY_ICON 1 #define MOUSE_OPACITY_OPAQUE 2 + +// Defib stats +#define DEFIB_TIME_LIMIT 120 +#define DEFIB_TIME_LOSS 60 \ No newline at end of file diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 2c75d6f36e2..178605853e8 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -164,6 +164,11 @@ var/image/holder = hud_list[STATUS_HUD] var/mob/living/simple_animal/borer/B = has_brain_worms() if(stat == DEAD || (status_flags & FAKEDEATH)) + if(timeofdeath) + var/tdelta = round(world.time - timeofdeath) + if(tdelta < (DEFIB_TIME_LIMIT * 10)) + holder.icon_state = "huddefib" + return holder.icon_state = "huddead" else if(status_flags & XENO_HOST) holder.icon_state = "hudxeno" diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index bcc69badc38..dd214c7a673 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -162,6 +162,10 @@ REAGENT SCANNER user.show_message("Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH))) user.show_message("Time of Death: [station_time_timestamp("hh:mm:ss", M.timeofdeath)]") + var/tdelta = round(world.time - M.timeofdeath) + if(tdelta < (DEFIB_TIME_LIMIT * 10)) + user.show_message("Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!") + if(istype(M, /mob/living/carbon/human) && mode == 1) var/mob/living/carbon/human/H = M var/list/damaged = H.get_damaged_organs(1,1) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 73bbd0d29d2..256656dfa31 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -357,8 +357,8 @@ QDEL_NULL(ghost) var/tplus = world.time - H.timeofdeath - var/tlimit = 3000 //past this much time the patient is unrecoverable (in deciseconds) - var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting + var/tlimit = DEFIB_TIME_LIMIT * 10 //past this much time the patient is unrecoverable (in deciseconds) + var/tloss = DEFIB_TIME_LOSS * 10 //brain damage starts setting in on the patient after some time left rotting var/total_burn = 0 var/total_brute = 0 if(do_after(user, 20 * toolspeed, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total @@ -420,6 +420,8 @@ H.emote("gasp") if(tplus > tloss) H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) + H.med_hud_set_health() + H.med_hud_set_status() defib.deductcharge(revivecost) add_attack_logs(user, M, "Revived with [src]") else diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 0421cbaad18..43a811dc3a3 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -67,6 +67,8 @@ med_hud_set_health() med_hud_set_status() + if(!gibbed && !QDELETED(src)) + addtimer(CALLBACK(src, .proc/med_hud_set_status), (DEFIB_TIME_LIMIT * 10) + 1) callHook("death", list(src, gibbed)) for(var/s in ownedSoullinks) diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index a58a11c3f32..1e6992c86a6 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ