From 6d0f8388a7b74ac0cd91c42e8343ae3ebe1a78ca Mon Sep 17 00:00:00 2001 From: NanakoAC Date: Thu, 23 Jun 2016 00:16:06 +0100 Subject: [PATCH] Medical HUD useability improvements (#413) - bugfix: "Medical huds will now properly update as wounds heal passively, or when bandaged" - rscadd: "Added a new Medical HUD state between 70 and 100%, to better recognise very small amounts of damage" - rscadd: "Medical huds will no longer show the healthbar on crewmembers who are at full health" - rscadd: "Added a healthbar fadeout effect for when someone heals up to 100% while you're watching" - tweak: "Medical huds now update more frequently" --- code/__HELPERS/mobs.dm | 4 +- code/modules/mob/living/carbon/human/life.dm | 13 +++++- code/modules/organs/organ_external.dm | 8 +++- html/changelogs/Nanako-PR-413.yml | 41 +++++++++++++++++++ icons/mob/hud.dmi | Bin 3770 -> 8041 bytes 5 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 html/changelogs/Nanako-PR-413.yml diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 89b96aa24bf..cc77f20c337 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -90,7 +90,9 @@ proc/RoundHealth(health) switch(health) if(100 to INFINITY) return "health100" - if(70 to 100) + if(90 to 100) + return "health95" + if(70 to 90) return "health80" if(50 to 70) return "health60" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 8d7dfac05ef..264eed39159 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -55,12 +55,13 @@ //TODO: seperate this out // update the current life tick, can be used to e.g. only do something every 4 ticks life_tick++ + var/datum/gas_mixture/environment = loc.return_air() in_stasis = istype(loc, /obj/structure/closet/body_bag/cryobag) && loc:opened == 0 if(in_stasis) loc:used++ - if(life_tick%30==15) + if(life_tick%30==5)//Makes huds update every 10 seconds instead of every 30 seconds hud_updateflag = 1022 voice = GetVoice() @@ -1613,7 +1614,15 @@ holder.icon_state = "hudhealth-100" // X_X else var/percentage_health = RoundHealth((health-config.health_threshold_crit)/(maxHealth-config.health_threshold_crit)*100) - holder.icon_state = "hud[percentage_health]" + + if (percentage_health == "health100" && holder.icon_state && holder.icon_state != "hudhealth100" && holder.icon_state != "hudhealth100a") + holder.icon_state = "hudhealth100a" + spawn(30)//just to prevent any issues with the animation, we'll set it to the normal state after 3 seconds + percentage_health = RoundHealth((health-config.health_threshold_crit)/(maxHealth-config.health_threshold_crit)*100) + if (percentage_health == "health100") + holder.icon_state = "hudhealth100" + else + holder.icon_state = "hud[percentage_health]" hud_list[HEALTH_HUD] = holder if (BITTEST(hud_updateflag, LIFE_HUD)) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index ad5a53b27fa..3e0b89d2a53 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -559,7 +559,7 @@ Note that amputating the affected organ does in fact remove the infection from t if((status & ORGAN_ROBOT) || (status & ORGAN_ADV_ROBOT)) //Robotic limbs don't heal or get worse. return - + var/updatehud for(var/datum/wound/W in wounds) // wounds can disappear after 10 minutes at the earliest if(W.damage <= 0 && W.created + 10 * 10 * 60 <= world.time) @@ -567,6 +567,9 @@ Note that amputating the affected organ does in fact remove the infection from t continue // let the GC handle the deletion of the wound + if (W.damage > 0) + updatehud = 1//If there are any wounds with damage to heal, then we'll update health huds + // Internal wounds get worse over time. Low temperatures (cryo) stop them. if(W.internal && owner.bodytemperature >= 170) var/bicardose = owner.reagents.get_reagent_amount("bicaridine") @@ -604,6 +607,9 @@ Note that amputating the affected organ does in fact remove the infection from t // sync the organ's damage with its wounds src.update_damages() + if (updatehud) + owner.hud_updateflag = 1022 + if (update_icon()) owner.UpdateDamageIcon(1) diff --git a/html/changelogs/Nanako-PR-413.yml b/html/changelogs/Nanako-PR-413.yml new file mode 100644 index 00000000000..58fef228dda --- /dev/null +++ b/html/changelogs/Nanako-PR-413.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Nanako + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Medical huds will now properly update as wounds heal passively, or when bandaged" + - rscadd: "Added a new Medical HUD state between 70 and 100%, to better recognise very small amounts of damage" + - rscadd: "Medical huds will no longer show the healthbar on crewmembers who are at full health" + - rscadd: "Added a healthbar fadeout effect for when someone heals up to 100% while you're watching" + - tweak: "Medical huds now update more frequently" + diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index ec64d22c32c054aed5f67d77eb52dae0d2309710..186104dd8648307373245f7db1bd7854d81b8148 100644 GIT binary patch literal 8041 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 T4NMMJOaL%7v@|HwKTrQ37NDsv