From 55fad412e8d3b2145d35a7c9bf4d3e0713f9f3a5 Mon Sep 17 00:00:00 2001
From: 4DPlanner <3combined@gmail.com>
Date: Sat, 6 May 2017 16:02:22 +0100
Subject: [PATCH] Gives the last man standing a "Die a glorious death"
objective as per Kor's suggestion that I missed
---
code/game/gamemodes/traitor/double_agents.dm | 28 ++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/code/game/gamemodes/traitor/double_agents.dm b/code/game/gamemodes/traitor/double_agents.dm
index 6014fc8e83f..c869b7f9421 100644
--- a/code/game/gamemodes/traitor/double_agents.dm
+++ b/code/game/gamemodes/traitor/double_agents.dm
@@ -104,6 +104,32 @@
/proc/is_internal_objective(datum/objective/O)
return (istype(O, /datum/objective/assassinate/internal)||istype(O, /datum/objective/destroy/internal))
+/proc/replace_escape_objective(datum/mind/owner)
+ if(!owner||!owner.objectives)
+ return
+ for (var/objective_ in owner.objectives)
+ if(!(istype(objective_, /datum/objective/escape)||istype(objective_,/datum/objective/survive)))
+ continue
+ owner.objectives -= objective_
+ var/datum/objective/martyr/martyr_objective = new
+ martyr_objective.owner = owner
+ owner.objectives += martyr_objective
+
+/proc/reinstate_escape_objective(datum/mind/owner)
+ if(!owner||!owner.objectives)
+ return
+ for (var/objective_ in owner.objectives)
+ if(!istype(objective_, /datum/objective/martyr))
+ continue
+ owner.objectives -= objective_
+ if(issilicon(owner))
+ var/datum/objective/survive/survive_objective = new
+ survive_objective.owner = owner
+ owner.objectives += survive_objective
+ else
+ var/datum/objective/escape/escape_objective = new
+ escape_objective.owner = owner
+ owner.objectives += escape_objective
/datum/internal_agent_state/proc/steal_targets(datum/mind/victim)
if(!owner.current||owner.current.stat==DEAD) //Should already be guaranteed if this is only called from steal_targets_timer_func, but better to be safe code than sorry code
@@ -146,6 +172,7 @@
traitored = FALSE
return
to_chat(owner.current," All the other agents are dead, and you're the last loose end. Stage a Syndicate terrorist attack to cover up for today's events. You no longer have any limits on collateral damage.")
+ replace_escape_objective(owner)
@@ -168,6 +195,7 @@
var/fail_msg = "Your sensors tell you that [objective.target.current.real_name], one of the targets you were meant to have killed, pulled one over on you, and is still alive - do the job properly this time! "
if(traitored)
fail_msg += " The truth could still slip out! Cease any terrorist actions as soon as possible, unneeded property damage or loss of employee life will lead to your contract being terminated."
+ reinstate_escape_objective(owner)
traitored = FALSE
to_chat(owner.current, fail_msg)
objective.stolen = FALSE