mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-30 00:21:11 +01:00
Fixes https://github.com/Aurorastation/Aurora.3/issues/21944 Spiritual successor of https://github.com/Aurorastation/Aurora.3/pull/22352 Cherrypicked changes from the C3 Crew Management branch, this PR contains all NTNet extensibility features, including Field Relay construction, off-site camera usage (contingent on standing up remote hardware and being out of jamming), etc. This also fixes a handful of outstanding telecomms and view/mobeye-related bugs adjacent to where I was working. changes: - rscadd: "Adds NTNet extensibility, requires new machinery constructed on away-site z-levels." - rscadd: "Breaks NTNet Relay machinery into Quantum Relay ('core' obj on Horizon) and Field Relay (deployable off-site constructions)." - qol: "Embedded cameras (basically every video camera EXCEPT those which are installed on walls) can now be viewed from NTNet-connected z-level, not just connected ones." - rscadd: "Adds several public camera monitor consoles to the Horizon (near where public sensor grid feed consoles already exist)." - rscadd: "Adds some spare camera console boards to Horizon technical storage." - qol: "Adds action button for 'cancel-camera-view' verb while viewing cameras or looking up/down z-level." - bugfix: "Fixes Jockey comms (frequency was missing from ANTAG_FREQS)." - bugfix: "Fixes look-up/look-down actions intermittently failing without first using cancel-camera-view."
147 lines
5.5 KiB
Plaintext
147 lines
5.5 KiB
Plaintext
GLOBAL_VAR_INIT(ntnet_card_uid, 1)
|
|
|
|
/obj/item/computer_hardware/network_card
|
|
name = "basic NTNet network card"
|
|
desc = "A basic network card for usage with standard NTNet frequencies."
|
|
power_usage = 25
|
|
origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 1)
|
|
critical = FALSE
|
|
icon_state = "netcard_basic"
|
|
hardware_size = 1
|
|
/// Identification ID. Technically MAC address of this device. Can't be changed by user.
|
|
var/identification_id
|
|
/// Identification string, technically nickname seen in the network. Can be set by user.
|
|
var/identification_string = ""
|
|
var/long_range = FALSE
|
|
/// Hard-wired, therefore always on, ignores NTNet wireless checks.
|
|
var/ethernet = FALSE
|
|
/// integrated signaler - not present on basic model.
|
|
var/obj/item/integrated_signaler/signal/sradio = FALSE
|
|
/// second receiver for NTOS signaler software.
|
|
var/obj/item/integrated_signaler/signal/secondary_sradio = FALSE
|
|
/// transmitter for NTOS signaler software.
|
|
var/obj/item/integrated_signaler/signal/transmit_sradio = FALSE
|
|
malfunction_probability = 1
|
|
|
|
/obj/item/computer_hardware/network_card/diagnostics(mob/user)
|
|
..()
|
|
to_chat(user, SPAN_NOTICE("NIX Unique ID: [identification_id]"))
|
|
to_chat(user, SPAN_NOTICE("NIX User Tag: [identification_string]"))
|
|
to_chat(user, SPAN_NOTICE("Supported protocols:"))
|
|
to_chat(user, SPAN_NOTICE("511.m SFS (Subspace) - Standard Frequency Spread"))
|
|
if(sradio)
|
|
to_chat(user, SPAN_NOTICE("511.s WFS (Subspace) - Wide Frequency Spread / Signaling"))
|
|
if(long_range)
|
|
to_chat(user, SPAN_NOTICE("511.n HB (Subspace) - High Bandwidth / Long Range"))
|
|
if(ethernet)
|
|
to_chat(user, SPAN_NOTICE("OpenEth (Physical Connection) - Physical Network Connection Port"))
|
|
|
|
/obj/item/computer_hardware/network_card/Initialize()
|
|
. = ..()
|
|
identification_id = GLOB.ntnet_card_uid
|
|
GLOB.ntnet_card_uid++
|
|
|
|
/obj/item/computer_hardware/network_card/signaler
|
|
name = "NTNet signaler network card"
|
|
desc = "An upgraded version of the basic network card, capable of transmitting and receiving over NTNet as well as custom frequencies."
|
|
power_usage = 75
|
|
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 1)
|
|
|
|
/obj/item/computer_hardware/network_card/signaler/Initialize()
|
|
. = ..()
|
|
initialize_signaler_radios()
|
|
|
|
/obj/item/computer_hardware/network_card/advanced
|
|
name = "advanced NTNet network card"
|
|
desc = "An advanced network card for usage with standard NTNet frequencies. Its transmitter can sustain high-bandwidth links to nearby NTNet relays."
|
|
long_range = TRUE
|
|
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 2)
|
|
power_usage = 150 // Better range but higher power usage.
|
|
icon_state = "netcard_advanced"
|
|
hardware_size = 2
|
|
|
|
/obj/item/computer_hardware/network_card/advanced/Initialize()
|
|
. = ..()
|
|
initialize_signaler_radios()
|
|
|
|
/obj/item/computer_hardware/network_card/wired
|
|
name = "wired NTNet network card"
|
|
desc = "An advanced network card for usage with standard NTNet frequencies. This one also supports wired connection."
|
|
ethernet = TRUE
|
|
origin_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 3)
|
|
power_usage = 150 // Better range but higher power usage.
|
|
icon_state = "netcard_ethernet"
|
|
hardware_size = 3
|
|
|
|
/obj/item/computer_hardware/network_card/wired/Initialize()
|
|
. = ..()
|
|
initialize_signaler_radios()
|
|
|
|
/obj/item/computer_hardware/network_card/proc/initialize_signaler_radios()
|
|
if(!sradio)
|
|
sradio = new /obj/item/integrated_signaler/signal/network_card(src)
|
|
sradio.set_listening(FALSE)
|
|
if(!secondary_sradio)
|
|
secondary_sradio = new /obj/item/integrated_signaler/signal/network_card(src)
|
|
secondary_sradio.set_listening(FALSE)
|
|
if(!transmit_sradio)
|
|
transmit_sradio = new /obj/item/integrated_signaler/signal/network_card(src)
|
|
transmit_sradio.set_listening(FALSE)
|
|
|
|
/obj/item/computer_hardware/network_card/proc/get_signaler_radio(var/channel = 1)
|
|
if(channel == 0)
|
|
return transmit_sradio
|
|
if(channel == 2)
|
|
return secondary_sradio
|
|
return sradio
|
|
|
|
/obj/item/computer_hardware/network_card/proc/receive_signaler_signal(var/obj/item/integrated_signaler/signal/receiver, var/datum/signal/signal)
|
|
if(!parent_computer || !parent_computer.enabled || !enabled || !check_functionality())
|
|
return FALSE
|
|
|
|
var/channel
|
|
if(receiver == sradio)
|
|
channel = 1
|
|
else if(receiver == secondary_sradio)
|
|
channel = 2
|
|
else
|
|
return FALSE
|
|
|
|
if(istype(parent_computer.active_program, /datum/computer_file/program/signaler))
|
|
var/datum/computer_file/program/signaler/active_signaler = parent_computer.active_program
|
|
active_signaler.receive_signal(channel, signal)
|
|
|
|
for(var/datum/computer_file/program/signaler/signaler_program in parent_computer.idle_threads)
|
|
signaler_program.receive_signal(channel, signal)
|
|
|
|
return TRUE
|
|
|
|
/// Returns a string identifier of this network card
|
|
/obj/item/computer_hardware/network_card/proc/get_network_tag()
|
|
return "[identification_string] (NID [identification_id])"
|
|
|
|
/// 0 - No signal, 1 - Low signal, 2 - High signal. 3 - Wired Connection
|
|
/obj/item/computer_hardware/network_card/proc/get_signal(var/specific_action = 0)
|
|
if(!parent_computer) // Hardware is not installed in anything. No signal. How did this even get called?
|
|
return 0
|
|
if(!enabled)
|
|
return 0
|
|
if(!check_functionality())
|
|
return 0
|
|
if(!GLOB.ntnet_global)
|
|
return 0
|
|
|
|
return GLOB.ntnet_global.get_signal_for_endpoint(parent_computer, specific_action, ethernet, long_range)
|
|
|
|
/obj/item/computer_hardware/network_card/Destroy()
|
|
if(sradio)
|
|
QDEL_NULL(sradio)
|
|
if(secondary_sradio)
|
|
QDEL_NULL(secondary_sradio)
|
|
if(transmit_sradio)
|
|
QDEL_NULL(transmit_sradio)
|
|
if(parent_computer?.network_card == src)
|
|
parent_computer.network_card = null
|
|
parent_computer = null
|
|
return ..()
|