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