Collaborators are no longer clueless about Syndicate

Alternative to #6829

The Syndicate no longer leaves their potential collaborators in absolute
darkness about their usefulness. Collaborators are notified of their
potential use, though in a vague way so as not to compromise the
identities of any agents directly.
- Potential collaborators get messages informing them that they are
still not antags, but that they may be asked to assist, when they are
assigned to a new traitor.
- Potential collaborators get a SINGLE code word and code response so
their clandestine friend can attempt to communicate with them with more
subtlety than "hey, im a traitor, want to help?"
- They are only given 1 word set so they can't just inform security and
the AI of all the codewords alone. Same reason they aren't given a name
of the traitor they might be asked to assist.

The intercept report (currently disabled) now only lists suspects that
actually CAN be the antag (no more listing the chaplain as a potential
cultist, the HoS as a potential traitor, or that IPC in atmos as a
possible changeling).

Potential collaborators can no longer be characters in roles that are
restricted from being traitors. So no more "Potential collaborator: The
captain", as funny as that may have been.

🆑
tweak: Potential collaborators for traitors now are informed they are
potentially a collaborator for a potential increase in them potentially
helping the traitors potentially do potentially bad things. Potentially.
rscadd: Potential collaborators are given a single code word and
response set so they can discretely find out that their best friend is a
filthy traitor.
/🆑
This commit is contained in:
FalseIncarnate
2017-03-22 20:36:24 -04:00
parent 0875e0fcb0
commit 0ad6fec5b1
3 changed files with 52 additions and 13 deletions
+13 -9
View File
@@ -37,7 +37,7 @@
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
var/list/player_draft_log = list()
var/list/datum/mind/xenos = list()
var/list/datum/station_goal/station_goals = list() // A list of all station goals for this game mode
/datum/game_mode/proc/announce() //to be calles when round starts
@@ -225,7 +225,7 @@
/datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere.
return 0
/datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=0)
var/list/players = list()
var/list/candidates = list()
@@ -400,15 +400,19 @@ proc/display_roundstart_logout_report()
to_chat(M, msg)
proc/get_nt_opposed()
/proc/get_nt_opposed()
var/list/dudes = list()
for(var/mob/living/carbon/human/man in player_list)
if(man.client)
//don't try picking someone like the captain or a security officer for potential collaborators, even if they ARE opposed to Nanotrasen for some reason
if(man.mind && man.mind.assigned_role && !((man.mind.assigned_role in ticker.mode.protected_jobs) || (man.mind.assigned_role in ticker.mode.restricted_jobs)))
continue
if(man.client.prefs.nanotrasen_relation == "Opposed")
dudes += man
else if(man.client.prefs.nanotrasen_relation == "Skeptical" && prob(50))
dudes += man
if(dudes.len == 0) return null
if(dudes.len == 0)
return null
return pick(dudes)
//Announces objectives/generic antag text.
@@ -491,10 +495,10 @@ proc/get_nt_opposed()
var/datum/station_goal/picked = pick_n_take(possible)
goal_weights += initial(picked.weight)
station_goals += new picked
if(station_goals.len)
if(station_goals.len)
send_station_goals_message()
/datum/game_mode/proc/send_station_goals_message()
var/message_text = "<div style='text-align:center;'><img src='ntlogo.png'>"
message_text += "<h3>[command_name()] Orders</h3></div><hr>"
@@ -504,10 +508,10 @@ proc/get_nt_opposed()
G.on_report()
message_text += G.get_report()
message_text += "<hr>"
print_command_report(message_text, "[command_name()] Orders")
/datum/game_mode/proc/declare_station_goal_completion()
for(var/V in station_goals)
var/datum/station_goal/G = V
G.print_result()
G.print_result()
+9 -2
View File
@@ -109,8 +109,15 @@
/datum/intercept_text/proc/get_suspect()
var/list/dudes = list()
for(var/mob/living/carbon/human/man in player_list) if(man.client && man.client.prefs.nanotrasen_relation == "Opposed")
dudes += man
for(var/mob/living/carbon/human/man in player_list)
if(man.client && man.client.prefs.nanotrasen_relation == "Opposed")
//don't include suspects who can't possibly be the antag based on their job (no suspecting the captain of being a damned dirty tator)
if(man.mind && man.mind.assigned_role && !((man.mind.assigned_role in ticker.mode.protected_jobs) || (man.mind.assigned_role in ticker.mode.restricted_jobs)))
return
//don't include suspects who can't possibly be the antag based on their species (no suspecting the machines of being sneaky changelings)
if(man.get_species() in ticker.mode.protected_species)
return
dudes += man
for(var/i = 0, i < max(player_list.len/10,2), i++)
dudes += pick(player_list)
return pick(dudes)
+30 -2
View File
@@ -345,6 +345,34 @@
if(M && M != traitor_mob)
to_chat(traitor_mob, "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting them.")
traitor_mob.mind.store_memory("<b>Potential Collaborator</b>: [M.real_name]")
//let's also inform their contact that they might be called upon, but leave it vague.
inform_collab(M)
/datum/game_mode/proc/inform_collab(mob/living/carbon/human/M)
if(!M)
return
if(M.mind in traitors) //if you are already a traitor, you already know the codewords and your role, so skip this message.
return
//Mad-libs for their message
var/adjective = pick("strange", "mysterious", "sinister", "un-assuming", "unexpected")
var/action_words = pick("aid the fight against Nanotrasen", "repay a debt", "partake in some mischief", "help overthrow the system", "stick it to the man")
var/organization = pick("Anti-Facist Movement", "Syndicate", "Spessmen for the Protesting of Nanotrasen", "Greytider's Union", "Illuminati (in space)")
//Stuff to give them a single set of code-words
var/list/possible_words = splittext(syndicate_code_phrase, ", ")
var/list/possible_reply = splittext(syndicate_code_response, ", ")
var/index = rand(1, possible_words.len)
var/my_word = possible_words[index]
var/my_reply
if(possible_reply.len < index) //just in case we had a longer code word list than the response list
my_reply = pick(possible_reply)
else
my_reply = possible_reply[index]
to_chat(M, "You suddenly remember \an [adjective] note you received earlier informing you that a chance to [action_words] may present itself today. An agent of the [organization] may contact you for help.")
to_chat(M, "The note had the words \"[my_word]\" and \"[my_reply]\" written at the bottom, which you memorized just in case.")
to_chat(M, "<span class='warning'>You are NOT an antagonist, so self-antagging rules still apply to you. Use your good judgement and ahelp if you are unsure of what you are allowed to do.</span>")
M.mind.store_memory("<b>Important Words</b>: \"[my_word]\", \"[my_reply]\"")
/datum/game_mode/proc/remove_traitor(datum/mind/traitor_mind)
if(traitor_mind in traitors)
@@ -355,8 +383,8 @@
to_chat(traitor_mind.current, "<span class='userdanger'>You have been turned into a robot! You are no longer a traitor.</span>")
else
to_chat(traitor_mind.current, "<span class='userdanger'>You have been brainwashed! You are no longer a traitor.</span>")
ticker.mode.update_traitor_icons_removed(traitor_mind)
ticker.mode.update_traitor_icons_removed(traitor_mind)
/datum/game_mode/proc/update_traitor_icons_added(datum/mind/traitor_mind)
var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
tatorhud.join_hud(traitor_mind.current)