mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
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:
@@ -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"]),
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user