diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm
index fbc223f62a5c..7eb6f0151086 100644
--- a/code/__DEFINES/admin.dm
+++ b/code/__DEFINES/admin.dm
@@ -53,6 +53,7 @@
#define ADMIN_KICK(user) "(KICK)"
#define ADMIN_CENTCOM_REPLY(user) "(RPLY)"
#define ADMIN_SYNDICATE_REPLY(user) "(RPLY)"
+#define ADMIN_MU_REPLY(user) "(RPLY)" //NON-MODULE CHANGE
#define ADMIN_SC(user) "(SC)"
#define ADMIN_SMITE(user) "(SMITE)"
#define ADMIN_LOOKUP(user) "[key_name_admin(user)][ADMIN_QUE(user)]"
diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm
index 686c42e07d07..8ef5893f895f 100644
--- a/code/__DEFINES/radio.dm
+++ b/code/__DEFINES/radio.dm
@@ -74,6 +74,14 @@
#define FREQ_ENGINEERING 1357 // Engineering comms frequency, orange
#define FREQ_SECURITY 1359 // Security comms frequency, red
+//NON-MODULE CHANGE START : Mu radio, f is used because F, K, Q and W are the only available radio keys.
+#define RADIO_CHANNEL_MU "Mu"
+#define RADIO_KEY_MU "f"
+#define RADIO_TOKEN_MU ":f"
+
+#define FREQ_MU 1401
+//NON-MODULE CHANGE END
+
#define FREQ_HOLOGRID_SOLUTION 1433
#define FREQ_STATUS_DISPLAYS 1435
diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm
index fb9e130e9fd6..8d0830c15b9c 100644
--- a/code/__DEFINES/span.dm
+++ b/code/__DEFINES/span.dm
@@ -82,6 +82,7 @@
#define span_minorannounce(str) ("" + str + "")
#define span_minoralert(str) ("" + str + "")
#define span_monkey(str) ("" + str + "")
+#define span_muradio(str) ("" + str + "") //NON-MODULE CHANGE
#define span_name(str) ("" + str + "")
#define span_narsie(str) ("" + str + "")
#define span_narsiesmall(str) ("" + str + "")
diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm
index 8c5fd154805a..74e07b759a4c 100644
--- a/code/controllers/subsystem/blackbox.dm
+++ b/code/controllers/subsystem/blackbox.dm
@@ -151,6 +151,10 @@ SUBSYSTEM_DEF(blackbox)
record_feedback("tally", "radio_usage", 1, "supply")
if(FREQ_CENTCOM)
record_feedback("tally", "radio_usage", 1, "centcom")
+ //NON-MODULE CHANGE START
+ if(FREQ_MU)
+ record_feedback("tally", "radio_usage", 1, "mu")
+ //NON-MODULE CHANGE END
if(FREQ_AI_PRIVATE)
record_feedback("tally", "radio_usage", 1, "ai private")
if(FREQ_CTF_RED)
diff --git a/code/game/communications.dm b/code/game/communications.dm
index 0be3ccf17bc0..dcd539f7e126 100644
--- a/code/game/communications.dm
+++ b/code/game/communications.dm
@@ -99,6 +99,7 @@ GLOBAL_LIST_INIT(radiochannels, list(
RADIO_CHANNEL_ENGINEERING = FREQ_ENGINEERING,
RADIO_CHANNEL_SECURITY = FREQ_SECURITY,
RADIO_CHANNEL_CENTCOM = FREQ_CENTCOM,
+ RADIO_CHANNEL_MU = FREQ_MU, //NON-MODULE CHANGE
RADIO_CHANNEL_SYNDICATE = FREQ_SYNDICATE,
RADIO_CHANNEL_UPLINK = FREQ_UPLINK,
RADIO_CHANNEL_SUPPLY = FREQ_SUPPLY,
@@ -118,6 +119,7 @@ GLOBAL_LIST_INIT(reverseradiochannels, list(
"[FREQ_ENGINEERING]" = RADIO_CHANNEL_ENGINEERING,
"[FREQ_SECURITY]" = RADIO_CHANNEL_SECURITY,
"[FREQ_CENTCOM]" = RADIO_CHANNEL_CENTCOM,
+ "[FREQ_MU]" = RADIO_CHANNEL_MU, // NON-MODULE CHANGE
"[FREQ_SYNDICATE]" = RADIO_CHANNEL_SYNDICATE,
"[FREQ_UPLINK]" = RADIO_CHANNEL_UPLINK,
"[FREQ_SUPPLY]" = RADIO_CHANNEL_SUPPLY,
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 70c9783c3b4a..8bd69b7460bd 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -254,6 +254,23 @@
usr.log_talk(message, LOG_SAY, tag = "message to [associates]")
deadchat_broadcast(" has messaged [associates], \"[message]\" at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr, message_type = DEADCHAT_ANNOUNCEMENT)
COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN)
+ //NON-MODULE CHANGE START
+ if ("messageMu")
+ if (!authenticated_as_non_silicon_captain(usr))
+ return
+ if (!COOLDOWN_FINISHED(src, important_action_cooldown))
+ return
+
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
+ var/message = trim(html_encode(params["message"]), MAX_MESSAGE_LEN)
+
+ message_mu(message, usr)
+ to_chat(usr, span_notice("Message transmitted to Aristocracy of Mu."))
+
+ usr.log_talk(message, LOG_SAY, tag = "message to Mu")
+ deadchat_broadcast(" has messaged Mu, \"[message]\" at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr, message_type = DEADCHAT_ANNOUNCEMENT)
+ COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN)
+ //NON-MODULE CHANGE END
if ("purchaseShuttle")
var/can_buy_shuttles_or_fail_reason = can_buy_shuttles(usr)
if (can_buy_shuttles_or_fail_reason != TRUE)
@@ -538,6 +555,7 @@
data["canBuyShuttles"] = can_buy_shuttles(user)
data["canMakeAnnouncement"] = FALSE
data["canMessageAssociates"] = FALSE
+ data["canMessageMu"] = FALSE //NON-MODULE CHANGE
data["canRecallShuttles"] = !issilicon(user)
data["canRequestNuke"] = FALSE
data["canSendToSectors"] = FALSE
@@ -556,6 +574,7 @@
if (authenticated_as_non_silicon_captain(user))
data["canMessageAssociates"] = TRUE
+ data["canMessageMu"] = TRUE //NON-MODULE CHANGE
data["canRequestNuke"] = TRUE
if (can_send_messages_to_other_sectors(user))
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 3fb862716996..fe0c2804b28e 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -9,6 +9,7 @@
var/list/banned_frequencies = list(
FREQ_SYNDICATE,
FREQ_CENTCOM,
+ FREQ_MU, //NON-MODULE CHANGE
FREQ_CTF_RED,
FREQ_CTF_YELLOW,
FREQ_CTF_GREEN,
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 87ab06976c9e..7150ffdbc1c7 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -7,6 +7,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
RADIO_CHANNEL_ENGINEERING = RADIO_TOKEN_ENGINEERING,
RADIO_CHANNEL_SECURITY = RADIO_TOKEN_SECURITY,
RADIO_CHANNEL_CENTCOM = RADIO_TOKEN_CENTCOM,
+ RADIO_CHANNEL_MU = RADIO_TOKEN_MU, //NON-MODULE CHANGE
RADIO_CHANNEL_SYNDICATE = RADIO_TOKEN_SYNDICATE,
RADIO_CHANNEL_SUPPLY = RADIO_TOKEN_SUPPLY,
RADIO_CHANNEL_SERVICE = RADIO_TOKEN_SERVICE,
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 67369d91a17e..919b24a5dbc5 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -326,7 +326,8 @@
var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, radio_message, spans, message_mods)
// Independent radios, on the CentCom frequency, reach all independent radios
- if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW))
+ //NON-MODULE CHANGE : Adds Mu to the list of frequencies
+ if (independent && (freq == FREQ_CENTCOM || freq == FREQ_MU || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW))
signal.data["compression"] = 0
signal.transmission_method = TRANSMISSION_SUPERSPACE
signal.levels = list(0)
diff --git a/code/game/say.dm b/code/game/say.dm
index e6ea129d5a08..c16c35c6b161 100644
--- a/code/game/say.dm
+++ b/code/game/say.dm
@@ -15,6 +15,7 @@ GLOBAL_LIST_INIT(freqtospan, list(
"[FREQ_SYNDICATE]" = "syndradio",
"[FREQ_UPLINK]" = "syndradio", // this probably shouldnt appear ingame
"[FREQ_CENTCOM]" = "centcomradio",
+ "[FREQ_MU]" = "muradio",
"[FREQ_CTF_RED]" = "redteamradio",
"[FREQ_CTF_BLUE]" = "blueteamradio",
"[FREQ_CTF_GREEN]" = "greenteamradio",
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 6196e2c94b60..e5cd0cf21e5e 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1003,6 +1003,15 @@
var/mob/M = locate(href_list["SyndicateReply"])
usr.client.admin_headset_message(M, RADIO_CHANNEL_SYNDICATE)
+ //NON-MODULE CHANGE START
+ else if(href_list["MuReply"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ var/mob/M = locate(href_list["MuReply"])
+ usr.client.admin_headset_message(M, RADIO_CHANNEL_MU)
+ //NON-MODULE CHANGE END
+
else if(href_list["HeadsetMessage"])
if(!check_rights(R_ADMIN))
return
diff --git a/code/modules/admin/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm
index f69e891625a6..7abddfbd2f86 100644
--- a/code/modules/admin/verbs/adminevents.dm
+++ b/code/modules/admin/verbs/adminevents.dm
@@ -56,7 +56,7 @@
return
if (!sender)
- sender = input("Who is the message from?", "Sender") as null|anything in list(RADIO_CHANNEL_CENTCOM,RADIO_CHANNEL_SYNDICATE)
+ sender = input("Who is the message from?", "Sender") as null|anything in list(RADIO_CHANNEL_CENTCOM,RADIO_CHANNEL_SYNDICATE,RADIO_CHANNEL_MU) //NON-MODULE CHANGE: Adds in the Mu Channel
if(!sender)
return
@@ -69,7 +69,17 @@
log_directed_talk(mob, target, input, LOG_ADMIN, "reply")
message_admins("[key_name_admin(src)] replied to [key_name_admin(target)]'s [sender] message with: \"[input]\"")
target.balloon_alert(target, "you hear a voice")
- to_chat(target, span_hear("You hear something crackle in your [human_recipient ? "ears" : "radio receiver"] for a moment before a voice speaks. \"Please stand by for a message from [sender == "Syndicate" ? "your benefactor" : "Central Command"]. Message as follows[sender == "Syndicate" ? ", agent." : ":"] [input]. Message ends.\""), confidential = TRUE)
+ // NON-MODULE CHANGE START: have to turn this into a switch
+ var/stylized_sender_name = ""
+ switch(sender)
+ if("CentCom")
+ stylized_sender_name = "Central Command"
+ if("Syndicate")
+ stylized_sender_name = "your benefactor"
+ if("Mu")
+ stylized_sender_name = "the Aristocracy of Mu"
+ to_chat(target, span_hear("You hear something crackle in your [human_recipient ? "ears" : "radio receiver"] for a moment before a voice speaks. \"Please stand by for a message from [stylized_sender_name]. Message as follows[sender == "Syndicate" ? ", agent." : ":"] [input]. Message ends.\""), confidential = TRUE)
+ // NON-MODULE CHANGE END
BLACKBOX_LOG_ADMIN_VERB("Headset Message")
diff --git a/code/modules/admin/verbs/commandreport.dm b/code/modules/admin/verbs/commandreport.dm
index 86e7ec1328b4..b52ccd2a0542 100644
--- a/code/modules/admin/verbs/commandreport.dm
+++ b/code/modules/admin/verbs/commandreport.dm
@@ -4,6 +4,7 @@
/// Preset central command names to chose from for centcom reports.
#define CENTCOM_PRESET "Central Command"
#define SYNDICATE_PRESET "The Syndicate"
+#define MU_PRESET "Aristocracy of Mu" //NON-MODULE CHANGE
#define WIZARD_PRESET "The Wizard Federation"
#define CUSTOM_PRESET "Custom Command Name"
@@ -55,7 +56,7 @@
/// The subheader to include when sending the announcement. Keep blank to not include a subheader
var/subheader = ""
/// A static list of preset names that can be chosen.
- var/list/preset_names = list(CENTCOM_PRESET, SYNDICATE_PRESET, WIZARD_PRESET, CUSTOM_PRESET)
+ var/list/preset_names = list(CENTCOM_PRESET, SYNDICATE_PRESET, MU_PRESET, WIZARD_PRESET, CUSTOM_PRESET) //NON-MODULE CHANGE
/datum/command_report_menu/New(mob/user)
ui_user = user
@@ -154,7 +155,7 @@
if(chosen_color == "default")
if(command_name == SYNDICATE_PRESET)
chosen_color = "red"
- else if(command_name == WIZARD_PRESET)
+ else if(command_name == WIZARD_PRESET || command_name == MU_PRESET) //NON-MODULE CHANGE
chosen_color = "purple"
priority_announce(command_report_content, subheader == ""? null : subheader, report_sound, has_important_message = TRUE, color_override = chosen_color)
@@ -171,5 +172,6 @@
#undef CENTCOM_PRESET
#undef SYNDICATE_PRESET
+#undef MU_PRESET //NON-MODULE CHANGE
#undef WIZARD_PRESET
#undef CUSTOM_PRESET
diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm
index 82c6bdc48043..46be691785ac 100644
--- a/code/modules/admin/verbs/pray.dm
+++ b/code/modules/admin/verbs/pray.dm
@@ -74,6 +74,20 @@
for(var/obj/machinery/computer/communications/console in GLOB.shuttle_caller_list)
console.override_cooldown()
+//NON-MODULE CHANGE START
+/// Used by communications consoles to message the Mu Aristocracy
+/proc/message_mu(text, mob/sender)
+ var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN)
+ GLOB.requests.message_mu(sender.client, msg)
+ msg = span_adminnotice("MU:[ADMIN_FULLMONTY(sender)] [ADMIN_MU_REPLY(sender)]: [msg]")
+ for(var/client/staff as anything in GLOB.admins)
+ if(staff?.prefs.read_preference(/datum/preference/toggle/comms_notification))
+ SEND_SOUND(staff, sound('sound/misc/server-ready.ogg'))
+ to_chat(GLOB.admins, msg, confidential = TRUE)
+ for(var/obj/machinery/computer/communications/console in GLOB.shuttle_caller_list)
+ console.override_cooldown()
+//NON-MODULE CHANGE END
+
/// Used by communications consoles to request the nuclear launch codes
/proc/nuke_request(text, mob/sender)
var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN)
diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm
index e86c9792f273..7770179bcf5e 100644
--- a/code/modules/mob/living/living_say.dm
+++ b/code/modules/mob/living/living_say.dm
@@ -20,6 +20,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
RADIO_KEY_SYNDICATE = RADIO_CHANNEL_SYNDICATE,
RADIO_KEY_UPLINK = RADIO_CHANNEL_UPLINK,
RADIO_KEY_CENTCOM = RADIO_CHANNEL_CENTCOM,
+ RADIO_KEY_MU = RADIO_CHANNEL_MU, //NON-MODULE CHANGE
// Admin
MODE_KEY_ADMIN = MODE_ADMIN,
diff --git a/code/modules/requests/request_manager.dm b/code/modules/requests/request_manager.dm
index dd6d8d42a480..b8cb8679d0d9 100644
--- a/code/modules/requests/request_manager.dm
+++ b/code/modules/requests/request_manager.dm
@@ -4,6 +4,8 @@
#define REQUEST_CENTCOM "request_centcom"
/// Requests for the Syndicate
#define REQUEST_SYNDICATE "request_syndicate"
+/// Requests for Mu
+#define REQUEST_MU "request_mu" //NON-MODULE CHANGE
/// Requests for the nuke code
#define REQUEST_NUKE "request_nuke"
/// Requests somebody from fax
@@ -89,6 +91,18 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new)
/datum/request_manager/proc/message_syndicate(client/C, message)
request_for_client(C, REQUEST_SYNDICATE, message)
+//NON-MODULE CHANGE START
+/**
+ * Creates a request for a Syndicate message
+ *
+ * Arguments:
+ * * C - The client who is sending the request
+ * * message - The message
+ */
+/datum/request_manager/proc/message_mu(client/C, message)
+ request_for_client(C, REQUEST_MU, message)
+//NON-MODULE CHANGE END
+
/**
* Creates a request for the nuclear self destruct codes
*
@@ -216,7 +230,18 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new)
to_chat(usr, "Cannot reply to a prayer", confidential = TRUE)
return TRUE
var/mob/M = request.owner?.mob
- usr.client.admin_headset_message(M, request.req_type == REQUEST_SYNDICATE ? RADIO_CHANNEL_SYNDICATE : RADIO_CHANNEL_CENTCOM)
+ //NON-MODULE CHANGE START
+ var/channel_to_reply_with = RADIO_CHANNEL_CENTCOM
+ switch(request.req_type)
+ if(REQUEST_CENTCOM)
+ channel_to_reply_with = RADIO_CHANNEL_CENTCOM
+ if(REQUEST_SYNDICATE)
+ channel_to_reply_with = RADIO_CHANNEL_SYNDICATE
+ if(REQUEST_MU)
+ channel_to_reply_with = RADIO_CHANNEL_MU
+
+ usr.client.admin_headset_message(M, channel_to_reply_with)
+ //NON-MODULE CHANGE END
return TRUE
if ("setcode")
if (request.req_type != REQUEST_NUKE)
@@ -267,6 +292,7 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new)
#undef REQUEST_PRAYER
#undef REQUEST_CENTCOM
#undef REQUEST_SYNDICATE
+#undef REQUEST_MU
#undef REQUEST_NUKE
#undef REQUEST_FAX
#undef REQUEST_INTERNET_SOUND
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index 36c85642ad23..93b49f306551 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -5,7 +5,7 @@
// If you modify this file you ALSO need to modify tgui/packages/tgui-panel/styles/tgchat/chat-light.scss and chat-dark.scss
// BUT you have to use PX font sizes with are on a x8 scale of these font sizes
// Sample font-size: DM: 8 CSS: 64px
-
+// NON-MODULE CHANGE: Mu radio added in
/client/script = {"