diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index f8c054b9941..d1009dfe69c 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -30,7 +30,9 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/Destroy()
GLOB.antagonists -= src
- if(owner)
+ if(!owner)
+ stack_trace("Destroy()ing antagonist datum when it has no owner.")
+ else
LAZYREMOVE(owner.antag_datums, src)
owner = null
return ..()
@@ -133,14 +135,16 @@ GLOBAL_LIST_EMPTY(antagonists)
///Called by the remove_antag_datum() and remove_all_antag_datums() mind procs for the antag datum to handle its own removal and deletion.
/datum/antagonist/proc/on_removal()
SHOULD_CALL_PARENT(TRUE)
+ if(!owner)
+ CRASH("Antag datum with no owner.")
+
remove_innate_effects()
clear_antag_moodies()
- if(owner)
- LAZYREMOVE(owner.antag_datums, src)
- if(!LAZYLEN(owner.antag_datums))
- owner.current.remove_from_current_living_antags()
- if(!silent && owner.current)
- farewell()
+ LAZYREMOVE(owner.antag_datums, src)
+ if(!LAZYLEN(owner.antag_datums))
+ owner.current.remove_from_current_living_antags()
+ if(!silent && owner.current)
+ farewell()
var/datum/team/team = get_team()
if(team)
team.remove_member(owner)
@@ -171,7 +175,7 @@ GLOBAL_LIST_EMPTY(antagonists)
var/list/report = list()
if(!owner)
- CRASH("antagonist datum without owner")
+ CRASH("Antagonist datum without owner")
report += printplayer(owner)
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm
index 529128fc0a4..0629c70f832 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm
@@ -19,9 +19,9 @@
to_chat(owner, "You became an Eldritch Horror!")
/datum/antagonist/heretic_monster/on_removal()
- if(owner)
- to_chat(owner, "Your master is no longer [master.owner.current.real_name]")
- owner = null
+ if(master)
+ to_chat(master, "Your master is no longer [master.owner.current.real_name]")
+ master = null
return ..()
/datum/antagonist/heretic_monster/proc/set_owner(datum/antagonist/_master)
diff --git a/code/modules/antagonists/fugitive/hunter.dm b/code/modules/antagonists/fugitive/hunter.dm
index 090b243e531..23b53dacdce 100644
--- a/code/modules/antagonists/fugitive/hunter.dm
+++ b/code/modules/antagonists/fugitive/hunter.dm
@@ -77,6 +77,7 @@
var/list/fugitives_captured = list()
for(var/datum/antagonist/fugitive/A in GLOB.antagonists)
if(!A.owner)
+ stack_trace("Antagonist datum without owner in GLOB.antagonists: [A]")
continue
fugitives_counted += A
if(A.owner.current.stat == DEAD)
diff --git a/code/modules/antagonists/monkey/monkey.dm b/code/modules/antagonists/monkey/monkey.dm
index 1a5cc266779..519fa00ac29 100644
--- a/code/modules/antagonists/monkey/monkey.dm
+++ b/code/modules/antagonists/monkey/monkey.dm
@@ -51,6 +51,7 @@
if(!new_team)
for(var/datum/antagonist/monkey/H in GLOB.antagonists)
if(!H.owner)
+ stack_trace("Antagonist datum without owner in GLOB.antagonists: [H]")
continue
if(H.monkey_team)
monkey_team = H.monkey_team
diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm
index c300677614e..84a2350347c 100644
--- a/code/modules/antagonists/nukeop/nukeop.dm
+++ b/code/modules/antagonists/nukeop/nukeop.dm
@@ -112,6 +112,7 @@
if(!always_new_team)
for(var/datum/antagonist/nukeop/N in GLOB.antagonists)
if(!N.owner)
+ stack_trace("Antagonist datum without owner in GLOB.antagonists: [N]")
continue
if(N.nuke_team)
nuke_team = N.nuke_team
diff --git a/code/modules/antagonists/pirate/pirate.dm b/code/modules/antagonists/pirate/pirate.dm
index 91bc063869a..7bfbced12b0 100644
--- a/code/modules/antagonists/pirate/pirate.dm
+++ b/code/modules/antagonists/pirate/pirate.dm
@@ -18,6 +18,7 @@
if(!new_team)
for(var/datum/antagonist/pirate/P in GLOB.antagonists)
if(!P.owner)
+ stack_trace("Antagonist datum without owner in GLOB.antagonists: [P]")
continue
if(P.crew)
crew = P.crew
diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm
index ee29a31e690..48330e6de07 100644
--- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm
+++ b/code/modules/antagonists/traitor/IAA/internal_affairs.dm
@@ -15,29 +15,39 @@
/datum/antagonist/traitor/internal_affairs/proc/give_pinpointer()
- if(owner && owner.current)
+ if(!owner)
+ CRASH("Antag datum with no owner.")
+
+ if(owner.current)
owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer)
/datum/antagonist/traitor/internal_affairs/apply_innate_effects()
- .=..() //in case the base is used in future
- if(owner && owner.current)
+ . = ..()
+
+ if(!owner)
+ CRASH("Antag datum with no owner.")
+
+ if(owner.current)
give_pinpointer(owner.current)
/datum/antagonist/traitor/internal_affairs/remove_innate_effects()
- .=..()
- if(owner && owner.current)
+ . = ..()
+
+ if(!owner)
+ CRASH("Antag datum with no owner.")
+
+ if(owner.current)
owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer)
/datum/antagonist/traitor/internal_affairs/on_gain()
START_PROCESSING(SSprocessing, src)
- .=..()
+ . = ..()
/datum/antagonist/traitor/internal_affairs/on_removal()
STOP_PROCESSING(SSprocessing,src)
- .=..()
+ . = ..()
/datum/antagonist/traitor/internal_affairs/process()
iaa_process()
-
/datum/status_effect/agent_pinpointer
id = "agent_pinpointer"
duration = -1
@@ -101,7 +111,9 @@
return (istype(O, /datum/objective/assassinate/internal)||istype(O, /datum/objective/destroy/internal))
/datum/antagonist/traitor/proc/replace_escape_objective()
- if(!owner || !objectives.len)
+ if(!owner)
+ CRASH("Antag datum with no owner.")
+ if(!objectives.len)
return
for (var/objective_ in objectives)
if(!(istype(objective_, /datum/objective/escape)||istype(objective_, /datum/objective/survive)))
@@ -113,7 +125,9 @@
add_objective(martyr_objective)
/datum/antagonist/traitor/proc/reinstate_escape_objective()
- if(!owner||!objectives.len)
+ if(!owner)
+ CRASH("Antag datum with no owner.")
+ if(!objectives.len)
return
for (var/objective_ in objectives)
if(!istype(objective_, /datum/objective/martyr))
@@ -174,7 +188,9 @@
replace_escape_objective(owner)
/datum/antagonist/traitor/internal_affairs/proc/iaa_process()
- if(owner&&owner.current&&owner.current.stat!=DEAD)
+ if(!owner)
+ CRASH("Antag datum with no owner.")
+ if(owner.current && owner.current.stat != DEAD)
for(var/objective_ in objectives)
if(!is_internal_objective(objective_))
continue
diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm
index 1773fab4723..ce92e0f799b 100644
--- a/code/modules/antagonists/wizard/wizard.dm
+++ b/code/modules/antagonists/wizard/wizard.dm
@@ -54,7 +54,9 @@
add_antag_hud(antag_hud_type, antag_hud_name, owner.current)
/datum/antagonist/wizard/proc/send_to_lair()
- if(!owner || !owner.current)
+ if(!owner)
+ CRASH("Antag datum with no owner.")
+ if(!owner.current)
return
if(!GLOB.wizardstart.len)
SSjob.SendToLateJoin(owner.current)
@@ -114,7 +116,7 @@
/datum/antagonist/wizard/proc/equip_wizard()
if(!owner)
- return
+ CRASH("Antag datum with no owner.")
var/mob/living/carbon/human/H = owner.current
if(!istype(H))
return
@@ -191,7 +193,7 @@
/datum/antagonist/wizard/apprentice/equip_wizard()
. = ..()
if(!owner)
- return
+ CRASH("Antag datum with no owner.")
var/mob/living/carbon/human/H = owner.current
if(!istype(H))
return