From dc6bb34b3882f5dfdf3f66bb7a9fd9a8c241ddca Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 28 Nov 2017 23:17:50 -0500 Subject: [PATCH] More hud stuff --- code/game/data_huds.dm | 109 +++++++++--------- .../gamemodes/miniantags/bot_swarm/swarmer.dm | 13 +++ .../gamemodes/miniantags/guardian/guardian.dm | 18 ++- .../miniantags/guardian/types/healer.dm | 3 + code/modules/mob/living/carbon/carbon.dm | 15 --- .../mob/living/carbon/carbon_defines.dm | 1 - code/modules/mob/living/death.dm | 3 + code/modules/mob/living/living.dm | 16 +++ code/modules/mob/living/living_defines.dm | 1 + code/modules/mob/living/silicon/silicon.dm | 6 + .../mob/living/simple_animal/bot/bot.dm | 8 ++ .../mob/living/simple_animal/bot/ed209bot.dm | 1 + .../mob/living/simple_animal/bot/medbot.dm | 1 + .../mob/living/simple_animal/bot/secbot.dm | 1 + .../mob/living/simple_animal/simple_animal.dm | 1 + icons/mob/hud.dmi | Bin 14533 -> 14216 bytes 16 files changed, 126 insertions(+), 71 deletions(-) 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 c56439d56f4a454fbce0c29f6b5147c6398eec12..67875b802e8b872f84778addc39b6f5891dea883 100644 GIT binary patch literal 14216 zcmch72UJtd+HR2EQ4y3X3Q7k-r4s=Wf=E|7h$sjsMS36!qJWBk1_9~4SE))#C@M-3 zr1yYy0)!R<2}$neJLkLqf7bfXT6e8`?q#jn8TQPcJ$uUYKJ&iMYZD_qb{0Ms5D3H$ z(Z6X10@2JKCng5q4r~aO00Pl{g<4qo-F)Qh{LIbU&&|sd1PV$^Pww^PR^y5oO)h-g zcKv2D8}pawClxm=rDxBW)Y%W(&sHcbretpI1)j8d!9-hVeTx`dXb0{LSbjvnHBn~} z>of2m^hAx)l?|cBQOnWN=obrTo1#2@YZ}j5M_$RGJl1NP)*(EYS~OM|Hg;QB{kC=? zx?wZhwoJ&X2{2h0En;$> z9WwX$&@0k-%}tAsX)2z;CNmk&=)o|jO{Av{oVqoK6qyLO;Hy`>{QJdWa>n7g#O&C( zJ4h}IB_fr9!!>tnp_HzcwE7%T;XPUVtTnE;?7g8ugT0QVLjZ=q(+_9S?+3AIw30+(dV`T z$<tPT?T~${TinPTp0W+V6Vnb$QR0Iiqo8RnFzk^;p)}SZgyGONmHw zkN!BvO8MN)&Xt$JF8pr%@nIT6;o62tcI*?mE|9E*h|_CdS!K5{zpu4#x|RHKebFNB zf={}jz8K;obv-OS;5_@20*-}qAw>cU{3^9e?}tq)lISN5uHVTsVdIX!_S`P`kF-pG z;d9P{u|~z)^r3@4`rEVQGoExx^5{EbZil-R(`&U&1lZop7E?4w(b%4xI68{#+>}Ej zwyE4D{qnz0>M|;>7sy_HtMJyFX>7$MJ9~^qH@-W0fU-3{zrVAe%mqX3anra|7BXE8 z(a_Br$4Z>&aWFo4e;@khpme<$&y7eduap}d?Sr2*P#az=du~XWJvxhQ8>N9FQg8Z7 zy|j1ZTv`#o$D*|I(D0>0D8C2OL33_tm>NEqaoQ^LMr5@L5_c}NADo@V&Zwr` z$;h&gsBqd7(!V|@b6sQJD#DddYRAyoKf|qT zNHOMaNWrJ@zN`0klfQRq4q7d`^2xx*Ou21U*Tvs_6A0k`hCB&es*iJByugKc0Vud; z2UNi>ROO0azu=^2>U|)oRCN+aZ9wvoQu018spQ=cq%bL^{x0X$+24I>Z6rG1TbGO9eIG<{Bucd=sxY^D zsx!CV0yDRsQ)O=52J%0_%s0$cm~Ws}nQus`Gxs}RNzQfbIQ-!j1^bZpA~J_Eg z)SwKfF1a(epc<{iOg zSnM0^*rnyFzoy>2)8Ex3t6M_fS5Q3sHYJI5z3Wl*3VmbHqn~lz@08JCm%jC$_4Syl zWzu+hu!eA4aGHv1BssLNCoQ;-poUQl(&8#A>-anN)9Y;^w zda`Uc_!s&(#oS!0dLAOmumn1^zi>5u?Edm?^IvRY#qK-#Ht2oE1v}8QW-XLJHD45iy;iZH(JANn~|K&k+KI?gxEgR=Ay76duQxUZMKBP{!Y3? z+=s982ugE1Ud(MVX1l%(y9&zKU4Q94xGRIq``yXrBNXnNkUh5cgAHpPjL!|>m{DLbTgMrsXkV$t*-N&SeX$xZYdQ!C zGR6<ix2o-8Yef_`kFBY1GoNsfI0dIYNtx6Q zWp>h9*O<;hY|>Fx=s`9z?^}FBVUkCb0W!rA*0Q1#)SBWp_j{gGI%pCGrk2Jw@0q&B zAvAg8sE4~p-g~YCqv&gjEq2wCEmM0<2ehB1e}OsnE@fCITi+5{Z~t-Sb@*fsS8RJ_ zef@P`QhNmJHRtbamp5uEGI4#>fVBFjlP+dWLr)&F`0oW3{~1y9tygjga%kjTFA_Wy zhD%?)s{eX?pjax8k-AXe634jJn^{I!`r*lRuw*qnccQ#om3`w76~`(Yf2Ey_{`w|NFi?A`4lQ&dX0wn!Ef5cJfK|RC#zEBI(_Wyo-aOkx@yt>_~xdcK7UozmUhIDb=O#HqM!S_CavlN@T{Qy%g-~ZV>>a8lyTllSu1LWaOT}poxqd>8=g1x zX!%#V?Ws!i=XCh=YPRUcxzCqtHlBase7N7Mig0 kP#(~ai&Ho;JNi)FdCRv)>~ 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 amG;w|-G$_0k4O;k2hlaUS)qMD{C@#c&I{N8 literal 14533 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 No@hKSePkB+zW^Rk5j_9^