diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 47af54c0d0b..2667535e50d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -32,9 +32,10 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc var/pressure_alert = 0 var/prev_gender = null // Debug for plural genders var/temperature_alert = 0 - var/in_stasis = 0 + var/in_stasis = 0 var/exposedtimenow = 0 - var/firstexposed = 0 + var/firstexposed = 0 + var/heartbeat = 0 /mob/living/carbon/human/Life() set invisibility = 0 @@ -109,9 +110,11 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc handle_pain() handle_medical_side_effects() - + + handle_heartbeat() + if(stat == DEAD) - handle_decay() + handle_decay() handle_stasis_bag() @@ -464,8 +467,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc affected.add_autopsy_data("Suffocation", oxyloss) oxygen_alert = max(oxygen_alert, 1) - - return 0 + + return 0 return species.handle_breath(breath, src) @@ -498,7 +501,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc //Body temperature is too hot. fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode - if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2) + + if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2) take_overall_damage(burn=HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 2) if(bodytemperature > species.heat_level_2 && bodytemperature <= species.heat_level_3) @@ -515,7 +519,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc else if(bodytemperature < species.cold_level_1) fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode + if(stat == DEAD) return 1 //ZomgPonies -- No need for cold burn damage if dead + if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) if(bodytemperature >= species.cold_level_2 && bodytemperature <= species.cold_level_1) take_overall_damage(burn=COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature") @@ -1610,7 +1616,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc break return temp - + proc/handle_decay() var/decaytime = world.time - timeofdeath @@ -1645,6 +1651,22 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return H << "You smell something foul..." H.vomit() + + proc/handle_heartbeat() + if(pulse == PULSE_NONE) + return + + if(pulse >= PULSE_2FAST || shock_stage >= 10 || istype(get_turf(src), /turf/space)) + //PULSE_THREADY - maximum value for pulse, currently it 5. + //High pulse value corresponds to a fast rate of heartbeat. + //Divided by 2, otherwise it is too slow. + var/rate = (PULSE_THREADY - pulse)/2 + + if(heartbeat >= rate) + heartbeat = 0 + src << sound('sound/effects/singlebeat.ogg',0,0,0,60) + else + heartbeat++ /* Called by life(), instead of having the individual hud items update icons each tick and check for status changes @@ -1664,7 +1686,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc hud_list[HEALTH_HUD] = holder - if(hud_updateflag & 1 << STATUS_HUD) + + if(hud_updateflag & 1 << STATUS_HUD) var/foundVirus = 0 for (var/ID in virus2) if (ID in virusDB) @@ -1698,7 +1721,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc hud_list[STATUS_HUD] = holder hud_list[STATUS_HUD_OOC] = holder2 - if(hud_updateflag & 1 << ID_HUD) + + if(hud_updateflag & 1 << ID_HUD) var/image/holder = hud_list[ID_HUD] if(wear_id) var/obj/item/weapon/card/id/I = wear_id.GetID() @@ -1712,7 +1736,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc hud_list[ID_HUD] = holder - if(hud_updateflag & 1 << WANTED_HUD) + + if(hud_updateflag & 1 << WANTED_HUD) var/image/holder = hud_list[WANTED_HUD] holder.icon_state = "hudblank" var/perpname = name @@ -1737,7 +1762,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc break hud_list[WANTED_HUD] = holder - if(hud_updateflag & 1 << IMPLOYAL_HUD || hud_updateflag & 1 << IMPCHEM_HUD || hud_updateflag & 1 << IMPTRACK_HUD) + + if(hud_updateflag & 1 << IMPLOYAL_HUD || hud_updateflag & 1 << IMPCHEM_HUD || hud_updateflag & 1 << IMPTRACK_HUD) var/image/holder1 = hud_list[IMPTRACK_HUD] var/image/holder2 = hud_list[IMPLOYAL_HUD] var/image/holder3 = hud_list[IMPCHEM_HUD] @@ -1756,10 +1782,10 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc holder3.icon_state = "hud_imp_chem" hud_list[IMPTRACK_HUD] = holder1 - hud_list[IMPLOYAL_HUD] = holder2 + hud_list[IMPLOYAL_HUD] = holder2 hud_list[IMPCHEM_HUD] = holder3 - if(hud_updateflag & 1 << SPECIALROLE_HUD) + if(hud_updateflag & 1 << SPECIALROLE_HUD) var/image/holder = hud_list[SPECIALROLE_HUD] holder.icon_state = "hudblank" @@ -1848,6 +1874,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc speech_problem_flag = 1 return stuttering + // Need this in species. //#undef HUMAN_MAX_OXYLOSS //#undef HUMAN_CRIT_MAX_OXYLOSS diff --git a/sound/effects/singlebeat.ogg b/sound/effects/singlebeat.ogg new file mode 100644 index 00000000000..8dd550d5d84 Binary files /dev/null and b/sound/effects/singlebeat.ogg differ