mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 19:17:50 +01:00
[READY] Atmos Refactor Part 7 (I think) - Kills signals + TGUIs stuff (#19867)
* I AM NOT A KING. I AM NOT A GOD. I AM LUNACY. * THE SCOPE CREEP * This was done in vi. No langserver. Send help. * Progress * Some issues fixed * The code builds, but the maps dont * CC builds, I doubt anything else does * Do this now * Safety * The map compiles * THE MAPPING HELL * Airlock controllers dont work * Fixed bombs * AND THATS FIXED * Phantom edit * Restores LL I think * The mapmerge hooks are actually retarded * Fixes spawners * Half working air control * Picky * Hyper efficient tank monitor * Sanity * Laying the framework * Improved alert console * Dont think this is actually done anywhere * Metering * ONE HUNDRED AND ~~EIGHTY~~ TWENTY SEVEN * WE ARE READY FOR BOX TO BUILD * One map done * Well that was easy * Another one * I think this is done * I should have removed this * I would make a russian joke but <current event> * Delta WIP * Makes delta work * Early review * TM safeguard * oops * METAAAAAAAAAAAAAAAAAAAAAAAAA * Fix #4213 * Trailing * oh for piss sake * Shutter fix * Roundstart ATs can go away * Review pass 1 * What could go wrong * BOOM BOOM BOOM * Not needed * Fix seed vault * Oops * Review changes
This commit is contained in:
@@ -70,16 +70,6 @@
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here.
|
||||
visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*")
|
||||
sleep(10)
|
||||
if(!src)
|
||||
return
|
||||
if(status)
|
||||
bombtank.detonate() //if its not a dud, boom (or not boom if you made shitty mix) the ignite proc is below, in this file
|
||||
else
|
||||
bombtank.release()
|
||||
|
||||
/obj/item/onetankbomb/HasProximity(atom/movable/AM)
|
||||
if(bombassembly)
|
||||
bombassembly.HasProximity(AM)
|
||||
@@ -102,7 +92,7 @@
|
||||
|
||||
// ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ----------
|
||||
|
||||
/obj/item/tank/proc/bomb_assemble(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb
|
||||
/obj/item/tank/proc/bomb_assemble(W, user) //Bomb assembly proc. This turns assembly+tank into a bomb
|
||||
var/obj/item/assembly_holder/S = W
|
||||
var/mob/M = user
|
||||
if(!S.secured) //Check if the assembly is secured
|
||||
@@ -127,7 +117,7 @@
|
||||
return
|
||||
|
||||
/obj/item/tank/proc/detonate() //This happens when a bomb is told to explode
|
||||
var/fuel_moles = air_contents.toxins + air_contents.oxygen/6
|
||||
var/fuel_moles = air_contents.toxins + air_contents.oxygen / 6
|
||||
var/strength = 1
|
||||
|
||||
var/turf/ground_zero = get_turf(loc)
|
||||
|
||||
@@ -199,6 +199,5 @@
|
||||
a_right.pulsed(0)
|
||||
if(a_left && a_left != D) // the right pools might have sent us boom, so `a_left` can be null here
|
||||
a_left.pulsed(0)
|
||||
if(master)
|
||||
master.receive_signal()
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -38,11 +38,20 @@
|
||||
if(tank)
|
||||
tank.boom(TRUE) // this qdel's `src`
|
||||
|
||||
if(istype(locloc, /obj/item/onetankbomb))
|
||||
var/obj/item/onetankbomb/bomb = locloc
|
||||
if(bomb?.bombtank)
|
||||
bomb.bombtank.detonate()
|
||||
|
||||
else if(istype(locloc, /obj/item/reagent_containers/glass/beaker))
|
||||
var/obj/item/reagent_containers/glass/beaker/beakerbomb = locloc
|
||||
if(beakerbomb)
|
||||
beakerbomb.heat_beaker()
|
||||
|
||||
else if(istype(locloc, /obj/item/grenade/chem_grenade))
|
||||
var/obj/item/grenade/chem_grenade/CG = locloc
|
||||
CG.prime()
|
||||
|
||||
return TRUE
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
return 0
|
||||
|
||||
/turf/return_air()
|
||||
RETURN_TYPE(/datum/gas_mixture)
|
||||
//Create gas mixture to hold data for passing
|
||||
var/datum/gas_mixture/GM = new
|
||||
|
||||
@@ -99,6 +100,7 @@
|
||||
air.copy_from(copy)
|
||||
|
||||
/turf/simulated/return_air()
|
||||
RETURN_TYPE(/datum/gas_mixture)
|
||||
if(air)
|
||||
return air
|
||||
|
||||
|
||||
@@ -64,10 +64,8 @@
|
||||
//all air alarms in area are connected via magic
|
||||
/area
|
||||
var/obj/machinery/alarm/master_air_alarm
|
||||
var/list/air_vent_names = list()
|
||||
var/list/air_scrub_names = list()
|
||||
var/list/air_vent_info = list()
|
||||
var/list/air_scrub_info = list()
|
||||
var/list/obj/machinery/atmospherics/unary/vent_pump/vents = list()
|
||||
var/list/obj/machinery/atmospherics/unary/vent_scrubber/scrubbers = list()
|
||||
|
||||
/obj/machinery/alarm
|
||||
name = "air alarm"
|
||||
@@ -85,11 +83,9 @@
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30)
|
||||
resistance_flags = FIRE_PROOF
|
||||
siemens_strength = 1
|
||||
frequency = ATMOS_VENTSCRUB
|
||||
var/custom_name
|
||||
var/alarm_id = null
|
||||
//var/skipprocess = 0 //Experimenting
|
||||
var/alarm_frequency = ATMOS_FIRE_FREQ
|
||||
var/remote_control = TRUE
|
||||
var/rcon_setting = RCON_AUTO
|
||||
var/rcon_time = 0
|
||||
@@ -100,13 +96,8 @@
|
||||
var/AAlarmwires = 31
|
||||
var/shorted = FALSE
|
||||
|
||||
// Waiting on a device to respond.
|
||||
// Specifies an id_tag. NULL means we aren't waiting.
|
||||
var/waiting_on_device = null
|
||||
|
||||
var/mode = AALARM_MODE_SCRUBBING
|
||||
var/preset = AALARM_PRESET_HUMAN
|
||||
var/area_uid
|
||||
var/area/alarm_area
|
||||
var/danger_level = ATMOS_ALARM_NONE
|
||||
var/alarmActivated = 0 // Manually activated (independent from danger level)
|
||||
@@ -215,19 +206,16 @@
|
||||
mode = AALARM_MODE_REPLACEMENT
|
||||
apply_mode()
|
||||
|
||||
/obj/machinery/alarm/New(loc, direction, building = 0)
|
||||
/obj/machinery/alarm/Initialize(mapload, direction, building = 0)
|
||||
. = ..()
|
||||
if(building) // Do this first since the Init uses this later on. TODO refactor to just use an Init
|
||||
if(loc)
|
||||
src.loc = loc
|
||||
|
||||
if(dir)
|
||||
if(direction)
|
||||
setDir(direction)
|
||||
|
||||
buildstage = 0
|
||||
wiresexposed = TRUE
|
||||
set_pixel_offsets_from_dir(-24, 24, -24, 24)
|
||||
|
||||
. = ..()
|
||||
GLOB.air_alarms += src
|
||||
GLOB.air_alarms = sortAtom(GLOB.air_alarms)
|
||||
|
||||
@@ -239,9 +227,6 @@
|
||||
/obj/machinery/alarm/Destroy()
|
||||
SStgui.close_uis(wires)
|
||||
GLOB.air_alarms -= src
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
GLOB.air_alarm_repository.update_cache(src)
|
||||
QDEL_NULL(wires)
|
||||
if(alarm_area && alarm_area.master_air_alarm == src)
|
||||
@@ -252,15 +237,13 @@
|
||||
|
||||
/obj/machinery/alarm/proc/first_run()
|
||||
alarm_area = get_area(src)
|
||||
area_uid = alarm_area.uid
|
||||
if(!custom_name)
|
||||
name = "[alarm_area.name] Air Alarm"
|
||||
apply_preset(1) // Don't cycle.
|
||||
apply_preset(AALARM_PRESET_HUMAN) // Don't cycle.
|
||||
GLOB.air_alarm_repository.update_cache(src)
|
||||
|
||||
/obj/machinery/alarm/Initialize(mapload)
|
||||
. = ..()
|
||||
set_frequency(frequency)
|
||||
if(!master_is_operating())
|
||||
elect_master()
|
||||
|
||||
@@ -391,7 +374,10 @@
|
||||
icon_state = "alarmp"
|
||||
return
|
||||
|
||||
switch(max(danger_level, alarm_area.atmosalm-1))
|
||||
if(!alarm_area) // We wont have our alarm_area if we aint initialised
|
||||
return
|
||||
|
||||
switch(max(danger_level, alarm_area.atmosalm - 1))
|
||||
if(ATMOS_ALARM_NONE)
|
||||
icon_state = "alarm0"
|
||||
if(ATMOS_ALARM_WARNING)
|
||||
@@ -408,200 +394,161 @@
|
||||
|
||||
underlays += emissive_appearance(icon, "alarm_lightmask")
|
||||
|
||||
/obj/machinery/alarm/proc/register_env_machine(m_id, device_type)
|
||||
var/new_name
|
||||
if(device_type=="AVP")
|
||||
new_name = "[alarm_area.name] Vent Pump #[alarm_area.air_vent_names.len+1]"
|
||||
alarm_area.air_vent_names[m_id] = new_name
|
||||
else if(device_type=="AScr")
|
||||
new_name = "[alarm_area.name] Air Scrubber #[alarm_area.air_scrub_names.len+1]"
|
||||
alarm_area.air_scrub_names[m_id] = new_name
|
||||
else
|
||||
return
|
||||
spawn (10)
|
||||
send_signal(m_id, list("init" = new_name) )
|
||||
|
||||
/obj/machinery/alarm/proc/refresh_all()
|
||||
for(var/id_tag in alarm_area.air_vent_names)
|
||||
var/list/I = alarm_area.air_vent_info[id_tag]
|
||||
if(I && I["timestamp"]+AALARM_REPORT_TIMEOUT/2 > world.time)
|
||||
continue
|
||||
send_signal(id_tag, list("status") )
|
||||
for(var/id_tag in alarm_area.air_scrub_names)
|
||||
var/list/I = alarm_area.air_scrub_info[id_tag]
|
||||
if(I && I["timestamp"]+AALARM_REPORT_TIMEOUT/2 > world.time)
|
||||
continue
|
||||
send_signal(id_tag, list("status") )
|
||||
|
||||
/obj/machinery/alarm/set_frequency(new_frequency)
|
||||
SSradio.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = SSradio.add_object(src, frequency, RADIO_TO_AIRALARM)
|
||||
|
||||
/obj/machinery/alarm/proc/send_signal(target, list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise
|
||||
if(!radio_connection)
|
||||
return 0
|
||||
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 //radio signal
|
||||
signal.source = src
|
||||
|
||||
signal.data = command
|
||||
signal.data["tag"] = target
|
||||
signal.data["sigtype"] = "command"
|
||||
|
||||
radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/alarm/proc/apply_mode()
|
||||
switch(mode)
|
||||
if(AALARM_MODE_SCRUBBING)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"o2_scrub" = (preset == AALARM_PRESET_VOX),
|
||||
"n2_scrub" = FALSE,
|
||||
"co2_scrub" = TRUE,
|
||||
"tox_scrub" = FALSE,
|
||||
"n2o_scrub" = FALSE,
|
||||
"scrubbing" = TRUE,
|
||||
"widenet" = FALSE,
|
||||
))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"checks" = TRUE,
|
||||
"set_external_pressure" = ONE_ATMOSPHERE
|
||||
))
|
||||
for(var/obj/machinery/atmospherics/unary/vent_scrubber/S as anything in alarm_area.scrubbers)
|
||||
if(S.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
S.on = TRUE
|
||||
S.scrub_O2 = (preset == AALARM_PRESET_VOX)
|
||||
S.scrub_N2 = FALSE
|
||||
S.scrub_CO2 = TRUE
|
||||
S.scrub_Toxins = FALSE
|
||||
S.scrub_N2O = FALSE
|
||||
S.scrubbing = TRUE
|
||||
S.widenet = TRUE
|
||||
S.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/P as anything in alarm_area.vents)
|
||||
if(P.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
P.on = TRUE
|
||||
P.pressure_checks = TRUE
|
||||
P.internal_pressure_bound = ONE_ATMOSPHERE
|
||||
P.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
|
||||
if(AALARM_MODE_CONTAMINATED)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"co2_scrub" = TRUE,
|
||||
"tox_scrub" = TRUE,
|
||||
"n2o_scrub" = TRUE,
|
||||
"scrubbing" = TRUE,
|
||||
"widenet" = TRUE,
|
||||
))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"checks" = TRUE,
|
||||
"set_external_pressure" = ONE_ATMOSPHERE
|
||||
))
|
||||
for(var/obj/machinery/atmospherics/unary/vent_scrubber/S as anything in alarm_area.scrubbers)
|
||||
if(S.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
S.on = TRUE
|
||||
S.scrub_CO2 = TRUE
|
||||
S.scrub_Toxins = TRUE
|
||||
S.scrub_N2O = TRUE
|
||||
S.scrubbing = TRUE
|
||||
S.widenet = TRUE
|
||||
S.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/P as anything in alarm_area.vents)
|
||||
if(P.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
P.on = TRUE
|
||||
P.pressure_checks = TRUE
|
||||
P.external_pressure_bound = ONE_ATMOSPHERE
|
||||
P.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
|
||||
if(AALARM_MODE_VENTING)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"widenet" = FALSE,
|
||||
"scrubbing" = FALSE
|
||||
))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"checks" = TRUE,
|
||||
"set_external_pressure" = ONE_ATMOSPHERE * 2
|
||||
))
|
||||
for(var/obj/machinery/atmospherics/unary/vent_scrubber/S as anything in alarm_area.scrubbers)
|
||||
if(S.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
S.on = TRUE
|
||||
S.widenet = FALSE
|
||||
S.scrubbing = FALSE
|
||||
S.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/P as anything in alarm_area.vents)
|
||||
if(P.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
P.on = TRUE
|
||||
P.pressure_checks = TRUE
|
||||
P.external_pressure_bound = ONE_ATMOSPHERE * 2
|
||||
P.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
|
||||
if(AALARM_MODE_REFILL)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"co2_scrub" = TRUE,
|
||||
"tox_scrub" = FALSE,
|
||||
"n2o_scrub" = FALSE,
|
||||
"scrubbing" = TRUE,
|
||||
"widenet" = FALSE,
|
||||
))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"checks" = TRUE,
|
||||
"set_external_pressure" = ONE_ATMOSPHERE * 3
|
||||
))
|
||||
if(AALARM_MODE_PANIC,
|
||||
AALARM_MODE_REPLACEMENT)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"widenet" = TRUE,
|
||||
"scrubbing" = FALSE
|
||||
))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = FALSE
|
||||
))
|
||||
for(var/obj/machinery/atmospherics/unary/vent_scrubber/S as anything in alarm_area.scrubbers)
|
||||
if(S.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
S.on = TRUE
|
||||
S.scrub_CO2 = TRUE
|
||||
S.scrub_Toxins = FALSE
|
||||
S.scrub_N2O = FALSE
|
||||
S.scrubbing = TRUE
|
||||
S.widenet = FALSE
|
||||
S.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/P as anything in alarm_area.vents)
|
||||
if(P.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
P.on = TRUE
|
||||
P.pressure_checks = TRUE
|
||||
P.external_pressure_bound = ONE_ATMOSPHERE * 3
|
||||
P.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
|
||||
if(AALARM_MODE_PANIC, AALARM_MODE_REPLACEMENT)
|
||||
for(var/obj/machinery/atmospherics/unary/vent_scrubber/S as anything in alarm_area.scrubbers)
|
||||
if(S.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
S.on = TRUE
|
||||
S.widenet = TRUE
|
||||
S.scrubbing = FALSE
|
||||
S.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/P as anything in alarm_area.vents)
|
||||
if(P.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
P.on = FALSE
|
||||
P.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
|
||||
if(AALARM_MODE_SIPHON)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"widenet" = FALSE,
|
||||
"scrubbing" = FALSE
|
||||
))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = FALSE
|
||||
))
|
||||
for(var/obj/machinery/atmospherics/unary/vent_scrubber/S as anything in alarm_area.scrubbers)
|
||||
if(S.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
S.on = TRUE
|
||||
S.widenet = FALSE
|
||||
S.scrubbing = FALSE
|
||||
S.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/P as anything in alarm_area.vents)
|
||||
if(P.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
P.on = FALSE
|
||||
P.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
|
||||
if(AALARM_MODE_OFF)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = FALSE
|
||||
))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = FALSE
|
||||
))
|
||||
for(var/obj/machinery/atmospherics/unary/vent_scrubber/S as anything in alarm_area.scrubbers)
|
||||
if(S.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
S.on = FALSE
|
||||
S.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/P as anything in alarm_area.vents)
|
||||
if(P.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
P.on = FALSE
|
||||
P.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
|
||||
if(AALARM_MODE_FLOOD)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = FALSE
|
||||
))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list(
|
||||
"power" = TRUE,
|
||||
"checks" = 2,
|
||||
"set_internal_pressure" = FALSE
|
||||
))
|
||||
for(var/obj/machinery/atmospherics/unary/vent_scrubber/S as anything in alarm_area.scrubbers)
|
||||
if(S.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
S.on = FALSE
|
||||
S.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/P as anything in alarm_area.vents)
|
||||
if(P.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
P.on = TRUE
|
||||
P.pressure_checks = 2
|
||||
P.internal_pressure_bound = 0
|
||||
P.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
/obj/machinery/alarm/proc/apply_danger_level()
|
||||
var/new_area_danger_level = ATMOS_ALARM_NONE
|
||||
for(var/obj/machinery/alarm/AA in alarm_area)
|
||||
if(!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted)
|
||||
new_area_danger_level = max(new_area_danger_level, AA.danger_level)
|
||||
if(alarm_area.atmosalert(new_area_danger_level, src)) //if area was in normal state or if area was in alert state
|
||||
post_alert(new_area_danger_level)
|
||||
alarm_area.atmosalert(new_area_danger_level, src)
|
||||
|
||||
update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
/obj/machinery/alarm/proc/post_alert(alert_level)
|
||||
if(!report_danger_level)
|
||||
// Don't report the level to computers, but do toggle firedoors
|
||||
var/area/A = get_area(src)
|
||||
if(alert_level == ATMOS_ALARM_NONE)
|
||||
A.air_doors_open()
|
||||
else if(alert_level != ATMOS_ALARM_NONE)
|
||||
A.air_doors_close()
|
||||
return
|
||||
var/datum/radio_frequency/frequency = SSradio.return_frequency(alarm_frequency)
|
||||
|
||||
if(!frequency)
|
||||
return
|
||||
|
||||
var/datum/signal/alert_signal = new
|
||||
alert_signal.source = src
|
||||
alert_signal.transmission_method = 1
|
||||
alert_signal.data["zone"] = get_area_name(src, TRUE)
|
||||
alert_signal.data["type"] = "Atmospheric"
|
||||
|
||||
if(alert_level == ATMOS_ALARM_DANGER)
|
||||
alert_signal.data["alert"] = "severe"
|
||||
else if(alert_level == ATMOS_ALARM_WARNING)
|
||||
alert_signal.data["alert"] = "minor"
|
||||
else if(alert_level == ATMOS_ALARM_NONE)
|
||||
alert_signal.data["alert"] = "clear"
|
||||
|
||||
frequency.post_signal(src, alert_signal)
|
||||
|
||||
///////////////
|
||||
//END HACKING//
|
||||
///////////////
|
||||
@@ -741,29 +688,33 @@
|
||||
data["preset"] = preset
|
||||
|
||||
var/list/vents = list()
|
||||
if(alarm_area.air_vent_names.len)
|
||||
for(var/id_tag in alarm_area.air_vent_names)
|
||||
if(length(alarm_area.vents))
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/P as anything in alarm_area.vents)
|
||||
var/list/vent_info = list()
|
||||
var/long_name = alarm_area.air_vent_names[id_tag]
|
||||
var/list/vent_data = alarm_area.air_vent_info[id_tag]
|
||||
if(!vent_data)
|
||||
continue
|
||||
vent_info["id_tag"] = id_tag
|
||||
vent_info["name"] = sanitize(long_name)
|
||||
vent_info += vent_data
|
||||
vent_info["id_tag"] = P.UID()
|
||||
vent_info["name"] = sanitize(P.name)
|
||||
vent_info["power"] = P.on
|
||||
vent_info["direction"] = P.releasing ? "release" : "siphon"
|
||||
vent_info["checks"] = P.pressure_checks
|
||||
vent_info["external"] = P.external_pressure_bound
|
||||
vents += list(vent_info)
|
||||
data["vents"] = vents
|
||||
|
||||
var/list/scrubbers = list()
|
||||
if(alarm_area.air_scrub_names.len)
|
||||
for(var/id_tag in alarm_area.air_scrub_names)
|
||||
var/long_name = alarm_area.air_scrub_names[id_tag]
|
||||
var/list/scrubber_data = alarm_area.air_scrub_info[id_tag]
|
||||
if(!scrubber_data)
|
||||
continue
|
||||
scrubber_data["id_tag"] = id_tag
|
||||
scrubber_data["name"] = sanitize(long_name)
|
||||
scrubbers += list(scrubber_data)
|
||||
if(length(alarm_area.scrubbers))
|
||||
for(var/obj/machinery/atmospherics/unary/vent_scrubber/S as anything in alarm_area.scrubbers)
|
||||
var/list/scrubber_info = list()
|
||||
scrubber_info["id_tag"] = S.UID()
|
||||
scrubber_info["name"] = sanitize(S.name)
|
||||
scrubber_info["power"] = S.on
|
||||
scrubber_info["scrubbing"] = S.scrubbing
|
||||
scrubber_info["widenet"] = S.widenet
|
||||
scrubber_info["filter_o2"] = S.scrub_O2
|
||||
scrubber_info["filter_n2"] = S.scrub_N2
|
||||
scrubber_info["filter_co2"] = S.scrub_CO2
|
||||
scrubber_info["filter_toxins"] = S.scrub_Toxins
|
||||
scrubber_info["filter_n2o"] = S.scrub_N2O
|
||||
scrubbers += list(scrubber_info)
|
||||
data["scrubbers"] = scrubbers
|
||||
return data
|
||||
|
||||
@@ -873,7 +824,8 @@
|
||||
return
|
||||
|
||||
var/device_id = params["id_tag"]
|
||||
switch(params["cmd"])
|
||||
var/cmd = params["cmd"]
|
||||
switch(cmd)
|
||||
if ("power",
|
||||
"adjust_external_pressure",
|
||||
"set_external_pressure",
|
||||
@@ -888,7 +840,7 @@
|
||||
"direction")
|
||||
var/val
|
||||
if(params["val"])
|
||||
val=text2num(params["val"])
|
||||
val = text2num(params["val"])
|
||||
else
|
||||
var/newval = input("Enter new value") as num|null
|
||||
if(isnull(newval))
|
||||
@@ -900,13 +852,70 @@
|
||||
newval = 0
|
||||
val = newval
|
||||
|
||||
// For those who read this: This radio BS is what makes air alarms take 10 years to update in the UI
|
||||
send_signal(device_id, list(params["cmd"] = val))
|
||||
waiting_on_device = device_id
|
||||
// Figure out what it is
|
||||
var/obj/machinery/atmospherics/unary/U = locateUID(device_id)
|
||||
if(!U)
|
||||
return
|
||||
|
||||
if(!((U in alarm_area.vents) || (U in alarm_area.scrubbers)))
|
||||
message_admins("<span class='boldannounce'>[key_name_admin(usr)] attempted to href-exploit an air alarm to control another object!!!</span>")
|
||||
return
|
||||
|
||||
// Its a vent. Handle
|
||||
if(istype(U, /obj/machinery/atmospherics/unary/vent_pump))
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/V = U
|
||||
|
||||
if(V.stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
switch(cmd)
|
||||
if("power")
|
||||
V.on = val
|
||||
if("adjust_external_pressure")
|
||||
V.external_pressure_bound = clamp(V.external_pressure_bound + val, 0, ONE_ATMOSPHERE * 50)
|
||||
if("set_external_pressure")
|
||||
V.external_pressure_bound = clamp(val, 0, ONE_ATMOSPHERE * 50)
|
||||
if("checks")
|
||||
V.pressure_checks = val
|
||||
if("direction")
|
||||
V.releasing = val
|
||||
|
||||
V.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
// Its a scrubber. Do the same but ever so slightly similar.
|
||||
else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber))
|
||||
var/obj/machinery/atmospherics/unary/vent_scrubber/S = U
|
||||
|
||||
if(S.stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
switch(cmd)
|
||||
if("power")
|
||||
S.on = val
|
||||
if("co2_scrub")
|
||||
S.scrub_CO2 = val
|
||||
if("tox_scrub")
|
||||
S.scrub_Toxins = val
|
||||
if("n2o_scrub")
|
||||
S.scrub_N2O = val
|
||||
if("n2_scrub")
|
||||
S.scrub_N2 = val
|
||||
if("o2_scrub")
|
||||
S.scrub_O2 = val
|
||||
if("widenet")
|
||||
S.widenet = val
|
||||
if("scrubbing")
|
||||
S.scrubbing = val
|
||||
|
||||
S.update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
if("set_threshold")
|
||||
var/env = params["env"]
|
||||
var/varname = params["var"]
|
||||
if(!(varname in list("min1", "min2", "max1", "max2"))) // uh oh
|
||||
message_admins("[key_name_admin(usr)] attempted to href edit vars on [src]!!!")
|
||||
return
|
||||
|
||||
var/datum/tlv/tlv = TLV[env]
|
||||
var/newval = input("Enter [varname] for [env]", "Alarm triggers", tlv.vars[varname]) as num|null
|
||||
|
||||
@@ -925,14 +934,12 @@
|
||||
tlv.vars[varname] = newval
|
||||
|
||||
if("atmos_alarm")
|
||||
if(alarm_area.atmosalert(ATMOS_ALARM_DANGER, src))
|
||||
post_alert(ATMOS_ALARM_DANGER)
|
||||
alarm_area.atmosalert(ATMOS_ALARM_DANGER, src)
|
||||
alarmActivated = TRUE
|
||||
update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
if("atmos_reset")
|
||||
if(alarm_area.atmosalert(ATMOS_ALARM_NONE, src, TRUE))
|
||||
post_alert(ATMOS_ALARM_NONE)
|
||||
alarm_area.atmosalert(ATMOS_ALARM_NONE, src, TRUE)
|
||||
alarmActivated = FALSE
|
||||
update_icon(UPDATE_ICON_STATE)
|
||||
|
||||
|
||||
@@ -44,6 +44,9 @@ Pipelines + Other Objects -> Pipe network
|
||||
/// Pipe image, not used for all subtypes
|
||||
var/image/pipe_image
|
||||
|
||||
/// ID for automatic linkage of stuff. This is used to assist in connections at mapload. Dont try use it for other stuff
|
||||
var/autolink_id = null
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -74,12 +77,6 @@ Pipelines + Other Objects -> Pipe network
|
||||
QDEL_NULL(pipe_image) //we have to qdel it, or it might keep a ref somewhere else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/set_frequency(new_frequency)
|
||||
SSradio.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
if(frequency)
|
||||
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
|
||||
|
||||
// Icons/overlays/underlays
|
||||
/obj/machinery/atmospherics/update_icon()
|
||||
if(check_icon_cache())
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
//node2 is output port
|
||||
//node1 is input port
|
||||
|
||||
req_one_access_txt = "24;10"
|
||||
|
||||
name = "dual-port air vent"
|
||||
desc = "Has a valve and pump attached to it. There are two ports."
|
||||
|
||||
@@ -22,34 +20,11 @@
|
||||
var/input_pressure_min = 0
|
||||
var/output_pressure_max = 0
|
||||
|
||||
frequency = ATMOS_VENTSCRUB
|
||||
var/id_tag = null
|
||||
|
||||
settagwhitelist = list("id_tag")
|
||||
|
||||
var/pressure_checks = 1
|
||||
//1: Do not pass external_pressure_bound
|
||||
//2: Do not pass input_pressure_min
|
||||
//4: Do not pass output_pressure_max
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/New()
|
||||
..()
|
||||
if(!id_tag)
|
||||
assign_uid()
|
||||
id_tag = num2text(uid)
|
||||
icon = null
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/Destroy()
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/atmos_init()
|
||||
..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume
|
||||
name = "large dual port air vent"
|
||||
|
||||
@@ -152,91 +127,3 @@
|
||||
air_update_turf()
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/proc/broadcast_status()
|
||||
if(!radio_connection)
|
||||
return 0
|
||||
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 //radio signal
|
||||
signal.source = src
|
||||
|
||||
signal.data = list(
|
||||
"tag" = id_tag,
|
||||
"device" = "ADVP",
|
||||
"power" = on,
|
||||
"direction" = releasing?("release"):("siphon"),
|
||||
"checks" = pressure_checks,
|
||||
"input" = input_pressure_min,
|
||||
"output" = output_pressure_max,
|
||||
"external" = external_pressure_bound,
|
||||
"sigtype" = "status"
|
||||
)
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/receive_signal(datum/signal/signal)
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
|
||||
return 0
|
||||
if(signal.data["power"] != null)
|
||||
on = text2num(signal.data["power"])
|
||||
|
||||
if(signal.data["power_toggle"] != null)
|
||||
on = !on
|
||||
|
||||
if(signal.data["direction"] != null)
|
||||
releasing = text2num(signal.data["direction"])
|
||||
|
||||
if(signal.data["checks"] != null)
|
||||
pressure_checks = text2num(signal.data["checks"])
|
||||
|
||||
if(signal.data["purge"])
|
||||
pressure_checks &= ~1
|
||||
releasing = FALSE
|
||||
|
||||
if(signal.data["stabilize"])//the fact that this was "stabalize" shows how many fucks people give about these wonders, none
|
||||
pressure_checks |= 1
|
||||
releasing = TRUE
|
||||
|
||||
if(signal.data["set_input_pressure"] != null)
|
||||
input_pressure_min = clamp(
|
||||
text2num(signal.data["set_input_pressure"]),
|
||||
0,
|
||||
ONE_ATMOSPHERE*50
|
||||
)
|
||||
|
||||
if(signal.data["set_output_pressure"] != null)
|
||||
output_pressure_max = clamp(
|
||||
text2num(signal.data["set_output_pressure"]),
|
||||
0,
|
||||
ONE_ATMOSPHERE*50
|
||||
)
|
||||
|
||||
if(signal.data["set_external_pressure"] != null)
|
||||
external_pressure_bound = clamp(
|
||||
text2num(signal.data["set_external_pressure"]),
|
||||
0,
|
||||
ONE_ATMOSPHERE*50
|
||||
)
|
||||
|
||||
if(signal.data["status"])
|
||||
broadcast_status()
|
||||
return //do not update_icon
|
||||
|
||||
broadcast_status()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/multitool))
|
||||
update_multitool_menu(user)
|
||||
return 1
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/multitool_menu(mob/user, obj/item/multitool/P)
|
||||
return {"
|
||||
<ul>
|
||||
<li><b>Frequency:</b> <a href="?src=[UID()];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=[UID()];set_freq=[ATMOS_VENTSCRUB]">Reset</a>)</li>
|
||||
<li><b>ID Tag:</b> <a href="?src=[UID()];set_id=1">[id_tag]</a></li>
|
||||
</ul>
|
||||
"}
|
||||
|
||||
@@ -16,17 +16,6 @@
|
||||
/obj/machinery/atmospherics/binary/passive_gate/detailed_examine()
|
||||
return "This is a one-way regulator, allowing gas to flow only at a specific pressure and flow rate. If the light is green, it is flowing."
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/atmos_init()
|
||||
..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/Destroy()
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/update_icon_state()
|
||||
icon_state = "[on ? "on" : "off"]"
|
||||
|
||||
@@ -68,56 +57,6 @@
|
||||
parent2.update = 1
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/proc/broadcast_status()
|
||||
if(!radio_connection)
|
||||
return 0
|
||||
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 //radio signal
|
||||
signal.source = src
|
||||
|
||||
signal.data = list(
|
||||
"tag" = id,
|
||||
"device" = "AGP",
|
||||
"power" = on,
|
||||
"target_output" = target_pressure,
|
||||
"sigtype" = "status"
|
||||
)
|
||||
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/receive_signal(datum/signal/signal)
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
|
||||
return 0
|
||||
|
||||
var/old_on = on //for logging
|
||||
|
||||
if("power" in signal.data)
|
||||
on = text2num(signal.data["power"])
|
||||
|
||||
if("power_toggle" in signal.data)
|
||||
on = !on
|
||||
|
||||
if("set_output_pressure" in signal.data)
|
||||
target_pressure = clamp(
|
||||
text2num(signal.data["set_output_pressure"]),
|
||||
0,
|
||||
ONE_ATMOSPHERE*50
|
||||
)
|
||||
|
||||
if(on != old_on)
|
||||
investigate_log("was turned [on ? "on" : "off"] by a remote signal", "atmos")
|
||||
|
||||
if("status" in signal.data)
|
||||
broadcast_status()
|
||||
return //do not update_icon
|
||||
|
||||
broadcast_status()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
|
||||
@@ -47,12 +47,6 @@ Thus, the two variables affect pump operation are set in New():
|
||||
/obj/machinery/atmospherics/binary/pump/AIAltClick(mob/living/silicon/user)
|
||||
set_max(user)
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/Destroy()
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/on
|
||||
icon_state = "map_on"
|
||||
on = TRUE
|
||||
@@ -97,60 +91,6 @@ Thus, the two variables affect pump operation are set in New():
|
||||
parent2.update = 1
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/proc/broadcast_status()
|
||||
if(!radio_connection)
|
||||
return 0
|
||||
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 //radio signal
|
||||
signal.source = src
|
||||
|
||||
signal.data = list(
|
||||
"tag" = id,
|
||||
"device" = "AGP",
|
||||
"power" = on,
|
||||
"target_output" = target_pressure,
|
||||
"sigtype" = "status"
|
||||
)
|
||||
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/atmos_init()
|
||||
..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/receive_signal(datum/signal/signal)
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
|
||||
return 0
|
||||
|
||||
var/old_on = on //for logging
|
||||
|
||||
if(signal.data["power"])
|
||||
on = text2num(signal.data["power"])
|
||||
|
||||
if(signal.data["power_toggle"])
|
||||
on = !on
|
||||
|
||||
if(signal.data["set_output_pressure"])
|
||||
target_pressure = clamp(
|
||||
text2num(signal.data["set_output_pressure"]),
|
||||
0,
|
||||
ONE_ATMOSPHERE*50
|
||||
)
|
||||
|
||||
if(on != old_on)
|
||||
investigate_log("was turned [on ? "on" : "off"] by a remote signal", "atmos")
|
||||
|
||||
if(signal.data["status"])
|
||||
broadcast_status()
|
||||
return //do not update_icon
|
||||
|
||||
broadcast_status()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
|
||||
@@ -77,16 +77,6 @@
|
||||
desc = "A digitally controlled valve."
|
||||
icon = 'icons/atmos/digital_valve.dmi'
|
||||
|
||||
frequency = ATMOS_VENTSCRUB
|
||||
var/id_tag = null
|
||||
settagwhitelist = list("id_tag")
|
||||
|
||||
/obj/machinery/atmospherics/binary/valve/digital/Destroy()
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/binary/valve/digital/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -113,48 +103,3 @@
|
||||
icon_state = "valve[open]nopower"
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/binary/valve/digital/atmos_init()
|
||||
..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/valve/digital/receive_signal(datum/signal/signal)
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id_tag))
|
||||
return 0
|
||||
|
||||
switch(signal.data["command"])
|
||||
if("valve_open")
|
||||
if(!open)
|
||||
open()
|
||||
|
||||
if("valve_close")
|
||||
if(open)
|
||||
close()
|
||||
|
||||
if("valve_toggle")
|
||||
if(open)
|
||||
close()
|
||||
else
|
||||
open()
|
||||
if("valve_set")
|
||||
if(signal.data["valve_set"] == 1)
|
||||
if(!open)
|
||||
open()
|
||||
else
|
||||
if(open)
|
||||
close()
|
||||
|
||||
/obj/machinery/atmospherics/binary/valve/digital/attackby(obj/item/W as obj, mob/user)
|
||||
if(istype(W, /obj/item/multitool))
|
||||
update_multitool_menu(user)
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/binary/valve/digital/multitool_menu(mob/user, obj/item/multitool/P)
|
||||
return {"
|
||||
<ul>
|
||||
<li><b>Frequency:</b> <a href="?src=[UID()];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=[UID()];set_freq=[ATMOS_VENTSCRUB]">Reset</a>)</li>
|
||||
<li>[format_tag("ID Tag","id_tag","set_id")]</a></li>
|
||||
</ul>
|
||||
"}
|
||||
|
||||
@@ -44,20 +44,10 @@ Thus, the two variables affect pump operation are set in New():
|
||||
/obj/machinery/atmospherics/binary/volume_pump/AIAltClick(mob/living/silicon/user)
|
||||
set_max(user)
|
||||
|
||||
/obj/machinery/atmospherics/binary/volume_pump/Destroy()
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/binary/volume_pump/on
|
||||
on = TRUE
|
||||
icon_state = "map_on"
|
||||
|
||||
/obj/machinery/atmospherics/binary/volume_pump/atmos_init()
|
||||
..()
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/binary/volume_pump/update_icon_state()
|
||||
if(!powered())
|
||||
icon_state = "off"
|
||||
@@ -97,54 +87,6 @@ Thus, the two variables affect pump operation are set in New():
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/volume_pump/proc/broadcast_status()
|
||||
if(!radio_connection)
|
||||
return 0
|
||||
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 //radio signal
|
||||
signal.source = src
|
||||
|
||||
signal.data = list(
|
||||
"tag" = id,
|
||||
"device" = "APV",
|
||||
"power" = on,
|
||||
"transfer_rate" = transfer_rate,
|
||||
"sigtype" = "status"
|
||||
)
|
||||
radio_connection.post_signal(src, signal)
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/volume_pump/receive_signal(datum/signal/signal)
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command"))
|
||||
return 0
|
||||
|
||||
var/old_on = on //for logging
|
||||
|
||||
if(signal.data["power"])
|
||||
on = text2num(signal.data["power"])
|
||||
|
||||
if(signal.data["power_toggle"])
|
||||
on = !on
|
||||
|
||||
if(signal.data["set_transfer_rate"])
|
||||
transfer_rate = clamp(
|
||||
text2num(signal.data["set_transfer_rate"]),
|
||||
0,
|
||||
air1.volume
|
||||
)
|
||||
|
||||
if(on != old_on)
|
||||
investigate_log("was turned [on ? "on" : "off"] by a remote signal", "atmos")
|
||||
|
||||
if(signal.data["status"])
|
||||
broadcast_status()
|
||||
return //do not update_icon
|
||||
|
||||
broadcast_status()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/binary/volume_pump/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
|
||||
@@ -50,12 +50,6 @@
|
||||
/obj/machinery/atmospherics/trinary/filter/AIAltClick(mob/living/silicon/user)
|
||||
set_max(user)
|
||||
|
||||
/obj/machinery/atmospherics/trinary/filter/Destroy()
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/trinary/filter/flipped
|
||||
icon_state = "mmap"
|
||||
flipped = TRUE
|
||||
@@ -163,10 +157,6 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/trinary/filter/atmos_init()
|
||||
set_frequency(frequency)
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/trinary/filter/attack_ghost(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
@@ -110,12 +110,6 @@
|
||||
|
||||
var/id = null
|
||||
|
||||
/obj/machinery/atmospherics/trinary/tvalve/digital/Destroy()
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/trinary/tvalve/digital/bypass
|
||||
icon_state = "map_tvalve1"
|
||||
state = TVALVE_STATE_SIDE
|
||||
@@ -150,24 +144,5 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/trinary/tvalve/digital/atmos_init()
|
||||
..()
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/trinary/tvalve/digital/receive_signal(datum/signal/signal)
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id))
|
||||
return 0
|
||||
|
||||
switch(signal.data["command"])
|
||||
if("valve_open")
|
||||
go_to_side()
|
||||
|
||||
if("valve_close")
|
||||
go_straight()
|
||||
|
||||
if("valve_toggle")
|
||||
switch_side()
|
||||
|
||||
#undef TVALVE_STATE_STRAIGHT
|
||||
#undef TVALVE_STATE_SIDE
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
GLOBAL_LIST_EMPTY(air_injectors)
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector
|
||||
icon = 'icons/atmos/injector.dmi'
|
||||
icon_state = "map_injector"
|
||||
@@ -11,34 +13,25 @@
|
||||
name = "air injector"
|
||||
desc = "Has a valve and pump attached to it"
|
||||
|
||||
req_one_access_txt = "24;10"
|
||||
|
||||
var/injecting = FALSE
|
||||
|
||||
var/volume_rate = 50
|
||||
|
||||
var/id
|
||||
Mtoollink = TRUE
|
||||
settagwhitelist = list("id_tag")
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/Initialize(mapload)
|
||||
. = ..()
|
||||
GLOB.air_injectors += src
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/Destroy()
|
||||
GLOB.air_injectors -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/on
|
||||
on = TRUE
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/New()
|
||||
..()
|
||||
if(id && !id_tag)//I'm not dealing with any more merge conflicts
|
||||
id_tag = id
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/detailed_examine()
|
||||
return "Outputs the pipe's gas into the atmosphere, similar to an air vent. It can be controlled by a nearby atmospherics computer. \
|
||||
A green light on it means it is on."
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/Destroy()
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/update_icon_state()
|
||||
if(!powered())
|
||||
icon_state = "off"
|
||||
@@ -75,109 +68,21 @@
|
||||
loc.assume_air(removed)
|
||||
air_update_turf()
|
||||
|
||||
parent.update = 1
|
||||
parent.update = TRUE
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/proc/inject()
|
||||
if(on || injecting)
|
||||
return 0
|
||||
|
||||
injecting = TRUE
|
||||
|
||||
if(air_contents.temperature > 0)
|
||||
var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
||||
|
||||
loc.assume_air(removed)
|
||||
|
||||
parent.update = 1
|
||||
|
||||
flick("inject", src)
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/proc/broadcast_status()
|
||||
if(!radio_connection)
|
||||
return 0
|
||||
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 //radio signal
|
||||
signal.source = src
|
||||
|
||||
signal.data = list(
|
||||
"tag" = id_tag,
|
||||
"device" = "AO",
|
||||
"power" = on,
|
||||
"volume_rate" = volume_rate,
|
||||
"sigtype" = "status"
|
||||
)
|
||||
|
||||
radio_connection.post_signal(src, signal, RADIO_ATMOSIA)
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/atmos_init()
|
||||
..()
|
||||
set_frequency(frequency)
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/receive_signal(datum/signal/signal)
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"] != "command"))
|
||||
return 0
|
||||
|
||||
if(signal.data["power"] != null)
|
||||
on = text2num(signal.data["power"])
|
||||
|
||||
if(signal.data["power_toggle"] != null)
|
||||
on = !on
|
||||
|
||||
if(signal.data["inject"] != null)
|
||||
spawn inject()
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/multitool_act(mob/living/user, obj/item/I)
|
||||
if(!ismultitool(I))
|
||||
return
|
||||
|
||||
if(signal.data["set_volume_rate"] != null)
|
||||
var/number = text2num(signal.data["set_volume_rate"])
|
||||
volume_rate = clamp(number, 0, air_contents.volume)
|
||||
|
||||
if(signal.data["status"])
|
||||
broadcast_status()
|
||||
return //do not update_icon
|
||||
|
||||
//log_admin("DEBUG \[[world.timeofday]\]: outlet_injector/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
|
||||
//return
|
||||
broadcast_status()
|
||||
update_icon()
|
||||
|
||||
/*hide(var/i) //to make the little pipe section invisible, the icon changes.
|
||||
if(node)
|
||||
if(on)
|
||||
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on"
|
||||
else
|
||||
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
|
||||
else
|
||||
icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]exposed"
|
||||
on = FALSE
|
||||
return*/
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/multitool_menu(mob/user, obj/item/multitool/P)
|
||||
return {"
|
||||
<ul>
|
||||
<li><b>Frequency:</b> <a href="?src=[UID()];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=[UID()];set_freq=[ATMOS_VENTSCRUB]">Reset</a>)</li>
|
||||
<li>[format_tag("ID Tag","id_tag","set_id")]</a></li>
|
||||
</ul>
|
||||
"}
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer_uid = UID()
|
||||
to_chat(user, "<span class='notice'>You save [src] into [M]'s buffer</span>")
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/attackby(obj/item/W, mob/user)
|
||||
if(istype(W, /obj/item/multitool))
|
||||
interact(user)
|
||||
return 1
|
||||
if(istype(W, /obj/item/wrench))
|
||||
if(iswrench(W))
|
||||
if(!(stat & NOPOWER) && on)
|
||||
to_chat(user, "<span class='danger'>You cannot unwrench this [src], turn if off first.</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/interact(mob/user as mob)
|
||||
update_multitool_menu(user)
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/hide(i)
|
||||
update_underlays()
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
name = "large passive vent"
|
||||
volume = 1000
|
||||
|
||||
/obj/machinery/atmospherics/unary/passive_vent/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/passive_vent/Initialize(mapload)
|
||||
. = ..()
|
||||
air_contents.volume = volume
|
||||
|
||||
/obj/machinery/atmospherics/unary/passive_vent/process_atmos()
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
name = "Pressure Tank (Air)"
|
||||
icon_state = "air_map"
|
||||
|
||||
/obj/machinery/atmospherics/unary/tank/air/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/tank/air/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "air"
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
@@ -42,8 +42,8 @@
|
||||
name = "Pressure Tank (Oxygen)"
|
||||
icon_state = "o2_map"
|
||||
|
||||
/obj/machinery/atmospherics/unary/tank/oxygen/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/tank/oxygen/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "o2"
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
@@ -53,8 +53,8 @@
|
||||
name = "Pressure Tank (Nitrogen)"
|
||||
icon_state = "n2_map"
|
||||
|
||||
/obj/machinery/atmospherics/unary/tank/nitrogen/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/tank/nitrogen/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "n2"
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
@@ -64,8 +64,8 @@
|
||||
name = "Pressure Tank (Carbon Dioxide)"
|
||||
icon_state = "co2_map"
|
||||
|
||||
/obj/machinery/atmospherics/unary/tank/carbon_dioxide/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/tank/carbon_dioxide/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "co2"
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
@@ -75,8 +75,8 @@
|
||||
name = "Pressure Tank (Toxins)"
|
||||
icon_state = "toxins_map"
|
||||
|
||||
/obj/machinery/atmospherics/unary/tank/toxins/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/tank/toxins/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "toxins"
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
@@ -86,8 +86,8 @@
|
||||
name = "Pressure Tank (Nitrous Oxide)"
|
||||
icon_state = "n2o_map"
|
||||
|
||||
/obj/machinery/atmospherics/unary/tank/nitrous_oxide/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/tank/nitrous_oxide/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "n2o"
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
@@ -99,8 +99,8 @@
|
||||
desc = "A large vessel containing an unknown pressurized gas."
|
||||
icon_state = "agent_b_map"
|
||||
|
||||
/obj/machinery/atmospherics/unary/tank/oxygen_agent_b/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/tank/oxygen_agent_b/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "agent_b"
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
dir = SOUTH
|
||||
initialize_directions = SOUTH
|
||||
layer = TURF_LAYER+0.1
|
||||
var/id_tag
|
||||
/// The current air contents of this device
|
||||
var/datum/gas_mixture/air_contents
|
||||
|
||||
/// Our one pipe node (we're unary)
|
||||
var/obj/machinery/atmospherics/node
|
||||
|
||||
/// The pipenet we are plugged into
|
||||
var/datum/pipeline/parent
|
||||
|
||||
/obj/machinery/atmospherics/unary/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/Initialize(mapload)
|
||||
. = ..()
|
||||
initialize_directions = dir
|
||||
air_contents = new
|
||||
air_contents.volume = 200
|
||||
|
||||
@@ -16,9 +16,6 @@
|
||||
var/open = FALSE
|
||||
|
||||
var/area/initial_loc
|
||||
var/area_uid
|
||||
|
||||
req_one_access_txt = "24;10"
|
||||
|
||||
var/releasing = TRUE //FALSE = siphoning, TRUE = releasing
|
||||
|
||||
@@ -38,12 +35,6 @@
|
||||
var/welded = FALSE // Added for aliens -- TLE
|
||||
var/weld_burst_pressure = 50 * ONE_ATMOSPHERE //the (internal) pressure at which welded covers will burst off
|
||||
|
||||
frequency = ATMOS_VENTSCRUB
|
||||
Mtoollink = TRUE
|
||||
|
||||
var/radio_filter_out
|
||||
var/radio_filter_in
|
||||
|
||||
connect_types = list(CONNECT_TYPE_NORMAL, CONNECT_TYPE_SUPPLY) //connects to regular and supply pipes
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/detailed_examine()
|
||||
@@ -60,22 +51,21 @@
|
||||
on = TRUE
|
||||
icon_state = "map_vent_in"
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/vent_pump/Initialize(mapload)
|
||||
. = ..()
|
||||
GLOB.all_vent_pumps += src
|
||||
icon = null
|
||||
initial_loc = get_area(loc)
|
||||
area_uid = initial_loc.uid
|
||||
if(!id_tag)
|
||||
assign_uid()
|
||||
id_tag = num2text(uid)
|
||||
if(!autolink_id) // Autolink vents are externally managed, and should not show up on the air alarm
|
||||
initial_loc.vents += src
|
||||
name = "[initial_loc.name] Vent Pump #[length(initial_loc.vents)]"
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/high_volume
|
||||
name = "large air vent"
|
||||
power_channel = EQUIP
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/high_volume/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/vent_pump/high_volume/Initialize(mapload)
|
||||
. = ..()
|
||||
air_contents.volume = 1000
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/update_overlays()
|
||||
@@ -174,118 +164,6 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
//Radio remote control
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/set_frequency(new_frequency)
|
||||
SSradio.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
if(frequency)
|
||||
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
|
||||
name = "vent pump"
|
||||
else
|
||||
broadcast_status()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/proc/broadcast_status()
|
||||
if(!radio_connection)
|
||||
return 0
|
||||
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 //radio signal
|
||||
signal.source = src
|
||||
|
||||
signal.data = list(
|
||||
"area" = src.area_uid,
|
||||
"tag" = src.id_tag,
|
||||
"device" = "AVP",
|
||||
"power" = on,
|
||||
"direction" = releasing?("release"):("siphon"),
|
||||
"checks" = pressure_checks,
|
||||
"internal" = internal_pressure_bound,
|
||||
"external" = external_pressure_bound,
|
||||
"timestamp" = world.time,
|
||||
"sigtype" = "status"
|
||||
)
|
||||
if(frequency == ATMOS_VENTSCRUB)
|
||||
if(!initial_loc.air_vent_names[id_tag])
|
||||
var/new_name = "[initial_loc.name] Vent Pump #[initial_loc.air_vent_names.len+1]"
|
||||
initial_loc.air_vent_names[id_tag] = new_name
|
||||
src.name = new_name
|
||||
initial_loc.air_vent_info[id_tag] = signal.data
|
||||
|
||||
radio_connection.post_signal(src, signal, radio_filter_out)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/atmos_init()
|
||||
..()
|
||||
|
||||
//some vents work his own special way
|
||||
radio_filter_in = frequency==ATMOS_VENTSCRUB?(RADIO_FROM_AIRALARM):null
|
||||
radio_filter_out = frequency==ATMOS_VENTSCRUB?(RADIO_TO_AIRALARM):null
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
broadcast_status()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
|
||||
return FALSE
|
||||
|
||||
if("purge" in signal.data)
|
||||
pressure_checks &= ~1
|
||||
releasing = FALSE
|
||||
|
||||
if("stabalize" in signal.data)
|
||||
pressure_checks |= 1
|
||||
releasing = TRUE
|
||||
|
||||
if("power" in signal.data)
|
||||
on = text2num(signal.data["power"])
|
||||
|
||||
if("power_toggle" in signal.data)
|
||||
on = !on
|
||||
|
||||
if("checks" in signal.data)
|
||||
pressure_checks = text2num(signal.data["checks"])
|
||||
|
||||
if("checks_toggle" in signal.data)
|
||||
pressure_checks = (pressure_checks ? 0 : 3)
|
||||
|
||||
if("direction" in signal.data)
|
||||
releasing = text2num(signal.data["direction"])
|
||||
|
||||
if("set_internal_pressure" in signal.data)
|
||||
internal_pressure_bound = clamp(text2num(signal.data["set_internal_pressure"]), 0, ONE_ATMOSPHERE * 50)
|
||||
|
||||
if("set_external_pressure" in signal.data)
|
||||
external_pressure_bound = clamp(text2num(signal.data["set_external_pressure"]), 0, ONE_ATMOSPHERE * 50)
|
||||
|
||||
if("reset_external_pressure" in signal.data)
|
||||
external_pressure_bound = ONE_ATMOSPHERE
|
||||
|
||||
if("adjust_internal_pressure" in signal.data)
|
||||
internal_pressure_bound = clamp(internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]), 0, ONE_ATMOSPHERE * 50)
|
||||
|
||||
if("adjust_external_pressure" in signal.data)
|
||||
external_pressure_bound = clamp(external_pressure_bound + text2num(signal.data["adjust_external_pressure"]), 0, ONE_ATMOSPHERE * 50)
|
||||
|
||||
if("init" in signal.data)
|
||||
name = signal.data["init"]
|
||||
return
|
||||
|
||||
if("status" in signal.data)
|
||||
broadcast_status()
|
||||
return //do not update_icon
|
||||
|
||||
broadcast_status()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/can_crawl_through()
|
||||
return !welded
|
||||
|
||||
@@ -309,17 +187,23 @@
|
||||
to_chat(user, "You can't shove that down there when it is closed")
|
||||
else
|
||||
to_chat(user, "The vent is welded.")
|
||||
return 1
|
||||
if(istype(W, /obj/item/multitool))
|
||||
update_multitool_menu(user)
|
||||
return 1
|
||||
if(istype(W, /obj/item/wrench))
|
||||
return TRUE
|
||||
|
||||
if(iswrench(W))
|
||||
if(!(stat & NOPOWER) && on)
|
||||
to_chat(user, "<span class='danger'>You cannot unwrench this [src], turn it off first.</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/multitool_act(mob/living/user, obj/item/I)
|
||||
if(!ismultitool(I))
|
||||
return
|
||||
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer_uid = UID()
|
||||
to_chat(user, "<span class='notice'>You save [src] into [M]'s buffer</span>")
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/screwdriver_act(mob/living/user, obj/item/I)
|
||||
if(welded)
|
||||
return
|
||||
@@ -355,7 +239,6 @@
|
||||
continue
|
||||
W.forceMove(get_turf(src))
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user)
|
||||
. = ..()
|
||||
if(welded)
|
||||
@@ -367,40 +250,8 @@
|
||||
if(old_stat != stat)
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/interact(mob/user as mob)
|
||||
update_multitool_menu(user)
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/multitool_menu(mob/user, obj/item/multitool/P)
|
||||
return {"
|
||||
<ul>
|
||||
<li><b>Frequency:</b> <a href="?src=[UID()];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=[UID()];set_freq=[ATMOS_VENTSCRUB]">Reset</a>)</li>
|
||||
<li>[format_tag("ID Tag","id_tag","set_id")]</li>
|
||||
</ul>
|
||||
"}
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/multitool_topic(mob/user, list/href_list, obj/O)
|
||||
if("set_id" in href_list)
|
||||
var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID tag for this machine", src, src.id_tag) as null|text), 1, MAX_MESSAGE_LEN)
|
||||
if(!newid)
|
||||
return
|
||||
if(frequency == ATMOS_VENTSCRUB)
|
||||
initial_loc.air_vent_info -= id_tag
|
||||
initial_loc.air_vent_names -= id_tag
|
||||
|
||||
id_tag = newid
|
||||
broadcast_status()
|
||||
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/Destroy()
|
||||
GLOB.all_vent_pumps -= src
|
||||
if(initial_loc)
|
||||
initial_loc.air_vent_info -= id_tag
|
||||
initial_loc.air_vent_names -= id_tag
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
initial_loc.vents -= src
|
||||
return ..()
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
icon = 'icons/atmos/vent_scrubber.dmi'
|
||||
icon_state = "map_scrubber_off"
|
||||
|
||||
req_one_access_txt = "24;10"
|
||||
|
||||
name = "air scrubber"
|
||||
desc = "Has a valve and pump attached to it"
|
||||
layer = GAS_SCRUBBER_LAYER
|
||||
@@ -16,8 +14,6 @@
|
||||
|
||||
var/area/initial_loc
|
||||
|
||||
frequency = ATMOS_VENTSCRUB
|
||||
|
||||
var/list/turf/simulated/adjacent_turfs = list()
|
||||
|
||||
var/scrubbing = TRUE //FALSE = siphoning, TRUE = scrubbing
|
||||
@@ -32,36 +28,27 @@
|
||||
|
||||
var/welded = FALSE
|
||||
|
||||
var/area_uid
|
||||
var/radio_filter_out
|
||||
var/radio_filter_in
|
||||
|
||||
connect_types = list(CONNECT_TYPE_NORMAL, CONNECT_TYPE_SCRUBBER) //connects to regular and scrubber pipes
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/on
|
||||
on = TRUE
|
||||
icon_state = "map_scrubber"
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/New()
|
||||
..()
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/Initialize(mapload)
|
||||
. = ..()
|
||||
icon = null
|
||||
initial_loc = get_area(loc)
|
||||
area_uid = initial_loc.uid
|
||||
if(!id_tag)
|
||||
assign_uid()
|
||||
id_tag = num2text(uid)
|
||||
initial_loc.scrubbers += src
|
||||
name = "[initial_loc.name] Air Scrubber #[length(initial_loc.scrubbers)]"
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/detailed_examine()
|
||||
return "This filters the atmosphere of harmful gas. Filtered gas goes to the pipes connected to it, typically a scrubber pipe. \
|
||||
It can be controlled from an Air Alarm. It can be configured to drain all air rapidly with a 'panic syphon' from an air alarm."
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/Destroy()
|
||||
if(initial_loc && frequency == ATMOS_VENTSCRUB)
|
||||
initial_loc.air_scrub_info -= id_tag
|
||||
initial_loc.air_scrub_names -= id_tag
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
if(initial_loc)
|
||||
initial_loc.scrubbers -= src
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user)
|
||||
@@ -92,7 +79,7 @@
|
||||
amount = active_power_usage
|
||||
|
||||
if(widenet)
|
||||
amount += amount*(adjacent_turfs.len*(adjacent_turfs.len/2))
|
||||
amount += amount * (length(adjacent_turfs) * (length(adjacent_turfs) / 2))
|
||||
use_power(amount, power_channel)
|
||||
return 1
|
||||
|
||||
@@ -135,56 +122,8 @@
|
||||
underlays += frame
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/set_frequency(new_frequency)
|
||||
SSradio.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
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
|
||||
name = "air Scrubber"
|
||||
else
|
||||
broadcast_status()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/proc/broadcast_status()
|
||||
if(!radio_connection)
|
||||
return 0
|
||||
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 //radio signal
|
||||
signal.source = src
|
||||
signal.data = list(
|
||||
"area" = area_uid,
|
||||
"tag" = id_tag,
|
||||
"device" = "AScr",
|
||||
"timestamp" = world.time,
|
||||
"power" = on,
|
||||
"scrubbing" = scrubbing,
|
||||
"widenet" = widenet,
|
||||
"filter_o2" = scrub_O2,
|
||||
"filter_n2" = scrub_N2,
|
||||
"filter_co2" = scrub_CO2,
|
||||
"filter_toxins" = scrub_Toxins,
|
||||
"filter_n2o" = scrub_N2O,
|
||||
"sigtype" = "status"
|
||||
)
|
||||
if(frequency == ATMOS_VENTSCRUB)
|
||||
if(!initial_loc.air_scrub_names[id_tag])
|
||||
var/new_name = "[initial_loc.name] Air Scrubber #[initial_loc.air_scrub_names.len+1]"
|
||||
initial_loc.air_scrub_names[id_tag] = new_name
|
||||
src.name = new_name
|
||||
initial_loc.air_scrub_info[id_tag] = signal.data
|
||||
radio_connection.post_signal(src, signal, radio_filter_out)
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/atmos_init()
|
||||
..()
|
||||
radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null
|
||||
radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null
|
||||
if(frequency)
|
||||
set_frequency(frequency)
|
||||
src.broadcast_status()
|
||||
check_turfs()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/process_atmos()
|
||||
@@ -268,10 +207,10 @@
|
||||
tile.air_update_turf()
|
||||
|
||||
else //Just siphoning all air
|
||||
if(air_contents.return_pressure()>=50*ONE_ATMOSPHERE)
|
||||
if(air_contents.return_pressure() >= (50 * ONE_ATMOSPHERE))
|
||||
return
|
||||
|
||||
var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume)
|
||||
var/transfer_moles = environment.total_moles() * (volume_rate/environment.volume)
|
||||
|
||||
var/datum/gas_mixture/removed = tile.remove_air(transfer_moles)
|
||||
|
||||
@@ -285,94 +224,12 @@
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/hide(i) //to make the little pipe section invisible, the icon changes.
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/receive_signal(datum/signal/signal)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"] != "command"))
|
||||
return FALSE
|
||||
|
||||
if("power" in signal.data)
|
||||
on = text2num(signal.data["power"])
|
||||
if("power_toggle" in signal.data)
|
||||
on = !on
|
||||
|
||||
if("widenet" in signal.data)
|
||||
widenet = text2num(signal.data["widenet"])
|
||||
if("toggle_widenet" in signal.data)
|
||||
widenet = !widenet
|
||||
|
||||
if("scrubbing" in signal.data)
|
||||
scrubbing = text2num(signal.data["scrubbing"])
|
||||
if("toggle_scrubbing" in signal.data)
|
||||
scrubbing = !scrubbing
|
||||
|
||||
if("o2_scrub" in signal.data)
|
||||
scrub_O2 = text2num(signal.data["o2_scrub"])
|
||||
if("toggle_o2_scrub" in signal.data)
|
||||
scrub_O2 = !scrub_O2
|
||||
|
||||
if("n2_scrub" in signal.data)
|
||||
scrub_N2 = text2num(signal.data["n2_scrub"])
|
||||
if("toggle_n2_scrub" in signal.data)
|
||||
scrub_N2 = !scrub_N2
|
||||
|
||||
if("co2_scrub" in signal.data)
|
||||
scrub_CO2 = text2num(signal.data["co2_scrub"])
|
||||
if("toggle_co2_scrub" in signal.data)
|
||||
scrub_CO2 = !scrub_CO2
|
||||
|
||||
if("tox_scrub" in signal.data)
|
||||
scrub_Toxins = text2num(signal.data["tox_scrub"])
|
||||
if("toggle_tox_scrub" in signal.data)
|
||||
scrub_Toxins = !scrub_Toxins
|
||||
|
||||
if("n2o_scrub" in signal.data)
|
||||
scrub_N2O = text2num(signal.data["n2o_scrub"])
|
||||
if("toggle_n2o_scrub" in signal.data)
|
||||
scrub_N2O = !scrub_N2O
|
||||
|
||||
if("init" in signal.data)
|
||||
name = signal.data["init"]
|
||||
return
|
||||
|
||||
if("status" in signal.data)
|
||||
broadcast_status()
|
||||
return //do not update_icon
|
||||
|
||||
broadcast_status()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/power_change()
|
||||
var/old_stat = stat
|
||||
..()
|
||||
if(old_stat != stat)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/multitool_menu(mob/user, obj/item/multitool/P)
|
||||
return {"
|
||||
<ul>
|
||||
<li><b>Frequency:</b> <a href="?src=[UID()];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=[UID()];set_freq=[ATMOS_VENTSCRUB]">Reset</a>)</li>
|
||||
<li>[format_tag("ID Tag","id_tag", "set_id")]</li>
|
||||
</ul>
|
||||
"}
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/multitool_topic(mob/user, list/href_list, obj/O)
|
||||
if("set_id" in href_list)
|
||||
var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID tag for this machine", src, src:id_tag) as null|text),1,MAX_MESSAGE_LEN)
|
||||
if(!newid)
|
||||
return
|
||||
|
||||
if(frequency == ATMOS_VENTSCRUB)
|
||||
initial_loc.air_scrub_info -= id_tag
|
||||
initial_loc.air_scrub_names -= id_tag
|
||||
|
||||
id_tag = newid
|
||||
broadcast_status()
|
||||
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/can_crawl_through()
|
||||
return !welded
|
||||
|
||||
@@ -386,14 +243,11 @@
|
||||
pipe_image.plane = ABOVE_HUD_PLANE
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 100, TRUE)
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/multitool))
|
||||
update_multitool_menu(user)
|
||||
return 1
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wrench))
|
||||
if(!(stat & NOPOWER) && on)
|
||||
to_chat(user, "<span class='danger'>You cannot unwrench this [src], turn it off first.</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -1,31 +1,29 @@
|
||||
GLOBAL_LIST_EMPTY(gas_meters)
|
||||
|
||||
/obj/machinery/atmospherics/meter
|
||||
name = "gas flow meter"
|
||||
desc = "It measures something."
|
||||
desc = "A gas flow meter"
|
||||
icon = 'icons/obj/meter.dmi'
|
||||
icon_state = "meterX"
|
||||
|
||||
layer = GAS_PUMP_LAYER
|
||||
|
||||
var/obj/machinery/atmospherics/pipe/target = null
|
||||
anchored = TRUE
|
||||
max_integrity = 150
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 40, ACID = 0)
|
||||
power_channel = ENVIRON
|
||||
frequency = ATMOS_DISTRO_FREQ
|
||||
var/id_tag
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 5
|
||||
req_one_access_txt = "24;10"
|
||||
Mtoollink = TRUE
|
||||
settagwhitelist = list("id_tag")
|
||||
|
||||
var/obj/machinery/atmospherics/pipe/target = null
|
||||
|
||||
/obj/machinery/atmospherics/meter/Initialize(mapload)
|
||||
. = ..()
|
||||
GLOB.gas_meters += src
|
||||
target = locate(/obj/machinery/atmospherics/pipe) in loc
|
||||
|
||||
/obj/machinery/atmospherics/meter/Destroy()
|
||||
target = null
|
||||
GLOB.gas_meters -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/meter/detailed_examine()
|
||||
@@ -42,23 +40,6 @@
|
||||
return
|
||||
|
||||
update_icon(UPDATE_ICON_STATE)
|
||||
var/env_pressure = environment.return_pressure()
|
||||
if(frequency)
|
||||
var/datum/radio_frequency/radio_connection = SSradio.return_frequency(frequency)
|
||||
|
||||
if(!radio_connection) return
|
||||
|
||||
var/datum/signal/signal = new
|
||||
signal.source = src
|
||||
signal.transmission_method = 1
|
||||
signal.data = list(
|
||||
"tag" = id_tag,
|
||||
"device" = "AM",
|
||||
"pressure" = round(env_pressure),
|
||||
"sigtype" = "status"
|
||||
)
|
||||
radio_connection.post_signal(src, signal)
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/meter/update_icon_state()
|
||||
if(!target)
|
||||
@@ -89,51 +70,32 @@
|
||||
else
|
||||
icon_state = "meter4"
|
||||
|
||||
/obj/machinery/atmospherics/meter/proc/status()
|
||||
var/t = ""
|
||||
if(target)
|
||||
var/datum/gas_mixture/environment = target.return_air()
|
||||
if(environment)
|
||||
t += "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)]°K ([round(environment.temperature-T0C,0.01)]°C)"
|
||||
else
|
||||
t += "The sensor error light is blinking."
|
||||
else
|
||||
t += "The connect error light is blinking."
|
||||
return t
|
||||
|
||||
/obj/machinery/atmospherics/meter/examine(mob/user)
|
||||
var/t = "A gas flow meter. "
|
||||
|
||||
. = ..()
|
||||
if(get_dist(user, src) > 3 && !(isAI(user) || istype(user, /mob/dead)))
|
||||
t += "<span class='boldnotice'>You are too far away to read it.</span>"
|
||||
. += "<span class='boldnotice'>You are too far away to read it.</span>"
|
||||
|
||||
else if(stat & (NOPOWER|BROKEN))
|
||||
t += "<span class='danger'>The display is off.</span>"
|
||||
. += "<span class='danger'>The display is off.</span>"
|
||||
|
||||
else if(target)
|
||||
var/datum/gas_mixture/environment = target.return_air()
|
||||
if(environment)
|
||||
t += "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)]K ([round(environment.temperature-T0C,0.01)]°C)"
|
||||
. += "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)]K ([round(environment.temperature-T0C,0.01)]°C)"
|
||||
else
|
||||
t += "The sensor error light is blinking."
|
||||
. += "The sensor error light is blinking."
|
||||
else
|
||||
t += "The connect error light is blinking."
|
||||
|
||||
. = list(t)
|
||||
. += "The connect error light is blinking."
|
||||
|
||||
/obj/machinery/atmospherics/meter/Click()
|
||||
if(isAI(usr)) // ghosts can call ..() for examine
|
||||
usr.examinate(src)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/meter/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/multitool))
|
||||
update_multitool_menu(user)
|
||||
return 1
|
||||
|
||||
if(!istype(W, /obj/item/wrench))
|
||||
if(!iswrench(W))
|
||||
return ..()
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>You begin to unfasten \the [src]...</span>")
|
||||
@@ -154,10 +116,11 @@
|
||||
if(current_size >= STAGE_FIVE)
|
||||
deconstruct()
|
||||
|
||||
/obj/machinery/atmospherics/meter/multitool_menu(mob/user, obj/item/multitool/P)
|
||||
return {"
|
||||
<b>Main</b>
|
||||
<ul>
|
||||
<li><b>Frequency:</b> <a href="?src=[UID()];set_freq=-1">[format_frequency(frequency)] GHz</a> (<a href="?src=[UID()];set_freq=[initial(frequency)]">Reset</a>)</li>
|
||||
<li>[format_tag("ID Tag","id_tag")]</li>
|
||||
</ul>"}
|
||||
|
||||
/obj/machinery/atmospherics/meter/multitool_act(mob/living/user, obj/item/I)
|
||||
if(!ismultitool(I))
|
||||
return
|
||||
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer_uid = UID()
|
||||
to_chat(user, "<span class='notice'>You save [src] into [M]'s buffer</span>")
|
||||
|
||||
@@ -31,13 +31,14 @@
|
||||
var/obj/item/pipe_meter/PM = new (T)
|
||||
meter.transfer_fingerprints_to(PM)
|
||||
qdel(meter)
|
||||
. = ..()
|
||||
|
||||
// if we're somehow by ourself
|
||||
if(parent && !QDELETED(parent) && parent.members.len == 1 && parent.members[1] == src)
|
||||
qdel(parent)
|
||||
parent = null
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/returnPipenet(obj/machinery/atmospherics/A)
|
||||
return parent
|
||||
|
||||
@@ -69,6 +70,7 @@
|
||||
air_update_turf()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/return_air()
|
||||
RETURN_TYPE(/datum/gas_mixture)
|
||||
if(!parent)
|
||||
return 0
|
||||
return parent.air
|
||||
|
||||
@@ -270,6 +270,7 @@ GLOBAL_DATUM_INIT(canister_icon_container, /datum/canister_icons, new())
|
||||
can_label = FALSE
|
||||
|
||||
/obj/machinery/atmospherics/portable/canister/return_air()
|
||||
RETURN_TYPE(/datum/gas_mixture)
|
||||
return air_contents
|
||||
|
||||
/obj/machinery/atmospherics/portable/canister/proc/return_temperature()
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/portable/pump/return_air()
|
||||
RETURN_TYPE(/datum/gas_mixture)
|
||||
return air_contents
|
||||
|
||||
/obj/machinery/atmospherics/portable/pump/replace_tank(mob/living/user, close_valve)
|
||||
|
||||
@@ -97,6 +97,7 @@
|
||||
tile.air_update_turf()
|
||||
|
||||
/obj/machinery/atmospherics/portable/scrubber/return_air()
|
||||
RETURN_TYPE(/datum/gas_mixture)
|
||||
return air_contents
|
||||
|
||||
/obj/machinery/atmospherics/portable/scrubber/attack_ai(mob/user)
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
// This file exists so that this PR cannot be testmerged at the same time as 19951
|
||||
// If it were to be TM'd at the same time, a lot of things would break
|
||||
// Remove this file before full merge
|
||||
@@ -73,5 +73,5 @@
|
||||
// simply don't be moved
|
||||
return FALSE
|
||||
disconnect()
|
||||
LateInitialize()
|
||||
LateInitialize() // who the fuck did this
|
||||
return ..()
|
||||
|
||||
Reference in New Issue
Block a user