diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index f4f703601a7..c5262c58614 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -9,8 +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" // 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 "8"
+#define ANTAG_HUD "12"
//data HUD (medhud, sechud) defines
//Don't forget to update human/New() if you change these!
@@ -18,10 +22,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..904b3cf828e 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -2,10 +2,11 @@
//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(), \
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..7e25943ea11 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -7,44 +7,47 @@
/* 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)
-/* MED/SEC HUD HOOKS */
+/datum/atom_hud/data/diagnostic
+ hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD)
+
+/* MED/SEC/DIAG HUD HOOKS */
/*
* THESE HOOKS SHOULD BE CALLED BY THE MOB SHOWING THE HUD
@@ -90,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)
@@ -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,76 @@
holder.icon_state = "huddischarged"
return
holder.icon_state = null
+
+/***********************************************
+ Diagnostic HUDs!
+************************************************/
+
+//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
+ 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 = "huddiagdead"
+ else
+ holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]"
+
+/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"
+
+//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 = "hudbatt[RoundDiagBar(chargelvl)]"
+ else
+ holder.icon_state = "hudnobatt"
+
+/*~~~~~~~~~~~~~~~~~~~~
+ BIG STOMPY MECHS
+~~~~~~~~~~~~~~~~~~~~~*/
+/obj/mecha/proc/diag_hud_set_mechhealth()
+ var/image/holder = hud_list[DIAG_MECH_HUD]
+ 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 = "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
+ 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 2fc1888e9f9..5ffbfc0e68e 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -76,6 +76,8 @@
var/datum/action/innate/mecha/mech_toggle_lights/lights_action = new
var/datum/action/innate/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,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)
+ diag_hud_set_mechhealth()
+ diag_hud_set_mechcell()
+ diag_hud_set_mechstat()
+
return
/obj/mecha/Destroy()
@@ -314,7 +323,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 +494,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 +507,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/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/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
index be1957c3931..5105fd84850 100644
--- a/code/modules/clothing/glasses/hud.dm
+++ b/code/modules/clothing/glasses/hud.dm
@@ -40,6 +40,21 @@
darkness_view = 8
invis_view = SEE_INVISIBLE_MINIMUM
+/obj/item/clothing/glasses/hud/diagnostic
+ name = "Diagnostic HUD"
+ 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/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 977f8713137..bb0fbffd4e2 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -314,16 +314,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)
+/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
+/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/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..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()
@@ -44,6 +45,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 +64,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/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 524cb6c70fe..cb46e615cc5 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_system/spark_spread()
@@ -125,6 +126,7 @@
playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
aicamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
toner = 40
+ 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()
@@ -480,6 +482,7 @@
cell = W
user << "You insert the power cell."
update_icons()
+ diag_hud_set_borgcell()
else if (wires.IsInteractionTool(W))
if (wiresexposed)
@@ -711,6 +714,7 @@
user << "You remove \the [cell]."
cell = null
update_icons()
+ diag_hud_set_borgcell()
if(!opened)
if(..()) // hulk attack
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 30d0f635f67..ec32fbe6a40 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,17 @@
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)
+ diag_hud_set_status()
+ diag_hud_set_health()
+
/mob/living/silicon/Destroy()
radio = null
aicamera = null
@@ -338,8 +348,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 +361,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 +376,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/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index de53d5999cd..c8921d96e99 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/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 af3b20ed303..6ac5175fc07 100644
Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 4fc1a449fb9..fc9ad17f13f 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi
index 2882987689d..20a1cacfb1d 100644
Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ