From cef52c73f8e076d2f7001df0cbecde404ecacd98 Mon Sep 17 00:00:00 2001 From: volas Date: Sat, 7 Mar 2015 18:03:49 +0300 Subject: [PATCH] Heartbeat --- code/modules/mob/living/carbon/human/life.dm | 43 +++++++++++++------ sound/effects/singlebeat.ogg | Bin 0 -> 15260 bytes 2 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 sound/effects/singlebeat.ogg diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 50b6de2988..5ad254b172 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -31,6 +31,7 @@ var/pressure_alert = 0 var/temperature_alert = 0 var/in_stasis = 0 + var/heartbeat = 0 /mob/living/carbon/human/Life() @@ -102,6 +103,8 @@ handle_medical_side_effects() + handle_heartbeat() + handle_stasis_bag() if(life_tick > 5 && timeofdeath && (timeofdeath < 5 || world.time - timeofdeath > 6000)) //We are long dead, or we're junk mobs spawned like the clowns on the clown shuttle @@ -617,7 +620,7 @@ else apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat") fire_alert = max(fire_alert, 2) - + else if(breath.temperature <= species.cold_level_1) if(breath.temperature > species.cold_level_2) apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold") @@ -705,7 +708,7 @@ //Body temperature is too hot. fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode - + if(bodytemperature < species.heat_level_2) take_overall_damage(burn=HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 2) @@ -719,7 +722,7 @@ else if(bodytemperature <= species.cold_level_1) fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode - + if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) if(bodytemperature > species.cold_level_2) take_overall_damage(burn=COLD_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") @@ -1558,6 +1561,22 @@ return temp + 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 we only set those statuses and icons upon changes. Then those HUD items will simply add those pre-made images. @@ -1574,14 +1593,14 @@ var/percentage_health = RoundHealth((health-config.health_threshold_crit)/(maxHealth-config.health_threshold_crit)*100) holder.icon_state = "hud[percentage_health]" hud_list[HEALTH_HUD] = holder - + if (BITTEST(hud_updateflag, LIFE_HUD)) var/image/holder = hud_list[STATUS_HUD] if(stat == DEAD) holder.icon_state = "huddead" else holder.icon_state = "hudhealthy" - + if (BITTEST(hud_updateflag, STATUS_HUD)) var/foundVirus = 0 for(var/datum/disease/D in viruses) @@ -1618,7 +1637,7 @@ hud_list[STATUS_HUD] = holder hud_list[STATUS_HUD_OOC] = holder2 - + if (BITTEST(hud_updateflag, ID_HUD)) var/image/holder = hud_list[ID_HUD] if(wear_id) @@ -1632,7 +1651,7 @@ hud_list[ID_HUD] = holder - + if (BITTEST(hud_updateflag, WANTED_HUD)) var/image/holder = hud_list[WANTED_HUD] holder.icon_state = "hudblank" @@ -1658,11 +1677,11 @@ holder.icon_state = "hudreleased" break hud_list[WANTED_HUD] = holder - + if ( BITTEST(hud_updateflag, IMPLOYAL_HUD) \ || BITTEST(hud_updateflag, IMPCHEM_HUD) \ || BITTEST(hud_updateflag, IMPTRACK_HUD)) - + var/image/holder1 = hud_list[IMPTRACK_HUD] var/image/holder2 = hud_list[IMPLOYAL_HUD] var/image/holder3 = hud_list[IMPCHEM_HUD] @@ -1683,7 +1702,7 @@ hud_list[IMPTRACK_HUD] = holder1 hud_list[IMPLOYAL_HUD] = holder2 hud_list[IMPCHEM_HUD] = holder3 - + if (BITTEST(hud_updateflag, SPECIALROLE_HUD)) var/image/holder = hud_list[SPECIALROLE_HUD] holder.icon_state = "hudblank" @@ -1744,10 +1763,10 @@ /mob/living/carbon/human/handle_fire() if(..()) return - + var/burn_temperature = fire_burn_temperature() var/thermal_protection = get_heat_protection(burn_temperature) - + if (thermal_protection < 1 && bodytemperature < burn_temperature) bodytemperature += round(BODYTEMP_HEATING_MAX*(1-thermal_protection), 1) diff --git a/sound/effects/singlebeat.ogg b/sound/effects/singlebeat.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8dd550d5d846306b03465cc1779f155bafc01c7e GIT binary patch literal 15260 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