mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-30 12:02:24 +00:00
* tgui the beginning * binaries and the like * Bring in the last of it * Example radio UI * delete example * NTOS Main Menu, start on manifest, tgui states * tasks.json * gunnery ui pt 1 * okay * fix everything * scss update * oops * manifest gigablast * downloader part 1 * download prt 2 * NTOSDownloader final * mfw committing to_worlds * gunnery console pt2 * i cooked * targeting (finished) * one vueui down * voting ui almost done * MY MIND FEELS LIKE AN ARCH ENEMYYYY * voting ui down * photocopier * ntos config + download fixes * photocopier 2 * refactor define * NTOS client manager + fixes * fax machine final (it also uses toner now) * marching forwards... left behind... * ntnrc part 1 * canister * add quotes * portable pumps pt1 + more backgrounds * oops * finish the portable pump * freezers so I'll keep on pushing forward... you haven't seen the last of me... oooooooh... * doors ui pt1 * finish doors UI (forgive me wildkins it's a bit of shitcode) * vitals monitor, make things use labeled lists, new backgrounds * mais j'envoyé aucun mayday... * maglock pt1 * pour ça je me suis perdu... * infrared * fix that * prox sensor pt1 * prox sensor * signaler (this was actually pretty hard) * atmos control pt1 * atmos control pt1.1 * atmos pt 2 * fuel injector * multitool UI * jammer * list viewer * APC * portgen * targeting console updates + SMES ui * new themes, shield generator * supermatter * Add ore detector and (shitty) NTNet Relay * orderterminal pt1 * orderterminal pt2 * smartfridge * Add (air-)tank GUI update ore detector size * Adds Transfer Valves * Add AtmoScrubber * analyzer pt1 * weapons analyzer pt2 * bodyscanner pt1 * bodyscanner pt2 * fix this shitcode * seed storage * appearance changer * appearance changer final * sleeper pt1 * sleeper * gps * vehicles * chem dispenser * lily request * holopad * tgui modules pt1 * ppanel * damage menu * fixes * im here too now * follow menu, search bars * quikpay * quikpay fixes * circuit printer * ppanel * ppanel updates * pai * turret controls (i want to kill myself) * tweak * remove the boardgame * guntracker * implant tracker * penal mechs come close to me, come close to me * chem codex * pai radio * doorjack * pai directives * signaler removal, sensors * ghost spawner * spawnpoint * fixes * teleporter * one more to the chopping block * account database * remove divider * scanner, atmos * latejoin ui pt1 * latejoin * records pt1 * RECORDS UI DONE * delete interpreter & records * CHAT FUCKING CLIENT * data updates * fix some things * final UI, log * basic nanoui fix * antag panel * remove vueui * atm update * vending update * warrants, cameras * ntmonitor * time comes for all * preserve this legacy * bring that back (oops) * rcon, ui auto update for computer UIs, remove rcon computers * alarm monitoring (a bit broke and also todo: add custom alarm monitoring programs to a few consoles) * A LIKE SUPREME * a * power monitor * lights on * fuck this code, fuck nanoui modules, and fuck nanoui * LEAVE IT OH SO FAR BEHIND * fix alarm monitoring for synths * I SAW IN YOU WHAT LIFE WAS MISSING * comms console * idcard and record updates * turn the light on * arcade * pt2 * news browser * static * crusher * f * COULD I JUST SLEIGH THE GOLD FROM THE BALLS? I'M SO FRUSTRATED OH COULD YOU TELL? IF I HEAR ONE MORE VUEUI OR ONE NANOUI I'M GONNA LOSE IT SO LET ME GOOOOOOOOOOOOOOOOO * codeowners & suit sensors * html ui style removal * make lint happy * tgchat * tgpanels pt1 * THE SOUL LONGS FOR OBLIVION!!!!!!!!!!!!!!!!! * figure out why stat isnt working * goodbye ping * shhh * stat updates * An oath sworn in scors! Omni vortex lies! * final almost edits * fix that * last skin adjustments * resist and disorder * i slowly get up and turn off the noise, already fed up... * pleaseeeeeeeeeeeeeee * THE CREDIT LARP IS NECESSARY * i hold the keys * RISE UP * fix that? * harry's suggestions xoxo * runtime fix pt2 * You are the only thing that I still care about * fix runtimes and cl * whoops * misc fixes * fix that too * adds build workflow * f * Update update_tgui.yml * adds some needed steps * ATM * misc fixes and tweaks * fixes 2 * make newscasters usable and fix use power on freezers * turret control is clearer * remove duplicate * makes some verb tabs work properly * makes verbs work properly for real * sans moi * fixes pt2 * fix the chat unnecessarily reloading * fixes * epic * fixes * fix missing consoles --------- Co-authored-by: John Wildkins <john.wildkins@gmail.com> Co-authored-by: Matt Atlas <liermattia@gmail.com> Co-authored-by: harryob <55142896+harryob@users.noreply.github.com> Co-authored-by: Werner <Arrow768@users.noreply.github.com> Co-authored-by: Geeves <ggrobler447@gmail.com> Co-authored-by: harryob <me@harryob.live>
256 lines
8.3 KiB
Plaintext
256 lines
8.3 KiB
Plaintext
/*
|
|
HOW IT WORKS
|
|
|
|
SSradio is a subsystem responsible for 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.
|
|
|
|
*/
|
|
|
|
/*
|
|
Frequency range: 1200 to 1600
|
|
Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency, even during mapmaking)
|
|
|
|
Radio:
|
|
1459 - standard radio chat
|
|
1351 - Science
|
|
1353 - Command
|
|
1355 - Medical
|
|
1357 - Engineering
|
|
1359 - Security
|
|
1341 - deathsquad
|
|
1443 - Confession Intercom
|
|
1347 - Cargo techs
|
|
1349 - Service people
|
|
|
|
Devices:
|
|
1451 - tracking implant
|
|
1457 - RSD default
|
|
|
|
On the map:
|
|
1311 for prison shuttle console (in fact, it is not used)
|
|
1435 for status displays
|
|
1437 for atmospherics/fire alerts
|
|
1438 for engine components
|
|
1439 for air pumps, air scrubbers, atmo control
|
|
1441 for atmospherics - supply tanks
|
|
1443 for atmospherics - distribution loop/mixed air tank
|
|
1445 for bot nav beacons
|
|
1449 for airlock controls, electropack, magnets
|
|
1451 for toxin lab access
|
|
1453 for engineering access
|
|
1455 for AI access
|
|
*/
|
|
|
|
var/datum/controller/subsystem/radio/SSradio
|
|
|
|
/datum/controller/subsystem/radio
|
|
name = "Radio"
|
|
flags = SS_NO_FIRE | SS_NO_INIT
|
|
|
|
var/list/datum/radio_frequency/frequencies = list()
|
|
|
|
/datum/controller/subsystem/radio/New()
|
|
NEW_SS_GLOBAL(SSradio)
|
|
|
|
/datum/controller/subsystem/radio/stat_entry(msg)
|
|
msg = "F:[frequencies.len]"
|
|
return ..()
|
|
|
|
/datum/controller/subsystem/radio/proc/add_object(obj/device, new_frequency, filter = 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)
|
|
|
|
/datum/controller/subsystem/radio/proc/remove_object_all(obj/device)
|
|
for(var/freq in frequencies)
|
|
SSradio.remove_object(device, text2num(freq))
|
|
|
|
/datum/controller/subsystem/radio/proc/get_devices(freq, filter = RADIO_DEFAULT)
|
|
var/datum/radio_frequency/frequency = frequencies[num2text(freq)]
|
|
if(!frequency)
|
|
return
|
|
|
|
return frequency.devices["[filter]"]
|
|
|
|
/datum/controller/subsystem/radio/proc/return_frequency(new_frequency)
|
|
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
|
|
|
|
// Used to test connectivity to the telecomms network.
|
|
/datum/controller/subsystem/radio/proc/telecomms_ping(obj/O, test_freq = PUB_FREQ)
|
|
var/datum/signal/subspace/testsig = new(O, test_freq)
|
|
for (var/obj/machinery/telecomms/R in SSmachinery.all_receivers)
|
|
if(R.receive_range(testsig) >= 0)
|
|
return TRUE
|
|
|
|
// Some misc procs not technically part of the subsystem, but are related.
|
|
|
|
//callback used by objects to react to incoming radio signals
|
|
/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
|
|
return null
|
|
|
|
/proc/frequency_span_class(var/frequency)
|
|
var/fstr = "[frequency]"
|
|
// Antags!
|
|
if (ANTAG_FREQS_ASSOC[fstr])
|
|
return "syndradio"
|
|
|
|
// centcomm channels (deathsquid and ert)
|
|
if(CENT_FREQS_ASSOC[fstr])
|
|
return "centradio"
|
|
|
|
// department radio formatting
|
|
switch (frequency)
|
|
if (COMM_FREQ) // command
|
|
return "comradio"
|
|
if (AI_FREQ) // AI Private
|
|
return "airadio"
|
|
if (SEC_FREQ,SEC_I_FREQ)
|
|
return "secradio"
|
|
if (PEN_FREQ)
|
|
return "penradio"
|
|
if (ENG_FREQ)
|
|
return "engradio"
|
|
if (SCI_FREQ)
|
|
return "sciradio"
|
|
if (MED_FREQ,MED_I_FREQ)
|
|
return"medradio"
|
|
if (SUP_FREQ) // cargo
|
|
return "supradio"
|
|
if (SRV_FREQ) // service
|
|
return "srvradio"
|
|
if (ENT_FREQ) //entertainment
|
|
return "entradio"
|
|
if (BLSP_FREQ)
|
|
return "bluespaceradio"
|
|
if (HAIL_FREQ)
|
|
return "hailradio"
|
|
|
|
if(DEPT_FREQS_ASSOC[fstr])
|
|
return "deptradio"
|
|
|
|
for(var/channel in AWAY_FREQS_ASSIGNED)
|
|
if(AWAY_FREQS_ASSIGNED[channel] == frequency)
|
|
return "shipradio"
|
|
|
|
return "radio"
|
|
|
|
/proc/update_away_freq(old_channel, new_channel)
|
|
if(!old_channel || !new_channel || !(old_channel in AWAY_FREQS_ASSIGNED))
|
|
return FALSE
|
|
|
|
var/freq = AWAY_FREQS_ASSIGNED[old_channel]
|
|
var/datum/radio_frequency/RF = SSradio.return_frequency(freq)
|
|
|
|
if(old_channel == new_channel)
|
|
return istype(RF) ? RF : assign_away_freq(new_channel)
|
|
|
|
LAZYREPLACEKEY(AWAY_FREQS_ASSIGNED, old_channel, new_channel)
|
|
LAZYREPLACEKEY(radiochannels, old_channel, new_channel)
|
|
LAZYREPLACEKEY(ALL_RADIO_CHANNELS, old_channel, new_channel)
|
|
reverseradiochannels["[freq]"] = new_channel
|
|
|
|
for(var/obj/item/device/radio/R in RF.devices[RADIO_CHAT])
|
|
var/obj/item/device/radio/headset/H = R
|
|
if(istype(H))
|
|
for(var/obj/item/device/encryptionkey/EK in list(H.keyslot1, H.keyslot2))
|
|
if(old_channel in EK.channels)
|
|
LAZYREPLACEKEY(EK.channels, old_channel, new_channel)
|
|
|
|
H.recalculateChannels(TRUE)
|
|
|
|
else if(old_channel in R.channels)
|
|
LAZYREPLACEKEY(R.channels, old_channel, new_channel)
|
|
LAZYREPLACEKEY(R.secure_radio_connections, old_channel, new_channel)
|
|
|
|
/proc/assign_away_freq(channel)
|
|
if (!AWAY_FREQS_UNASSIGNED.len)
|
|
return FALSE
|
|
|
|
if (channel in AWAY_FREQS_ASSIGNED)
|
|
return AWAY_FREQS_ASSIGNED[channel]
|
|
|
|
var/freq = pick_n_take(AWAY_FREQS_UNASSIGNED)
|
|
AWAY_FREQS_ASSIGNED[channel] = freq
|
|
radiochannels[channel] = freq
|
|
reverseradiochannels["[freq]"] = channel
|
|
ALL_RADIO_CHANNELS[channel] = TRUE
|
|
|
|
return freq
|