diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 5874a794c9a..a60554e64b0 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -76,56 +76,54 @@ return 0 //helper for getting the appropriate health status UPDATED BY PUCKABOO2 TO INCLUDE NEGATIVES. -/proc/RoundHealth(health) - switch(health) +/proc/RoundHealth(mob/living/M) + if(M.stat == DEAD) + return "health-100" //what's our health? it doesn't matter, we're dead + var/resulthealth = (M.health / M.maxHealth) * 100 + switch(resulthealth) if(100 to INFINITY) return "health100" - if(95 to 100) - return "health95" //For telling patients to eat a warm donk pocket and go on with their shift. - if(90 to 95) - return "health90" - if(80 to 90) - return "health80" - if(70 to 80) - return "health70" - if(60 to 70) - return "health60" - if(50 to 60) + if(90.625 to 100) + return "health93.75" + if(84.375 to 90.625) + return "health87.5" + if(78.125 to 84.375) + return "health81.25" + if(71.875 to 78.125) + return "health75" + if(65.625 to 71.875) + return "health68.75" + if(59.375 to 65.625) + return "health62.5" + if(53.125 to 59.375) + return "health56.25" + if(46.875 to 53.125) return "health50" - if(40 to 50) - return "health40" - if(30 to 40) - return "health30" - if(20 to 30) - return "health20" - if(10 to 20) - return "health10" - if(0 to 10) + if(40.625 to 46.875) + return "health43.75" + if(34.375 to 40.625) + return "health37.5" + if(28.125 to 34.375) + return "health31.25" + if(21.875 to 28.125) + return "health25" + if(15.625 to 21.875) + return "health18.75" + if(9.375 to 15.625) + return "health12.5" + if(1 to 9.375) + return "health6.25" + if(-50 to 1) return "health0" - if(-10 to 0) - return "health-0" //The health bar will turn a brilliant red and flash as usual, but deducted health will be black. - if(-20 to -10) - return "health-10" - if(-30 to -20) - return "health-20" - if(-40 to -30) - return "health-30" - if(-50 to -40) - return "health-40" - if(-60 to -50) + if(-85 to -50) return "health-50" - if(-70 to -60) - return "health-60" - if(-80 to -70) - return "health-70" //Doc? - if(-90 to -80) - return "health-80" //Hey, doc? - if(-100 to -90) - return "health-90" //HURRY UP, DOC! + if(-99 to -85) + return "health-85" else - return "health-100" //doc u had 1 job + return "health-100" return "0" + ///HOOKS //called when a human changes suit sensors @@ -134,22 +132,26 @@ B.update_suit_sensors(src) -//called when a carbon changes health -/mob/living/carbon/proc/med_hud_set_health() +//called when a living mob changes health +/mob/living/proc/med_hud_set_health() var/image/holder = hud_list[HEALTH_HUD] - if(stat == 2) - holder.icon_state = "hudhealth-100" - else - holder.icon_state = "hud[RoundHealth(health)]" + holder.icon_state = "hud[RoundHealth(src)]" + //called when a carbon changes stat, virus or XENO_HOST -/mob/living/carbon/proc/med_hud_set_status() +/mob/living/proc/med_hud_set_status() var/image/holder = hud_list[STATUS_HUD] - //var/image/holder2 = hud_list[STATUS_HUD_OOC] - var/mob/living/simple_animal/borer/B = has_brain_worms() - if(stat == 2) + if(stat == DEAD) + holder.icon_state = "huddead" + else + holder.icon_state = "hudhealthy" + +//called when a carbon changes stat, virus or XENO_HOST +/mob/living/carbon/med_hud_set_status() + var/image/holder = hud_list[STATUS_HUD] + var/mob/living/simple_animal/borer/B = has_brain_worms() + if(stat == DEAD) holder.icon_state = "huddead" - //holder2.icon_state = "huddead" else if(status_flags & XENO_HOST) holder.icon_state = "hudxeno" else if(check_virus()) @@ -158,7 +160,6 @@ holder.icon_state = "hudbrainworm" else holder.icon_state = "hudhealthy" - //holder2.icon_state = "hudhealthy" diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 9f39ca418ea..a44d759dd6d 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -112,6 +112,7 @@ loot = list(/obj/effect/decal/cleanable/blood/gibs/robot, /obj/item/weapon/ore/bluespace_crystal/artificial) deathmessage = "The swarmer explodes with a sharp pop!" del_on_death = 1 + hud_possible = list(SPECIALROLE_HUD, DIAG_STAT_HUD, DIAG_HUD) /mob/living/simple_animal/hostile/swarmer/Login() ..() @@ -131,6 +132,18 @@ diag_hud.add_to_hud(src) updatename() +/mob/living/simple_animal/hostile/swarmer/med_hud_set_health() + var/image/holder = hud_list[DIAG_HUD] + var/icon/I = icon(icon, icon_state, dir) + holder.pixel_y = I.Height() - world.icon_size + holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" + +/mob/living/simple_animal/hostile/swarmer/med_hud_set_status() + var/image/holder = hud_list[DIAG_STAT_HUD] + var/icon/I = icon(icon, icon_state, dir) + holder.pixel_y = I.Height() - world.icon_size + holder.icon_state = "hudstat" + /mob/living/simple_animal/hostile/swarmer/Stat() ..() if(statpanel("Status")) diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 009debb8324..cbafa85b9a1 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -41,6 +41,21 @@ var/adminseal = FALSE var/name_color = "white"//only used with protector shields for the time being +/mob/living/simple_animal/hostile/guardian/med_hud_set_health() + if(summoner) + var/image/holder = hud_list[HEALTH_HUD] + holder.icon_state = "hud[RoundHealth(summoner)]" + +/mob/living/simple_animal/hostile/guardian/med_hud_set_status() + if(summoner) + var/image/holder = hud_list[STATUS_HUD] + var/icon/I = icon(icon, icon_state, dir) + holder.pixel_y = I.Height() - world.icon_size + if(summoner.stat == DEAD) + holder.icon_state = "huddead" + else + holder.icon_state = "hudhealthy" + /mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies ..() if(summoner) @@ -88,7 +103,8 @@ resulthealth = round((summoner.health / summoner.maxHealth) * 100) if(hud_used) hud_used.guardianhealthdisplay.maptext = "
[resulthealth]%
" - + med_hud_set_health() + med_hud_set_status() /mob/living/simple_animal/hostile/guardian/adjustHealth(amount) //The spirit is invincible, but passes on damage to the summoner var/damage = amount * damage_transfer diff --git a/code/game/gamemodes/miniantags/guardian/types/healer.dm b/code/game/gamemodes/miniantags/guardian/types/healer.dm index 0a6efb45d06..f0266dda890 100644 --- a/code/game/gamemodes/miniantags/guardian/types/healer.dm +++ b/code/game/gamemodes/miniantags/guardian/types/healer.dm @@ -52,6 +52,9 @@ C.adjustOxyLoss(-5) C.adjustToxLoss(-5) heal_cooldown = world.time + 20 + if(C == summoner) + med_hud_set_health() + med_hud_set_status() /mob/living/simple_animal/hostile/guardian/healer/ToggleMode() if(loc == summoner) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 06110242eba..017e9d1c6cb 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -2,20 +2,6 @@ var/canEnterVentWith = "/obj/item/weapon/implant=0&/obj/item/clothing/mask/facehugger=0&/obj/item/device/radio/borg=0&/obj/machinery/camera=0" var/datum/middleClickOverride/middleClickOverride = null -/mob/living/carbon/prepare_huds() - ..() - prepare_data_huds() - -/mob/living/carbon/proc/prepare_data_huds() - ..() - med_hud_set_health() - med_hud_set_status() - -/mob/living/carbon/updatehealth() - ..() - med_hud_set_health() - med_hud_set_status() - /mob/living/carbon/Destroy() QDEL_LIST(internal_organs) QDEL_LIST(stomach_contents) @@ -23,7 +9,6 @@ if(B) B.leave_host() qdel(B) - remove_from_all_data_huds() return ..() /mob/living/carbon/blob_act() diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 4de6b16a687..ac93c97f447 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -1,6 +1,5 @@ /mob/living/carbon gender = MALE - hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD) var/list/stomach_contents = list() var/list/internal_organs = list() var/list/internal_organs_slot = list() //Same as above, but stores "slot ID" - "organ" pairs for easy access. diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 2221455c5a5..9056a078791 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -14,4 +14,7 @@ var/datum/soullink/S = s S.sharerDies(gibbed, src) + med_hud_set_health() + med_hud_set_status() + ..(gibbed) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 8c81980eb8e..807ee0ef6cd 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1,7 +1,22 @@ +/mob/living/New() + . = ..() + var/datum/atom_hud/data/human/medical/advanced/medhud = huds[DATA_HUD_MEDICAL_ADVANCED] + medhud.add_to_hud(src) + +/mob/living/prepare_huds() + ..() + prepare_data_huds() + +/mob/living/proc/prepare_data_huds() + ..() + med_hud_set_health() + med_hud_set_status() + /mob/living/Destroy() if(ranged_ability) ranged_ability.remove_ranged_ability(src) + remove_from_all_data_huds() return ..() /mob/living/ghostize(can_reenter_corpse = 1) @@ -214,6 +229,7 @@ stat = CONSCIOUS return health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() + med_hud_set_health() //This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 5aaf02688d3..d5c1480a3b7 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -64,3 +64,4 @@ var/list/recent_tastes = list() var/blood_volume = 0 //how much blood the mob has + hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 7e986f2f434..7469c2cca73 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -44,6 +44,12 @@ add_language("Galactic Common") init_subsystems() +/mob/living/silicon/med_hud_set_health() + return //we use a different hud + +/mob/living/silicon/med_hud_set_status() + return //we use a different hud + /mob/living/silicon/Destroy() silicon_mob_list -= src for(var/datum/alarm_handler/AH in alarm_handlers) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 479f727d9e6..bbf591ee453 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -75,6 +75,7 @@ var/control_freq = BOT_FREQ // bot control frequency var/bot_filter // The radio filter the bot uses to identify itself on the network. var/bot_type = 0 //The type of bot it is, for radio control. + var/data_hud_type = DATA_HUD_DIAGNOSTIC //The type of data HUD the bot uses. Diagnostic by default. //This holds text for what the bot is mode doing, reported on the remote bot control interface. var/list/mode_name = list("In Pursuit","Preparing to Arrest", "Arresting", \ "Beginning Patrol", "Patrolling", "Summoned by PDA", \ @@ -170,6 +171,13 @@ path_hud.add_to_hud(src) path_hud.add_hud_to(src) + +/mob/living/simple_animal/bot/med_hud_set_health() + return //we use a different hud + +/mob/living/simple_animal/bot/med_hud_set_status() + return //we use a different hud + /mob/living/simple_animal/bot/update_canmove(delay_action_updates = 0) . = ..() if(!on) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 8a7ccfa37a5..3cf6e92d5f1 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -21,6 +21,7 @@ window_id = "autoed209" window_name = "Automatic Security Unit v2.6" path_image_color = "#FF0000" + data_hud_type = DATA_HUD_SECURITY_ADVANCED var/lastfired = 0 var/shot_delay = 3 //.3 seconds between shots diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index ac48445e32c..d1fbd235efc 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -20,6 +20,7 @@ window_id = "automed" window_name = "Automatic Medical Unit v1.1" path_image_color = "#DDDDFF" + data_hud_type = DATA_HUD_MEDICAL_ADVANCED var/obj/item/weapon/reagent_containers/glass/reagent_glass = null //Can be set to draw from this for reagents. var/skin = null //Set to "tox", "ointment" or "o2" for the other two firstaid kits. diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 2a06bb488cf..0d1cbe27cb5 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -19,6 +19,7 @@ window_id = "autosec" window_name = "Automatic Security Unit v1.6" path_image_color = "#FF0000" + data_hud_type = DATA_HUD_SECURITY_ADVANCED var/base_icon = "secbot" var/mob/living/carbon/target diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index fc331fb74b9..951336f8d5f 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -109,6 +109,7 @@ /mob/living/simple_animal/updatehealth() ..() health = Clamp(health, 0, maxHealth) + med_hud_set_status() /mob/living/simple_animal/handle_hud_icons_health() ..() diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index c56439d56f4..67875b802e8 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ