From 96317030a1015ad1885ad70c91e4e0fcd7401975 Mon Sep 17 00:00:00 2001 From: GunHog Date: Thu, 22 Oct 2015 08:15:09 -0500 Subject: [PATCH 1/5] Diag HUDs 2 Adds Diagnostic HUDs --- code/__DEFINES/hud.dm | 15 ++++++----- code/datums/hud.dm | 4 ++- code/game/data_huds.dm | 25 +++++++++++++++++- code/modules/clothing/glasses/hud.dm | 6 +++++ code/modules/clothing/spacesuits/hardsuit.dm | 4 +++ code/modules/mob/living/silicon/ai/life.dm | 2 ++ code/modules/mob/living/silicon/robot/life.dm | 3 +++ code/modules/mob/living/silicon/silicon.dm | 19 ++++++++++++- icons/mob/hud.dmi | Bin 3728 -> 3973 bytes 9 files changed, 69 insertions(+), 9 deletions(-) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index f4f703601a7..369537eb764 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -9,8 +9,10 @@ #define IMPLOYAL_HUD "5" // loyality implant #define IMPCHEM_HUD "6" // chemical implant #define IMPTRACK_HUD "7" // tracking implant +#define DIAG_STAT_HUD "8" +#define DIAG_HUD "9" //for antag huds. these are used at the /mob level -#define ANTAG_HUD "8" +#define ANTAG_HUD "10" //data HUD (medhud, sechud) defines //Don't forget to update human/New() if you change these! @@ -18,10 +20,11 @@ #define DATA_HUD_SECURITY_ADVANCED 2 #define DATA_HUD_MEDICAL_BASIC 3 #define DATA_HUD_MEDICAL_ADVANCED 4 +#define DATA_HUD_DIAGNOSTIC 5 //antag HUD defines -#define ANTAG_HUD_CULT 5 -#define ANTAG_HUD_REV 6 -#define ANTAG_HUD_OPS 7 +#define ANTAG_HUD_CULT 6 +#define ANTAG_HUD_REV 7 +#define ANTAG_HUD_OPS 8 -#define ANTAG_HUD_WIZ 8 -#define ANTAG_HUD_SHADOW 9 +#define ANTAG_HUD_WIZ 9 +#define ANTAG_HUD_SHADOW 10 diff --git a/code/datums/hud.dm b/code/datums/hud.dm index f17de6bbbcb..c507fe27676 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -6,6 +6,7 @@ var/datum/atom_hud/huds = list( \ DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/security/advanced(), \ DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/medical/basic(), \ DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/medical/advanced(), \ + DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), \ ANTAG_HUD_CULT = new/datum/atom_hud/antag(), \ ANTAG_HUD_REV = new/datum/atom_hud/antag(), \ ANTAG_HUD_OPS = new/datum/atom_hud/antag(), \ @@ -50,7 +51,8 @@ var/datum/atom_hud/huds = list( \ if(!M.client) return for(var/i in hud_icons) - M.client.images |= A.hud_list[i] + if(A.hud_list[i]) + M.client.images |= A.hud_list[i] //MOB PROCS /mob/proc/reload_huds() diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 4335c65caad..0d62c565e85 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -44,7 +44,10 @@ /datum/atom_hud/data/security/advanced hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD) -/* MED/SEC HUD HOOKS */ +/datum/atom_hud/data/diagnostic + hud_icons = list (DIAG_HUD, DIAG_STAT_HUD) + +/* MED/SEC/DIAG HUD HOOKS */ /* * THESE HOOKS SHOULD BE CALLED BY THE MOB SHOWING THE HUD @@ -132,6 +135,7 @@ if(wear_id) holder.icon_state = "hud[ckey(wear_id.GetJobName())]" sec_hud_set_security_status() + var/turf/T = get_turf(src) if (T) crewmonitor.queueUpdate(T.z) @@ -172,3 +176,22 @@ holder.icon_state = "huddischarged" return holder.icon_state = null + + +//called when a silicon changes health +/mob/living/silicon/proc/diag_hud_set_health() + var/image/holder = hud_list[DIAG_HUD] + if(stat == DEAD) + holder.icon_state = "hudhealth-100" + else + holder.icon_state = "hud[RoundHealth(health/maxHealth*100)]" + +/mob/living/silicon/proc/diag_hud_set_status() + var/image/holder = hud_list[DIAG_STAT_HUD] + switch(stat) + if(CONSCIOUS) + holder.icon_state = "hudstat" + if(UNCONSCIOUS) + holder.icon_state = "hudoffline" + else + holder.icon_state = "huddead2" \ No newline at end of file diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index be1957c3931..50779dd1141 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -40,6 +40,12 @@ darkness_view = 8 invis_view = SEE_INVISIBLE_MINIMUM +/obj/item/clothing/glasses/hud/diagnostic + name = "Diagnostic HUD" + desc = "A heads-up display that scans silicons" + icon_state = "healthhud" + hud_type = DATA_HUD_DIAGNOSTIC + /obj/item/clothing/glasses/hud/security name = "Security HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 9c05314a0c6..e2f5b8e9048 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -323,10 +323,14 @@ /obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/user, slot) user.scanner.Grant(user) + var/datum/atom_hud/DHUD = huds[DATA_HUD_DIAGNOSTIC] + DHUD.add_hud_to(user) ..(user, slot) /obj/item/clothing/head/helmet/space/hardsuit/rd/dropped(mob/user) user.scanner.devices -= 1 + var/datum/atom_hud/DHUD = huds[DATA_HUD_DIAGNOSTIC] + DHUD.remove_hud_from(user) ..(user) /obj/item/clothing/suit/space/hardsuit/rd diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 840f19ef3bb..cb5851e1012 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -177,3 +177,5 @@ health = maxHealth - getOxyLoss() - getToxLoss() - getBruteLoss() if(!fire_res_on_core) health -= getFireLoss() + diag_hud_set_status() + diag_hud_set_health() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 30fdc2e0b37..85350a95213 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -44,6 +44,7 @@ if(health <= -maxHealth) //die only once death() + diag_hud_set_status() return if(health < maxHealth*0.5) //Gradual break down of modules as more damage is sustained @@ -62,6 +63,8 @@ if (paralysis || stunned || weakened) //Stunned etc. stat = UNCONSCIOUS update_headlamp() + diag_hud_set_health() + diag_hud_set_status() return 1 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 30d0f635f67..dc99501935a 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -14,6 +14,8 @@ var/designation = "" var/radiomod = "" //Radio character used before state laws/arrivals announce to allow department transmissions, default, or none at all. var/obj/item/device/camera/siliconcam/aicamera = null //photography + //hud_possible = list(DIAG_STAT_HUD, DIAG_HUD, ANTAG_HUD) + hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD) var/obj/item/device/radio/borg/radio = null //AIs dont use this but this is at the silicon level to advoid copypasta in say() @@ -25,9 +27,15 @@ var/med_hud = DATA_HUD_MEDICAL_ADVANCED //Determines the med hud to use var/sec_hud = DATA_HUD_SECURITY_ADVANCED //Determines the sec hud to use + var/d_hud = DATA_HUD_DIAGNOSTIC //There is only one kind of diag hud var/law_change_counter = 0 +/mob/living/silicon/New() + var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] + diag_hud.add_to_hud(src) + ..() + /mob/living/silicon/Destroy() radio = null aicamera = null @@ -338,8 +346,10 @@ /mob/living/silicon/proc/remove_med_sec_hud() var/datum/atom_hud/secsensor = huds[sec_hud] var/datum/atom_hud/medsensor = huds[med_hud] + var/datum/atom_hud/diagsensor = huds[d_hud] secsensor.remove_hud_from(src) medsensor.remove_hud_from(src) + diagsensor.remove_hud_from(src) /mob/living/silicon/proc/add_sec_hud() var/datum/atom_hud/secsensor = huds[sec_hud] @@ -349,9 +359,13 @@ var/datum/atom_hud/medsensor = huds[med_hud] medsensor.add_hud_to(src) +/mob/living/silicon/proc/add_diag_hud() + var/datum/atom_hud/diagsensor = huds[d_hud] + diagsensor.add_hud_to(src) + /mob/living/silicon/proc/sensor_mode() set name = "Set Sensor Augmentation" - var/sensor_type = input("Please select sensor type.", "Sensor Integration", null) in list("Security", "Medical","Disable") + var/sensor_type = input("Please select sensor type.", "Sensor Integration", null) in list("Security", "Medical","Diagnostic","Disable") remove_med_sec_hud() switch(sensor_type) if ("Security") @@ -360,6 +374,9 @@ if ("Medical") add_med_hud() src << "Life signs monitor overlay enabled." + if ("Diagnostic") + add_diag_hud() + src << "Robotics diagnostic overlay enabled." if ("Disable") src << "Sensor augmentations disabled." diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 4fc1a449fb96c6bda8c9745cb18aeafda476ea67..76b665ad31d92976f913f3667bb9ee671d7457c9 100644 GIT binary patch delta 3592 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 delta 3345 zcmZuzc{J3I79V3~FqR~PERi22GK@7p8l&uab{S;PzAryprms;b*(I`$vi=ZR$3Ava z4Ix4pS@N?aG-IFVz5jaW-9PR<_uO;Oxu5$vcZm^B5lZ3Z5MgEnfj~Pg*4-cwL+M-b zL0Z6674{;UDbb=L-Ubi;pnnb<^IvsD^{*KeWpxrQBe6Dg)vNdJnN;LP4$|~ig^X4q$;~)JK z&|*}PKa9D5ggCN)R;#Xch0LV@5wYO=X#_}#^gC0%u0fq?Zxs0+0Ua&mqGzoVzUSb} zxz#5c6_S*toKlzp=he)=P6X3<(eYC z@J{$;V}!V#3 zsp@oM95LP43&;4+0wWQ?u9zC8Ij|BsCLLkHrAPYg`lQKRb`07N?HRpV7gu`pwQ1Gf z%)pX&SYQ|i0>LloX=<2<x1Ftj85NP%!1doD<@s;#(pf^lZiH(!zF@CnEoFAt4{q4ZancCfsTwZklO z)>+D!kC7>%i>JkZk_+H6fn>}9sDKar?}Kv{@P^0Z{3}H%4`5nDjYR= zH9D%X)e)O9dr$rErRiTz=(M2kuyc179QI*TTzm>|51@?@rabkvh$@^)D7YMokL%-9 z*@ufA!44t^S)K>I1!qhO4>h+1LA4Pj7Eg@v(zfK)LQDs^yax(!#DE{8MtHLBX}o^N zSH85vr#n8)7lvhrf8ghrzszzFmj7fYe2&oAdaV&N6B!G^yFK|RCXsSq!x{Mk!mrDD zgWGpYr59cwUFM@v+P&$9f~HBN?1-5YYSj%ZqIe+LSWaE*m}}uu;I>5j*5v!dh1} zrUAUktk^YAsE}=D73c|Q*?tMIgeQ1AvK`yvd3AUARD4gKBFd8RN=7x{tFzbB7Q~#~ zSUR31sQ}TKb)#&}@sj{-|KR^co~t)NS=Q2_t)#CCZm8y}>8!rLwseIjsFo>*x5w}9 z{U0Msnqn&+pWY;=r~BlGJu)O*kGik%5%6cjQ%{SPb$>$QTALPGxZfm0SipmasgP@6 zJ>O1uddFI*I6eZ}f4->E&(D~vtW86)DdJnOl!&w@?c9P_cQW1M70Y}QiQn^cpLdd$zl9%+>RTW6 zWC~Sw<$#1*ut(%}eLc$l*#&;K+3pa=IKhlHOGlMfw z?+rv_HKk-rNJUpu(}bYK9ycg12{wH-(5aI%BL9p3w~kaxOf$V38xuA#GTP0gsqVv) zRHuQHdDZ>dpzRNtKD#cb(E3TsUDH0A)bR`0H$PX`SmmktOlj^~+{wL%v%B$HWM_6* zpXZ;p(zVs}IA$d6@3nZ3C`CR=ve`CMqoH`F1sq-xY`vK8H4;&8OQ3dS~) z|4gpPNWrk{YFN+MWF^U~jnp04mD@)8=hdq8T`Tf{8SI!|UbXhqfZE-zcjgFeD-u>y>L;ftM2rg%#YMFA_Du5Lc}<07eOj2S^2Bs0v5Ha4L))!+#;wpK!wPa zm0m>}$2gp$oVEb-gdf6Gq2EaTkAqPjTRbHi`QAWN9&YxRCJB%MMrA;nNgXLY)cIyv zM!<(|W4!ZpkX2N^l3=uc`hdfCt_3mM@>dXjptw(Kbi}lI)(Xbhx_f(yz7n`Aqk%6W zwc4ER5+#}N;``8+%Zn>x1+CSr>8sDcd7Wad{*Z| zb3|~}TgX$@y|y&lo3v7i2VQ+Y0HF(Ta}z z^XnBa|0-7syRY|zrwwq*nm%_TcPz0ye4nj@8NYQ>2eu4Cl9#i%6ej(wiR+1-KCE8; zIIjmYxec94$v;-UT1KBr7nrm3Z+2@(RjDsZrFfsD8snXy0{BMABo;3~>u9kDTImz* zM<2emhSMA+#KmQmvPly-d?Ykh{5@;sQ(V~V5Wn@V&+XImIRmMr$g8Zux3i4#j=Zi? zBflI>7N)7$Vl~uX)X9cvw23e3)h<#qQMpkQCoXK3_?+|JybmK3 zR_%?FOVsKTF0wFPup^{hecZ^I^m){Pp|Lh4X`t&?L@!65W*TP3(yo!TRTu+*jA1c% zFc{Zc^6w`hoq9(fa{NX}ucMo|8ZlBidbl%j!TvI^MWcl%NzKO;+yR=#)aFk@A+%q3Sk4=ka#v;iKOTPToG12JePN@OcyB3? z^GI>$gr6daO*HJ^q^sg*!(M>xGHS6{FqBC7YEvt4kPfj10$OUW6MF&>?xD(?3gpnL zP<5*XyL)(BG)&tztD3Yxd5z)X+qlVLXN#9QN*^@bjhy6m;8f%4C$+bWgk4X->qK6x ztLsdlNRI5;GhIDXaW$N3)0*qwg^!$B8dP1 From ac7be615699a8c20c9eced4d527430962c844cb7 Mon Sep 17 00:00:00 2001 From: GunHog Date: Thu, 22 Oct 2015 18:45:08 -0500 Subject: [PATCH 2/5] Adds Mechs and Borg cells to HUD - Cyborg cells are now tracked. - Mech health, cells, and status now tracked --- code/__DEFINES/hud.dm | 8 +++-- code/game/data_huds.dm | 66 +++++++++++++++++++++++++++++++++++++-- code/game/mecha/mecha.dm | 13 ++++++-- code/modules/mob/mob.dm | 2 +- icons/mob/hud.dmi | Bin 3973 -> 4153 bytes 5 files changed, 80 insertions(+), 9 deletions(-) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 369537eb764..c5262c58614 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -9,10 +9,12 @@ #define IMPLOYAL_HUD "5" // loyality implant #define IMPCHEM_HUD "6" // chemical implant #define IMPTRACK_HUD "7" // tracking implant -#define DIAG_STAT_HUD "8" -#define DIAG_HUD "9" +#define DIAG_STAT_HUD "8" // Silicon/Mech Status +#define DIAG_HUD "9" // Silicon health bar +#define DIAG_BATT_HUD "10"// Borg/Mech power meter +#define DIAG_MECH_HUD "11"// Mech health bar //for antag huds. these are used at the /mob level -#define ANTAG_HUD "10" +#define ANTAG_HUD "12" //data HUD (medhud, sechud) defines //Don't forget to update human/New() if you change these! diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 0d62c565e85..665063fe61d 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -45,7 +45,7 @@ hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD) /datum/atom_hud/data/diagnostic - hud_icons = list (DIAG_HUD, DIAG_STAT_HUD) + hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD) /* MED/SEC/DIAG HUD HOOKS */ @@ -177,8 +177,28 @@ return holder.icon_state = null +/*********************************************** + Diagnostic HUDs! +************************************************/ -//called when a silicon changes health +//For the charge meter! +/proc/RoundCell(var/charge) + var/icon_name = "" + switch(charge) + if(0.75 to INFINITY) + icon_name = "batthigh" + if(0.5 to 0.75) + icon_name = "battmed" + if(0.25 to 0.5) + icon_name = "battlow" + if(0.01 to 0.25) + icon_name = "battwarn" + else + icon_name = "battempty" + return icon_name + + +//Sillycone hooks /mob/living/silicon/proc/diag_hud_set_health() var/image/holder = hud_list[DIAG_HUD] if(stat == DEAD) @@ -194,4 +214,44 @@ if(UNCONSCIOUS) holder.icon_state = "hudoffline" else - holder.icon_state = "huddead2" \ No newline at end of file + holder.icon_state = "huddead2" + +//Borgie battery tracking! +/mob/living/silicon/robot/proc/diag_hud_set_borgcell() + var/image/holder = hud_list[DIAG_BATT_HUD] + if (cell) + var/chargelvl = cell.charge/cell.maxcharge + holder.icon_state = "hud[RoundCell(chargelvl)]" + else + holder.icon_state = "hudnobatt" + +/*~~~~~~~~~~~~~~~~~~~~ + BIG STOMPY MECHS +~~~~~~~~~~~~~~~~~~~~~*/ +/obj/mecha/proc/diag_hud_set_mechhealth() + var/image/holder = hud_list[DIAG_MECH_HUD] + var/mechhealth = (health/initial(health))*100 + switch(mechhealth) + if(75 to 100) + holder.icon_state = "hudmechgood" + if(50 to 74) + holder.icon_state = "hudmechmed" + if(25 to 49) + holder.icon_state = "hudmechbad" + if(0 to 24) + holder.icon_state = "hudmechcrit" + + +/obj/mecha/proc/diag_hud_set_mechcell() + var/image/holder = hud_list[DIAG_BATT_HUD] + if (cell) + var/chargelvl = cell.charge/cell.maxcharge + holder.icon_state = "hud[RoundCell(chargelvl)]" + else + holder.icon_state = "hudnobatt" + +/obj/mecha/proc/diag_hud_set_mechstat() + var/image/holder = hud_list[DIAG_STAT_HUD] + holder.icon_state = null + if(internal_damage) + holder.icon_state = "hudwarn" \ No newline at end of file diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 8b45cf3faae..d793cb10316 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -76,6 +76,8 @@ var/datum/action/mecha/mech_toggle_lights/lights_action = new var/datum/action/mecha/mech_view_stats/stats_action = new + hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD) + /obj/mecha/New() ..() @@ -90,6 +92,9 @@ SSobj.processing |= src log_message("[src.name] created.") mechas_list += src //global mech list + var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] + diag_hud.add_to_hud(src) + prepare_huds() return /obj/mecha/Destroy() @@ -314,7 +319,10 @@ var/lights_energy_drain = 2 use_power(lights_energy_drain) - +//Diagnostic HUD updates + diag_hud_set_mechhealth() + diag_hud_set_mechcell() + diag_hud_set_mechstat() /obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits. @@ -482,6 +490,7 @@ internal_damage |= int_dam_flag log_append_to_last("Internal damage of type [int_dam_flag].",1) occupant << sound('sound/machines/warning-buzzer.ogg',wait=0) + diag_hud_set_mechstat() return /obj/mecha/proc/clearInternalDamage(int_dam_flag) @@ -494,7 +503,7 @@ if(MECHA_INT_TANK_BREACH) occupant_message("Damaged internal tank has been sealed.") internal_damage &= ~int_dam_flag - + diag_hud_set_mechstat() ///////////////////////////////////// //////////// AI piloting //////////// diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ca0948b56c5..9161f56124e 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -24,7 +24,7 @@ var/next_mob_id = 0 prepare_huds() ..() -/mob/proc/prepare_huds() +/atom/proc/prepare_huds() for(var/hud in hud_possible) hud_list[hud] = image('icons/mob/hud.dmi', src, "") diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 76b665ad31d92976f913f3667bb9ee671d7457c9..62021d6ef31bab56e1a8a03b174c2a517363388f 100644 GIT binary patch literal 4153 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 delta 3874 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 From d37805e0936cf9030240e797b7bed1b820d3a087 Mon Sep 17 00:00:00 2001 From: GunHog Date: Fri, 23 Oct 2015 14:19:17 -0500 Subject: [PATCH 3/5] Adds HUD items - Adds Diagnostic HUD to Sci - Adds NV Diagnostic HUD as well --- code/modules/clothing/glasses/hud.dm | 13 +++++++++++-- code/modules/research/designs.dm | 18 ++++++++++++++++++ icons/mob/eyes.dmi | Bin 9030 -> 9731 bytes icons/obj/clothing/glasses.dmi | Bin 9232 -> 9775 bytes 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 50779dd1141..5105fd84850 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -42,10 +42,19 @@ /obj/item/clothing/glasses/hud/diagnostic name = "Diagnostic HUD" - desc = "A heads-up display that scans silicons" - icon_state = "healthhud" + desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits." + icon_state = "diagnostichud" hud_type = DATA_HUD_DIAGNOSTIC +/obj/item/clothing/glasses/hud/diagnostic/night + name = "Night Vision Diagnostic HUD" + desc = "A robotics diagnostic HUD fitted with a light amplifier." + icon_state = "diagnostichudnight" + item_state = "glasses" + darkness_view = 8 + invis_view = SEE_INVISIBLE_MINIMUM + + /obj/item/clothing/glasses/hud/security name = "Security HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 91dc1ccf37d..4eed38fb5a7 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -281,6 +281,24 @@ other types of metals and chemistry for reagents). build_path = /obj/item/clothing/glasses/hud/security/night category = list("Equipment") +datum/design/diagnostic_hud + name = "Diagnostic HUD" + desc = "A HUD used to analyze and determine faults within robotic machinery." + id = "dianostic_hud" + req_tech = list("magnets" = 3, "engineering" = 3, "powerstorage" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = /obj/item/clothing/glasses/hud/diagnostic + +datum/design/diagnostic_hud_night + name = "Night Vision Diagnostic HUD" + desc = "Upgraded version of the diagnostic HUD designed to function during a power failure." + id = "dianostic_hud_night" + req_tech = list("magnets" = 5, "engineering" = 4, "powerstorage" = 4) + build_type = PROTOLATHE + materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$plasma" = 300) + build_path = /obj/item/clothing/glasses/hud/diagnostic/night + ///////////////////////////////////////// //////////////////Test/////////////////// ///////////////////////////////////////// diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index af3b20ed3037ab7f0d61cac54bef9f0b48819fd9..6ac5175fc07dc675412caafcfd31ff378d49b1f9 100644 GIT binary patch literal 9731 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 literal 9030 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 B=iLAR diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index 2882987689dbeda4b29b1f372a397ec165d34639..20a1cacfb1dbeb91febc30d50bad72e21800b6dd 100644 GIT binary patch literal 9775 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 Date: Fri, 23 Oct 2015 18:47:58 -0500 Subject: [PATCH 4/5] HUD fixes - Data HUDs that apply only to humans (medical, security) are now prepared only for humans, preventing errors. - The RD's hardsuit helmet now deactivates its own HUD if a diagnostic HUD item is worn. - HUDs on newly spawned entities now update properly. --- code/datums/hud.dm | 8 +++---- code/game/data_huds.dm | 24 +++++++++---------- code/game/mecha/mecha.dm | 6 ++++- code/game/mecha/medical/odysseus.dm | 4 ++-- code/modules/clothing/spacesuits/hardsuit.dm | 22 ++++++++++------- code/modules/mob/living/carbon/human/human.dm | 2 +- .../mob/living/carbon/monkey/monkey.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 2 ++ code/modules/mob/living/silicon/silicon.dm | 4 +++- 9 files changed, 44 insertions(+), 30 deletions(-) diff --git a/code/datums/hud.dm b/code/datums/hud.dm index c507fe27676..904b3cf828e 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -2,10 +2,10 @@ //GLOBAL HUD LIST var/datum/atom_hud/huds = list( \ - DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/security/basic(), \ - DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/security/advanced(), \ - DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/medical/basic(), \ - DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/medical/advanced(), \ + DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(), \ + DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), \ + DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), \ + DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), \ DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), \ ANTAG_HUD_CULT = new/datum/atom_hud/antag(), \ ANTAG_HUD_REV = new/datum/atom_hud/antag(), \ diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 665063fe61d..a961c5df067 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -7,41 +7,41 @@ /* DATA HUD DATUMS */ -/atom/proc/add_to_all_data_huds() - for(var/datum/atom_hud/data/hud in huds) hud.add_to_hud(src) +/atom/proc/add_to_all_human_data_huds() + for(var/datum/atom_hud/data/human/hud in huds) hud.add_to_hud(src) /atom/proc/remove_from_all_data_huds() for(var/datum/atom_hud/data/hud in huds) hud.remove_from_hud(src) /datum/atom_hud/data -/datum/atom_hud/data/medical +/datum/atom_hud/data/human/medical hud_icons = list(HEALTH_HUD, STATUS_HUD) -/datum/atom_hud/data/medical/basic +/datum/atom_hud/data/human/medical/basic -/datum/atom_hud/data/medical/basic/proc/check_sensors(mob/living/carbon/human/H) +/datum/atom_hud/data/human/medical/basic/proc/check_sensors(mob/living/carbon/human/H) if(!istype(H)) return 0 var/obj/item/clothing/under/U = H.w_uniform if(!istype(U)) return 0 if(U.sensor_mode <= 2) return 0 return 1 -/datum/atom_hud/data/medical/basic/add_to_single_hud(mob/M, mob/living/carbon/H) +/datum/atom_hud/data/human/medical/basic/add_to_single_hud(mob/M, mob/living/carbon/H) if(check_sensors(H)) ..() -/datum/atom_hud/data/medical/basic/proc/update_suit_sensors(mob/living/carbon/H) +/datum/atom_hud/data/human/medical/basic/proc/update_suit_sensors(mob/living/carbon/H) check_sensors(H) ? add_to_hud(H) : remove_from_hud(H) -/datum/atom_hud/data/medical/advanced +/datum/atom_hud/data/human/medical/advanced -/datum/atom_hud/data/security +/datum/atom_hud/data/human/security -/datum/atom_hud/data/security/basic +/datum/atom_hud/data/human/security/basic hud_icons = list(ID_HUD) -/datum/atom_hud/data/security/advanced +/datum/atom_hud/data/human/security/advanced hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD) /datum/atom_hud/data/diagnostic @@ -93,7 +93,7 @@ //called when a human changes suit sensors /mob/living/carbon/proc/update_suit_sensors() - var/datum/atom_hud/data/medical/basic/B = huds[DATA_HUD_MEDICAL_BASIC] + var/datum/atom_hud/data/human/medical/basic/B = huds[DATA_HUD_MEDICAL_BASIC] B.update_suit_sensors(src) var/turf/T = get_turf(src) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index d793cb10316..770e05f8a19 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -92,9 +92,13 @@ SSobj.processing |= src log_message("[src.name] created.") mechas_list += src //global mech list + prepare_huds() var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] diag_hud.add_to_hud(src) - prepare_huds() + diag_hud_set_mechhealth() + diag_hud_set_mechcell() + diag_hud_set_mechstat() + return /obj/mecha/Destroy() diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index 6e72db4a2f8..efb5b3d31b4 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -16,7 +16,7 @@ if(H.glasses && istype(H.glasses, /obj/item/clothing/glasses/hud)) occupant_message("Your [H.glasses] prevent you from using the built-in medical hud.") else - var/datum/atom_hud/data/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] + var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] A.add_hud_to(H) builtin_hud_user = 1 return 1 @@ -26,7 +26,7 @@ /obj/mecha/medical/odysseus/go_out() if(ishuman(occupant) && builtin_hud_user) var/mob/living/carbon/human/H = occupant - var/datum/atom_hud/data/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] + var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] A.remove_hud_from(H) ..() return diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index e2f5b8e9048..1ab2df82ddf 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -318,20 +318,26 @@ icon_state = "hardsuit0-rd" item_color = "rd" unacidable = 1 + var/onboard_hud_enabled = 0 //stops conflicts with another diag HUD max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 100, bio = 100, rad = 60) -/obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/user, slot) - user.scanner.Grant(user) - var/datum/atom_hud/DHUD = huds[DATA_HUD_DIAGNOSTIC] - DHUD.add_hud_to(user) +/obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/living/carbon/human/user, slot) ..(user, slot) + user.scanner.Grant(user) + if(user.glasses && istype(user.glasses, /obj/item/clothing/glasses/hud/diagnostic)) + user << ("Your [user.glasses] prevents you using [src]'s diagnostic visor HUD.") + else + onboard_hud_enabled = 1 + var/datum/atom_hud/DHUD = huds[DATA_HUD_DIAGNOSTIC] + DHUD.add_hud_to(user) -/obj/item/clothing/head/helmet/space/hardsuit/rd/dropped(mob/user) - user.scanner.devices -= 1 - var/datum/atom_hud/DHUD = huds[DATA_HUD_DIAGNOSTIC] - DHUD.remove_hud_from(user) +/obj/item/clothing/head/helmet/space/hardsuit/rd/dropped(mob/living/carbon/human/user) ..(user) + user.scanner.devices -= 1 + if(onboard_hud_enabled && !(user.glasses && istype(user.glasses, /obj/item/clothing/glasses/hud/diagnostic))) + var/datum/atom_hud/DHUD = huds[DATA_HUD_DIAGNOSTIC] + DHUD.remove_hud_from(user) /obj/item/clothing/suit/space/hardsuit/rd icon_state = "hardsuit-rd" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index fdbe76af769..6705065bc53 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -48,7 +48,7 @@ sec_hud_set_implants() sec_hud_set_security_status() //...and display them. - add_to_all_data_huds() + add_to_all_human_data_huds() /mob/living/carbon/human/Destroy() for(var/atom/movable/organelle in organs) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 844ebd793ae..9d2dedb2e08 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -39,7 +39,7 @@ //Prepare our med HUD... ..() //...and display it. - for(var/datum/atom_hud/data/medical/hud in huds) + for(var/datum/atom_hud/data/human/medical/hud in huds) hud.add_to_hud(src) /mob/living/carbon/monkey/movement_delay() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c5cdaedc234..23f13d52701 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -68,6 +68,7 @@ var/lamp_recharging = 0 //Flag for if the lamp is on cooldown after being forcibly disabled. var/updating = 0 //portable camera camerachunk update + hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD) /mob/living/silicon/robot/New(loc) spark_system = new /datum/effect/effect/system/spark_spread() @@ -126,6 +127,7 @@ aicamera = new/obj/item/device/camera/siliconcam/robot_camera(src) toner = 40 scanner.Grant(src) + diag_hud_set_borgcell() //If there's an MMI in the robot, have it ejected when the mob goes away. --NEO /mob/living/silicon/robot/Destroy() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index dc99501935a..ec32fbe6a40 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -32,9 +32,11 @@ var/law_change_counter = 0 /mob/living/silicon/New() + ..() var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] diag_hud.add_to_hud(src) - ..() + diag_hud_set_status() + diag_hud_set_health() /mob/living/silicon/Destroy() radio = null From 3255334cdb0772870f730bda0e49a35e475f4d65 Mon Sep 17 00:00:00 2001 From: GunHog Date: Wed, 28 Oct 2015 00:31:32 -0500 Subject: [PATCH 5/5] Sprites and fixes - New sprites by WJohn! Yay! - Fixes borg cells not updating --- code/game/data_huds.dm | 54 ++++++++---------- code/modules/mob/living/silicon/robot/life.dm | 1 + .../modules/mob/living/silicon/robot/robot.dm | 2 + icons/mob/hud.dmi | Bin 4153 -> 8801 bytes 4 files changed, 27 insertions(+), 30 deletions(-) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index a961c5df067..7e25943ea11 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -181,30 +181,32 @@ Diagnostic HUDs! ************************************************/ -//For the charge meter! -/proc/RoundCell(var/charge) - var/icon_name = "" - switch(charge) - if(0.75 to INFINITY) - icon_name = "batthigh" - if(0.5 to 0.75) - icon_name = "battmed" - if(0.25 to 0.5) - icon_name = "battlow" - if(0.01 to 0.25) - icon_name = "battwarn" +//For Diag health and cell bars! +/proc/RoundDiagBar(value) + switch(value * 100) + if(95 to INFINITY) + return "max" + if(80 to 100) + return "good" + if(60 to 80) + return "high" + if(40 to 60) + return "med" + if(20 to 40) + return "low" + if(1 to 20) + return "crit" else - icon_name = "battempty" - return icon_name - + return "dead" + return "dead" //Sillycone hooks /mob/living/silicon/proc/diag_hud_set_health() var/image/holder = hud_list[DIAG_HUD] if(stat == DEAD) - holder.icon_state = "hudhealth-100" + holder.icon_state = "huddiagdead" else - holder.icon_state = "hud[RoundHealth(health/maxHealth*100)]" + holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" /mob/living/silicon/proc/diag_hud_set_status() var/image/holder = hud_list[DIAG_STAT_HUD] @@ -220,8 +222,8 @@ /mob/living/silicon/robot/proc/diag_hud_set_borgcell() var/image/holder = hud_list[DIAG_BATT_HUD] if (cell) - var/chargelvl = cell.charge/cell.maxcharge - holder.icon_state = "hud[RoundCell(chargelvl)]" + var/chargelvl = (cell.charge/cell.maxcharge) + holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" else holder.icon_state = "hudnobatt" @@ -230,26 +232,18 @@ ~~~~~~~~~~~~~~~~~~~~~*/ /obj/mecha/proc/diag_hud_set_mechhealth() var/image/holder = hud_list[DIAG_MECH_HUD] - var/mechhealth = (health/initial(health))*100 - switch(mechhealth) - if(75 to 100) - holder.icon_state = "hudmechgood" - if(50 to 74) - holder.icon_state = "hudmechmed" - if(25 to 49) - holder.icon_state = "hudmechbad" - if(0 to 24) - holder.icon_state = "hudmechcrit" + holder.icon_state = "huddiag[RoundDiagBar(health/initial(health))]" /obj/mecha/proc/diag_hud_set_mechcell() var/image/holder = hud_list[DIAG_BATT_HUD] if (cell) var/chargelvl = cell.charge/cell.maxcharge - holder.icon_state = "hud[RoundCell(chargelvl)]" + holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" else holder.icon_state = "hudnobatt" + /obj/mecha/proc/diag_hud_set_mechstat() var/image/holder = hud_list[DIAG_STAT_HUD] holder.icon_state = null diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 85350a95213..00d15ce022c 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -31,6 +31,7 @@ uneq_all() stat = UNCONSCIOUS update_headlamp(1) + diag_hud_set_borgcell() /mob/living/silicon/robot/handle_regular_status_updates() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index db105c3dceb..cb46e615cc5 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -482,6 +482,7 @@ cell = W user << "You insert the power cell." update_icons() + diag_hud_set_borgcell() else if (wires.IsInteractionTool(W)) if (wiresexposed) @@ -713,6 +714,7 @@ user << "You remove \the [cell]." cell = null update_icons() + diag_hud_set_borgcell() if(!opened) if(..()) // hulk attack diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 62021d6ef31bab56e1a8a03b174c2a517363388f..fc9ad17f13f866ddd02749cfb5c10c21f12b4531 100644 GIT binary patch literal 8801 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 z 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 I;S%+~0I%!_;s5{u literal 4153 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