* Maps and things no code/icons * helpers defines globalvars * Onclick world.dm orphaned_procs * subsystems Round vote and shuttle autocall done here too * datums * Game folder * Admin - chatter modules * clothing - mining * modular computers - zambies * client * mob level 1 * mob stage 2 + simple_animal * silicons n brains * mob stage 3 + Alien/Monkey * human mobs * icons updated * some sounds * emitter y u no commit * update tgstation.dme * compile fixes * travis fixes Also removes Fast digest mode, because reasons. * tweaks for travis Mentors are broke again Also fixes Sizeray guns * oxygen loss fix for vore code. * removes unused code * some code updates * bulk fixes * further fixes * outside things * whoops. * Maint bar ported * GLOBs.
152 lines
3.5 KiB
Plaintext
152 lines
3.5 KiB
Plaintext
#define AIRLOCK_CONTROL_RANGE 5
|
|
|
|
// This code allows for airlocks to be controlled externally by setting an id_tag and comm frequency (disables ID access)
|
|
/obj/machinery/door/airlock
|
|
var/id_tag
|
|
var/frequency
|
|
var/datum/radio_frequency/radio_connection
|
|
|
|
|
|
/obj/machinery/door/airlock/receive_signal(datum/signal/signal)
|
|
if(!signal || signal.encryption) return
|
|
|
|
if(id_tag != signal.data["tag"] || !signal.data["command"]) return
|
|
|
|
switch(signal.data["command"])
|
|
if("open")
|
|
open(1)
|
|
|
|
if("close")
|
|
close(1)
|
|
|
|
if("unlock")
|
|
locked = 0
|
|
update_icon()
|
|
|
|
if("lock")
|
|
locked = 1
|
|
update_icon()
|
|
|
|
if("secure_open")
|
|
locked = 0
|
|
update_icon()
|
|
|
|
sleep(2)
|
|
open(1)
|
|
|
|
locked = 1
|
|
update_icon()
|
|
|
|
if("secure_close")
|
|
locked = 0
|
|
close(1)
|
|
|
|
locked = 1
|
|
sleep(2)
|
|
update_icon()
|
|
|
|
send_status()
|
|
|
|
|
|
/obj/machinery/door/airlock/proc/send_status()
|
|
if(radio_connection)
|
|
var/datum/signal/signal = new
|
|
signal.transmission_method = 1 //radio signal
|
|
signal.data["tag"] = id_tag
|
|
signal.data["timestamp"] = world.time
|
|
|
|
signal.data["door_status"] = density?("closed"):("open")
|
|
signal.data["lock_status"] = locked?("locked"):("unlocked")
|
|
|
|
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK)
|
|
|
|
|
|
/obj/machinery/door/airlock/open(surpress_send)
|
|
. = ..()
|
|
if(!surpress_send) send_status()
|
|
|
|
|
|
/obj/machinery/door/airlock/close(surpress_send)
|
|
. = ..()
|
|
if(!surpress_send) send_status()
|
|
|
|
|
|
/obj/machinery/door/airlock/proc/set_frequency(new_frequency)
|
|
SSradio.remove_object(src, frequency)
|
|
if(new_frequency)
|
|
frequency = new_frequency
|
|
radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_AIRLOCK)
|
|
|
|
/obj/machinery/door/airlock/Destroy()
|
|
if(frequency && SSradio)
|
|
SSradio.remove_object(src,frequency)
|
|
return ..()
|
|
|
|
/obj/machinery/airlock_sensor
|
|
icon = 'icons/obj/airlock_machines.dmi'
|
|
icon_state = "airlock_sensor_off"
|
|
name = "airlock sensor"
|
|
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
|
|
|
anchored = 1
|
|
power_channel = ENVIRON
|
|
|
|
var/id_tag
|
|
var/master_tag
|
|
var/frequency = 1449
|
|
|
|
var/datum/radio_frequency/radio_connection
|
|
|
|
var/on = 1
|
|
var/alert = 0
|
|
|
|
|
|
/obj/machinery/airlock_sensor/update_icon()
|
|
if(on)
|
|
if(alert)
|
|
icon_state = "airlock_sensor_alert"
|
|
else
|
|
icon_state = "airlock_sensor_standby"
|
|
else
|
|
icon_state = "airlock_sensor_off"
|
|
|
|
/obj/machinery/airlock_sensor/attack_hand(mob/user)
|
|
var/datum/signal/signal = new
|
|
signal.transmission_method = 1 //radio signal
|
|
signal.data["tag"] = master_tag
|
|
signal.data["command"] = "cycle"
|
|
|
|
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK)
|
|
flick("airlock_sensor_cycle", src)
|
|
|
|
/obj/machinery/airlock_sensor/process()
|
|
if(on)
|
|
var/datum/signal/signal = new
|
|
signal.transmission_method = 1 //radio signal
|
|
signal.data["tag"] = id_tag
|
|
signal.data["timestamp"] = world.time
|
|
|
|
var/datum/gas_mixture/air_sample = return_air()
|
|
|
|
var/pressure = round(air_sample.return_pressure(),0.1)
|
|
alert = (pressure < ONE_ATMOSPHERE*0.8)
|
|
|
|
signal.data["pressure"] = num2text(pressure)
|
|
|
|
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK)
|
|
|
|
update_icon()
|
|
|
|
/obj/machinery/airlock_sensor/proc/set_frequency(new_frequency)
|
|
SSradio.remove_object(src, frequency)
|
|
frequency = new_frequency
|
|
radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_AIRLOCK)
|
|
|
|
/obj/machinery/airlock_sensor/Initialize()
|
|
..()
|
|
set_frequency(frequency)
|
|
|
|
/obj/machinery/airlock_sensor/Destroy()
|
|
if(SSradio)
|
|
SSradio.remove_object(src,frequency)
|
|
return ..() |