diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm
index eb0c9429e46..d7fcf394c26 100644
--- a/code/__DEFINES/vv.dm
+++ b/code/__DEFINES/vv.dm
@@ -81,6 +81,7 @@
#define VV_HK_MODIFY_TRANSFORM "atom_transform"
#define VV_HK_MODIFY_GREYSCALE "modify_greyscale"
#define VV_HK_ADD_REAGENT "addreagent"
+#define VV_HK_SHOW_HIDDENPRINTS "show_hiddenprints"
#define VV_HK_TRIGGER_EMP "empulse"
#define VV_HK_TRIGGER_EXPLOSION "explode"
#define VV_HK_AUTO_RENAME "auto_rename"
diff --git a/code/datums/components/forensics.dm b/code/datums/components/forensics.dm
index b445e7c500f..a45c0f4bb72 100644
--- a/code/datums/components/forensics.dm
+++ b/code/datums/components/forensics.dm
@@ -161,12 +161,12 @@
hasgloves = "(gloves)"
var/current_time = time_stamp()
if(!LAZYACCESS(hiddenprints, M.key))
- LAZYSET(hiddenprints, M.key, "First: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]")
+ LAZYSET(hiddenprints, M.key, "First: \[[current_time]\] \"[M.real_name]\"[hasgloves]. Ckey: [M.ckey]")
else
- var/laststamppos = findtext(LAZYACCESS(hiddenprints, M.key), " Last: ")
+ var/laststamppos = findtext(LAZYACCESS(hiddenprints, M.key), "\nLast: ")
if(laststamppos)
LAZYSET(hiddenprints, M.key, copytext(hiddenprints[M.key], 1, laststamppos))
- hiddenprints[M.key] += " Last: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]" //made sure to be existing by if(!LAZYACCESS);else
+ hiddenprints[M.key] += "\nLast: \[[current_time]\] \"[M.real_name]\"[hasgloves]. Ckey: [M.ckey]" //made sure to be existing by if(!LAZYACCESS);else
var/atom/A = parent
A.fingerprintslast = M.ckey
return TRUE
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 9914167d1a1..fbc8332dc4f 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1196,6 +1196,7 @@
if(curturf)
. += ""
VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRANSFORM, "Modify Transform")
+ VV_DROPDOWN_OPTION(VV_HK_SHOW_HIDDENPRINTS, "Show Hiddenprint log")
VV_DROPDOWN_OPTION(VV_HK_ADD_REAGENT, "Add Reagent")
VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EMP, "EMP Pulse")
VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion")
@@ -1240,15 +1241,21 @@
reagents.add_reagent(chosen_id, amount)
log_admin("[key_name(usr)] has added [amount] units of [chosen_id] to [src]")
message_admins("[key_name(usr)] has added [amount] units of [chosen_id] to [src]")
+
if(href_list[VV_HK_TRIGGER_EXPLOSION] && check_rights(R_FUN))
usr.client.cmd_admin_explosion(src)
+
if(href_list[VV_HK_TRIGGER_EMP] && check_rights(R_FUN))
usr.client.cmd_admin_emp(src)
+
if(href_list[VV_HK_RADIATE] && check_rights(R_FUN))
var/strength = input(usr, "Choose the radiation strength.", "Choose the strength.") as num|null
if(!isnull(strength))
AddComponent(/datum/component/radioactive, strength, src)
+ if(href_list[VV_HK_SHOW_HIDDENPRINTS] && check_rights(R_ADMIN))
+ usr.client.cmd_show_hiddenprints(src)
+
if(href_list[VV_HK_ADD_AI])
if(!check_rights(R_VAREDIT))
@@ -1276,6 +1283,7 @@
var/angle = input(usr, "Choose angle to rotate","Transform Mod") as null|num
if(!isnull(angle))
transform = M.Turn(angle)
+
if(href_list[VV_HK_AUTO_RENAME] && check_rights(R_VAREDIT))
var/newname = input(usr, "What do you want to rename this to?", "Automatic Rename") as null|text
// Check the new name against the chat filter. If it triggers the IC chat filter, give an option to confirm.
diff --git a/code/modules/admin/verbs/hiddenprints.dm b/code/modules/admin/verbs/hiddenprints.dm
new file mode 100644
index 00000000000..dc0d5776655
--- /dev/null
+++ b/code/modules/admin/verbs/hiddenprints.dm
@@ -0,0 +1,30 @@
+/client/proc/cmd_show_hiddenprints(atom/victim)
+ if(!check_rights(R_ADMIN))
+ return
+
+ var/interface = "A log of every player who has touched [victim], sorted by last touch.