diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 7cfa15e53a..e2c04299f1 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -209,8 +209,9 @@
if(M)
var/turf/ear = get_turf(M)
if(ear)
- if(speaker_coverage[ear])
- . |= M
+ // Ghostship is magic: Ghosts can hear radio chatter from anywhere
+ if(speaker_coverage[ear] || (istype(M, /mob/dead/observer) && (M.client) && (M.client.prefs.toggles & CHAT_GHOSTRADIO)))
+ . |= M // Since we're already looping through mobs, why bother using |= ? This only slows things down.
return .
#define SIGN(X) ((X<0)?-1:1)
diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm
index 155f6c6481..7775e3aa20 100644
--- a/code/game/machinery/telecomms/broadcaster.dm
+++ b/code/game/machinery/telecomms/broadcaster.dm
@@ -288,7 +288,10 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes.
continue
-
+
+ // Ghosts hearing all radio chat don't want to hear syndicate intercepts, they're duplicates
+ if(data == 3 && istype(R, /mob/dead/observer) && R.client && (R.client.prefs.toggles & CHAT_GHOSTRADIO))
+ continue
// --- Check for compression ---
if(compression > 0)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 304e96b0fa..0c8c0e0b4e 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -250,6 +250,7 @@ datum/preferences
dat += "Play lobby music: [(toggles & SOUND_LOBBY) ? "Yes" : "No"]
"
dat += "Ghost ears: [(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]
"
dat += "Ghost sight: [(toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]
"
+ dat += "Ghost radio: [(toggles & CHAT_GHOSTRADIO) ? "Nearest Speakers" : "All Chatter"]
"
if(config.allow_Metadata)
dat += "OOC Notes: Edit
"
@@ -1159,6 +1160,9 @@ datum/preferences
if("ghost_sight")
toggles ^= CHAT_GHOSTSIGHT
+
+ if("ghost_radio")
+ toggles ^= CHAT_GHOSTRADIO
if("save")
save_preferences()
diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm
index c1628c1f3f..326921c1f6 100644
--- a/code/modules/client/preferences_toggles.dm
+++ b/code/modules/client/preferences_toggles.dm
@@ -17,14 +17,23 @@
prefs.save_preferences()
feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+/client/verb/toggle_ghost_radio()
+ set name = "Enable/Disable GhostRadio"
+ set category = "Preferences"
+ set desc = ".Toggle between hearing all radio chatter, or only from nearby speakers"
+ prefs.toggles ^= CHAT_GHOSTRADIO
+ src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTRADIO) ? "hear all radio chat in the world" : "only hear from nearby speakers"]."
+ prefs.save_preferences()
+ feedback_add_details("admin_verb","TGR")
+
/client/proc/toggle_hear_radio()
set name = "Show/Hide RadioChatter"
set category = "Preferences"
- set desc = "Toggle seeing radiochatter from nearby radios and speakers"
+ set desc = "Toggle seeing radiochatter from radios and speakers"
if(!holder) return
prefs.toggles ^= CHAT_RADIO
prefs.save_preferences()
- usr << "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from nearby radios or speakers"
+ usr << "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from radios or speakers"
feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggleadminhelpsound()
diff --git a/code/setup.dm b/code/setup.dm
index 68b7552b40..08fec4f49a 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -639,6 +639,7 @@ var/list/TAGGERLOCATIONS = list("Disposals",
#define CHAT_ATTACKLOGS 1024
#define CHAT_DEBUGLOGS 2048
#define CHAT_LOOC 4096
+#define CHAT_GHOSTRADIO 8192
#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC)