diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index cbda6699694..5cfd50a5ce9 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -23,6 +23,7 @@ Show Game Mode   Show Crew Manifest
Show current traitors and objectives
+ Show code phrases and responses
Set Night Shift Mode
Bombs
[check_rights(R_SERVER, 0) ? "  Toggle bomb cap
" : "
"] diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 622667a9ac7..aa03fb9f688 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -3141,6 +3141,9 @@ usr << browse(dat, "window=manifest;size=440x410") if("check_antagonist") check_antagonists() + if("view_codewords") + to_chat(usr, "Code Phrases: [GLOB.syndicate_code_phrase]") + to_chat(usr, "Code Responses: [GLOB.syndicate_code_response]") if("DNA") var/dat = "Showing DNA from blood.
" dat += "" diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 6275c00ba9b..9672d04ce25 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -288,14 +288,16 @@ var/responses = jointext(GLOB.syndicate_code_response, ", ") to_chat(traitor_mob, "The Syndicate have provided you with the following codewords to identify fellow agents:") - to_chat(traitor_mob, "Code Phrase: [phrases]") - to_chat(traitor_mob, "Code Response: [responses]") + to_chat(traitor_mob, "Code Phrase: [phrases]") + to_chat(traitor_mob, "Code Response: [responses]") antag_memory += "Code Phrase: [phrases]
" antag_memory += "Code Response: [responses]
" to_chat(traitor_mob, "Use the codewords during regular conversation to identify other agents. Proceed with caution, however, as everyone is a potential foe.") + to_chat(traitor_mob, "You memorize the codewords, allowing you to recognize them when heard.") + traitor_mob.client.chatOutput?.notify_syndicate_codes() /datum/antagonist/traitor/proc/add_law_zero() var/mob/living/silicon/ai/killer = owner.current diff --git a/goon/browserassets/css/browserOutput-dark.css b/goon/browserassets/css/browserOutput-dark.css index fe227e96410..da8eb9d1995 100644 --- a/goon/browserassets/css/browserOutput-dark.css +++ b/goon/browserassets/css/browserOutput-dark.css @@ -422,3 +422,7 @@ h1.alert, h2.alert {color: #FFF;} .adminticket {color: #3daf21; font-weight: bold} .adminticketalt {color: #ccb847; font-weight: bold} + +/* Syndicate codewords */ +.codephrases {color: #5555FF;} +.coderesponses {color: #FF3333;} diff --git a/goon/browserassets/css/browserOutput.css b/goon/browserassets/css/browserOutput.css index 8a1ded41e57..ffd642b02bc 100644 --- a/goon/browserassets/css/browserOutput.css +++ b/goon/browserassets/css/browserOutput.css @@ -421,3 +421,7 @@ h1.alert, h2.alert {color: #000000;} .adminticket {color: #3e7336; font-weight: bold} .adminticketalt {color: #014c8a; font-weight: bold} + +/* Syndicate codewords */ +.codephrases {color: #0000FF;} +.coderesponses {color: #FF0000;} diff --git a/goon/browserassets/js/browserOutput.js b/goon/browserassets/js/browserOutput.js index c6abc0ec22f..24b3d6fdc63 100644 --- a/goon/browserassets/js/browserOutput.js +++ b/goon/browserassets/js/browserOutput.js @@ -72,7 +72,11 @@ var opts = { 'enableEmoji': true, // Reboot message stuff - 'rebootIntervalHandler': null + 'rebootIntervalHandler': null, + + // Syndicate codewords + 'codePhrases': [], + 'codeResponses': [] }; var regexHasError = false; //variable to check if regex has excepted @@ -186,11 +190,18 @@ function highlightTerms(el) { if (regexHasError) return; //just stop right there ig the regex is gonna except - function highlightRecursor(element, term){ //recursor function to do the highlighting proper + function highlightRecursor(element, term, className){ //recursor function to do the highlighting proper var regex = new RegExp(term, "gi"); - function replace(str) { - return str.replace(regex, '$&'); + var replace; + if (className) { + replace = function(str) { + return str.replace(regex, '$&'); + }; + } else { + replace = function(str) { + return str.replace(regex, '$&'); + }; } var s = ''; @@ -244,6 +255,14 @@ function highlightTerms(el) { } } } + + // Code phrases + for (var i = 0; i < opts.codePhrases.length; i++) { + highlightRecursor(el, escapeRegexCharacters(opts.codePhrases[i]), "codephrases"); + } + for (var i = 0; i < opts.codeResponses.length; i++) { + highlightRecursor(el, escapeRegexCharacters(opts.codeResponses[i]), "coderesponses"); + } } //Send a message to the client @@ -604,6 +623,22 @@ function rebootFinished() { $("#reconnectTimer").remove(); } +function codewords(phrases, responses) { + function cleanCodewords(words) { + var arr = []; + for (var i in words) { + var trimmed = words[i].trim(); + if (trimmed.length > 0) { + arr.push(trimmed); + } + } + return arr; + } + + opts.codePhrases = cleanCodewords(phrases.split(",")); + opts.codeResponses = cleanCodewords(responses.split(",")); +} + /***************************************** * * MAKE MACRO DICTIONARY diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm index d901f351785..8e54ae2a985 100644 --- a/goon/code/datums/browserOutput.dm +++ b/goon/code/datums/browserOutput.dm @@ -198,6 +198,18 @@ var/list/chatResources = list( error = "\[[time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")]\] Client : [owner.key ? owner.key : owner] triggered JS error: [error]" chatDebug << error +/** + * Sends the lists of code phrases and responses to Goonchat for clientside highlighting + * + * Arguments: + * * phrases - List of code phrases + * * responses - List of code responses + */ +/datum/chatOutput/proc/notify_syndicate_codes(phrases = GLOB.syndicate_code_phrase, responses = GLOB.syndicate_code_response) + var/urlphrases = url_encode(copytext(phrases, 1, length(phrases))) + var/urlresponses = url_encode(copytext(responses, 1, length(responses))) + owner << output("[urlphrases]&[urlresponses]", "browseroutput:codewords") + /client/verb/debug_chat() set hidden = 1 chatOutput.ehjax_send(data = list("firebug" = 1))
NameDNABlood Type