diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 7cfa15e53a2..e2c04299f1c 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 155f6c64815..7775e3aa20d 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 304e96b0fad..0c8c0e0b4e9 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 c1628c1f3fe..326921c1f6a 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 68b7552b40f..08fec4f49ae 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)