From 826cefeca7b8e8fc12a956ea6de37cac06f80097 Mon Sep 17 00:00:00 2001
From: Regular-Joe-SF <53127823+Regular-Joe-SF@users.noreply.github.com>
Date: Sat, 23 May 2020 20:26:48 +0300
Subject: [PATCH] Adds new SecHUD designations and tweaks secHUD on examining
(updated 22 May) (#12666)
* Add new criminal_status
* Add new criminal_status
* Update security.dm
Add new criminal_statuses to sec records console
* Fix beepsky not arresting executees
* Sechud now shows latest comment on examination
* Update human.dm
Add new criminal_status
* Update hud.dmi
Add new sechud icons, animated hudexecute
* Sechud now shows latest comment on examination
Simplified it according to farie's notes
* Sechud now shows latest comment on examination
Once more, thanks Henk!
* Sechud now shows latest comment on examination
Per Henk's review, another one bites the dust.
* Machinery threatcounts fixed
I just noticed that actually this doesn't affect beepsky, but turrets at portable_turret.dm. Well, now there they are.
* Turret threatcounts fixed
Now it should be proper: execute status now counts as threat to turrets.
* Update hud.dmi
New sechud statuses. Hourglass symbol for search status
* Update hud.dmi
DISREGARD: Test commit for affected on icondiffbot
* Update hud.dmi
New sechud statuses. Hourglass symbol for search status
* Revert "Update hud.dmi"
This reverts commit 8deaf40679c3caf6f35cff95487629e4828b3c72.
* New sechud statuses. Zoomglass for search status (now).
* New sechud statuses
Make ghosts with all HUDs or sechud enabled able to use the examine function of sechud.
* Add new sec statuses
LF and conflicts resolved
* add new sec statuses
LF and conflicts resolved
* fix turret threatcounts
LF and conflicts resolved
* add new sec statuses
LF and conflicts resolved
* add new sec statuses, add sechud ghost examine
LF and conflicts resolved
* Add new sec statuses
LF and conflict resolving take2
* Add new sec stasuses
LF and conflict resolve take2, rid with empty lines
* Fixing Travis warning on list access at 355
* On built fail
trailing newlines accidentially forgotten, check, warning on list access, better but still not gone (got to git gut)
* Fixing usage of LAZYACCESS
Yeah - there was just un-necessary stuff there. Thanks to AA and Farie for help
* One last un-necessary thing off
* Move criminal status to defines.
Per Farie request: criminal statuses are now defines, every usage of them moved to utilize them. Minor: CC evilfax uses now 'demote' status in demote reply
* Beepsky prisoner threatcount: status quo
back to what it was since indeed, it becomes a nuisance if he tried to chase prisoners in jail
* Requests done
Removed useless check from secrecordComment, used isobserver at ghost omnihud
* re-add isobserver check
My bad, this check actually gives ghosts the View Comment Log from the HUD where they can't interact with the other buttons. I guess this is exactly why you comment code
* More sane expression on check at secrecordComment
As requested!
Co-authored-by: xXx-RegularJoe-xXx <53127823+xXx-RegularJoe-xXx@users.noreply.github.com>
---
code/__DEFINES/criminal_status.dm | 10 +++++
code/__HELPERS/mobs.dm | 18 ++++++---
code/game/data_huds.dm | 19 +++++++---
code/game/machinery/computer/security.dm | 35 +++++++++++-------
code/game/machinery/computer/skills.dm | 2 +-
code/game/machinery/machinery.dm | 8 +++-
.../mob/living/carbon/human/examine.dm | 28 +++++++++++---
code/modules/mob/living/carbon/human/human.dm | 16 ++++----
code/modules/paperwork/paper.dm | 8 +++-
icons/mob/hud.dmi | Bin 14588 -> 15184 bytes
paradise.dme | 1 +
11 files changed, 103 insertions(+), 42 deletions(-)
create mode 100644 code/__DEFINES/criminal_status.dm
diff --git a/code/__DEFINES/criminal_status.dm b/code/__DEFINES/criminal_status.dm
new file mode 100644
index 00000000000..75c33909fc2
--- /dev/null
+++ b/code/__DEFINES/criminal_status.dm
@@ -0,0 +1,10 @@
+//criminal status defines
+#define SEC_RECORD_STATUS_NONE "None"
+#define SEC_RECORD_STATUS_ARREST "*Arrest*"
+#define SEC_RECORD_STATUS_EXECUTE "*Execute*"
+#define SEC_RECORD_STATUS_INCARCERATED "Incarcerated"
+#define SEC_RECORD_STATUS_RELEASED "Released"
+#define SEC_RECORD_STATUS_PAROLLED "Parolled"
+#define SEC_RECORD_STATUS_DEMOTE "Demote"
+#define SEC_RECORD_STATUS_SEARCH "Search"
+#define SEC_RECORD_STATUS_MONITOR "Monitor"
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 6444ca32b69..f437c409088 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -244,21 +244,27 @@ proc/age2agedescription(age)
var/their_rank = target_records.fields["rank"]
switch(criminal_status)
if("arrest")
- status = "*Arrest*"
+ status = SEC_RECORD_STATUS_ARREST
if("none")
- status = "None"
+ status = SEC_RECORD_STATUS_NONE
if("execute")
if((ACCESS_MAGISTRATE in authcard_access) || (ACCESS_ARMORY in authcard_access))
- status = "*Execute*"
+ status = SEC_RECORD_STATUS_EXECUTE
message_admins("[ADMIN_FULLMONTY(usr)] authorized EXECUTION for [their_rank] [their_name], with comment: [comment]")
else
return 0
+ if("search")
+ status = SEC_RECORD_STATUS_SEARCH
+ if("monitor")
+ status = SEC_RECORD_STATUS_MONITOR
+ if ("demote")
+ status = SEC_RECORD_STATUS_DEMOTE
if("incarcerated")
- status = "Incarcerated"
+ status = SEC_RECORD_STATUS_INCARCERATED
if("parolled")
- status = "Parolled"
+ status = SEC_RECORD_STATUS_PAROLLED
if("released")
- status = "Released"
+ status = SEC_RECORD_STATUS_RELEASED
target_records.fields["criminal"] = status
log_admin("[key_name_admin(user)] set secstatus of [their_rank] [their_name] to [status], comment: [comment]")
target_records.fields["comments"] += "Set to [status] by [user.name] ([user_rank]) on [GLOB.current_date_string] [station_time_timestamp()], comment: [comment]"
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index aff345d2451..08a7b77daff 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -223,19 +223,28 @@
var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security)
if(R)
switch(R.fields["criminal"])
- if("*Execute*")
+ if(SEC_RECORD_STATUS_EXECUTE)
holder.icon_state = "hudexecute"
return
- if("*Arrest*")
+ if(SEC_RECORD_STATUS_ARREST)
holder.icon_state = "hudwanted"
return
- if("Incarcerated")
+ if(SEC_RECORD_STATUS_SEARCH)
+ holder.icon_state = "hudsearch"
+ return
+ if(SEC_RECORD_STATUS_MONITOR)
+ holder.icon_state = "hudmonitor"
+ return
+ if(SEC_RECORD_STATUS_DEMOTE)
+ holder.icon_state = "huddemote"
+ return
+ if(SEC_RECORD_STATUS_INCARCERATED)
holder.icon_state = "hudprisoner"
return
- if("Parolled")
+ if(SEC_RECORD_STATUS_PAROLLED)
holder.icon_state = "hudparolled"
return
- if("Released")
+ if(SEC_RECORD_STATUS_RELEASED)
holder.icon_state = "hudreleased"
return
holder.icon_state = null
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index e886ac0db89..8c815198d31 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -72,17 +72,23 @@
break
var/background = "''"
switch(crimstat)
- if("*Execute*")
+ if(SEC_RECORD_STATUS_EXECUTE)
background = "'background-color:#5E0A1A'"
- if("*Arrest*")
+ if(SEC_RECORD_STATUS_ARREST)
background = "'background-color:#890E26'"
- if("Incarcerated")
+ if(SEC_RECORD_STATUS_SEARCH)
+ background = "'background-color:#999900'"
+ if(SEC_RECORD_STATUS_MONITOR)
+ background = "'background-color:#004C99'"
+ if(SEC_RECORD_STATUS_DEMOTE)
+ background = "'background-color:#C2A111'"
+ if(SEC_RECORD_STATUS_INCARCERATED)
background = "'background-color:#743B03'"
- if("Parolled")
+ if(SEC_RECORD_STATUS_PAROLLED)
background = "'background-color:#743B03'"
- if("Released")
+ if(SEC_RECORD_STATUS_RELEASED)
background = "'background-color:#216489'"
- if("None")
+ if(SEC_RECORD_STATUS_NONE)
background = "'background-color:#007f47'"
if("null")
crimstat = "No record."
@@ -464,12 +470,15 @@
if("criminal")
if(istype(active2, /datum/data/record))
var/list/buttons = list()
- buttons[++buttons.len] = list("name" = "None", "icon" = "unlock", "href" = "criminal=none", "status" = (active2.fields["criminal"] == "None" ? "selected" : null))
- buttons[++buttons.len] = list("name" = "*Arrest*", "icon" = "lock", "href" = "criminal=arrest", "status" = (active2.fields["criminal"] == "*Arrest*" ? "selected" : null))
- buttons[++buttons.len] = list("name" = "Incarcerated", "icon" = "lock", "href" = "criminal=incarcerated", "status" = (active2.fields["criminal"] == "Incarcerated" ? "selected" : null))
- buttons[++buttons.len] = list("name" = "*Execute*", "icon" = "lock", "href" = "criminal=execute", "status" = (active2.fields["criminal"] == "*Execute*" ? "selected" : null))
- buttons[++buttons.len] = list("name" = "Parolled", "icon" = "unlock-alt", "href" = "criminal=parolled", "status" = (active2.fields["criminal"] == "Parolled" ? "selected" : null))
- buttons[++buttons.len] = list("name" = "Released", "icon" = "unlock", "href" = "criminal=released", "status" = (active2.fields["criminal"] == "Released" ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "None", "icon" = "unlock", "href" = "criminal=none", "status" = (active2.fields["criminal"] == SEC_RECORD_STATUS_NONE ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "*Arrest*", "icon" = "lock", "href" = "criminal=arrest", "status" = (active2.fields["criminal"] == SEC_RECORD_STATUS_ARREST ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "Search", "icon" = "lock", "href" = "criminal=search", "status" = (active2.fields["criminal"] == SEC_RECORD_STATUS_SEARCH ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "Monitor", "icon" = "unlock", "href" = "criminal=monitor", "status" = (active2.fields["criminal"] == SEC_RECORD_STATUS_MONITOR ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "Demote", "icon" = "lock", "href" = "criminal=demote", "status" = (active2.fields["criminal"] == SEC_RECORD_STATUS_DEMOTE ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "Incarcerated", "icon" = "lock", "href" = "criminal=incarcerated", "status" = (active2.fields["criminal"] == SEC_RECORD_STATUS_INCARCERATED ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "*Execute*", "icon" = "lock", "href" = "criminal=execute", "status" = (active2.fields["criminal"] == SEC_RECORD_STATUS_EXECUTE ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "Parolled", "icon" = "unlock-alt", "href" = "criminal=parolled", "status" = (active2.fields["criminal"] == SEC_RECORD_STATUS_PAROLLED ? "selected" : null))
+ buttons[++buttons.len] = list("name" = "Released", "icon" = "unlock", "href" = "criminal=released", "status" = (active2.fields["criminal"] == SEC_RECORD_STATUS_RELEASED ? "selected" : null))
setTemp("
Criminal Status
", buttons)
if("rank")
var/list/L = list("Head of Personnel", "Captain", "AI")
@@ -548,7 +557,7 @@
if(3)
R.fields["age"] = rand(5, 85)
if(4)
- R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Parolled", "Released")
+ R.fields["criminal"] = pick(SEC_RECORD_STATUS_NONE, SEC_RECORD_STATUS_ARREST, SEC_RECORD_STATUS_SEARCH, SEC_RECORD_STATUS_MONITOR, SEC_RECORD_STATUS_DEMOTE, SEC_RECORD_STATUS_INCARCERATED, SEC_RECORD_STATUS_PAROLLED, SEC_RECORD_STATUS_RELEASED)
if(5)
R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit")
if(6)
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index 9e07fb43b28..b7361db01a3 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -310,7 +310,7 @@
if(3)
R.fields["age"] = rand(5, 85)
if(4)
- R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Parolled", "Released")
+ R.fields["criminal"] = pick(SEC_RECORD_STATUS_NONE, SEC_RECORD_STATUS_ARREST, SEC_RECORD_STATUS_INCARCERATED, SEC_RECORD_STATUS_PAROLLED, SEC_RECORD_STATUS_RELEASED)
if(5)
R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit")
if(6)
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 0a55acfcb81..19dc80f9a40 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -552,8 +552,12 @@ Class Procs:
if(check_records && !R)
threatcount += 4
- if(check_arrest && R && (R.fields["criminal"] == "*Arrest*"))
- threatcount += 4
+ if(R && R.fields["criminal"])
+ switch(R.fields["criminal"])
+ if(SEC_RECORD_STATUS_EXECUTE)
+ threatcount += 7
+ if(SEC_RECORD_STATUS_ARREST)
+ threatcount += 5
return threatcount
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 3db7c079ccc..b67e01924c8 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -346,6 +346,7 @@
if(hasHUD(user,"security"))
var/perpname = get_visible_name(TRUE)
var/criminal = "None"
+ var/commentLatest = "ERROR: Unable to locate a data core entry for this person." //If there is no datacore present, give this
if(perpname)
for(var/datum/data/record/E in GLOB.data_core.general)
@@ -353,9 +354,16 @@
for(var/datum/data/record/R in GLOB.data_core.security)
if(R.fields["id"] == E.fields["id"])
criminal = R.fields["criminal"]
+ if(LAZYLEN(R.fields["comments"])) //if the commentlist is present
+ var/list/comments = R.fields["comments"]
+ commentLatest = LAZYACCESS(comments, comments.len) //get the latest entry from the comment log
+ else
+ commentLatest = "No entries." //If present but without entries (=target is recognized crew)
+
var/criminal_status = hasHUD(user, "read_only_security") ? "\[[criminal]\]" : "\[[criminal]\]"
msg += "Criminal status: [criminal_status]\n"
- msg += "Security records: \[View\] \[Add comment\]\n"
+ msg += "Security records: \[View comment log\] \[Add comment\]\n"
+ msg += "Latest entry: [commentLatest]\n"
if(hasHUD(user,"medical"))
var/perpname = get_visible_name(TRUE)
@@ -398,17 +406,25 @@
if("medical")
return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(CIH,/obj/item/organ/internal/cyberimp/eyes/hud/medical)
else
- return 0
+ return FALSE
else if(isrobot(M) || isAI(M)) //Stand-in/Stopgap to prevent pAIs from freely altering records, pending a more advanced Records system
switch(hudtype)
if("security")
- return 1
+ return TRUE
if("medical")
- return 1
+ return TRUE
else
- return 0
+ return FALSE
+ else if(isobserver(M))
+ var/mob/dead/observer/O = M
+ if(O.data_hud_seen == DATA_HUD_SECURITY_ADVANCED || O.data_hud_seen == DATA_HUD_DIAGNOSTIC + DATA_HUD_SECURITY_ADVANCED + DATA_HUD_MEDICAL_ADVANCED)
+ switch(hudtype)
+ if("security")
+ return TRUE
+ else
+ return FALSE
else
- return 0
+ return FALSE
// Ignores robotic limb branding prefixes like "Morpheus Cybernetics"
/proc/ignore_limb_branding(limb_name)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 59285ba88e3..7d1073fbdb2 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -715,14 +715,14 @@
for(var/datum/data/record/R in GLOB.data_core.security)
if(R.fields["id"] == E.fields["id"])
- var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Released", "Cancel")
+ var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list(SEC_RECORD_STATUS_NONE, SEC_RECORD_STATUS_ARREST, SEC_RECORD_STATUS_SEARCH, SEC_RECORD_STATUS_MONITOR, SEC_RECORD_STATUS_DEMOTE, SEC_RECORD_STATUS_INCARCERATED, SEC_RECORD_STATUS_PAROLLED, SEC_RECORD_STATUS_RELEASED, "Cancel")
var/t1 = copytext(trim(sanitize(input("Enter Reason:", "Security HUD", null, null) as text)), 1, MAX_MESSAGE_LEN)
if(!t1)
t1 = "(none)"
if(hasHUD(usr, "security") && setcriminal != "Cancel")
found_record = 1
- if(R.fields["criminal"] == "*Execute*")
+ if(R.fields["criminal"] == SEC_RECORD_STATUS_EXECUTE)
to_chat(usr, "Unable to modify the sec status of a person with an active Execution order. Use a security computer instead.")
else
var/rank
@@ -768,7 +768,7 @@
if(href_list["secrecordComment"])
if(hasHUD(usr,"security"))
- if(usr.incapacitated())
+ if(usr.incapacitated() && !isobserver(usr)) //give the ghosts access to "View Comment Log" while they can't manipulate it
return
var/perpname = get_visible_name(TRUE)
var/read = 0
@@ -783,7 +783,7 @@
for(var/c in R.fields["comments"])
to_chat(usr, c)
else
- to_chat(usr, "No comment found")
+ to_chat(usr, "No comments found")
to_chat(usr, "\[Add comment\]")
if(!read)
@@ -1554,13 +1554,13 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security)
if(R && R.fields["criminal"])
switch(R.fields["criminal"])
- if("*Execute*")
+ if(SEC_RECORD_STATUS_EXECUTE)
threatcount += 7
- if("*Arrest*")
+ if(SEC_RECORD_STATUS_ARREST)
threatcount += 5
- if("Incarcerated")
+ if(SEC_RECORD_STATUS_INCARCERATED)
threatcount += 2
- if("Parolled")
+ if(SEC_RECORD_STATUS_PAROLLED)
threatcount += 2
//Check for dresscode violations
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 93cf7f7f982..d80b175e757 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -694,11 +694,17 @@
H.makeCluwne()
else if(myeffect == "Demote")
GLOB.event_announcement.Announce("[target.real_name] is hereby demoted to the rank of Civilian. Process this demotion immediately. Failure to comply with these orders is grounds for termination.","CC Demotion Order")
+ for(var/datum/data/record/R in sortRecord(GLOB.data_core.security))
+ if(R.fields["name"] == target.real_name)
+ R.fields["criminal"] = SEC_RECORD_STATUS_DEMOTE
+ R.fields["comments"] += "Central Command Demotion Order, given on [GLOB.current_date_string] [station_time_timestamp()]
Process this demotion immediately. Failure to comply with these orders is grounds for termination."
+ update_all_mob_security_hud()
else if(myeffect == "Demote with Bot")
GLOB.event_announcement.Announce("[target.real_name] is hereby demoted to the rank of Civilian. Process this demotion immediately. Failure to comply with these orders is grounds for termination.","CC Demotion Order")
for(var/datum/data/record/R in sortRecord(GLOB.data_core.security))
if(R.fields["name"] == target.real_name)
- R.fields["criminal"] = "*Arrest*"
+ R.fields["criminal"] = SEC_RECORD_STATUS_ARREST
+ R.fields["comments"] += "Central Command Demotion Order, given on [GLOB.current_date_string] [station_time_timestamp()]
Process this demotion immediately. Failure to comply with these orders is grounds for termination."
update_all_mob_security_hud()
if(fax)
var/turf/T = get_turf(fax)
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index 849db6579a59673543c9b0256414b5a008287465..bbe41ddbe22e6f7d6e4630871cd1724d27fb1a2b 100644
GIT binary patch
literal 15184
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