diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index 8d9ce20eeb3..79df39c740a 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -65,5 +65,6 @@
// on-screen icons, but rather go to examine text.
#define EXAMINE_HUD_SECURITY_READ "security_read"
#define EXAMINE_HUD_SECURITY_WRITE "security_write"
-#define EXAMINE_HUD_MEDICAL "medical"
+#define EXAMINE_HUD_MEDICAL_READ "medical_read"
+#define EXAMINE_HUD_MEDICAL_WRITE "medical_write"
#define EXAMINE_HUD_SKILLS "skills"
diff --git a/code/datums/outfits/outfit_debug.dm b/code/datums/outfits/outfit_debug.dm
index cc54496a918..25656e06584 100644
--- a/code/datums/outfits/outfit_debug.dm
+++ b/code/datums/outfits/outfit_debug.dm
@@ -97,7 +97,7 @@
prescription_upgradable = FALSE
hud_types = list(DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_ADVANCED, DATA_HUD_SECURITY_ADVANCED, DATA_HUD_HYDROPONIC)
- examine_extensions = list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE, EXAMINE_HUD_MEDICAL, EXAMINE_HUD_SKILLS)
+ examine_extensions = list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE, EXAMINE_HUD_MEDICAL_READ, EXAMINE_HUD_MEDICAL_WRITE, EXAMINE_HUD_SKILLS)
var/xray = FALSE
diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm
index ca6eac1b5d9..47b012eecff 100644
--- a/code/game/jobs/job/supervisor.dm
+++ b/code/game/jobs/job/supervisor.dm
@@ -275,7 +275,7 @@
suit = /obj/item/clothing/suit/storage/iaa/blackjacket
shoes = /obj/item/clothing/shoes/brown
l_ear = /obj/item/radio/headset/headset_iaa/alt
- glasses = /obj/item/clothing/glasses/hud/security/sunglasses/read_only
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
id = /obj/item/card/id/internalaffairsagent
l_pocket = /obj/item/laser_pointer
r_pocket = /obj/item/clothing/accessory/lawyers_badge
diff --git a/code/game/objects/items/weapons/storage/garment.dm b/code/game/objects/items/weapons/storage/garment.dm
index 5a3bec68e74..d3c5ea44ef6 100644
--- a/code/game/objects/items/weapons/storage/garment.dm
+++ b/code/game/objects/items/weapons/storage/garment.dm
@@ -183,7 +183,7 @@
new /obj/item/clothing/shoes/jackboots/jacksandals(src)
new /obj/item/clothing/mask/gas/sechailer(src)
new /obj/item/clothing/glasses/sunglasses(src)
- new /obj/item/clothing/glasses/hud/security/sunglasses/read_only(src)
+ new /obj/item/clothing/glasses/hud/security/sunglasses(src)
new /obj/item/clothing/glasses/hud/health/sunglasses(src)
new /obj/item/clothing/glasses/hud/skills/sunglasses(src)
new /obj/item/clothing/accessory/blue(src)
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index d044e939116..1e31735ae2e 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -329,6 +329,7 @@
prescription_upgradable = TRUE
/obj/item/clothing/glasses/hud/security/chameleon
+ examine_extensions = list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE)
flash_protect = FLASH_PROTECTION_FLASH
var/datum/action/item_action/chameleon/change/chameleon_action
diff --git a/code/modules/clothing/glasses/hudglasses.dm b/code/modules/clothing/glasses/hudglasses.dm
index 34ac0fa8fce..784eb833ba3 100644
--- a/code/modules/clothing/glasses/hudglasses.dm
+++ b/code/modules/clothing/glasses/hudglasses.dm
@@ -41,7 +41,7 @@
icon_state = "healthhud"
origin_tech = "magnets=3;biotech=2"
hud_types = DATA_HUD_MEDICAL_ADVANCED
- examine_extensions = list(EXAMINE_HUD_MEDICAL)
+ examine_extensions = list(EXAMINE_HUD_MEDICAL_READ)
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
@@ -105,7 +105,7 @@
origin_tech = "magnets=3;combat=2"
var/global/list/jobs[0]
hud_types = DATA_HUD_SECURITY_ADVANCED
- examine_extensions = list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE)
+ examine_extensions = list(EXAMINE_HUD_SECURITY_READ)
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
@@ -131,9 +131,6 @@
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these
-/obj/item/clothing/glasses/hud/security/sunglasses/read_only
- examine_extensions = list(EXAMINE_HUD_SECURITY_READ)
-
/obj/item/clothing/glasses/hud/security/sunglasses
name = "HUDSunglasses"
desc = "Sunglasses with a HUD."
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index 4889521c7d9..c8ea7731d5a 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -314,15 +314,23 @@
if(CIH?.examine_extensions)
have_hudtypes += CIH.examine_extensions
+ var/user_accesses = M.get_access()
+ var/secwrite = has_access(null, list(ACCESS_SECURITY, ACCESS_FORENSICS_LOCKERS), user_accesses) // same as obj/machinery/computer/secure_data/req_one_access
+ var/medwrite = has_access(null, list(ACCESS_MEDICAL, ACCESS_FORENSICS_LOCKERS), user_accesses) // same access as obj/machinery/computer/med_data/req_one_access
+ if(secwrite)
+ have_hudtypes += EXAMINE_HUD_SECURITY_WRITE
+ if(medwrite)
+ have_hudtypes += EXAMINE_HUD_MEDICAL_WRITE
+
return (hudtype in have_hudtypes)
else if(isrobot(M) || isAI(M)) //Stand-in/Stopgap to prevent pAIs from freely altering records, pending a more advanced Records system
- return (hudtype in list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE, EXAMINE_HUD_MEDICAL))
+ return (hudtype in list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE, EXAMINE_HUD_MEDICAL_READ, EXAMINE_HUD_MEDICAL_WRITE))
else if(isobserver(M))
var/mob/dead/observer/O = M
if(DATA_HUD_SECURITY_ADVANCED in O.data_hud_seen)
- return (hudtype in list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SKILLS))
+ return (hudtype in list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_MEDICAL_READ, EXAMINE_HUD_SKILLS))
return FALSE
diff --git a/code/modules/mob/living/carbon/human/human_examine.dm b/code/modules/mob/living/carbon/human/human_examine.dm
index e6ff0fde85b..61a9b1f5446 100644
--- a/code/modules/mob/living/carbon/human/human_examine.dm
+++ b/code/modules/mob/living/carbon/human/human_examine.dm
@@ -180,6 +180,40 @@
msg += "[p_they(TRUE)] [p_are()] mostly desiccated now, with only [isslimeperson(src) ? "congealed slime" : "bones"] remaining of what used to be a person.\n"
// only humans get employment records
+ if(hasHUD(user, EXAMINE_HUD_SKILLS))
+ var/perpname = get_visible_name(TRUE)
+ var/skills
+
+ if(perpname)
+ for(var/datum/data/record/E in GLOB.data_core.general)
+ if(E.fields["name"] == perpname)
+ skills = E.fields["notes"]
+ if(skills)
+ var/char_limit = 40
+ if(length(skills) <= char_limit)
+ msg += "Employment records: [skills]\n"
+ else
+ msg += "Employment records: [copytext_preserve_html(skills, 1, char_limit-3)]...More...\n"
+
+
+ if(hasHUD(user, EXAMINE_HUD_MEDICAL_READ))
+ var/perpname = get_visible_name(TRUE)
+ var/medical = "None"
+ var/mental = "None"
+
+ for(var/datum/data/record/E in GLOB.data_core.general)
+ if(E.fields["name"] == perpname)
+ for(var/datum/data/record/R in GLOB.data_core.general)
+ if(R.fields["id"] == E.fields["id"])
+ medical = R.fields["p_stat"]
+ mental = R.fields["m_stat"]
+
+ var/medical_status = hasHUD(user, EXAMINE_HUD_MEDICAL_WRITE) ? "\[[medical]\]" : "\[[medical]\]"
+ var/mental_status = hasHUD(user, EXAMINE_HUD_MEDICAL_WRITE) ? "\[[mental]\]" : "\[[mental]\]"
+ msg += "Physical status: [medical_status]\n"
+ msg += "Mental Status: [mental_status]\n"
+ msg += "Medical records: \[View\] \[Add comment\]\n"
+
if(hasHUD(user, EXAMINE_HUD_SECURITY_READ))
var/perpname = get_visible_name(TRUE)
var/criminal = "None"
@@ -200,38 +234,9 @@
commentLatest = "No entries." //If present but without entries (=target is recognized crew)
var/criminal_status = hasHUD(user, EXAMINE_HUD_SECURITY_WRITE) ? "\[[criminal]\]" : "\[[criminal]\]"
- msg += "Criminal status: [criminal_status]\n"
- msg += "Security records: \[View comment log\] \[Add comment\]\n"
- msg += "Latest entry: [commentLatest]\n"
-
- if(hasHUD(user, EXAMINE_HUD_SKILLS))
- var/perpname = get_visible_name(TRUE)
- var/skills
-
- if(perpname)
- for(var/datum/data/record/E in GLOB.data_core.general)
- if(E.fields["name"] == perpname)
- skills = E.fields["notes"]
- if(skills)
- var/char_limit = 40
- if(length(skills) <= char_limit)
- msg += "Employment records: [skills]\n"
- else
- msg += "Employment records: [copytext_preserve_html(skills, 1, char_limit-3)]...More...\n"
-
-
- if(hasHUD(user,EXAMINE_HUD_MEDICAL))
- var/perpname = get_visible_name(TRUE)
- var/medical = "None"
-
- for(var/datum/data/record/E in GLOB.data_core.general)
- if(E.fields["name"] == perpname)
- for(var/datum/data/record/R in GLOB.data_core.general)
- if(R.fields["id"] == E.fields["id"])
- medical = R.fields["p_stat"]
-
- msg += "Physical status: \[[medical]\]\n"
- msg += "Medical records: \[View\] \[Add comment\]\n"
+ msg += "Criminal status: [criminal_status]\n"
+ msg += "Security records: \[View comment log\] \[Add comment\]\n"
+ msg += "Latest entry: [commentLatest]\n"
return msg
diff --git a/code/modules/mob/living/carbon/human/human_mob.dm b/code/modules/mob/living/carbon/human/human_mob.dm
index 29007d3aae8..e8a9edd5fe1 100644
--- a/code/modules/mob/living/carbon/human/human_mob.dm
+++ b/code/modules/mob/living/carbon/human/human_mob.dm
@@ -770,10 +770,10 @@
add_comment(usr, "security", sanitized)
if(href_list["medical"])
- if(hasHUD(usr, EXAMINE_HUD_MEDICAL))
+ if(hasHUD(usr, EXAMINE_HUD_MEDICAL_WRITE))
if(usr.incapacitated())
return
- var/modified = 0
+ var/modified = FALSE
var/perpname = get_visible_name(TRUE)
for(var/datum/data/record/E in GLOB.data_core.general)
@@ -782,21 +782,39 @@
if(R.fields["id"] == E.fields["id"])
var/setmedical = input(usr, "Specify a new medical status for this person.", "Medical HUD", R.fields["p_stat"]) in list("*SSD*", "*Deceased*", "Physically Unfit", "Active", "Disabled", "Cancel")
- if(hasHUD(usr, EXAMINE_HUD_MEDICAL))
+ if(hasHUD(usr, EXAMINE_HUD_MEDICAL_WRITE))
if(setmedical != "Cancel")
R.fields["p_stat"] = setmedical
- modified = 1
+ modified = TRUE
if(GLOB.PDA_Manifest.len)
GLOB.PDA_Manifest.Cut()
- spawn()
- sec_hud_set_security_status()
+ if(!modified)
+ to_chat(usr, "Unable to locate a data core entry for this person.")
+
+ if(href_list["mental"])
+ if(hasHUD(usr, EXAMINE_HUD_MEDICAL_WRITE))
+ if(usr.incapacitated())
+ return
+ var/modified = FALSE
+ var/perpname = get_visible_name(TRUE)
+
+ for(var/datum/data/record/E in GLOB.data_core.general)
+ if(E.fields["name"] == perpname)
+ for(var/datum/data/record/R in GLOB.data_core.general)
+ if(R.fields["id"] == E.fields["id"])
+ var/setmental = input(usr, "Specify a new mental status for this person.", "Medical HUD", R.fields["m_stat"]) in list("*Insane*", "*Unstable*", "*Watch*", "Stable", "Cancel")
+
+ if(hasHUD(usr, EXAMINE_HUD_MEDICAL_WRITE))
+ if(setmental != "Cancel")
+ R.fields["m_stat"] = setmental
+ modified = TRUE
if(!modified)
to_chat(usr, "Unable to locate a data core entry for this person.")
if(href_list["medrecord"])
- if(hasHUD(usr, EXAMINE_HUD_MEDICAL))
+ if(hasHUD(usr, EXAMINE_HUD_MEDICAL_READ))
if(usr.incapacitated())
return
var/read = 0
@@ -806,7 +824,7 @@
if(E.fields["name"] == perpname)
for(var/datum/data/record/R in GLOB.data_core.medical)
if(R.fields["id"] == E.fields["id"])
- if(hasHUD(usr, EXAMINE_HUD_MEDICAL))
+ if(hasHUD(usr, EXAMINE_HUD_MEDICAL_READ))
to_chat(usr, "Name: [R.fields["name"]] Blood Type: [R.fields["b_type"]]")
to_chat(usr, "DNA: [R.fields["b_dna"]]")
to_chat(usr, "Minor Disabilities: [R.fields["mi_dis"]]")
@@ -821,7 +839,7 @@
to_chat(usr, "Unable to locate a data core entry for this person.")
if(href_list["medrecordComment"])
- if(hasHUD(usr, EXAMINE_HUD_MEDICAL))
+ if(hasHUD(usr, EXAMINE_HUD_MEDICAL_READ))
if(usr.incapacitated())
return
var/perpname = get_visible_name(TRUE)
@@ -831,7 +849,7 @@
if(E.fields["name"] == perpname)
for(var/datum/data/record/R in GLOB.data_core.medical)
if(R.fields["id"] == E.fields["id"])
- if(hasHUD(usr, EXAMINE_HUD_MEDICAL))
+ if(hasHUD(usr, EXAMINE_HUD_MEDICAL_READ))
read = TRUE
if(LAZYLEN(R.fields["comments"]))
for(var/c in R.fields["comments"])
@@ -844,11 +862,11 @@
to_chat(usr, "Unable to locate a data core entry for this person.")
if(href_list["medrecordadd"])
- if(usr.incapacitated() || !hasHUD(usr, EXAMINE_HUD_MEDICAL))
+ if(usr.incapacitated() || !hasHUD(usr, EXAMINE_HUD_MEDICAL_WRITE))
return
var/raw_input = input("Add Comment:", "Medical records", null, null) as message
var/sanitized = copytext(trim(sanitize(raw_input)), 1, MAX_MESSAGE_LEN)
- if(!sanitized || usr.stat || usr.restrained() || !hasHUD(usr, EXAMINE_HUD_MEDICAL))
+ if(!sanitized || usr.stat || usr.restrained() || !hasHUD(usr, EXAMINE_HUD_MEDICAL_WRITE))
return
add_comment(usr, "medical", sanitized)
diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm
index 17daa66b9aa..3637f1f4f83 100644
--- a/code/modules/surgery/organs/augments_eyes.dm
+++ b/code/modules/surgery/organs/augments_eyes.dm
@@ -43,7 +43,7 @@
origin_tech = "materials=4;programming=4;biotech=4"
aug_message = "You suddenly see health bars floating above people's heads..."
HUD_type = DATA_HUD_MEDICAL_ADVANCED
- examine_extensions = list(EXAMINE_HUD_MEDICAL)
+ examine_extensions = list(EXAMINE_HUD_MEDICAL_READ)
/obj/item/organ/internal/cyberimp/eyes/hud/diagnostic
name = "Diagnostic HUD implant"
@@ -60,4 +60,4 @@
origin_tech = "materials=4;programming=4;biotech=3;combat=3"
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, EXAMINE_HUD_SECURITY_WRITE)
+ examine_extensions = list(EXAMINE_HUD_SECURITY_READ)