From b7c4f50f2bee6fa1ba2620858e2af1d0c12db50e Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 2 Feb 2018 16:16:32 -0500 Subject: [PATCH] POLARIS: Add an adhoc radio fallback mechanism Allows subspace radios (eg headsets) to have adhoc_fallback enabled on them, which allows them to turn into shortwaves until they reestablish telecomms. I'm doing this for exp/sar/pilot headsets on our server, you can too if you want. What else are those giant antennas for? Up to you. This doesn't change anything for you unless you enable adhoc_fallback on something, but you can use it if you want! --- code/game/machinery/telecomms/broadcaster.dm | 2 +- code/game/objects/items/devices/radio/radio.dm | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index b55a354945..cd65fb9f91 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -250,7 +250,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) - if(istype(R, /obj/item/device/radio/headset)) + if(istype(R, /obj/item/device/radio/headset) && !R.adhoc_fallback) continue if(R.receive_range(display_freq, level) > -1) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 842fb09816..260c32cd57 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -39,6 +39,7 @@ var/global/list/default_medbay_channels = list( var/listening = 1 var/list/channels = list() //see communications.dm for full list. First channel is a "default" for :h var/subspace_transmission = 0 + var/adhoc_fallback = FALSE //Falls back to 'radio' mode if subspace not available var/syndie = 0//Holder to see if it's a syndicate encrypted radio var/centComm = 0//Holder to see if it's a CentCom encrypted radio flags = CONDUCT @@ -414,9 +415,15 @@ var/global/list/default_medbay_channels = list( for(var/obj/machinery/telecomms/allinone/R in telecomms_list) R.receive_signal(signal) - // Receiving code can be located in Telecommunications.dm - return signal.data["done"] && position.z in signal.data["level"] + if(signal.data["done"] && position.z in signal.data["level"]) + return TRUE //Huzzah, sent via subspace + else if(adhoc_fallback) //Less huzzah, we have to fallback + to_chat(loc,"\The [src] pings as it falls back to local radio transmission.") + subspace_transmission = FALSE + return Broadcast_Message(connection, M, voicemask, pick(M.speak_emote), + src, message, displayname, jobname, real_name, M.voice_name, + signal.transmission_method, signal.data["compression"], list(position.z), connection.frequency,verb,speaking) /* ###### Intercoms and station-bounced radios ###### */ @@ -463,10 +470,10 @@ var/global/list/default_medbay_channels = list( for(var/obj/machinery/telecomms/receiver/R in telecomms_list) R.receive_signal(signal) - - sleep(rand(10,25)) // wait a little... - if(signal.data["done"] && position.z in signal.data["level"]) + if(adhoc_fallback) + to_chat(loc,"\The [src] pings as it reestablishes subspace communications.") + subspace_transmission = TRUE // we're done here. return 1