Adds support to better handle air alarms in sensitive areas and vents with custom settings.

Air alarms now have a new setting, breach_detection, which allows for disabling the automatic mode change when a breach occurs.

Vents now have three new settings. These are primarily for when air alarms request a mode change to ensure that custom pressure levels/checks (in terms of mapping, not set later in game)  are not lost.
external_pressure_bound_default
internal_pressure_bound_default
checks_default
This commit is contained in:
PsiOmega
2014-06-27 11:12:09 +02:00
parent ae16c5e673
commit 596b71a4ff
2 changed files with 46 additions and 23 deletions

View File

@@ -1,3 +1,8 @@
#define EXTERNAL_PRESSURE_BOUND ONE_ATMOSPHERE
#define INTERNAL_PRESSURE_BOUND 0
#define PRESSURE_CHECKS 1
#undefine
/obj/machinery/atmospherics/unary/vent_pump
icon = 'icons/obj/atmospherics/vent_pump.dmi'
icon_state = "off"
@@ -14,14 +19,19 @@
var/on = 0
var/pump_direction = 1 //0 = siphoning, 1 = releasing
var/external_pressure_bound = ONE_ATMOSPHERE
var/internal_pressure_bound = 0
var/external_pressure_bound = EXTERNAL_PRESSURE_BOUND
var/internal_pressure_bound = INTERNAL_PRESSURE_BOUND
var/pressure_checks = 1
var/pressure_checks = PRESSURE_CHECKS
//1: Do not pass external_pressure_bound
//2: Do not pass internal_pressure_bound
//3: Do not pass either
// Used when handling incoming radio signals requesting default settings
var/external_pressure_bound_default = EXTERNAL_PRESSURE_BOUND
var/internal_pressure_bound_default = INTERNAL_PRESSURE_BOUND
var/pressure_checks_default = PRESSURE_CHECKS
var/welded = 0 // Added for aliens -- TLE
var/frequency = 1439
@@ -205,7 +215,10 @@
on = !on
if(signal.data["checks"] != null)
pressure_checks = text2num(signal.data["checks"])
if (signal.data["set_internal_pressure"] == "default")
pressure_checks = pressure_checks_default
else
pressure_checks = text2num(signal.data["checks"])
if(signal.data["checks_toggle"] != null)
pressure_checks = (pressure_checks?0:3)
@@ -214,18 +227,24 @@
pump_direction = text2num(signal.data["direction"])
if(signal.data["set_internal_pressure"] != null)
internal_pressure_bound = between(
0,
text2num(signal.data["set_internal_pressure"]),
ONE_ATMOSPHERE*50
)
if (signal.data["set_internal_pressure"] == "default")
internal_pressure_bound = internal_pressure_bound_default
else
internal_pressure_bound = between(
0,
text2num(signal.data["set_internal_pressure"]),
ONE_ATMOSPHERE*50
)
if(signal.data["set_external_pressure"] != null)
external_pressure_bound = between(
0,
text2num(signal.data["set_external_pressure"]),
ONE_ATMOSPHERE*50
)
if (signal.data["set_external_pressure"] == "default")
external_pressure_bound = external_pressure_bound_default
else
external_pressure_bound = between(
0,
text2num(signal.data["set_external_pressure"]),
ONE_ATMOSPHERE*50
)
if(signal.data["adjust_internal_pressure"] != null)
internal_pressure_bound = between(
@@ -235,6 +254,8 @@
)
if(signal.data["adjust_external_pressure"] != null)
external_pressure_bound = between(
0,
external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),

View File

@@ -71,6 +71,7 @@
active_power_usage = 8
power_channel = ENVIRON
req_one_access = list(access_atmospherics, access_engine_equip)
var/breach_detection = 1 // Whether to use automatic breach detection or not
var/frequency = 1439
//var/skipprocess = 0 //Experimenting
var/alarm_frequency = 1437
@@ -276,17 +277,20 @@
if(!istype(location))
return 0
if(breach_detection == 0)
return 0
var/datum/gas_mixture/environment = location.return_air()
var/environment_pressure = environment.return_pressure()
var/pressure_levels = TLV["pressure"]
if (environment_pressure <= pressure_levels[1]) //low pressures
if (!(mode == AALARM_MODE_PANIC || mode == AALARM_MODE_CYCLE))
return 1
return 0
/obj/machinery/alarm/proc/master_is_operating()
return alarm_area.master_air_alarm && !(alarm_area.master_air_alarm.stat & (NOPOWER|BROKEN))
@@ -397,14 +401,12 @@
return 1
/obj/machinery/alarm/proc/apply_mode()
var/current_pressures = TLV["pressure"]
var/target_pressure = (current_pressures[2] + current_pressures[3])/2
switch(mode)
if(AALARM_MODE_SCRUBBING)
for(var/device_id in alarm_area.air_scrub_names)
send_signal(device_id, list("power"= 1, "co2_scrub"= 1, "scrubbing"= 1, "panic_siphon"= 0) )
for(var/device_id in alarm_area.air_vent_names)
send_signal(device_id, list("power"= 1, "checks"= 1, "set_external_pressure"= target_pressure) )
send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default") )
if(AALARM_MODE_PANIC, AALARM_MODE_CYCLE)
for(var/device_id in alarm_area.air_scrub_names)
@@ -416,13 +418,13 @@
for(var/device_id in alarm_area.air_scrub_names)
send_signal(device_id, list("power"= 1, "panic_siphon"= 1) )
for(var/device_id in alarm_area.air_vent_names)
send_signal(device_id, list("power"= 1, "checks"= 1, "set_external_pressure"= target_pressure) )
send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default") )
if(AALARM_MODE_FILL)
for(var/device_id in alarm_area.air_scrub_names)
send_signal(device_id, list("power"= 0) )
for(var/device_id in alarm_area.air_vent_names)
send_signal(device_id, list("power"= 1, "checks"= 1, "set_external_pressure"= target_pressure) )
send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default") )
if(AALARM_MODE_OFF)
for(var/device_id in alarm_area.air_scrub_names)