SScommunications

This commit is contained in:
AffectedArc07
2019-04-21 19:28:41 +01:00
parent a0581c314a
commit ff78ff1a9c
42 changed files with 447 additions and 517 deletions
@@ -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)
@@ -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)
@@ -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)
@@ -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()
..()
@@ -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)
@@ -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)
@@ -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()
..()
@@ -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)
@@ -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 ..()
@@ -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
+60
View File
@@ -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"
-345
View File
@@ -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"
+99
View File
@@ -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
+1 -1
View File
@@ -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)
+114
View File
@@ -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
+2 -2
View File
@@ -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
+5 -5
View File
@@ -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
+8 -8
View File
@@ -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()
..()
+1 -1
View File
@@ -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
+5 -5
View File
@@ -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 ..()
@@ -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
+2 -2
View File
@@ -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 ..()
+13 -13
View File
@@ -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 ..()
+4 -4
View File
@@ -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)
@@ -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)
+5 -5
View File
@@ -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 ..()
+6 -6
View File
@@ -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 ..()
+4 -4
View File
@@ -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()
+11 -11
View File
@@ -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 = " <i>(Intercepted)</i>"
var/part_a = "<span class='[frequency_span_class(display_freq)]'><b>\[[freq_text]\][part_b_extra]</b> <span class='name'>" // goes in the actual output
var/part_a = "<span class='[SSradio.frequency_span_class(display_freq)]'><b>\[[freq_text]\][part_b_extra]</b> <span class='name'>" // goes in the actual output
// --- Some more pre-message formatting ---
var/part_b = "</span> <span class='message'>" // 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 = "<span class='[frequency_span_class(display_freq)]'><span class='name'>" // goes in the actual output
var/part_a = "<span class='[SSradio.frequency_span_class(display_freq)]'><span class='name'>" // goes in the actual output
var/freq_text = get_frequency_name(display_freq)
// --- Some more pre-message formatting ---
@@ -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()
@@ -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
+18 -18
View File
@@ -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
+2 -2
View File
@@ -83,9 +83,9 @@
"_default" = "NO_FILTER"
)
var/output = "<b>Radio Report</b><hr>"
for(var/fq in radio_controller.frequencies)
for(var/fq in SSradio.frequencies)
output += "<b>Freq: [fq]</b><br>"
var/list/datum/radio_frequency/fqs = radio_controller.frequencies[fq]
var/list/datum/radio_frequency/fqs = SSradio.frequencies[fq]
if(!fqs)
output += "&nbsp;&nbsp;<b>ERROR</b><br>"
continue
+8 -8
View File
@@ -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
+1 -1
View File
@@ -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 = "<span class='[frequency_span_class(PUB_FREQ)]'><b>\[[get_frequency_name(PUB_FREQ)]\]</b> <span class='name'>", part_b = "</span> <span class='message'>")
target.hear_radio(message_to_multilingual(pick(radio_messages), pick(person.languages)), speaker = person, part_a = "<span class='[SSradio.frequency_span_class(PUB_FREQ)]'><b>\[[get_frequency_name(PUB_FREQ)]\]</b> <span class='name'>", part_b = "</span> <span class='message'>")
qdel(src)
/obj/effect/hallucination/message
+5 -5
View File
@@ -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 ..()
@@ -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
+1 -1
View File
@@ -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
+10 -10
View File
@@ -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")
+4 -4
View File
@@ -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])")
+1 -1
View File
@@ -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
+3 -1
View File
@@ -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"