diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index 79df39c740a..e2b9380850c 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -26,6 +26,7 @@
#define DIAG_TRACK_HUD "21"// Mech tracking beacon
#define DIAG_AIRLOCK_HUD "22" // Airlock shock overlay
#define GLAND_HUD "23"//Gland indicators for abductors
+#define JANI_HUD "24" // Sign overlay over cleanable decals
//by default everything in the hud_list of an atom is an image
//a value in hud_list with one of these will change that behavior
@@ -40,20 +41,21 @@
#define DATA_HUD_DIAGNOSTIC_BASIC 5
#define DATA_HUD_DIAGNOSTIC_ADVANCED 6
#define DATA_HUD_HYDROPONIC 7
+#define DATA_HUD_JANITOR 8
//antag HUD defines
-#define ANTAG_HUD_CULT 8
-#define ANTAG_HUD_REV 9
-#define ANTAG_HUD_OPS 10
-#define ANTAG_HUD_WIZ 11
-#define ANTAG_HUD_SHADOW 12
-#define ANTAG_HUD_TRAITOR 13
-#define ANTAG_HUD_NINJA 14
-#define ANTAG_HUD_CHANGELING 15
-#define ANTAG_HUD_VAMPIRE 16
-#define ANTAG_HUD_ABDUCTOR 17
-#define DATA_HUD_ABDUCTOR 18
-#define ANTAG_HUD_EVENTMISC 19
-#define ANTAG_HUD_BLOB 20
+#define ANTAG_HUD_CULT 9
+#define ANTAG_HUD_REV 10
+#define ANTAG_HUD_OPS 11
+#define ANTAG_HUD_WIZ 12
+#define ANTAG_HUD_SHADOW 13
+#define ANTAG_HUD_TRAITOR 14
+#define ANTAG_HUD_NINJA 15
+#define ANTAG_HUD_CHANGELING 16
+#define ANTAG_HUD_VAMPIRE 17
+#define ANTAG_HUD_ABDUCTOR 18
+#define DATA_HUD_ABDUCTOR 19
+#define ANTAG_HUD_EVENTMISC 20
+#define ANTAG_HUD_BLOB 21
// Notification action types
#define NOTIFY_JUMP "jump"
diff --git a/code/datums/atom_hud.dm b/code/datums/atom_hud.dm
index ff924e697d1..e79861e5877 100644
--- a/code/datums/atom_hud.dm
+++ b/code/datums/atom_hud.dm
@@ -10,6 +10,7 @@ GLOBAL_LIST_INIT(huds, list(
DATA_HUD_DIAGNOSTIC_BASIC = new/datum/atom_hud/data/diagnostic/basic(),
DATA_HUD_DIAGNOSTIC_ADVANCED = new/datum/atom_hud/data/diagnostic/advanced(),
DATA_HUD_HYDROPONIC = new/datum/atom_hud/data/hydroponic(),
+ DATA_HUD_JANITOR = new/datum/atom_hud/data/janitor(),
ANTAG_HUD_CULT = new/datum/atom_hud/antag(),
ANTAG_HUD_REV = new/datum/atom_hud/antag(),
ANTAG_HUD_OPS = new/datum/atom_hud/antag(),
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 7adac734b9f..6b019a4a91f 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -57,6 +57,9 @@
/datum/atom_hud/data/hydroponic
hud_icons = list (PLANT_NUTRIENT_HUD, PLANT_WATER_HUD, PLANT_STATUS_HUD, PLANT_HEALTH_HUD, PLANT_TOXIN_HUD, PLANT_PEST_HUD, PLANT_WEED_HUD)
+/datum/atom_hud/data/janitor
+ hud_icons = list(JANI_HUD)
+
/* MED/SEC/DIAG HUD HOOKS */
/*
@@ -492,6 +495,15 @@
else
holder.icon_state = ""
+/*~~~~~~~~~~~~~~
+ JANI HUD
+~~~~~~~~~~~~~~~*/
+/obj/effect/decal/cleanable/proc/jani_hud_set_sign()
+ var/image/holder = hud_list[JANI_HUD]
+ holder.icon_state = "hudjani"
+ holder.alpha = 130
+ holder.plane = ABOVE_LIGHTING_PLANE
+
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I'll just put this somewhere near the end...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm
index b3457fc2149..8e70132e678 100644
--- a/code/game/objects/effects/decals/cleanable.dm
+++ b/code/game/objects/effects/decals/cleanable.dm
@@ -11,6 +11,14 @@
plane = FLOOR_PLANE
///for blood n vomit in zero G --- IN GRAVITY=TRUE; NO GRAVITY=FALSE
var/gravity_check = TRUE
+ hud_possible = list(JANI_HUD)
+
+/obj/effect/decal/cleanable/Initialize(mapload)
+ . = ..()
+ var/datum/atom_hud/data/janitor/jani_hud = GLOB.huds[DATA_HUD_JANITOR]
+ prepare_huds()
+ jani_hud.add_to_hud(src)
+ jani_hud_set_sign()
/obj/effect/decal/cleanable/proc/replace_decal(obj/effect/decal/cleanable/C) // Returns true if we should give up in favor of the pre-existing decal
if(mergeable_decal)
diff --git a/code/modules/clothing/glasses/hudglasses.dm b/code/modules/clothing/glasses/hudglasses.dm
index 784eb833ba3..a87eedd9ea8 100644
--- a/code/modules/clothing/glasses/hudglasses.dm
+++ b/code/modules/clothing/glasses/hudglasses.dm
@@ -235,3 +235,32 @@
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/eyes.dmi'
)
+
+/obj/item/clothing/glasses/hud/janitor
+ name = "janitor HUD"
+ desc = "A heads-up display that scans for messes and alerts the user. Good for finding puddles hiding under catwalks."
+ icon_state = "janihud"
+ hud_types = DATA_HUD_JANITOR
+
+ sprite_sheets = list(
+ "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
+ "Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
+ "Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
+ "Kidan" = 'icons/mob/clothing/species/kidan/eyes.dmi'
+ )
+
+/obj/item/clothing/glasses/hud/janitor/sunglasses
+ name = "janitor HUD sunglasses"
+ desc = "Sunglasses with a build-in filth scanner, scans for messes and alerts the user."
+ icon_state = "sunhudjani"
+ see_in_dark = 1
+ flash_protect = FLASH_PROTECTION_FLASH
+ tint = FLASH_PROTECTION_FLASH
+
+/obj/item/clothing/glasses/hud/janitor/night
+ name = "night vision janitor HUD"
+ desc = "A janitorial filth scanner fitted with a light amplifier."
+ icon_state = "nvjanihud"
+ origin_tech = "magnets=4;biotech=4;plasmatech=4;engineering=5"
+ see_in_dark = 8
+ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
diff --git a/code/modules/crafting/tailoring.dm b/code/modules/crafting/tailoring.dm
index 5415b415c22..5ce8299daee 100644
--- a/code/modules/crafting/tailoring.dm
+++ b/code/modules/crafting/tailoring.dm
@@ -194,6 +194,24 @@
reqs = list(/obj/item/clothing/glasses/hud/diagnostic/sunglasses = 1)
category = CAT_CLOTHING
+/datum/crafting_recipe/hudsunjani
+ name = "Janitor HUD sunglasses"
+ result = list(/obj/item/clothing/glasses/hud/janitor/sunglasses)
+ time = 20
+ tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ reqs = list(/obj/item/clothing/glasses/hud/janitor = 1,
+ /obj/item/clothing/glasses/sunglasses = 1,
+ /obj/item/stack/cable_coil = 5)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/hudsunjaniremoval
+ name = "Janitor HUD sunglasses removal"
+ result = list(/obj/item/clothing/glasses/sunglasses, /obj/item/clothing/glasses/hud/janitor)
+ time = 20
+ tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ reqs = list(/obj/item/clothing/glasses/hud/janitor/sunglasses = 1)
+ category = CAT_CLOTHING
+
/datum/crafting_recipe/beergoggles
name = "Sunscanners"
result = list(/obj/item/clothing/glasses/sunglasses/reagent)
diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm
index 82f78017a5d..c36af97f0bf 100644
--- a/code/modules/mob/living/silicon/silicon_mob.dm
+++ b/code/modules/mob/living/silicon/silicon_mob.dm
@@ -40,6 +40,7 @@
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_BASIC //There is only one kind of diag hud
+ var/jani_hud = DATA_HUD_JANITOR
/mob/living/silicon/New()
GLOB.silicon_mob_list |= src
@@ -350,9 +351,11 @@
var/datum/atom_hud/secsensor = GLOB.huds[sec_hud]
var/datum/atom_hud/medsensor = GLOB.huds[med_hud]
var/datum/atom_hud/diagsensor = GLOB.huds[d_hud]
+ var/datum/atom_hud/janisensor = GLOB.huds[jani_hud]
secsensor.remove_hud_from(src)
medsensor.remove_hud_from(src)
diagsensor.remove_hud_from(src)
+ janisensor.remove_hud_from(src)
/mob/living/silicon/proc/add_sec_hud()
@@ -367,12 +370,16 @@
var/datum/atom_hud/diagsensor = GLOB.huds[d_hud]
diagsensor.add_hud_to(src)
+/mob/living/silicon/proc/add_jani_hud()
+ var/datum/atom_hud/janisensor = GLOB.huds[jani_hud]
+ janisensor.add_hud_to(src)
/mob/living/silicon/proc/toggle_sensor_mode()
to_chat(src, "Please select sensor type.")
var/static/list/sensor_choices = list("Security" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "securityhud"),
"Medical" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "healthhud"),
"Diagnostic" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "diagnostichud"),
+ "Janitor" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "janihud"),
"None" = image(icon = 'icons/mob/screen_gen.dmi', icon_state = "x"))
var/sensor_type = show_radial_menu(src, src, sensor_choices)
if(!sensor_type)
@@ -388,6 +395,9 @@
if("Diagnostic")
add_diag_hud()
to_chat(src, "Robotics diagnostic overlay enabled.")
+ if("Janitor")
+ add_jani_hud()
+ to_chat(src, "Janitorial filth overlay enabled.")
if("None")
to_chat(src, "Sensor augmentations disabled.")
diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm
index 89c1502e61b..ed79318dbfa 100644
--- a/code/modules/research/designs/equipment_designs.dm
+++ b/code/modules/research/designs/equipment_designs.dm
@@ -81,6 +81,26 @@
build_path = /obj/item/clothing/glasses/hud/skills
category = list("Equipment")
+/datum/design/jani_hud
+ name = "Janitor HUD"
+ desc = "A heads-up display that scans for messes and alerts the user. Good for finding puddles hiding under catwalks."
+ id = "jani_hud"
+ req_tech = list("biotech" = 2, "magnets" = 3)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 500)
+ build_path = /obj/item/clothing/glasses/hud/janitor
+ category = list("Equipment", "Janitorial")
+
+/datum/design/jani_night_vision_goggles
+ name = "Night Vision Janitor HUD"
+ desc = "A janitorial filth scanner fitted with a light amplifier."
+ id = "night_vision_jani"
+ req_tech = list("biotech" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 6)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000)
+ build_path = /obj/item/clothing/glasses/hud/janitor/night
+ category = list("Equipment", "Janitorial")
+
/datum/design/mesons
name = "Optical Meson Scanners"
desc = "Used for seeing walls, floors, and stuff through anything."
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index a82989c1403..91620b6e399 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -386,6 +386,17 @@
build_path = /obj/item/organ/internal/cyberimp/arm/toolset_abductor
category = list("Medical")
+/datum/design/cyberimp_jani_hud
+ name = "Janitor HUD Implant"
+ desc = "These cybernetic eye implants will display a filth HUD over everything you see. Wiggle eyes to control."
+ id = "ci-janihud"
+ req_tech = list("materials" = 5, "engineering" = 4, "programming" = 4, "biotech" = 4)
+ build_type = PROTOLATHE | MECHFAB
+ construction_time = 5 SECONDS
+ materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 500)
+ build_path = /obj/item/organ/internal/cyberimp/eyes/hud/jani
+ category = list("Medical")
+
/datum/design/cyberimp_diagnostic_hud
name = "Diagnostic HUD Implant"
desc = "These cybernetic eye implants will display a diagnostic HUD over everything you see. Wiggle eyes to control."
diff --git a/code/modules/response_team/ert_outfits.dm b/code/modules/response_team/ert_outfits.dm
index f75db89f9ff..008f7f0439e 100644
--- a/code/modules/response_team/ert_outfits.dm
+++ b/code/modules/response_team/ert_outfits.dm
@@ -498,7 +498,7 @@
backpack_contents = list(
/obj/item/grenade/chem_grenade/antiweed = 2,
- /obj/item/push_broom,
+ /obj/item/push_broom = 1,
/obj/item/storage/box/lights/mixed = 1,
/obj/item/melee/flyswatter = 1
)
@@ -507,7 +507,7 @@
name = "RT Janitor (Amber)"
suit = /obj/item/clothing/suit/armor/vest/ert/janitor
head = /obj/item/clothing/head/helmet/ert/janitor
- glasses = /obj/item/clothing/glasses/sunglasses
+ glasses = /obj/item/clothing/glasses/hud/janitor/sunglasses
r_pocket = /obj/item/flashlight/seclite
suit_store = /obj/item/gun/energy/disabler
@@ -518,12 +518,13 @@
/datum/outfit/job/centcom/response_team/janitorial/red
name = "RT Janitor (Red)"
suit = /obj/item/clothing/suit/space/hardsuit/ert/janitor
- glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ glasses = /obj/item/clothing/glasses/hud/janitor/sunglasses
shoes = /obj/item/clothing/shoes/galoshes/dry/lightweight
r_pocket = /obj/item/scythe/tele
suit_store = /obj/item/gun/energy/gun
cybernetic_implants = list(
+ /obj/item/organ/internal/cyberimp/eyes/hud/security,
/obj/item/organ/internal/cyberimp/arm/janitorial/advanced,
/obj/item/organ/internal/cyberimp/chest/nutriment/hardened
)
@@ -535,7 +536,7 @@
/datum/outfit/job/centcom/response_team/janitorial/gamma
name = "RT Janitor (Gamma)"
- glasses = /obj/item/clothing/glasses/night
+ glasses = /obj/item/clothing/glasses/hud/janitor/night
back = /obj/item/mod/control/pre_equipped/responsory/janitor
r_pocket = /obj/item/scythe/tele
shoes = /obj/item/clothing/shoes/magboots/elite
diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm
index 3637f1f4f83..5d7fb4d2bb5 100644
--- a/code/modules/surgery/organs/augments_eyes.dm
+++ b/code/modules/surgery/organs/augments_eyes.dm
@@ -61,3 +61,11 @@
aug_message = "Job indicator icons pop up in your vision. That is not a certified surgeon..."
HUD_type = DATA_HUD_SECURITY_ADVANCED
examine_extensions = list(EXAMINE_HUD_SECURITY_READ)
+
+/obj/item/organ/internal/cyberimp/eyes/hud/jani
+ name = "Janitor HUD implant"
+ desc = "These cybernetic eye implants will display a filth HUD over everything you see."
+ implant_color = "#AF00AF"
+ origin_tech = "materials=4;engineering=4;biotech=4"
+ aug_message = "You scan for filth spots around you..."
+ HUD_type = DATA_HUD_JANITOR
diff --git a/icons/mob/clothing/eyes.dmi b/icons/mob/clothing/eyes.dmi
index 585217a02ce..92c2d1ee3fa 100644
Binary files a/icons/mob/clothing/eyes.dmi and b/icons/mob/clothing/eyes.dmi differ
diff --git a/icons/mob/clothing/species/drask/eyes.dmi b/icons/mob/clothing/species/drask/eyes.dmi
index bbe5ca72ad9..38a7b628099 100644
Binary files a/icons/mob/clothing/species/drask/eyes.dmi and b/icons/mob/clothing/species/drask/eyes.dmi differ
diff --git a/icons/mob/clothing/species/grey/eyes.dmi b/icons/mob/clothing/species/grey/eyes.dmi
index a17e4e2242f..7760cca8f60 100644
Binary files a/icons/mob/clothing/species/grey/eyes.dmi and b/icons/mob/clothing/species/grey/eyes.dmi differ
diff --git a/icons/mob/clothing/species/kidan/eyes.dmi b/icons/mob/clothing/species/kidan/eyes.dmi
index 67901173d8d..cc03d39fcdd 100644
Binary files a/icons/mob/clothing/species/kidan/eyes.dmi and b/icons/mob/clothing/species/kidan/eyes.dmi differ
diff --git a/icons/mob/clothing/species/vox/eyes.dmi b/icons/mob/clothing/species/vox/eyes.dmi
index 103dca449d1..ac19c03b436 100644
Binary files a/icons/mob/clothing/species/vox/eyes.dmi and b/icons/mob/clothing/species/vox/eyes.dmi differ
diff --git a/icons/mob/hud/hud_misc.dmi b/icons/mob/hud/hud_misc.dmi
index 7e81764ab0a..7e2d9c77043 100644
Binary files a/icons/mob/hud/hud_misc.dmi and b/icons/mob/hud/hud_misc.dmi differ
diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi
index 04310be5f5c..3eb8dfc83a7 100644
Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ