diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 0116232841a..37ad064b5c2 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -134,8 +134,12 @@ Proc for attack log creation, because really why not
newhealthtxt = " (NEWHP: [L.health])"
if(user && ismob(user))
user.attack_log += text("\[[time_stamp()]\] Has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]")
+ if(user.mind)
+ user.mind.attack_log += text("\[[time_stamp()]\] [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]")
if(target && ismob(target))
target.attack_log += text("\[[time_stamp()]\] Has been [what_done] by [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]")
+ if(target.mind)
+ target.mind.attack_log += text("\[[time_stamp()]\] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] has been [what_done] by [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]")
log_attack("[user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(ismob(target) && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]")
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 1ee1a3d01ea..3b51698c1cc 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -36,6 +36,7 @@
var/active = 0
var/memory
+ var/attack_log
var/assigned_role
var/special_role
@@ -1576,4 +1577,4 @@
/mob/living/simple_animal/hostile/construct/mind_initialize()
..()
mind.assigned_role = "[initial(name)]"
- mind.special_role = "Cultist"
+ mind.special_role = "Cultist"
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index ff02ba635d7..a2e264f8c88 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -349,7 +349,8 @@
dat += "
| [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
dat += "PM |
"
else
- dat += "| Nuclear Operative not found! |
"
+ dat += "| [N.name]([N.key]) Nuclear Operative Body destroyed! | "
+ dat += "PM |
"
dat += "
| Nuclear Disk(s) |
"
for(var/obj/item/weapon/disk/nuclear/N in poi_list)
dat += "| [N.name], "
@@ -370,7 +371,8 @@
for(var/datum/mind/N in ticker.mode.head_revolutionaries)
var/mob/M = N.current
if(!M)
- dat += " |
| Head Revolutionary not found! |
"
+ dat += "| [N.name]([N.key])Head Revolutionary body destroyed! | "
+ dat += "PM |
"
else
dat += "| [M.real_name] (Leader)[M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
dat += "PM |
"
@@ -388,7 +390,8 @@
var/turf/mob_loc = get_turf(M)
dat += "[mob_loc.loc] | "
else
- dat += "| Head not found! |
"
+ dat += "| [N.name]([N.key])Head body destroyed! | "
+ dat += "PM |
"
dat += "
"
for(var/datum/gang/G in ticker.mode.gangs)
@@ -396,7 +399,8 @@
for(var/datum/mind/N in G.bosses)
var/mob/M = N.current
if(!M)
- dat += "| Gang Boss not found! |
"
+ dat += "| [N.name]([N.key])Gang Boss body destroyed! | "
+ dat += "PM |
"
else
dat += "| [M.real_name] (Boss)[M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
dat += "PM |
"
@@ -416,7 +420,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Changeling not found! |
"
+ dat += "| [changeling.name]([changeling.key])Changeling body destroyed! | "
+ dat += "PM |
"
dat += ""
if(ticker.mode.wizards.len > 0)
@@ -428,7 +433,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Wizard not found! |
"
+ dat += "| [wizard.name]([wizard.key])Wizard body destroyed! |
"
+ dat += "PM | "
dat += ""
if(ticker.mode.apprentices.len > 0)
@@ -440,7 +446,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Apprentice not found! |
"
+ dat += "| [apprentice.name]([apprentice.key])Apprentice body destroyed!! |
"
+ dat += "PM | "
dat += ""
if(ticker.mode.cult.len)
@@ -509,7 +516,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Traitor not found! |
"
+ dat += "| [traitor.name]([traitor.key])Traitor body destroyed! | "
+ dat += "PM |
"
dat += ""
if(ticker.mode.shadows.len)
@@ -519,6 +527,9 @@
if(M)
dat += "| [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
dat += "PM |
"
+ else
+ dat += "| [N.name]([N.key])Shadowling body destroyed! | "
+ dat += "PM |
"
dat += ""
if(ticker.mode.thralls.len)
@@ -539,7 +550,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Abductor not found! |
"
+ dat += "| [abductor.name]([abductor.key])Abductor body destroyed! |
"
+ dat += "PM | "
dat += ""
dat += "
| Abductees | | |
"
for(var/obj/machinery/abductor/experiment/E in machines)
@@ -550,7 +562,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Abductee not found! |
"
+ dat += "| [abductee.name]([abductee.key])Abductee body destroyed! | "
+ dat += "PM |
"
dat += "
"
var/list/blob_minds = list()
@@ -568,9 +581,10 @@
var/mob/M = blob.current
if(M)
dat += "| [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
- dat += "PM | "
+ dat += "PM |
"
else
- dat += "| Blob not found! |
"
+ dat += "| [blob.name]([blob.key])Blob not found! | "
+ dat += "PM |
"
dat += ""
@@ -584,7 +598,8 @@
dat += "| [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
dat += "PM | "
else
- dat += "
| Monkey not found! |
"
+ dat += "| [eek.name]([eek.key])Monkey not found! | "
+ dat += "PM |
"
dat += ""