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)