From ff78ff1a9cd634ca76abb7bc54011258cf5ff7db Mon Sep 17 00:00:00 2001 From: AffectedArc07 Date: Sun, 21 Apr 2019 19:28:41 +0100 Subject: [PATCH] SScommunications --- .../components/binary_devices/dp_vent_pump.dm | 8 +- .../components/binary_devices/passive_gate.dm | 8 +- .../components/binary_devices/pump.dm | 8 +- .../components/binary_devices/valve.dm | 8 +- .../components/binary_devices/volume_pump.dm | 8 +- .../components/trinary_devices/filter.dm | 8 +- .../components/trinary_devices/tvalve.dm | 8 +- .../unary_devices/outlet_injector.dm | 8 +- .../components/unary_devices/vent_pump.dm | 8 +- .../components/unary_devices/vent_scrubber.dm | 8 +- code/__DEFINES/radio.dm | 60 +++ code/controllers/communications.dm | 345 ------------------ code/controllers/subsystem/radio.dm | 99 +++++ code/controllers/verbs.dm | 2 +- code/datums/radio.dm | 114 ++++++ code/defines/procs/radio.dm | 4 +- code/game/machinery/alarm.dm | 10 +- code/game/machinery/atmo_control.dm | 16 +- code/game/machinery/atmoalter/meter.dm | 2 +- code/game/machinery/buttons.dm | 10 +- .../game/machinery/computer/communications.dm | 2 +- code/game/machinery/doors/airlock.dm | 4 +- code/game/machinery/doors/airlock_control.dm | 26 +- code/game/machinery/doors/alarmlock.dm | 8 +- .../embedded_controller_base.dm | 8 +- code/game/machinery/lightswitch.dm | 10 +- code/game/machinery/magnet.dm | 12 +- code/game/machinery/status_display.dm | 8 +- code/game/machinery/telecomms/broadcaster.dm | 22 +- .../objects/items/devices/radio/headset.dm | 6 +- .../objects/items/devices/radio/intercom.dm | 2 +- .../game/objects/items/devices/radio/radio.dm | 36 +- code/modules/admin/verbs/diagnostics.dm | 4 +- code/modules/assembly/signaler.dm | 16 +- code/modules/flufftext/Hallucination.dm | 2 +- code/modules/logic/logic_base.dm | 10 +- .../mob/living/simple_animal/bot/bot.dm | 10 +- code/modules/pda/cart_apps.dm | 2 +- code/modules/pda/radio.dm | 20 +- code/modules/power/singularity/emitter.dm | 8 +- code/modules/shuttle/supply.dm | 2 +- paradise.dme | 4 +- 42 files changed, 447 insertions(+), 517 deletions(-) create mode 100644 code/__DEFINES/radio.dm delete mode 100644 code/controllers/communications.dm create mode 100644 code/controllers/subsystem/radio.dm create mode 100644 code/datums/radio.dm diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 785d58520a0..8f828c178ad 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -43,8 +43,8 @@ icon = null /obj/machinery/atmospherics/binary/dp_vent_pump/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -158,10 +158,10 @@ //Radio remote control /obj/machinery/atmospherics/binary/dp_vent_pump/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/binary/dp_vent_pump/proc/broadcast_status() if(!radio_connection) diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 9e845c15a98..8becfa37c10 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -22,8 +22,8 @@ set_frequency(frequency) /obj/machinery/atmospherics/binary/passive_gate/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -70,10 +70,10 @@ //Radio remote control /obj/machinery/atmospherics/binary/passive_gate/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/binary/passive_gate/proc/broadcast_status() if(!radio_connection) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 118a70c3ecd..ca01ae61716 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -29,8 +29,8 @@ Thus, the two variables affect pump operation are set in New(): var/datum/radio_frequency/radio_connection /obj/machinery/atmospherics/binary/pump/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -86,10 +86,10 @@ Thus, the two variables affect pump operation are set in New(): //Radio remote control /obj/machinery/atmospherics/binary/pump/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/binary/pump/proc/broadcast_status() if(!radio_connection) diff --git a/code/ATMOSPHERICS/components/binary_devices/valve.dm b/code/ATMOSPHERICS/components/binary_devices/valve.dm index f8f282a55af..dabe548ce9f 100644 --- a/code/ATMOSPHERICS/components/binary_devices/valve.dm +++ b/code/ATMOSPHERICS/components/binary_devices/valve.dm @@ -72,8 +72,8 @@ settagwhitelist = list("id_tag") /obj/machinery/atmospherics/binary/valve/digital/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -104,10 +104,10 @@ icon_state = "valve[open]nopower" /obj/machinery/atmospherics/binary/valve/digital/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/binary/valve/digital/atmos_init() ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index a64c94e7fc5..11874172340 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -29,8 +29,8 @@ Thus, the two variables affect pump operation are set in New(): var/datum/radio_frequency/radio_connection /obj/machinery/atmospherics/binary/volume_pump/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -82,10 +82,10 @@ Thus, the two variables affect pump operation are set in New(): return 1 /obj/machinery/atmospherics/binary/volume_pump/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency) + radio_connection = SSradio.add_object(src, frequency) /obj/machinery/atmospherics/binary/volume_pump/proc/broadcast_status() if(!radio_connection) diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 903f917e0c6..c6720e45f6e 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -24,8 +24,8 @@ Filter types: /obj/machinery/atmospherics/trinary/filter/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -34,10 +34,10 @@ Filter types: flipped = 1 /obj/machinery/atmospherics/trinary/filter/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/trinary/filter/update_icon() if(flipped) diff --git a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm index 9dddf8b06f4..3ec4e8443e4 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm @@ -109,8 +109,8 @@ var/datum/radio_frequency/radio_connection /obj/machinery/atmospherics/trinary/tvalve/digital/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -151,10 +151,10 @@ //Radio remote control /obj/machinery/atmospherics/trinary/tvalve/digital/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/trinary/tvalve/digital/atmos_init() ..() diff --git a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm index d597d0eb4c4..509b36ff8ab 100644 --- a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm @@ -32,8 +32,8 @@ id_tag = id /obj/machinery/atmospherics/unary/outlet_injector/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -95,10 +95,10 @@ flick("inject", src) /obj/machinery/atmospherics/unary/outlet_injector/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency) + radio_connection = SSradio.add_object(src, frequency) /obj/machinery/atmospherics/unary/outlet_injector/proc/broadcast_status() if(!radio_connection) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 613d0f0794e..0ac609cb6ec 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -180,10 +180,10 @@ //Radio remote control /obj/machinery/atmospherics/unary/vent_pump/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency,radio_filter_in) + radio_connection = SSradio.add_object(src, frequency,radio_filter_in) if(frequency != ATMOS_VENTSCRUB) initial_loc.air_vent_info -= id_tag initial_loc.air_vent_names -= id_tag @@ -435,7 +435,7 @@ if(initial_loc) initial_loc.air_vent_info -= id_tag initial_loc.air_vent_names -= id_tag - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 8416a784019..82cdfa46e97 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -53,8 +53,8 @@ if(initial_loc && frequency == ATMOS_VENTSCRUB) initial_loc.air_scrub_info -= id_tag initial_loc.air_scrub_names -= id_tag - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -127,9 +127,9 @@ add_underlay(T,, dir) /obj/machinery/atmospherics/unary/vent_scrubber/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, radio_filter_in) + radio_connection = SSradio.add_object(src, frequency, radio_filter_in) if(frequency != ATMOS_VENTSCRUB) initial_loc.air_scrub_info -= id_tag initial_loc.air_scrub_names -= id_tag diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm new file mode 100644 index 00000000000..e49a9ea9b67 --- /dev/null +++ b/code/__DEFINES/radio.dm @@ -0,0 +1,60 @@ + +#define DISPLAY_FREQ 1435 //status displays +#define ATMOS_FIRE_FREQ 1437 //air alarms +#define ENGINE_FREQ 1438 //engine components +#define ATMOS_VENTSCRUB 1439 //vents, scrubbers, atmos control +#define ATMOS_DISTRO_FREQ 1443 //distro loop +#define ATMOS_TANKS_FREQ 1441 //atmos supply tanks +#define BOT_BEACON_FREQ 1445 //bot navigation beacons +#define AIRLOCK_FREQ 1449 //airlock controls, electropack, magnets + +#define RSD_FREQ 1457 //radio signal device +#define IMPL_FREQ 1451 //tracking implant + +#define RADIO_LOW_FREQ 1200 //minimum radio freq +#define PUBLIC_LOW_FREQ 1441 //minimum radio chat freq +#define PUBLIC_HIGH_FREQ 1489 //maximum radio chat freq +#define RADIO_HIGH_FREQ 1600 //maximum radio freq + +#define SYND_FREQ 1213 +#define SYNDTEAM_FREQ 1244 +#define DTH_FREQ 1341 //Special Operations +#define AI_FREQ 1343 +#define ERT_FREQ 1345 +#define COMM_FREQ 1353 //Command +#define BOT_FREQ 1447 //mulebot, secbot, ed209 + + +// Department channels +#define PUB_FREQ 1459 //standard radio chat +#define SEC_FREQ 1359 //security +#define ENG_FREQ 1357 //engineering +#define SCI_FREQ 1351 //science +#define MED_FREQ 1355 //medical +#define SUP_FREQ 1347 //cargo +#define SRV_FREQ 1349 //service + +// Internal department channels +#define MED_I_FREQ 1485 +#define SEC_I_FREQ 1475 + +// Transmission methods +#define TRANSMISSION_WIRE 0 +#define TRANSMISSION_RADIO 1 + +//This filter is special because devices belonging to default also recieve signals sent to any other filter. +#define RADIO_DEFAULT "radio_default" +#define RADIO_TO_AIRALARM "radio_airalarm" //air alarms +#define RADIO_FROM_AIRALARM "radio_airalarm_rcvr" //devices interested in recieving signals from air alarms +#define RADIO_CHAT "radio_telecoms" +#define RADIO_ATMOSIA "radio_atmos" +#define RADIO_NAVBEACONS "radio_navbeacon" +#define RADIO_AIRLOCK "radio_airlock" +#define RADIO_SECBOT "radio_secbot" +#define RADIO_HONKBOT "radio_honkbot" +#define RADIO_MULEBOT "radio_mulebot" +#define RADIO_CLEANBOT "10" +#define RADIO_FLOORBOT "11" +#define RADIO_MEDBOT "12" +#define RADIO_MAGNETS "radio_magnet" +#define RADIO_LOGIC "radio_logic" diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm deleted file mode 100644 index 8d22febee61..00000000000 --- a/code/controllers/communications.dm +++ /dev/null @@ -1,345 +0,0 @@ -/* - HOW IT WORKS - - The radio_controller is a global object maintaining all radio transmissions, think about it as about "ether". - Note that walkie-talkie, intercoms and headsets handle transmission using nonstandard way. - procs: - - add_object(obj/device as obj, var/new_frequency as num, var/filter as text|null = null) - Adds listening object. - parameters: - device - device receiving signals, must have proc receive_signal (see description below). - one device may listen several frequencies, but not same frequency twice. - new_frequency - see possibly frequencies below; - filter - thing for optimization. Optional, but recommended. - All filters should be consolidated in this file, see defines later. - Device without listening filter will receive all signals (on specified frequency). - Device with filter will receive any signals sent without filter. - Device with filter will not receive any signals sent with different filter. - returns: - Reference to frequency object. - - remove_object (obj/device, old_frequency) - Obliviously, after calling this proc, device will not receive any signals on old_frequency. - Other frequencies will left unaffected. - - return_frequency(var/frequency as num) - returns: - Reference to frequency object. Use it if you need to send and do not need to listen. - - radio_frequency is a global object maintaining list of devices that listening specific frequency. - procs: - - post_signal(obj/source as obj|null, datum/signal/signal, var/filter as text|null = null, var/range as num|null = null) - Sends signal to all devices that wants such signal. - parameters: - source - object, emitted signal. Usually, devices will not receive their own signals. - signal - see description below. - filter - described above. - range - radius of regular byond's square circle on that z-level. null means everywhere, on all z-levels. - - obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param) - Handler from received signals. By default does nothing. Define your own for your object. - Avoid of sending signals directly from this proc, use spawn(-1). DO NOT use sleep() here or call procs that sleep please. If you must, use spawn() - parameters: - signal - see description below. Extract all needed data from the signal before doing sleep(), spawn() or return! - receive_method - may be TRANSMISSION_WIRE or TRANSMISSION_RADIO. - TRANSMISSION_WIRE is currently unused. - receive_param - for TRANSMISSION_RADIO here comes frequency. - - datum/signal - vars: - source - an object that emitted signal. Used for debug and bearing. - data - list with transmitting data. Usual use pattern: - data["msg"] = "hello world" - encryption - Some number symbolizing "encryption key". - Note that game actually do not use any cryptography here. - If receiving object don't know right key, it must ignore encrypted signal in its receive_signal. - -*/ - -var/const/DISPLAY_FREQ = 1435 //status displays -var/const/ATMOS_FIRE_FREQ = 1437 //air alarms -var/const/ENGINE_FREQ = 1438 //engine components -var/const/ATMOS_VENTSCRUB = 1439 //vents, scrubbers, atmos control -var/const/ATMOS_DISTRO_FREQ = 1443 //distro loop -var/const/ATMOS_TANKS_FREQ = 1441 //atmos supply tanks -var/const/BOT_BEACON_FREQ = 1445 //bot navigation beacons -var/const/AIRLOCK_FREQ = 1449 //airlock controls, electropack, magnets - -var/const/RSD_FREQ = 1457 //radio signal device -var/const/IMPL_FREQ = 1451 //tracking implant - -var/const/RADIO_LOW_FREQ = 1200 //minimum radio freq -var/const/PUBLIC_LOW_FREQ = 1441 //minimum radio chat freq -var/const/PUBLIC_HIGH_FREQ = 1489 //maximum radio chat freq -var/const/RADIO_HIGH_FREQ = 1600 //maximum radio freq - -var/const/SYND_FREQ = 1213 -var/const/SYNDTEAM_FREQ = 1244 -var/const/DTH_FREQ = 1341 //Special Operations -var/const/AI_FREQ = 1343 -var/const/ERT_FREQ = 1345 -var/const/COMM_FREQ = 1353 //Command -var/const/BOT_FREQ = 1447 //mulebot, secbot, ed209 - - -// department channels -var/const/PUB_FREQ = 1459 //standard radio chat -var/const/SEC_FREQ = 1359 //security -var/const/ENG_FREQ = 1357 //engineering -var/const/SCI_FREQ = 1351 //science -var/const/MED_FREQ = 1355 //medical -var/const/SUP_FREQ = 1347 //cargo -var/const/SRV_FREQ = 1349 //service - -// internal department channels -var/const/MED_I_FREQ = 1485 -var/const/SEC_I_FREQ = 1475 - -var/list/radiochannels = list( - "Common" = PUB_FREQ, - "Science" = SCI_FREQ, - "Command" = COMM_FREQ, - "Medical" = MED_FREQ, - "Engineering" = ENG_FREQ, - "Security" = SEC_FREQ, - "Response Team" = ERT_FREQ, - "Special Ops" = DTH_FREQ, - "Syndicate" = SYND_FREQ, - "SyndTeam" = SYNDTEAM_FREQ, - "Supply" = SUP_FREQ, - "Service" = SRV_FREQ, - "AI Private" = AI_FREQ, - "Medical(I)" = MED_I_FREQ, - "Security(I)" = SEC_I_FREQ -) - -// central command channels, i.e deathsquid & response teams -var/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ) - -// Antag channels, i.e. Syndicate -var/list/ANTAG_FREQS = list(SYND_FREQ, SYNDTEAM_FREQ) - -//Department channels, arranged lexically -var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ) - -#define TRANSMISSION_WIRE 0 -#define TRANSMISSION_RADIO 1 - -/proc/frequency_span_class(var/frequency) - // Antags! - if(frequency in ANTAG_FREQS) - return "syndradio" - // centcomm channels (deathsquid and ert) - if(frequency in CENT_FREQS) - return "centradio" - // command channel - if(frequency == COMM_FREQ) - return "comradio" - // AI private channel - if(frequency == AI_FREQ) - return "airadio" - // department radio formatting (poorly optimized, ugh) - if(frequency == SEC_FREQ) - return "secradio" - if(frequency == ENG_FREQ) - return "engradio" - if(frequency == SCI_FREQ) - return "sciradio" - if(frequency == MED_FREQ) - return "medradio" - if(frequency == SUP_FREQ) - return "supradio" - if(frequency == SRV_FREQ) - return "srvradio" - if(frequency in DEPT_FREQS) - return "deptradio" - - return "radio" - -/* filters */ -//When devices register with the radio controller, they might register under a certain filter. -//Other devices can then choose to send signals to only those devices that belong to a particular filter. -//This is done for performance, so we don't send signals to lots of machines unnecessarily. - -//This filter is special because devices belonging to default also recieve signals sent to any other filter. -var/const/RADIO_DEFAULT = "radio_default" - -var/const/RADIO_TO_AIRALARM = "radio_airalarm" //air alarms -var/const/RADIO_FROM_AIRALARM = "radio_airalarm_rcvr" //devices interested in recieving signals from air alarms -var/const/RADIO_CHAT = "radio_telecoms" -var/const/RADIO_ATMOSIA = "radio_atmos" -var/const/RADIO_NAVBEACONS = "radio_navbeacon" -var/const/RADIO_AIRLOCK = "radio_airlock" -var/const/RADIO_SECBOT = "radio_secbot" -var/const/RADIO_HONKBOT = "radio_honkbot" -var/const/RADIO_MULEBOT = "radio_mulebot" -var/const/RADIO_CLEANBOT = "10" -var/const/RADIO_FLOORBOT = "11" -var/const/RADIO_MEDBOT = "12" -var/const/RADIO_MAGNETS = "radio_magnet" -var/const/RADIO_LOGIC = "radio_logic" - -var/global/datum/controller/radio/radio_controller - -/hook/startup/proc/createRadioController() - radio_controller = new /datum/controller/radio() - return 1 - -//callback used by objects to react to incoming radio signals -/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param) - return null - -//The global radio controller -/datum/controller/radio - var/list/datum/radio_frequency/frequencies = list() - -/datum/controller/radio/proc/add_object(obj/device as obj, var/new_frequency as num, var/filter = null as text|null) - var/f_text = num2text(new_frequency) - var/datum/radio_frequency/frequency = frequencies[f_text] - - if(!frequency) - frequency = new - frequency.frequency = new_frequency - frequencies[f_text] = frequency - - frequency.add_listener(device, filter) - return frequency - -/datum/controller/radio/proc/remove_object(obj/device, old_frequency) - var/f_text = num2text(old_frequency) - var/datum/radio_frequency/frequency = frequencies[f_text] - - if(frequency) - frequency.remove_listener(device) - - if(frequency.devices.len == 0) - qdel(frequency) - frequencies -= f_text - - return 1 - -/datum/controller/radio/proc/return_frequency(var/new_frequency as num) - var/f_text = num2text(new_frequency) - var/datum/radio_frequency/frequency = frequencies[f_text] - - if(!frequency) - frequency = new - frequency.frequency = new_frequency - frequencies[f_text] = frequency - - return frequency - -/datum/radio_frequency - var/frequency as num - var/list/list/obj/devices = list() - -/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null) - var/turf/start_point - if(range) - start_point = get_turf(source) - if(!start_point) - qdel(signal) - return 0 - if(filter) - send_to_filter(source, signal, filter, start_point, range) - send_to_filter(source, signal, RADIO_DEFAULT, start_point, range) - else - //Broadcast the signal to everyone! - for(var/next_filter in devices) - send_to_filter(source, signal, next_filter, start_point, range) - -//Sends a signal to all machines belonging to a given filter. Should be called by post_signal() -/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/filter, var/turf/start_point = null, var/range = null) - if(range && !start_point) - return - - for(var/obj/device in devices[filter]) - if(device == source) - continue - if(range) - var/turf/end_point = get_turf(device) - if(!end_point) - continue - if(start_point.z!=end_point.z || get_dist(start_point, end_point) > range) - continue - - device.receive_signal(signal, TRANSMISSION_RADIO, frequency) - -/datum/radio_frequency/proc/add_listener(obj/device as obj, var/filter as text|null) - if(!filter) - filter = RADIO_DEFAULT - //log_admin("add_listener(device=[device],filter=[filter]) frequency=[frequency]") - var/list/obj/devices_line = devices[filter] - if(!devices_line) - devices_line = new - devices[filter] = devices_line - devices_line+=device -// var/list/obj/devices_line___ = devices[filter_str] -// var/l = devices_line___.len - //log_admin("DEBUG: devices_line.len=[devices_line.len]") - //log_admin("DEBUG: devices(filter_str).len=[l]") - -/datum/radio_frequency/proc/remove_listener(obj/device) - for(var/devices_filter in devices) - var/list/devices_line = devices[devices_filter] - devices_line-=device - while(null in devices_line) - devices_line -= null - if(devices_line.len==0) - devices -= devices_filter - qdel(devices_line) - -/datum/signal - var/obj/source - - var/transmission_method = 0 //unused at the moment - //0 = wire - //1 = radio transmission - //2 = subspace transmission - - var/list/data = list() - var/encryption - - var/frequency = 0 - -/datum/signal/proc/copy_from(datum/signal/model) - source = model.source - transmission_method = model.transmission_method - data = model.data - encryption = model.encryption - frequency = model.frequency - -/datum/signal/proc/debug_print() - if(source) - . = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n" - else - . = "signal = {source = '[source]' ()\n" - for(var/i in data) - . += "data\[\"[i]\"\] = \"[data[i]]\"\n" - if(islist(data[i])) - var/list/L = data[i] - for(var/t in L) - . += "data\[\"[i]\"\] list has: [t]" - -/datum/signal/proc/get_race(mob/M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - . = H.dna.species.name - else if(isbrain(M)) - var/mob/living/carbon/brain/B = M - . = B.get_race() - else if(issilicon(M)) - . = "Artificial Life" - else if(isslime(M)) - . = "Slime" - else if(isbot(M)) - . = "Bot" - else if(isanimal(M)) - . = "Domestic Animal" - else - . = "Unidentifiable" diff --git a/code/controllers/subsystem/radio.dm b/code/controllers/subsystem/radio.dm new file mode 100644 index 00000000000..93b5152ee45 --- /dev/null +++ b/code/controllers/subsystem/radio.dm @@ -0,0 +1,99 @@ +SUBSYSTEM_DEF(radio) + name = "Radio" + flags = SS_NO_INIT | SS_NO_FIRE + + var/list/radiochannels = list( + "Common" = PUB_FREQ, + "Science" = SCI_FREQ, + "Command" = COMM_FREQ, + "Medical" = MED_FREQ, + "Engineering" = ENG_FREQ, + "Security" = SEC_FREQ, + "Response Team" = ERT_FREQ, + "Special Ops" = DTH_FREQ, + "Syndicate" = SYND_FREQ, + "SyndTeam" = SYNDTEAM_FREQ, + "Supply" = SUP_FREQ, + "Service" = SRV_FREQ, + "AI Private" = AI_FREQ, + "Medical(I)" = MED_I_FREQ, + "Security(I)" = SEC_I_FREQ + ) + var/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ) + var/list/ANTAG_FREQS = list(SYND_FREQ, SYNDTEAM_FREQ) + var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ) + var/list/datum/radio_frequency/frequencies = list() + +// This is fucking disgusting and needs to die +/datum/controller/subsystem/radio/proc/frequency_span_class(var/frequency) + // Antags! + if(frequency in ANTAG_FREQS) + return "syndradio" + // centcomm channels (deathsquid and ert) + if(frequency in CENT_FREQS) + return "centradio" + // This switch used to be a shit tonne of if statements. I am gonna find who made this and give them a kind talking to + switch(frequency) + if(COMM_FREQ) + return "comradio" + if(AI_FREQ) + return "airadio" + if(SEC_FREQ) + return "secradio" + if(ENG_FREQ) + return "engradio" + if(SCI_FREQ) + return "sciradio" + if(MED_FREQ) + return "medradio" + if(SUP_FREQ) + return "supradio" + if(SRV_FREQ) + return "srvradio" + + // If the above switch somehow failed. And it needs the SSradio. part otherwise it fails to compile + if(frequency in DEPT_FREQS) + return "deptradio" + + // If its none of the others + return "radio" + + +/datum/controller/subsystem/radio/proc/add_object(obj/device as obj, var/new_frequency as num, var/filter = null as text|null) + var/f_text = num2text(new_frequency) + var/datum/radio_frequency/frequency = frequencies[f_text] + + if(!frequency) + frequency = new + frequency.frequency = new_frequency + frequencies[f_text] = frequency + + frequency.add_listener(device, filter) + return frequency + +/datum/controller/subsystem/radio/proc/remove_object(obj/device, old_frequency) + var/f_text = num2text(old_frequency) + var/datum/radio_frequency/frequency = frequencies[f_text] + + if(frequency) + frequency.remove_listener(device) + + if(frequency.devices.len == 0) + qdel(frequency) + frequencies -= f_text + + return 1 + +/datum/controller/subsystem/radio/proc/return_frequency(var/new_frequency as num) + var/f_text = num2text(new_frequency) + var/datum/radio_frequency/frequency = frequencies[f_text] + + if(!frequency) + frequency = new + frequency.frequency = new_frequency + frequencies[f_text] = frequency + + return frequency + + +// ALL THE SHIT BELOW THIS LINE ISNT PART OF THE SUBSYSTEM AND REALLY NEEDS ITS OWN FILE diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index e5600470582..2085d39cc21 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -52,7 +52,7 @@ debug_variables(SSsun) feedback_add_details("admin_verb","DSun") if("Radio") - debug_variables(radio_controller) + debug_variables(SSradio) feedback_add_details("admin_verb","DRadio") if("Configuration") debug_variables(config) diff --git a/code/datums/radio.dm b/code/datums/radio.dm new file mode 100644 index 00000000000..7670bc76e32 --- /dev/null +++ b/code/datums/radio.dm @@ -0,0 +1,114 @@ + +/datum/radio_frequency + var/frequency as num + var/list/list/obj/devices = list() + +/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null) + var/turf/start_point + if(range) + start_point = get_turf(source) + if(!start_point) + qdel(signal) + return 0 + if(filter) + send_to_filter(source, signal, filter, start_point, range) + send_to_filter(source, signal, RADIO_DEFAULT, start_point, range) + else + //Broadcast the signal to everyone! + for(var/next_filter in devices) + send_to_filter(source, signal, next_filter, start_point, range) + +//Sends a signal to all machines belonging to a given filter. Should be called by post_signal() +/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/filter, var/turf/start_point = null, var/range = null) + if(range && !start_point) + return + + for(var/obj/device in devices[filter]) + if(device == source) + continue + if(range) + var/turf/end_point = get_turf(device) + if(!end_point) + continue + if(start_point.z!=end_point.z || get_dist(start_point, end_point) > range) + continue + + device.receive_signal(signal, TRANSMISSION_RADIO, frequency) + +/datum/radio_frequency/proc/add_listener(obj/device as obj, var/filter as text|null) + if(!filter) + filter = RADIO_DEFAULT + //log_admin("add_listener(device=[device],filter=[filter]) frequency=[frequency]") + var/list/obj/devices_line = devices[filter] + if(!devices_line) + devices_line = new + devices[filter] = devices_line + devices_line+=device +// var/list/obj/devices_line___ = devices[filter_str] +// var/l = devices_line___.len + //log_admin("DEBUG: devices_line.len=[devices_line.len]") + //log_admin("DEBUG: devices(filter_str).len=[l]") + +/datum/radio_frequency/proc/remove_listener(obj/device) + for(var/devices_filter in devices) + var/list/devices_line = devices[devices_filter] + devices_line-=device + while(null in devices_line) + devices_line -= null + if(devices_line.len==0) + devices -= devices_filter + qdel(devices_line) + +/datum/signal + var/obj/source + + var/transmission_method = 0 //unused at the moment + //0 = wire + //1 = radio transmission + //2 = subspace transmission + + var/list/data = list() + var/encryption + + var/frequency = 0 + +/datum/signal/proc/copy_from(datum/signal/model) + source = model.source + transmission_method = model.transmission_method + data = model.data + encryption = model.encryption + frequency = model.frequency + +/datum/signal/proc/debug_print() + if(source) + . = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n" + else + . = "signal = {source = '[source]' ()\n" + for(var/i in data) + . += "data\[\"[i]\"\] = \"[data[i]]\"\n" + if(islist(data[i])) + var/list/L = data[i] + for(var/t in L) + . += "data\[\"[i]\"\] list has: [t]" + +/datum/signal/proc/get_race(mob/M) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + . = H.dna.species.name + else if(isbrain(M)) + var/mob/living/carbon/brain/B = M + . = B.get_race() + else if(issilicon(M)) + . = "Artificial Life" + else if(isslime(M)) + . = "Slime" + else if(isbot(M)) + . = "Bot" + else if(isanimal(M)) + . = "Domestic Animal" + else + . = "Unidentifiable" + +//callback used by objects to react to incoming radio signals +/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param) + return null diff --git a/code/defines/procs/radio.dm b/code/defines/procs/radio.dm index f41bea79048..84d3ddaae78 100644 --- a/code/defines/procs/radio.dm +++ b/code/defines/procs/radio.dm @@ -13,8 +13,8 @@ if(SYNDTEAM_FREQ) freq_text = "#unid" else - for(var/channel in radiochannels) - if(radiochannels[channel] == display_freq) + for(var/channel in SSradio.radiochannels) + if(SSradio.radiochannels[channel] == display_freq) freq_text = channel break diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index db5c2b6e9c3..aa9401175bb 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -212,8 +212,8 @@ /obj/machinery/alarm/Destroy() GLOB.air_alarms -= src - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null air_alarm_repository.update_cache(src) QDEL_NULL(wires) @@ -432,9 +432,9 @@ send_signal(id_tag, list("status") ) /obj/machinery/alarm/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_TO_AIRALARM) + radio_connection = SSradio.add_object(src, frequency, RADIO_TO_AIRALARM) /obj/machinery/alarm/proc/send_signal(var/target, var/list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise if(!radio_connection) @@ -571,7 +571,7 @@ update_icon() /obj/machinery/alarm/proc/post_alert(alert_level) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(alarm_frequency) + var/datum/radio_frequency/frequency = SSradio.return_frequency(alarm_frequency) if(!frequency) return diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 61547f270bf..d262b523808 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -121,9 +121,9 @@ /obj/machinery/air_sensor/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/air_sensor/Initialize() ..() @@ -132,8 +132,8 @@ /obj/machinery/air_sensor/Destroy() SSair.atmos_machinery -= src - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -156,8 +156,8 @@ var/datum/radio_frequency/radio_connection /obj/machinery/computer/general_air_control/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -268,9 +268,9 @@ return output /obj/machinery/computer/general_air_control/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/computer/general_air_control/Initialize() ..() diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index dba1d942e2d..453d5cdee1e 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -65,7 +65,7 @@ icon_state = "meter4" if(frequency) - var/datum/radio_frequency/radio_connection = radio_controller.return_frequency(frequency) + var/datum/radio_frequency/radio_connection = SSradio.return_frequency(frequency) if(!radio_connection) return diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index a76bd387ac7..b968a4bd5f8 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -33,7 +33,7 @@ pixel_x = 25 if(WEST) pixel_x = -25 - if(radio_controller) + if(SSradio) set_frequency(frequency) /obj/machinery/driver_button/Initialize() @@ -41,14 +41,14 @@ set_frequency(frequency) /obj/machinery/driver_button/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_LOGIC) + radio_connection = SSradio.add_object(src, frequency, RADIO_LOGIC) return /obj/machinery/driver_button/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 854525dadf4..e369b203759 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -494,7 +494,7 @@ /proc/post_status(command, data1, data2, mob/user = null) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(DISPLAY_FREQ) + var/datum/radio_frequency/frequency = SSradio.return_frequency(DISPLAY_FREQ) if(!frequency) return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 54153118131..72af504358a 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -151,8 +151,8 @@ About the new airlock wires panel: if(electrified_timer) deltimer(electrified_timer) electrified_timer = null - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 7eb43cdec74..496d8942bcc 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -127,10 +127,10 @@ return /obj/machinery/door/airlock/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) if(new_frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) + radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) /obj/machinery/door/airlock/Initialize() ..() @@ -143,7 +143,7 @@ /obj/machinery/door/airlock/New() ..() - if(radio_controller) + if(SSradio) set_frequency(frequency) /obj/machinery/airlock_sensor @@ -203,9 +203,9 @@ update_icon() /obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) + radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) /obj/machinery/airlock_sensor/Initialize() ..() @@ -213,12 +213,12 @@ /obj/machinery/airlock_sensor/New() ..() - if(radio_controller) + if(SSradio) set_frequency(frequency) /obj/machinery/airlock_sensor/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -271,9 +271,9 @@ flick("access_button_cycle", src) /obj/machinery/access_button/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK) + radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) /obj/machinery/access_button/Initialize() ..() @@ -282,12 +282,12 @@ /obj/machinery/access_button/New() ..() - if(radio_controller) + if(SSradio) set_frequency(frequency) /obj/machinery/access_button/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index 91591234551..d3bf12f72f0 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -13,15 +13,15 @@ air_connection = new /obj/machinery/door/airlock/alarmlock/Destroy() - if(radio_controller) - radio_controller.remove_object(src,air_frequency) + if(SSradio) + SSradio.remove_object(src,air_frequency) air_connection = null return ..() /obj/machinery/door/airlock/alarmlock/Initialize() ..() - radio_controller.remove_object(src, air_frequency) - air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM) + SSradio.remove_object(src, air_frequency) + air_connection = SSradio.add_object(src, air_frequency, RADIO_TO_AIRALARM) open() /obj/machinery/door/airlock/alarmlock/receive_signal(datum/signal/signal) diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 23ee6e19403..e0a49fdfc8c 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -59,8 +59,8 @@ set_frequency(frequency) /obj/machinery/embedded_controller/radio/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -82,6 +82,6 @@ qdel(signal) /obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, radio_filter) + radio_connection = SSradio.add_object(src, frequency, radio_filter) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index d0399dfa2a4..ee6bd060c16 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -30,7 +30,7 @@ pixel_x = 25 if(WEST) pixel_x = -25 - if(radio_controller) + if(SSradio) set_frequency(frequency) spawn(5) src.area = get_area(src) @@ -49,14 +49,14 @@ set_frequency(frequency) /obj/machinery/light_switch/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_LOGIC) + radio_connection = SSradio.add_object(src, frequency, RADIO_LOGIC) return /obj/machinery/light_switch/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 3af76895428..9b982df99fd 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -36,8 +36,8 @@ center = T spawn(10) // must wait for map loading to finish - if(radio_controller) - radio_controller.add_object(src, freq, RADIO_MAGNETS) + if(SSradio) + SSradio.add_object(src, freq, RADIO_MAGNETS) spawn() magnetic_process() @@ -208,8 +208,8 @@ spawn(45) // must wait for map loading to finish - if(radio_controller) - radio_connection = radio_controller.add_object(src, frequency, RADIO_MAGNETS) + if(SSradio) + radio_connection = SSradio.add_object(src, frequency, RADIO_MAGNETS) if(path) // check for default path @@ -217,8 +217,8 @@ /obj/machinery/magnetic_controller/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 5f875d7fdc8..05545e6a3d1 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -50,15 +50,15 @@ var/const/STATUS_DISPLAY_CUSTOM = 99 /obj/machinery/status_display/Destroy() - if(radio_controller) - radio_controller.remove_object(src,frequency) + if(SSradio) + SSradio.remove_object(src,frequency) return ..() // register for radio system /obj/machinery/status_display/Initialize() ..() - if(radio_controller) - radio_controller.add_object(src, frequency) + if(SSradio) + SSradio.add_object(src, frequency) // timed process /obj/machinery/status_display/process() diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 8e34e2e19bc..8cd285c994a 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -140,7 +140,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/datum/radio_frequency/connection = signal.data["connection"] - if(connection.frequency in ANTAG_FREQS) // if antag broadcast, just + if(connection.frequency in SSradio.ANTAG_FREQS) // if antag broadcast, just Broadcast_Message(signal.data["connection"], signal.data["mob"], signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], @@ -162,13 +162,13 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /proc/Is_Bad_Connection(old_freq, new_freq) //Makes sure players cant read radios of a higher level than they are var/old_type = CREW_RADIO_TYPE var/new_type = CREW_RADIO_TYPE - for(var/antag_freq in ANTAG_FREQS) + for(var/antag_freq in SSradio.ANTAG_FREQS) if(old_freq == antag_freq) old_type = SYNDICATE_RADIO_TYPE if(new_freq == antag_freq) new_type = SYNDICATE_RADIO_TYPE - for(var/cent_freq in CENT_FREQS) + for(var/cent_freq in SSradio.CENT_FREQS) if(old_freq == cent_freq) old_type = CENTCOMM_RADIO_TYPE if(new_freq == cent_freq) @@ -249,7 +249,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept if(connection.frequency != display_freq) bad_connection = Is_Bad_Connection(connection.frequency, display_freq) - new_connection = radio_controller.return_frequency(display_freq) + new_connection = SSradio.return_frequency(display_freq) var/list/obj/item/radio/radios = list() @@ -276,8 +276,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // --- Broadcast to antag radios! --- else if(data == 3) - for(var/antag_freq in ANTAG_FREQS) - var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(antag_freq) + for(var/antag_freq in SSradio.ANTAG_FREQS) + var/datum/radio_frequency/antag_connection = SSradio.return_frequency(antag_freq) for(var/obj/item/radio/R in antag_connection.devices["[RADIO_CHAT]"]) if(R.receive_range(antag_freq, level) > -1) radios += R @@ -356,7 +356,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/part_b_extra = "" if(data == 3) // intercepted radio message part_b_extra = " (Intercepted)" - var/part_a = "\[[freq_text]\][part_b_extra] " // goes in the actual output + var/part_a = "\[[freq_text]\][part_b_extra] " // goes in the actual output // --- Some more pre-message formatting --- var/part_b = " " // Tweaked for security headsets -- TLE @@ -452,7 +452,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept H = new M = H - var/datum/radio_frequency/connection = radio_controller.return_frequency(frequency) + var/datum/radio_frequency/connection = SSradio.return_frequency(frequency) var/display_freq = connection.frequency @@ -485,8 +485,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // --- Broadcast to antag radios! --- else if(data == 3) - for(var/freq in ANTAG_FREQS) - var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(freq) + for(var/freq in SSradio.ANTAG_FREQS) + var/datum/radio_frequency/antag_connection = SSradio.return_frequency(freq) for(var/obj/item/radio/R in antag_connection.devices["[RADIO_CHAT]"]) var/turf/position = get_turf(R) // TODO: Make the radio system cooperate with the space manager @@ -545,7 +545,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept if(length(heard_normal) || length(heard_garbled) || length(heard_gibberish)) /* --- Some miscellaneous variables to format the string output --- */ - var/part_a = "" // goes in the actual output + var/part_a = "" // goes in the actual output var/freq_text = get_frequency_name(display_freq) // --- Some more pre-message formatting --- diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index b98e6d9acfc..610c257b03f 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -315,7 +315,7 @@ if(keyslot1 || keyslot2) for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, SSradio.radiochannels[ch_name]) secure_radio_connections[ch_name] = null if(keyslot1) @@ -392,11 +392,11 @@ for(var/ch_name in channels) - if(!radio_controller) + if(!SSradio) name = "broken radio headset" return - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, SSradio.radiochannels[ch_name], RADIO_CHAT) if(setDescription) setupRadioDescription() diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 287c7b44c30..62057880b9b 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -128,7 +128,7 @@ // TODO: Integrate radio with the space manager if(isnull(position) || !(position.z in level)) return -1 - if(freq in ANTAG_FREQS) + if(freq in SSradio.ANTAG_FREQS) if(!(syndiekey)) return -1//Prevents broadcast of messages over devices lacking the encryption diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index e01b1a2a61a..83a8c9304a1 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -59,9 +59,9 @@ var/global/list/default_medbay_channels = list( /obj/item/radio/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) + radio_connection = SSradio.add_object(src, frequency, RADIO_CHAT) /obj/item/radio/New() @@ -73,10 +73,10 @@ var/global/list/default_medbay_channels = list( /obj/item/radio/Destroy() QDEL_NULL(wires) - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, SSradio.radiochannels[ch_name]) radio_connection = null GLOB.global_radios -= src follow_target = null @@ -90,7 +90,7 @@ var/global/list/default_medbay_channels = list( set_frequency(frequency) for(var/ch_name in channels) - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, SSradio.radiochannels[ch_name], RADIO_CHAT) /obj/item/radio/attack_ghost(mob/user) return interact(user) @@ -147,7 +147,7 @@ var/global/list/default_medbay_channels = list( var/chan_stat = channels[ch_name] var/listening = !!(chan_stat & FREQ_LISTENING) != 0 - dat.Add(list(list("chan" = ch_name, "display_name" = ch_name, "secure_channel" = 1, "sec_channel_listen" = !listening, "chan_span" = frequency_span_class(radiochannels[ch_name])))) + dat.Add(list(list("chan" = ch_name, "display_name" = ch_name, "secure_channel" = 1, "sec_channel_listen" = !listening, "chan_span" = SSradio.frequency_span_class(SSradio.radiochannels[ch_name])))) return dat @@ -155,7 +155,7 @@ var/global/list/default_medbay_channels = list( var/dat[0] for(var/internal_chan in internal_channels) if(has_channel_access(user, internal_chan)) - dat.Add(list(list("chan" = internal_chan, "display_name" = get_frequency_name(text2num(internal_chan)), "chan_span" = frequency_span_class(text2num(internal_chan))))) + dat.Add(list(list("chan" = internal_chan, "display_name" = get_frequency_name(text2num(internal_chan)), "chan_span" = SSradio.frequency_span_class(text2num(internal_chan))))) return dat @@ -555,7 +555,7 @@ var/global/list/default_medbay_channels = list( var/turf/position = get_turf(src) if(!position || !(position.z in level)) return -1 - if(freq in ANTAG_FREQS) + if(freq in SSradio.ANTAG_FREQS) if(!(syndiekey))//Checks to see if it's allowed on that frequency, based on the encryption keys return -1 if(!freq) //recieved on main frequency @@ -699,7 +699,7 @@ var/global/list/default_medbay_channels = list( for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, SSradio.radiochannels[ch_name]) secure_radio_connections[ch_name] = null @@ -752,13 +752,13 @@ var/global/list/default_medbay_channels = list( for(var/ch_name in channels) - if(!radio_controller) - sleep(30) // Waiting for the radio_controller to be created. - if(!radio_controller) + if(!SSradio) + sleep(30) // Waiting for SSradio to be created. + if(!SSradio) name = "broken radio" return - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, SSradio.radiochannels[ch_name], RADIO_CHAT) return @@ -829,14 +829,14 @@ var/global/list/default_medbay_channels = list( return data /obj/item/radio/proc/config(op) - if(radio_controller) + if(SSradio) for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) + SSradio.remove_object(src, SSradio.radiochannels[ch_name]) secure_radio_connections = new channels = op - if(radio_controller) + if(SSradio) for(var/ch_name in op) - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, SSradio.radiochannels[ch_name], RADIO_CHAT) return /obj/item/radio/off diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 8b8a2b58a52..93389acbdd8 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -83,9 +83,9 @@ "_default" = "NO_FILTER" ) var/output = "Radio Report
" - for(var/fq in radio_controller.frequencies) + for(var/fq in SSradio.frequencies) output += "Freq: [fq]
" - var/list/datum/radio_frequency/fqs = radio_controller.frequencies[fq] + var/list/datum/radio_frequency/fqs = SSradio.frequencies[fq] if(!fqs) output += "  ERROR
" continue diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 6228df02af3..addc6f847ab 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -20,17 +20,17 @@ /obj/item/assembly/signaler/New() ..() - if(radio_controller) + if(SSradio) set_frequency(frequency) /obj/item/assembly/signaler/Initialize() ..() - if(radio_controller) + if(SSradio) set_frequency(frequency) /obj/item/assembly/signaler/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() @@ -151,13 +151,13 @@ return TRUE /obj/item/assembly/signaler/proc/set_frequency(new_frequency) - if(!radio_controller) + if(!SSradio) sleep(20) - if(!radio_controller) + if(!SSradio) return - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) + radio_connection = SSradio.add_object(src, frequency, RADIO_CHAT) // Embedded signaller used in anomalies. /obj/item/assembly/signaler/anomaly diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 7dcb5301d43..855ac60666b 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -738,7 +738,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/gun/projectile, /obj/item/ammo_ for(var/mob/living/carbon/human/H in GLOB.living_mob_list) humans += H person = pick(humans) - target.hear_radio(message_to_multilingual(pick(radio_messages), pick(person.languages)), speaker = person, part_a = "\[[get_frequency_name(PUB_FREQ)]\] ", part_b = " ") + target.hear_radio(message_to_multilingual(pick(radio_messages), pick(person.languages)), speaker = person, part_a = "\[[get_frequency_name(PUB_FREQ)]\] ", part_b = " ") qdel(src) /obj/effect/hallucination/message diff --git a/code/modules/logic/logic_base.dm b/code/modules/logic/logic_base.dm index 519c47c408b..952001e87f7 100644 --- a/code/modules/logic/logic_base.dm +++ b/code/modules/logic/logic_base.dm @@ -42,7 +42,7 @@ if(tamperproof) //doing this during New so we don't have to worry about forgetting to set these vars during editting / defining unacidable = 1 ..() - if(radio_controller) + if(SSradio) set_frequency(frequency) component_parts = list() var/obj/item/circuitboard/logic_gate/LG = new(null) @@ -55,14 +55,14 @@ set_frequency(frequency) /obj/machinery/logic_gate/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_LOGIC) + radio_connection = SSradio.add_object(src, frequency, RADIO_LOGIC) return /obj/machinery/logic_gate/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index a0b6652f883..4793b91dee6 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -156,8 +156,8 @@ bot_core = new bot_core_type(src) spawn(30) - if(radio_controller && bot_filter) - radio_controller.add_object(bot_core, control_freq, bot_filter) + if(SSradio && bot_filter) + SSradio.add_object(bot_core, control_freq, bot_filter) prepare_huds() for(var/datum/atom_hud/data/diagnostic/diag_hud in huds) @@ -197,8 +197,8 @@ if(reset_access_timer_id) deltimer(reset_access_timer_id) reset_access_timer_id = null - if(radio_controller && bot_filter) - radio_controller.remove_object(bot_core, control_freq) + if(SSradio && bot_filter) + SSradio.remove_object(bot_core, control_freq) QDEL_NULL(bot_core) return ..() @@ -747,7 +747,7 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/proc/post_signal_multiple(var/freq, var/list/keyval) if(z != 1) //Bot control will only work on station. return - var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) + var/datum/radio_frequency/frequency = SSradio.return_frequency(freq) if(!frequency) return diff --git a/code/modules/pda/cart_apps.dm b/code/modules/pda/cart_apps.dm index 46e8e1d257c..de2414da743 100644 --- a/code/modules/pda/cart_apps.dm +++ b/code/modules/pda/cart_apps.dm @@ -28,7 +28,7 @@ post_status(href_list["statdisp"]) /datum/data/pda/app/status_display/proc/post_status(var/command, var/data1, var/data2) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(DISPLAY_FREQ) + var/datum/radio_frequency/frequency = SSradio.return_frequency(DISPLAY_FREQ) if(!frequency) return diff --git a/code/modules/pda/radio.dm b/code/modules/pda/radio.dm index e6d7f29f6ac..7db0ed332d5 100644 --- a/code/modules/pda/radio.dm +++ b/code/modules/pda/radio.dm @@ -26,15 +26,15 @@ add_to_radio(bot_filter) /obj/item/integrated_radio/Destroy() - if(radio_controller) - radio_controller.remove_object(src, control_freq) + if(SSradio) + SSradio.remove_object(src, control_freq) hostpda = null return ..() /obj/item/integrated_radio/proc/post_signal(var/freq, var/key, var/value, var/key2, var/value2, var/key3, var/value3,var/key4, var/value4, s_filter) // to_chat(world, "Post: [freq]: [key]=[value], [key2]=[value2]") - var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) + var/datum/radio_frequency/frequency = SSradio.return_frequency(freq) if(!frequency) return @@ -93,8 +93,8 @@ post_signal(control_freq, "command", "bot_status", "active", active, s_filter = bot_filter) /obj/item/integrated_radio/proc/add_to_radio(bot_filter) //Master filter control for bots. Must be placed in the bot's local New() to support map spawned bots. - if(radio_controller) - radio_controller.add_object(src, control_freq, filter = bot_filter) + if(SSradio) + SSradio.add_object(src, control_freq, filter = bot_filter) /obj/item/integrated_radio/honkbot bot_filter = RADIO_HONKBOT @@ -171,13 +171,13 @@ var/datum/radio_frequency/radio_connection /obj/item/integrated_radio/signal/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null return ..() /obj/item/integrated_radio/signal/Initialize() - if(!radio_controller) + if(!SSradio) return if(src.frequency < PUBLIC_LOW_FREQ || src.frequency > PUBLIC_HIGH_FREQ) src.frequency = sanitize_frequency(src.frequency) @@ -185,9 +185,9 @@ set_frequency(frequency) /obj/item/integrated_radio/signal/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency) + radio_connection = SSradio.add_object(src, frequency) /obj/item/integrated_radio/signal/proc/send_signal(message="ACTIVATE") diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index b0ed7c14581..7e031755e22 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -54,10 +54,10 @@ //Radio remote control /obj/machinery/power/emitter/proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) + SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/power/emitter/verb/rotate() @@ -121,8 +121,8 @@ update_icon() /obj/machinery/power/emitter/Destroy() - if(radio_controller) - radio_controller.remove_object(src, frequency) + if(SSradio) + SSradio.remove_object(src, frequency) radio_connection = null msg_admin_attack("Emitter deleted at ([x],[y],[z] - [ADMIN_JMP(src)])", ATKLOG_FEW) log_game("Emitter deleted at ([x],[y],[z])") diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index a6baec94d26..f48906fd1f3 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -739,7 +739,7 @@ return 1 /obj/machinery/computer/supplycomp/proc/post_signal(var/command) - var/datum/radio_frequency/frequency = radio_controller.return_frequency(DISPLAY_FREQ) + var/datum/radio_frequency/frequency = SSradio.return_frequency(DISPLAY_FREQ) if(!frequency) return diff --git a/paradise.dme b/paradise.dme index e3773cf12e6..49fb34028e3 100644 --- a/paradise.dme +++ b/paradise.dme @@ -51,6 +51,7 @@ #include "code\__DEFINES\preferences.dm" #include "code\__DEFINES\process_scheduler.dm" #include "code\__DEFINES\qdel.dm" +#include "code\__DEFINES\radio.dm" #include "code\__DEFINES\reagents.dm" #include "code\__DEFINES\role_preferences.dm" #include "code\__DEFINES\rolebans.dm" @@ -187,7 +188,6 @@ #include "code\ATMOSPHERICS\pipes\simple\pipe_simple_hidden.dm" #include "code\ATMOSPHERICS\pipes\simple\pipe_simple_insulated.dm" #include "code\ATMOSPHERICS\pipes\simple\pipe_simple_visible.dm" -#include "code\controllers\communications.dm" #include "code\controllers\configuration.dm" #include "code\controllers\controller.dm" #include "code\controllers\failsafe.dm" @@ -221,6 +221,7 @@ #include "code\controllers\subsystem\npcai.dm" #include "code\controllers\subsystem\npcpool.dm" #include "code\controllers\subsystem\overlays.dm" +#include "code\controllers\subsystem\radio.dm" #include "code\controllers\subsystem\shuttles.dm" #include "code\controllers\subsystem\spacedrift.dm" #include "code\controllers\subsystem\sun.dm" @@ -250,6 +251,7 @@ #include "code\datums\periodic_news.dm" #include "code\datums\pipe_datums.dm" #include "code\datums\progressbar.dm" +#include "code\datums\radio.dm" #include "code\datums\recipe.dm" #include "code\datums\ruins.dm" #include "code\datums\shuttles.dm"