From ee9048baee457dbd4ae5e4a35965e517ae031647 Mon Sep 17 00:00:00 2001
From: Roxy <94389951+SapphoQueer@users.noreply.github.com>
Date: Tue, 15 Jul 2025 20:17:19 +0200
Subject: [PATCH] Civilian HUDs + Implant (#4219)
## About The Pull Request
Adds civilian HUDs and HUDsunglasses to the game. They can see the job
icon, but not mindshield/wanted/permit status. Juuuust the job icon.
Regular variant available in loadout and autodrobe, as well as sci and
service lathes after being researched with the rest of the huds.
Sunglasses available through crafting the same way you craft the others.
Also adds it as a researchable implant. Available in augments+ for 4
quirk points.
Also Alexios did the really pretty grey version of the sprite so they
get to be in the changelog :)
## Why It's Good For The Game
Bubberstation has a LOT of people running around with outfits not
correlating to their job. This makes it hard to find out what job people
are at a quick glance at times. This adds a HUD that lets you see the
job icon and nothing else.
I ran an adminbussed version of these and players pretty much
unanimously agreed that they were nice to have, and agreeing with my
above point of "it is hard to see what job people are at times"
Also they just look cool.
## Proof Of Testing
## Changelog
:cl:Sapphoqueer, Alexios
add: Civilian HUDs and Civilian HUDSunglasses. Available in loadout,
clothesmate, and sci/servicelathes after the HUD research. These show
job icons and nothing else.
add: Civilian HUD implants. Printable by sci through the cybernetics
implants node, as well as being in augments+ for 4 quirk points.
/:cl:
---------
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
---
.../middleware/limbs_and_markings.dm | 1 +
.../modules/loadout/categories/glasses.dm | 2 +-
.../modules/research/techweb/all_nodes.dm | 1 +
.../modules/client/augment/implants.dm | 5 +++
.../modules/implants/code/medical_nodes.dm | 1 +
.../modular_vending/code/clothesmate.dm | 1 +
.../datums/components/crafting/tailoring.dm | 18 +++++++++
.../code/modules/clothing/glasses/hud.dm | 18 +++++++++
.../modules/implants/code/augments_eyes.dm | 7 ++++
.../modules/loadout/categories/glasses.dm | 4 ++
.../modules/research/designs/misc_designs.dm | 35 +++++++++++++++++-
modular_zubbers/icons/mob/clothing/eyes.dmi | Bin 0 -> 765 bytes
.../icons/obj/clothing/head/glasses.dmi | Bin 0 -> 645 bytes
.../icons/obj/medical/organs/organs.dmi | Bin 0 -> 656 bytes
tgstation.dme | 2 +
15 files changed, 93 insertions(+), 2 deletions(-)
create mode 100644 modular_zubbers/code/modules/clothing/glasses/hud.dm
create mode 100644 modular_zubbers/code/modules/implants/code/augments_eyes.dm
create mode 100644 modular_zubbers/icons/mob/clothing/eyes.dmi
create mode 100644 modular_zubbers/icons/obj/clothing/head/glasses.dmi
create mode 100644 modular_zubbers/icons/obj/medical/organs/organs.dmi
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm b/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm
index 0bd3b3cfdf9..b06afc7e231 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm
+++ b/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm
@@ -34,6 +34,7 @@
"tongue" = "Tongue",
"ears" = "Ears",
"Brain implant" = "Brain implant", //BUBBER EDIT
+ "Eyes Implant" = "Eyes implant",
"Mouth implant" = "Mouth implant",
"Left Arm implant" = "Left Arm implant",
"Right Arm implant" = "Right Arm implant",
diff --git a/modular_skyrat/master_files/code/modules/loadout/categories/glasses.dm b/modular_skyrat/master_files/code/modules/loadout/categories/glasses.dm
index 8eb98650228..4f02e539058 100644
--- a/modular_skyrat/master_files/code/modules/loadout/categories/glasses.dm
+++ b/modular_skyrat/master_files/code/modules/loadout/categories/glasses.dm
@@ -75,7 +75,7 @@
item_path = /obj/item/clothing/glasses/fake_sunglasses/aviator
/datum/loadout_item/glasses/retinal_projector
- name = "Civilian Retinal Projector"
+ name = "Retinal Projector"
item_path = /obj/item/clothing/glasses/hud/ar/projector
/*
diff --git a/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm b/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm
index bc9e990a42e..9dfd88fdcdb 100644
--- a/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm
+++ b/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm
@@ -153,6 +153,7 @@
"meson_hud_projector",
"science_hud_projector",
"permit_glasses",
+ "civ_hud",
"nifsoft_money_sense",
"nifsoft_hud_kit",
"nifsoft_hud_science",
diff --git a/modular_skyrat/modules/customization/modules/client/augment/implants.dm b/modular_skyrat/modules/customization/modules/client/augment/implants.dm
index 1b4a4a34483..67af8a0ad06 100644
--- a/modular_skyrat/modules/customization/modules/client/augment/implants.dm
+++ b/modular_skyrat/modules/customization/modules/client/augment/implants.dm
@@ -47,6 +47,11 @@
/datum/augment_item/implant/eyes
slot = AUGMENT_SLOT_EYES_IMPLANT
+/datum/augment_item/implant/eyes/civhud
+ name = "Civilian HUD Implant"
+ cost = 4
+ path = /obj/item/organ/cyberimp/eyes/hud/civilian
+
//MOUTH IMPLANTS
/datum/augment_item/implant/mouth
slot = AUGMENT_SLOT_MOUTH_IMPLANT
diff --git a/modular_skyrat/modules/implants/code/medical_nodes.dm b/modular_skyrat/modules/implants/code/medical_nodes.dm
index a51826d1407..d5fe796cbe4 100644
--- a/modular_skyrat/modules/implants/code/medical_nodes.dm
+++ b/modular_skyrat/modules/implants/code/medical_nodes.dm
@@ -6,6 +6,7 @@
"ci-medhud",
"ci-sechud",
"ci-diaghud",
+ "ci-civhud",
"ci-botany",
"ci-janitor",
"ci-lighter",
diff --git a/modular_skyrat/modules/modular_vending/code/clothesmate.dm b/modular_skyrat/modules/modular_vending/code/clothesmate.dm
index d4b1905e479..1442582b825 100644
--- a/modular_skyrat/modules/modular_vending/code/clothesmate.dm
+++ b/modular_skyrat/modules/modular_vending/code/clothesmate.dm
@@ -44,6 +44,7 @@
/obj/item/clothing/glasses/regular/betterunshit = 5,
/obj/item/clothing/glasses/thin = 5,
/obj/item/clothing/glasses/hud/ar/projector = 5,
+ /obj/item/clothing/glasses/hud/civilian = 5,
/obj/item/clothing/neck/face_scarf = 5,
/obj/item/clothing/neck/scarf/pride = 5, //BUBBER EDIT: ADDS PRIDE SCARVES
/obj/item/clothing/gloves/bracer/wraps,
diff --git a/modular_zubbers/code/datums/components/crafting/tailoring.dm b/modular_zubbers/code/datums/components/crafting/tailoring.dm
index 0c6b966acd0..ca9ea7aad01 100644
--- a/modular_zubbers/code/datums/components/crafting/tailoring.dm
+++ b/modular_zubbers/code/datums/components/crafting/tailoring.dm
@@ -68,3 +68,21 @@
/obj/item/stack/ore/titanium =5)
time = 5 SECONDS
category = CAT_CLOTHING
+
+/datum/crafting_recipe/hudsunciv
+ name = "Civilian HUDsunglasses"
+ result = /obj/item/clothing/glasses/hud/civilian/sunglasses
+ time = 2 SECONDS
+ tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ reqs = list(/obj/item/clothing/glasses/hud/civilian = 1,
+ /obj/item/clothing/glasses/sunglasses = 1,
+ /obj/item/stack/cable_coil = 5)
+ category = CAT_EQUIPMENT
+
+/datum/crafting_recipe/hudsuncivremoval
+ name = "Civilian HUD removal"
+ result = /obj/item/clothing/glasses/sunglasses
+ time = 2 SECONDS
+ tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ reqs = list(/obj/item/clothing/glasses/hud/civilian/sunglasses = 1)
+ category = CAT_EQUIPMENT
diff --git a/modular_zubbers/code/modules/clothing/glasses/hud.dm b/modular_zubbers/code/modules/clothing/glasses/hud.dm
new file mode 100644
index 00000000000..f543072a7bd
--- /dev/null
+++ b/modular_zubbers/code/modules/clothing/glasses/hud.dm
@@ -0,0 +1,18 @@
+/obj/item/clothing/glasses/hud/civilian
+ name = "Civilian HUD Glasses"
+ desc = "A heads-up display that scans the humanoids around you and displays their ID status. Experts say this has well over 9000 uses."
+ icon = 'modular_zubbers/icons/obj/clothing/head/glasses.dmi'
+ worn_icon = 'modular_zubbers/icons/mob/clothing/eyes.dmi'
+ icon_state = "civhud"
+ clothing_traits = list(TRAIT_BASIC_SECURITY_HUD) //thanks honkbots for having that
+
+
+/obj/item/clothing/glasses/hud/civilian/sunglasses
+ name = "Civilian HUDSunglasses"
+ desc = "Sunglasses with a civilian HUD."
+ icon = 'modular_zubbers/icons/obj/clothing/head/glasses.dmi'
+ worn_icon = 'modular_zubbers/icons/mob/clothing/eyes.dmi'
+ icon_state = "sunhudciv"
+ flash_protect = FLASH_PROTECTION_FLASH
+ flags_cover = GLASSESCOVERSEYES
+ tint = 1
diff --git a/modular_zubbers/code/modules/implants/code/augments_eyes.dm b/modular_zubbers/code/modules/implants/code/augments_eyes.dm
new file mode 100644
index 00000000000..fdaee68179b
--- /dev/null
+++ b/modular_zubbers/code/modules/implants/code/augments_eyes.dm
@@ -0,0 +1,7 @@
+/obj/item/organ/cyberimp/eyes/hud/civilian
+ name = "Civilian HUD implant"
+ desc = "These cybernetic eye implants will display a Civilian HUD over everything you see."
+ icon = 'modular_zubbers/icons/obj/medical/organs/organs.dmi'
+ icon_state = "eye_implant_civilian"
+ HUD_traits = list(TRAIT_BASIC_SECURITY_HUD)
+ hud_color = "#30e04d"
diff --git a/modular_zubbers/code/modules/loadout/categories/glasses.dm b/modular_zubbers/code/modules/loadout/categories/glasses.dm
index cfe7b0df377..49feae8db8e 100644
--- a/modular_zubbers/code/modules/loadout/categories/glasses.dm
+++ b/modular_zubbers/code/modules/loadout/categories/glasses.dm
@@ -10,3 +10,7 @@
/datum/loadout_item/glasses/salesman
name = "Colored Glasses"
item_path = /obj/item/clothing/glasses/salesman
+
+/datum/loadout_item/glasses/civhud
+ name = "Civilian HUD"
+ item_path = /obj/item/clothing/glasses/hud/civilian
diff --git a/modular_zubbers/code/modules/research/designs/misc_designs.dm b/modular_zubbers/code/modules/research/designs/misc_designs.dm
index 93c2c4eeb58..41b691285e3 100644
--- a/modular_zubbers/code/modules/research/designs/misc_designs.dm
+++ b/modular_zubbers/code/modules/research/designs/misc_designs.dm
@@ -19,7 +19,7 @@
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS,
)
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO
-
+
/* Uncomment in case nitrogen internal tanks get refactored to no longer be 25L
* /datum/design/nitrogen_tank_belt
* name = "Nitrogen Internals Tank"
@@ -45,3 +45,36 @@
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS,
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL
+
+/datum/design/civilian_hud
+ name = "Civilian HUD"
+ desc = "A heads-up display that scans the humanoids around you and displays their ID status. Experts say this has well over 9000 uses."
+ id = "civ_hud"
+ build_type = PROTOLATHE | AWAY_LATHE
+ materials = list(
+ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/clothing/glasses/hud/civilian
+ category = list(
+ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MISC,
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_SCIENCE
+
+/datum/design/cyberimp_civ_hud
+ name = "Civilian HUD Implant"
+ desc = "These cybernetic eyes will display a civilian HUD over everything you see. Wiggle eyes to control."
+ id = "ci-civhud"
+ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
+ construction_time = 5 SECONDS
+ //just about half the materials of a sechudimplant but no silver
+ materials = list(
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT*3,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT*3,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT*4,
+ )
+ build_path = /obj/item/organ/cyberimp/eyes/hud/civilian
+ category = list(
+ RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
diff --git a/modular_zubbers/icons/mob/clothing/eyes.dmi b/modular_zubbers/icons/mob/clothing/eyes.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..386cd20767bebe6404c93669c67601cc661a8d77
GIT binary patch
literal 765
zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGo6;&Y-B`&GO$wiq3C7JnoK#@7Y
zVFg8{-@gPGeEj-E%Uf6L+?n&i8$t~(8b5fXbKXbuWB`z3_UO?WkF!4KH5v=LyoJ1j
zL~}%^Ofo)g
x=#TzQ9nv)