diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
index 4c386f44ec4..b0470df9330 100644
--- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
@@ -18,6 +18,7 @@
var/scrub_CO2 = 1
var/scrub_Toxins = 0
var/scrub_N2O = 0
+ var/scrub_O2 = 0
var/volume_rate = 120
var/panic = 0 //is this scrubber panicked?
@@ -70,8 +71,9 @@
"scrubbing" = scrubbing,
"panic" = panic,
"filter_co2" = scrub_CO2,
- "filter_toxins" = scrub_Toxins,
+ "filter_tox" = scrub_Toxins,
"filter_n2o" = scrub_N2O,
+ "filter_o2" = scrub_O2,
"sigtype" = "status"
)
if(!initial_loc.air_scrub_names[id_tag])
@@ -121,6 +123,9 @@
if(scrub_CO2)
filtered_out.carbon_dioxide = removed.carbon_dioxide
removed.carbon_dioxide = 0
+ if(scrub_O2)
+ filtered_out.oxygen = removed.oxygen
+ removed.oxygen = 0
if(removed.trace_gases.len>0)
for(var/datum/gas/trace_gas in removed.trace_gases)
@@ -217,6 +222,11 @@
if(signal.data["toggle_n2o_scrub"])
scrub_N2O = !scrub_N2O
+ if(signal.data["o2_scrub"] != null)
+ scrub_O2 = text2num(signal.data["o2_scrub"])
+ if(signal.data["toggle_o2_scrub"])
+ scrub_O2 = !scrub_O2
+
if(signal.data["init"] != null)
name = signal.data["init"]
return
diff --git a/code/WorkInProgress/Mini/atmos_control.dm b/code/WorkInProgress/Mini/atmos_control.dm
index adf81eefb87..c2ad6330ed6 100644
--- a/code/WorkInProgress/Mini/atmos_control.dm
+++ b/code/WorkInProgress/Mini/atmos_control.dm
@@ -188,6 +188,11 @@
//copypasta from alarm code, changed to work with this without derping hard
//---START COPYPASTA----
+/obj/machinery/computer/atmoscontrol/proc/fmtScrubberGasStatus(var/id_tag,var/code,var/list/data)
+ var/label=replacetext(uppertext(code),"2","2")
+ if(code=="tox")
+ label="Plasma"
+ return "[label]"
/obj/machinery/computer/atmoscontrol/proc/return_controls()
var/output = ""//"[alarm_zone] Air [name]
"
@@ -279,12 +284,10 @@ siphoning
if(data["scrubbing"])
sensor_data += {"
Filtering:
-Carbon Dioxide
-[data["filter_co2"]?"on":"off"];
-Toxins
-[data["filter_toxins"]?"on":"off"];
-Nitrous Oxide
-[data["filter_n2o"]?"on":"off"]
+[fmtScrubberGasStatus(id_tag,"co2",data)],
+[fmtScrubberGasStatus(id_tag,"tox",data)],
+[fmtScrubberGasStatus(id_tag,"n2o",data)],
+[fmtScrubberGasStatus(id_tag,"o2",data)]
"}
sensor_data += {"
@@ -315,6 +318,17 @@ Nitrous Oxide
if (AALARM_SCREEN_SENSORS)
output += {"
Main menu
+
Sensor presets:
(Note, this only sets sensors, air supplied to vents must still be changed.)"}
+ var/list/presets = list(
+ AALARM_PRESET_HUMAN = "Human - Checks for Oxygen and Nitrogen",\
+ AALARM_PRESET_VOX = "Vox - Checks for Nitrogen only",\
+ AALARM_PRESET_SERVER = "Coldroom - For server rooms and freezers")
+ for(var/p=1;p<=presets.len;p++)
+ if (current.preset==p)
+ output += "- [presets[p]] (selected)
"
+ else
+ output += "- [presets[p]]
"
+ output += {"
Alarm thresholds:
Partial pressure for gases
"}
@@ -790,6 +829,12 @@ Toxins: [plasma_percent]%
return dat
+/obj/machinery/alarm/proc/fmtScrubberGasStatus(var/id_tag,var/code,var/list/data)
+ var/label=replacetext(uppertext(code),"2","2")
+ if(code=="tox")
+ label="Plasma"
+ return "[label]"
+
/obj/machinery/alarm/proc/return_controls()
var/output = ""//"[alarm_zone] Air [name]
"
@@ -876,12 +921,10 @@ siphoning
if(data["scrubbing"])
sensor_data += {"
Filtering:
-Carbon Dioxide
-[data["filter_co2"]?"on":"off"];
-Toxins
-[data["filter_toxins"]?"on":"off"];
-Nitrous Oxide
-[data["filter_n2o"]?"on":"off"]
+[fmtScrubberGasStatus(id_tag,"co2",data)],
+[fmtScrubberGasStatus(id_tag,"tox",data)],
+[fmtScrubberGasStatus(id_tag,"n2o",data)],
+[fmtScrubberGasStatus(id_tag,"o2",data)]
"}
sensor_data += {"
@@ -895,7 +938,8 @@ Nitrous Oxide
if (AALARM_SCREEN_MODE)
output += "Main menu
Air machinery mode for the area:"
- var/list/modes = list(AALARM_MODE_SCRUBBING = "Filtering - Scrubs out contaminants",\
+ var/list/modes = list(
+ AALARM_MODE_SCRUBBING = "Filtering - Scrubs out contaminants",\
AALARM_MODE_REPLACEMENT = "Replace Air - Siphons out air while replacing",\
AALARM_MODE_PANIC = "Panic - Siphons air out of the room",\
AALARM_MODE_CYCLE = "Cycle - Siphons air before replacing",\
@@ -911,6 +955,17 @@ Nitrous Oxide
if (AALARM_SCREEN_SENSORS)
output += {"
Main menu
+
Sensor presets:
(Note, this only sets sensors, air supplied to vents must still be changed.)"}
+ var/list/presets = list(
+ AALARM_PRESET_HUMAN = "Human - Checks for Oxygen and Nitrogen",\
+ AALARM_PRESET_VOX = "Vox - Checks for Nitrogen only",\
+ AALARM_PRESET_SERVER = "Coldroom - For server rooms and freezers")
+ for(var/p=1;p<=presets.len;p++)
+ if (preset==p)
+ output += "- [presets[p]] (selected)
"
+ else
+ output += "- [presets[p]]
"
+ output += {"
Alarm thresholds:
Partial pressure for gases
-
+
| min2 | min1 | max1 | max2 |
"}
var/list/gases = list(
@@ -954,9 +1008,11 @@ table tr:first-child th:first-child { border: none;}
return output
/obj/machinery/alarm/Topic(href, href_list)
+ var/changed=0
if(href_list["rcon"])
rcon_setting = text2num(href_list["rcon"])
+ changed=1
if ( (get_dist(src, usr) > 1 ))
if (!istype(usr, /mob/living/silicon))
@@ -978,10 +1034,12 @@ table tr:first-child th:first-child { border: none;}
"co2_scrub",
"tox_scrub",
"n2o_scrub",
+ "o2_scrub",
"panic_siphon",
"scrubbing")
send_signal(device_id, list(href_list["command"] = text2num(href_list["val"]) ) )
+ changed=1
if("set_threshold")
var/env = href_list["env"]
@@ -1032,30 +1090,43 @@ table tr:first-child th:first-child { border: none;}
selected[3] = selected[4]
apply_mode()
+ changed=1
if(href_list["screen"])
+ var/prevscreen=screen
screen = text2num(href_list["screen"])
-
+ changed=(prevscreen!=screen)
+/* Unused
if(href_list["atmos_unlock"])
switch(href_list["atmos_unlock"])
if("0")
air_doors_close(1)
if("1")
air_doors_open(1)
+ changed=1
+*/
if(href_list["atmos_alarm"])
if (alarm_area.atmosalert(2))
apply_danger_level(2)
update_icon()
+ changed=1
if(href_list["atmos_reset"])
if (alarm_area.atmosalert(0))
apply_danger_level(0)
update_icon()
+ changed=1
if(href_list["mode"])
mode = text2num(href_list["mode"])
apply_mode()
+ changed=1
+
+ if(href_list["preset"])
+ preset = text2num(href_list["preset"])
+ apply_preset()
+ changed=1
if(href_list["temperature"])
var/list/selected = TLV["temperature"]
@@ -1066,6 +1137,7 @@ table tr:first-child th:first-child { border: none;}
usr << "Temperature must be between [min_temperature]C and [max_temperature]C"
else
target_temperature = input_temperature + T0C
+ changed=1
if (href_list["AAlarmwires"])
var/t1 = text2num(href_list["AAlarmwires"])
@@ -1074,6 +1146,7 @@ table tr:first-child th:first-child { border: none;}
return
if (isWireColorCut(t1))
mend(t1)
+ changed=1
else
cut(t1)
if (AAlarmwires == 0)
@@ -1092,8 +1165,9 @@ table tr:first-child th:first-child { border: none;}
return
else
pulse(t1)
-
- updateUsrDialog()
+ changed=1
+ if(changed)
+ updateUsrDialog()
/obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob)