diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index 2b151f04136..969fe5542e8 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -12,6 +12,7 @@
var/on = 0
var/pump_direction = 1 //0 = siphoning, 1 = releasing
+ var/pump_speed = 1 //Used to adjust speed for siphons
var/external_pressure_bound = ONE_ATMOSPHERE
var/internal_pressure_bound = 0
@@ -38,13 +39,13 @@
assign_uid()
id_tag = num2text(uid)
if(ticker && ticker.current_state == 3)//if the game is running
- src.initialize()
- src.broadcast_status()
+ initialize()
+ broadcast_status()
..()
high_volume
name = "Large Air Vent"
- power_channel = EQUIP
+
New()
..()
air_contents.volume = 1000
@@ -69,7 +70,7 @@
return
if (!node)
on = 0
- //broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0
+
if(!on)
return 0
@@ -89,7 +90,7 @@
if(pressure_delta > 0)
if(air_contents.temperature > 0)
- var/transfer_moles = pressure_delta*environment.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
+ var/transfer_moles = pressure_delta*environment.volume*environment.group_multiplier*pump_speed/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
@@ -107,7 +108,7 @@
if(pressure_delta > 0)
if(environment.temperature > 0)
- var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION)
+ var/transfer_moles = pressure_delta*air_contents.volume*air_contents.group_multiplier*pump_speed/(environment.temperature * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
if (isnull(removed)) //in space
@@ -120,49 +121,39 @@
return 1
+
+
//Radio remote control
- proc
- set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- if(frequency)
- radio_connection = radio_controller.add_object(src, frequency,radio_filter_in)
+ proc/broadcast_status()
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.source = src
- broadcast_status()
- if(!radio_connection)
- return 0
+ signal.data = list(
+ "area" = src.area_uid,
+ "tag" = src.id_tag,
+ "device" = "AVP",
+ "power" = on,
+ "direction" = pump_direction?("release"):("siphon"),
+ "checks" = pressure_checks,
+ "internal" = internal_pressure_bound,
+ "external" = external_pressure_bound,
+ "timestamp" = world.time,
+ "sigtype" = "status",
+ "setting" = pump_speed
+ )
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
+ var/area/alarm_area = get_area(src)
+ if(alarm_area.master.master_air_alarm && alarm_area.master.master_air_alarm.master_is_operating())
+ receive_signal(signal)
+ else
+ for(var/area/A in alarm_area.related)
+ for(var/obj/machinery/alarm/AA in A)
+ receive_signal(signal)
- signal.data = list(
- "area" = src.area_uid,
- "tag" = src.id_tag,
- "device" = "AVP",
- "power" = on,
- "direction" = pump_direction?("release"):("siphon"),
- "checks" = pressure_checks,
- "internal" = internal_pressure_bound,
- "external" = external_pressure_bound,
- "timestamp" = world.time,
- "sigtype" = "status"
- )
+ return 1
- radio_connection.post_signal(src, signal, radio_filter_out)
-
- return 1
-
-
- initialize()
- ..()
-
- //some vents work his own spesial way
- radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null
- radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null
- if(frequency)
- set_frequency(frequency)
receive_signal(datum/signal/signal)
if(stat & (NOPOWER|BROKEN))
@@ -195,32 +186,16 @@
pump_direction = text2num(signal.data["direction"])
if("set_internal_pressure" in signal.data)
- internal_pressure_bound = between(
- 0,
- text2num(signal.data["set_internal_pressure"]),
- ONE_ATMOSPHERE*50
- )
+ internal_pressure_bound = between(0, text2num(signal.data["set_internal_pressure"]), ONE_ATMOSPHERE*50)
if("set_external_pressure" in signal.data)
- external_pressure_bound = between(
- 0,
- text2num(signal.data["set_external_pressure"]),
- ONE_ATMOSPHERE*50
- )
+ external_pressure_bound = between(0, text2num(signal.data["set_external_pressure"]), ONE_ATMOSPHERE*50)
if("adjust_internal_pressure" in signal.data)
- internal_pressure_bound = between(
- 0,
- internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),
- ONE_ATMOSPHERE*50
- )
+ internal_pressure_bound = between(0, text2num(signal.data["adjust_internal_pressure"]), ONE_ATMOSPHERE*50)
if("adjust_external_pressure" in signal.data)
- external_pressure_bound = between(
- 0,
- external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),
- ONE_ATMOSPHERE*50
- )
+ external_pressure_bound = between(0, text2num(signal.data["adjust_external_pressure"]), ONE_ATMOSPHERE*50)
if("init" in signal.data)
name = signal.data["init"]
@@ -231,6 +206,9 @@
broadcast_status()
return //do not update_icon
+ if("setting" in signal.data)
+ pump_speed = text2num(signal.data["setting"])
+
//log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
spawn(2)
broadcast_status()
@@ -272,6 +250,7 @@
else
user << "\blue You need more welding fuel to complete this task."
return 1
+
examine()
set src in oview(1)
..()
diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
index f2ce4a8621a..f78826e400f 100644
--- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
@@ -16,6 +16,7 @@
var/scrub_CO2 = 1
var/scrub_Toxins = 0
var/scrub_N2O = 0
+ var/scrub_rate = 1
var/volume_rate = 120
var/panic = 0 //is this scrubber panicked?
@@ -32,8 +33,8 @@
assign_uid()
id_tag = num2text(uid)
if(ticker && ticker.current_state == 3)//if the game is running
- src.initialize()
- src.broadcast_status()
+ initialize()
+ broadcast_status()
..()
update_icon()
@@ -46,42 +47,33 @@
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off"
return
- proc
- set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, radio_filter_in)
+ proc/broadcast_status()
+ 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,
+ "panic" = panic,
+ "filter_co2" = scrub_CO2,
+ "filter_toxins" = scrub_Toxins,
+ "filter_n2o" = scrub_N2O,
+ "sigtype" = "status",
+ "setting" = scrub_rate
+ )
+ var/area/alarm_area = get_area(src)
+ if(alarm_area.master.master_air_alarm && alarm_area.master.master_air_alarm.master_is_operating())
+ receive_signal(signal)
+ else
+ for(var/area/A in alarm_area.related)
+ for(var/obj/machinery/alarm/AA in A)
+ receive_signal(signal)
- 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,
- "panic" = panic,
- "filter_co2" = scrub_CO2,
- "filter_toxins" = scrub_Toxins,
- "filter_n2o" = scrub_N2O,
- "sigtype" = "status"
- )
- radio_connection.post_signal(src, signal, radio_filter_out)
-
- return 1
-
- initialize()
- ..()
- 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)
+ return 1
process()
..()
@@ -93,12 +85,11 @@
if(!on)
return 0
-
var/datum/gas_mixture/environment = loc.return_air()
if(scrubbing)
if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0))
- var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles
+ var/transfer_moles = min(1, volume_rate*scrub_rate/environment.volume)*environment.total_moles
//Take a gas sample
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
@@ -136,7 +127,7 @@
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*scrub_rate/environment.volume)
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
@@ -218,6 +209,9 @@
broadcast_status()
return //do not update_icon
+ if("setting" in signal.data)
+ scrub_rate = text2num(signal.data["setting"])
+
// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
spawn(2)
broadcast_status()
diff --git a/code/WorkInProgress/Mini/atmos_control.dm b/code/WorkInProgress/Mini/atmos_control.dm
index b5a656ce352..8dae3d8fb85 100644
--- a/code/WorkInProgress/Mini/atmos_control.dm
+++ b/code/WorkInProgress/Mini/atmos_control.dm
@@ -1,9 +1,9 @@
/obj/item/weapon/circuitboard/atmoscontrol
- name = "Central Atmospherics Computer Circuitboard"
+ name = "\improper Central Atmospherics Computer Circuitboard"
build_path = "/obj/machinery/computer/security/atmoscontrol"
/obj/machinery/computer/atmoscontrol
- name = "Central Atmospherics Computer"
+ name = "\improper Central Atmospherics Computer"
icon = 'computer.dmi'
icon_state = "computer_generic"
density = 1
@@ -18,7 +18,7 @@
user.machine = src
var/dat = "Main Menu
"
if(current)
- dat += src.specific()
+ dat += specific()
else
for(var/obj/machinery/alarm/alarm in world)
dat += ""
@@ -37,8 +37,8 @@
return ""
var/dat = "[current.name]
"
dat += current.return_status()
- if(current.remote_control || overridden && current.rcon_setting)
- dat += "
[src.return_controls()]"
+ if(current.remote_control || (overridden && current.rcon_setting) )
+ dat += "
[return_controls()]"
return dat
//a bunch of this is copied from atmos alarms
@@ -69,24 +69,25 @@
//if("adjust_threshold") //was a good idea but required very wide window
if("set_threshold")
var/env = href_list["env"]
- var/varname = href_list["var"]
- var/datum/tlv/tlv = current.TLV[env]
- var/newval = input("Enter [varname] for env", "Alarm triggers", tlv.vars[varname]) as num|null
+ var/threshold = text2num(href_list["var"])
+ var/list/selected = current.TLV[env]
+ var/list/thresholds = list("lower bound", "low warning", "high warning", "upper bound")
+ var/newval = input("Enter [thresholds[threshold]] for [env]", "Alarm triggers", selected[threshold]) as num|null
if (isnull(newval) || ..() || (current.locked && issilicon(usr)))
return
if (newval<0)
- tlv.vars[varname] = -1.0
+ selected[threshold] = -1.0
else if (env=="temperature" && newval>5000)
- tlv.vars[varname] = 5000
+ selected[threshold] = 5000
else if (env=="pressure" && newval>50*ONE_ATMOSPHERE)
- tlv.vars[varname] = 50*ONE_ATMOSPHERE
+ selected[threshold] = 50*ONE_ATMOSPHERE
else if (env!="temperature" && env!="pressure" && newval>200)
- tlv.vars[varname] = 200
+ selected[threshold] = 200
else
newval = round(newval,0.01)
- tlv.vars[varname] = newval
+ selected[threshold] = newval
spawn(1)
- src.updateUsrDialog()
+ updateUsrDialog()
return
if(href_list["screen"])
@@ -98,14 +99,14 @@
if(href_list["atmos_alarm"])
if (current.alarm_area.atmosalert(2))
- current.post_alert(2)
+ current.apply_danger_level(2)
spawn(1)
src.updateUsrDialog()
current.update_icon()
return
if(href_list["atmos_reset"])
if (current.alarm_area.atmosalert(0))
- current.post_alert(0)
+ current.apply_danger_level(0)
spawn(1)
src.updateUsrDialog()
current.update_icon()
@@ -121,11 +122,10 @@
//copypasta from alarm code, changed to work with this without derping hard
//---START COPYPASTA----
-#define AALARM_MODE_SCRUBBING 1
-#define AALARM_MODE_VENTING 2 //makes draught
-#define AALARM_MODE_PANIC 3 //constantly sucks all air
-#define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing
-#define AALARM_MODE_OFF 5
+#define AALARM_MODE_SCRUBBING 1
+#define AALARM_MODE_PANIC 2 //constantly sucks all air
+#define AALARM_MODE_REPLACEMENT 3 //sucks off all air, then refill and swithes to scrubbing
+#define AALARM_MODE_FILL 4 //emergency fill
#define AALARM_SCREEN_MAIN 1
#define AALARM_SCREEN_VENT 2
@@ -151,7 +151,7 @@
"}
if (current.mode==AALARM_MODE_PANIC)
- output += "PANIC SYPHON ACTIVE
turn syphoning off"
+ output += "PANIC SYPHON ACTIVE
turn syphoning off"
else
output += "ACTIVATE PANIC SYPHON IN AREA"
if (AALARM_SCREEN_VENT)
@@ -160,14 +160,8 @@
for(var/id_tag in current.alarm_area.air_vent_names)
var/long_name = current.alarm_area.air_vent_names[id_tag]
var/list/data = current.alarm_area.air_vent_info[id_tag]
- var/state = ""
- if(!data)
- state = " can not be found!"
- data = list("external" = 0) //for "0" instead of empty string
- else if (data["timestamp"]+AALARM_REPORT_TIMEOUT < world.time)
- state = " not responding!"
sensor_data += {"
-[long_name][state]
+[long_name]
Operating:
[data["power"]?"on":"off"]
@@ -203,15 +197,9 @@ siphoning
for(var/id_tag in current.alarm_area.air_scrub_names)
var/long_name = current.alarm_area.air_scrub_names[id_tag]
var/list/data = current.alarm_area.air_scrub_info[id_tag]
- var/state = ""
- if(!data)
- state = " can not be found!"
- data = list("external" = 0) //for "0" instead of empty string
- else if (data["timestamp"]+AALARM_REPORT_TIMEOUT < world.time)
- state = " not responding!"
sensor_data += {"
-[long_name][state]
+[long_name]
Operating:
[data["power"]?"on":"off"]
Type:
@@ -243,11 +231,10 @@ Nitrous Oxide
Main menu
Air machinery mode for the area:"}
var/list/modes = list(
- AALARM_MODE_SCRUBBING = "Filtering",
- AALARM_MODE_VENTING = "Draught",
- AALARM_MODE_PANIC = "PANIC",
- AALARM_MODE_REPLACEMENT = "REPLACE AIR",
- AALARM_MODE_OFF = "Off",
+ AALARM_MODE_SCRUBBING = "Filtering",
+ AALARM_MODE_PANIC = "PANIC",
+ AALARM_MODE_REPLACEMENT = "REPLACE AIR",
+ AALARM_MODE_FILL = "FILL"
)
for (var/m=1,m<=modes.len,m++)
if (current.mode==m)
@@ -278,49 +265,26 @@ table tr:first-child th:first-child { border: none;}
"plasma" = "Toxin",
"other" = "Other",
)
- var/list/thresholds = list("min2", "min1", "max1", "max2")
- var/datum/tlv/tlv
+ var/list/tlv
for (var/g in gases)
- output += {"
-| [gases[g]] |
-"}
+ output += "
|---|
| [gases[g]] | "
tlv = current.TLV[g]
- for (var/v in thresholds)
- output += {"
-
-[tlv.vars[v]>=0?tlv.vars[v]:"OFF"]
- |
-"}
- output += {"
-
-"}
+ for (var/i = 1, i <= 4, i++)
+ output += "[tlv[i]?tlv[i]:"OFF"] | "
+ output += ""
+
tlv = current.TLV["pressure"]
- output += {"
-| Pressure |
-"}
- for (var/v in thresholds)
- output += {"
-
-[tlv.vars[v]>=0?tlv.vars[v]:"OFF"]
- |
-"}
- output += {"
-
-"}
+ output += "| Pressure | "
+ for (var/i = 1, i <= 4, i++)
+ output += "[tlv[i]?tlv[i]:"OFF"] | "
+ output += "
"
+
tlv = current.TLV["temperature"]
- output += {"
-| Temperature |
-"}
- for (var/v in thresholds)
- output += {"
-
-[tlv.vars[v]>=0?tlv.vars[v]:"OFF"]
- |
-"}
- output += {"
-
-"}
- output += {""}
+ output += "| Temperature | "
+ for (var/i = 1, i <= 4, i++)
+ output += "[tlv[i]?tlv[i]:"OFF"] | "
+ output += "
"
+ output += ""
return output
//---END COPYPASTA----
diff --git a/code/ZAS/Connection.dm b/code/ZAS/Connection.dm
index 41fba731be3..aa4c566d65c 100644
--- a/code/ZAS/Connection.dm
+++ b/code/ZAS/Connection.dm
@@ -197,6 +197,8 @@ connection
del src
if(A.HasDoor(B) || B.HasDoor(A))
indirect = 1
+ else
+ indirect = 0
proc/Sanitize()
//If the zones change on connected turfs, update it.
diff --git a/code/game/communications.dm b/code/game/communications.dm
index b5449e60d6e..6e89648c400 100644
--- a/code/game/communications.dm
+++ b/code/game/communications.dm
@@ -123,16 +123,14 @@ var/NUKE_FREQ = 1200 //Randomised on nuke rounds.
#define TRANSMISSION_RADIO 1
/* filters */
-var/const/RADIO_TO_AIRALARM = "1"
-var/const/RADIO_FROM_AIRALARM = "2"
-var/const/RADIO_CHAT = "3"
-var/const/RADIO_ATMOSIA = "4"
-var/const/RADIO_NAVBEACONS = "5"
-var/const/RADIO_AIRLOCK = "6"
-var/const/RADIO_SECBOT = "7"
-var/const/RADIO_MULEBOT = "8"
-var/const/RADIO_MAGNETS = "9"
-var/const/RADIO_POWER = "10"
+var/const/RADIO_CHAT = "1"
+var/const/RADIO_ATMOSIA = "2"
+var/const/RADIO_NAVBEACONS = "3"
+var/const/RADIO_AIRLOCK = "4"
+var/const/RADIO_SECBOT = "5"
+var/const/RADIO_MULEBOT = "6"
+var/const/RADIO_MAGNETS = "7"
+var/const/RADIO_POWER = "8"
var/global/datum/controller/radio/radio_controller
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 49b79a227c6..82a322ff5c6 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -1,5 +1,6 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
-
+////////////////////////////////////////
+//CONTAINS: Air Alarms and Fire Alarms//
+////////////////////////////////////////
/proc/RandomAAlarmWires()
//to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else).
@@ -21,35 +22,36 @@
flagIndex+=1
return AAlarmwires
+#define AALARM_WIRE_IDSCAN 1 //Added wires
+#define AALARM_WIRE_POWER 2
+#define AALARM_WIRE_SYPHON 3
+#define AALARM_WIRE_AI_CONTROL 4
+#define AALARM_WIRE_AALARM 5
+#define AALARM_MODE_SCRUBBING 1
+#define AALARM_MODE_PANIC 2 //constantly sucks all air
+#define AALARM_MODE_REPLACEMENT 3 //sucks off all air, then refill and swithes to scrubbing
+#define AALARM_MODE_FILL 4 //emergency fill
-// A datum for dealing with threshold limit values
-// used in /obj/machinery/alarm
-/datum/tlv
- var/min2
- var/min1
- var/max1
- var/max2
- New(_min2 as num, _min1 as num, _max1 as num, _max2 as num)
- min2 = _min2
- min1 = _min1
- max1 = _max1
- max2 = _max2
- proc/get_danger_level(curval as num)
- if (max2 >=0 && curval>=max2)
- return 2
- if (min2 >=0 && curval<=min2)
- return 2
- if (max1 >=0 && curval>=max1)
- return 1
- if (min1 >=0 && curval<=min1)
- return 1
- return 0
- proc/CopyFrom(datum/tlv/other)
- min2 = other.min2
- min1 = other.min1
- max1 = other.max1
- max2 = other.max2
+#define AALARM_SCREEN_MAIN 1
+#define AALARM_SCREEN_VENT 2
+#define AALARM_SCREEN_SCRUB 3
+#define AALARM_SCREEN_MODE 4
+#define AALARM_SCREEN_SENSORS 5
+
+#define AALARM_REPORT_TIMEOUT 100
+
+#define RCON_NO 1
+#define RCON_AUTO 2
+#define RCON_YES 3
+
+//all air alarms in area are connected via magic
+/area
+ var/obj/machinery/alarm/master_air_alarm
+ var/list/air_vent_names
+ var/list/air_scrub_names
+ var/list/air_vent_info
+ var/list/air_scrub_info
/obj/machinery/alarm
name = "alarm"
@@ -60,968 +62,271 @@
idle_power_usage = 4
active_power_usage = 8
power_channel = ENVIRON
- req_access = list(access_atmospherics)
+ req_access = list(access_atmospherics, access_engine_equip)
var/frequency = 1439
//var/skipprocess = 0 //Experimenting
var/alarm_frequency = 1437
var/remote_control = 0
-#define RCON_NO 1
-#define RCON_AUTO 2
-#define RCON_YES 3
var/rcon_setting = 2
var/rcon_time = 0
-#define AALARM_REPORT_TIMEOUT 100
- var/datum/radio_frequency/radio_connection
var/locked = 1
var/wiresexposed = 0 // If it's been screwdrivered open.
var/aidisabled = 0
var/AAlarmwires = 31
var/shorted = 0
- // Uses code from apc.dm
-
-#define AALARM_WIRE_IDSCAN 1 //Added wires
-#define AALARM_WIRE_POWER 2
-#define AALARM_WIRE_SYPHON 3
-#define AALARM_WIRE_AI_CONTROL 4
-#define AALARM_WIRE_AALARM 5
-
-
-#define AALARM_MODE_SCRUBBING 1
-#define AALARM_MODE_VENTING 2 //makes draught
-#define AALARM_MODE_PANIC 3 //constantly sucks all air
-#define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing
-#define AALARM_MODE_OFF 5
var/mode = AALARM_MODE_SCRUBBING
-
-#define AALARM_SCREEN_MAIN 1
-#define AALARM_SCREEN_VENT 2
-#define AALARM_SCREEN_SCRUB 3
-#define AALARM_SCREEN_MODE 4
-#define AALARM_SCREEN_SENSORS 5
var/screen = AALARM_SCREEN_MAIN
var/area_uid
var/area/alarm_area
var/danger_level = 0
- // breathable air according to human/Life()
- var/list/TLV = list(
- "oxygen" = new/datum/tlv( 16, 19, 135, 140), // Partial pressure, kpa
- "carbon dioxide" = new/datum/tlv(-1.0, -1.0, 5, 10), // Partial pressure, kpa
- "plasma" = new/datum/tlv(-1.0, -1.0, 0.2, 0.5), // Partial pressure, kpa
- "other" = new/datum/tlv(-1.0, -1.0, 0.5, 1.0), // Partial pressure, kpa
- "pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20), /* kpa */
- "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), // K
- )
+ var/list/TLV = list()
-/*
- // breathable air according to wikipedia
- "oxygen" = new/datum/tlv( 9, 12, 158, 296), // Partial pressure, kpa
- "carbon dioxide" = new/datum/tlv(-1.0,-1.0, 0.5, 1), // Partial pressure, kpa
-*/
-/obj/machinery/alarm/server
- //req_access = list(access_rd) //no, let departaments to work together
- TLV = list(
- "oxygen" = new/datum/tlv(-1.0, -1.0,-1.0,-1.0), // Partial pressure, kpa
- "carbon dioxide" = new/datum/tlv(-1.0, -1.0, 5, 10), // Partial pressure, kpa
- "plasma" = new/datum/tlv(-1.0, -1.0, 0.2, 0.5), // Partial pressure, kpa
- "other" = new/datum/tlv(-1.0, -1.0, 0.5, 1.0), // Partial pressure, kpa
- "pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.40,ONE_ATMOSPHERE*1.60), /* kpa */
- "temperature" = new/datum/tlv(40, 60, 100, 120), // K
- )
+ server/New()
+ ..()
+ req_access = list(access_rd, access_engine_equip, access_atmospherics)
+ TLV["oxygen"] = list(-1.0, -1.0,-1.0,-1.0) // Partial pressure, kpa
+ TLV["carbon dioxide"] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa
+ TLV["plasma"] = list(-1.0, -1.0, 0.2, 0.5) // Partial pressure, kpa
+ TLV["other"] = list(-1.0, -1.0, 0.5, 1.0) // Partial pressure, kpa
+ TLV["pressure"] = list(ONE_ATMOSPHERE*0.50,ONE_ATMOSPHERE*0.70,ONE_ATMOSPHERE*1.40,ONE_ATMOSPHERE*1.60) /* kpa */
+ TLV["temperature"] = list(40, 60, 100, 120) // K
-/obj/machinery/alarm/kitchen_cold_room
- TLV = list(
- "oxygen" = new/datum/tlv( 16, 19, 135, 140), // Partial pressure, kpa
- "carbon dioxide" = new/datum/tlv(-1.0, -1.0, 5, 10), // Partial pressure, kpa
- "plasma" = new/datum/tlv(-1.0, -1.0, 0.2, 0.5), // Partial pressure, kpa
- "other" = new/datum/tlv(-1.0, -1.0, 0.5, 1.0), // Partial pressure, kpa
- "pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.50,ONE_ATMOSPHERE*1.60), /* kpa */
- "temperature" = new/datum/tlv(200, 210, 273.15, 283.15), // K
- )
+ New()
+ ..()
+ alarm_area = get_area(src)
+ if (alarm_area.master)
+ alarm_area = alarm_area.master
+ area_uid = alarm_area.uid
+ if (name == "alarm")
+ name = "[alarm_area.name] Air Alarm"
-//all air alarms in area are connected via magic
-/area
- var/obj/machinery/alarm/master_air_alarm
- var/list/air_vent_names
- var/list/air_scrub_names
- var/list/air_vent_info
- var/list/air_scrub_info
+ // breathable air according to human/Life()
+ TLV["oxygen"] = list(16, 19, 135, 140) // Partial pressure, kpa
+ TLV["carbon dioxide"] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa
+ TLV["plasma"] = list(-1.0, -1.0, 0.2, 0.5) // Partial pressure, kpa
+ TLV["other"] = list(-1.0, -1.0, 0.5, 1.0) // Partial pressure, kpa
+ TLV["pressure"] = list(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20) /* kpa */
+ TLV["temperature"] = list(T0C, T0C+10, T0C+40, T0C+66) // K
-/obj/machinery/alarm/New()
- ..()
- alarm_area = get_area(loc)
- if (alarm_area.master)
- alarm_area = alarm_area.master
- area_uid = alarm_area.uid
- if (name == "alarm")
- name = "[alarm_area.name] Air Alarm"
+ initialize()
+ if (!master_is_operating())
+ elect_master()
-/obj/machinery/alarm/initialize()
- set_frequency(frequency)
- if (!master_is_operating())
- elect_master()
-/obj/machinery/alarm/proc/master_is_operating()
- return alarm_area.master_air_alarm && !(alarm_area.master_air_alarm.stat & (NOPOWER|BROKEN))
-
-/obj/machinery/alarm/proc/elect_master()
- for (var/area/A in alarm_area.related)
- for (var/obj/machinery/alarm/AA in A)
- if (!(AA.stat & (NOPOWER|BROKEN)))
- alarm_area.master_air_alarm = AA
- if (!alarm_area.air_vent_names)
- alarm_area.air_vent_names = new
- alarm_area.air_scrub_names = new
- alarm_area.air_vent_info = new
- alarm_area.air_scrub_info = new
- return 1
- return 0
-
-/obj/machinery/alarm/attack_hand(mob/user)
- . = ..()
- if (.)
- return
- user.machine = src
-
- if ( (get_dist(src, user) > 1 ))
- if (!istype(user, /mob/living/silicon))
- user.machine = null
- user << browse(null, "window=air_alarm")
- user << browse(null, "window=AAlarmwires")
+ process()
+ if((stat & (NOPOWER|BROKEN)) || shorted)
return
+ var/turf/simulated/location = src.loc
+ if (!istype(location))
+ return 0
- else if (istype(user, /mob/living/silicon) && src.aidisabled)
- user << "AI control for this Air Alarm interface has been disabled."
- user << browse(null, "window=air_alarm")
- return
+ var/datum/gas_mixture/environment = location.return_air()
+ var/partial_pressure = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
- if(wiresexposed && (!istype(user, /mob/living/silicon)))
- var/t1 = text("[alarm_area.name] Air Alarm WiresAccess Panel
\n")
- var/list/AAlarmwires = list(
- "Orange" = 1,
- "Dark red" = 2,
- "White" = 3,
- "Yellow" = 4,
- "Black" = 5,
- )
- for(var/wiredesc in AAlarmwires)
- var/is_uncut = src.AAlarmwires & AAlarmWireColorToFlag[AAlarmwires[wiredesc]]
- t1 += "[wiredesc] wire: "
- if(!is_uncut)
- t1 += "Mend"
+ var/list/current_settings = TLV["pressure"]
+ var/environment_pressure = environment.return_pressure()
+ var/pressure_dangerlevel = get_danger_level(environment_pressure, current_settings)
- else
- t1 += "Cut "
- t1 += "Pulse "
+ current_settings = TLV["oxygen"]
+ var/oxygen_dangerlevel = get_danger_level(environment.oxygen*partial_pressure, current_settings)
- t1 += "
"
- t1 += text("
\n[(src.locked ? "The Air Alarm is locked." : "The Air Alarm is unlocked.")]
\n[((src.shorted || (stat & (NOPOWER|BROKEN))) ? "The Air Alarm is offline." : "The Air Alarm is working properly!")]
\n[(src.aidisabled ? "The 'AI control allowed' light is off." : "The 'AI control allowed' light is on.")]")
- t1 += text("Close
")
- user << browse(t1, "window=AAlarmwires")
- onclose(user, "AAlarmwires")
+ current_settings = TLV["carbon dioxide"]
+ var/co2_dangerlevel = get_danger_level(environment.carbon_dioxide*partial_pressure, current_settings)
- if(!shorted)
- user << browse(return_text(user),"window=air_alarm")
- onclose(user, "air_alarm")
- refresh_all()
+ current_settings = TLV["plasma"]
+ var/plasma_dangerlevel = get_danger_level(environment.toxins*partial_pressure, current_settings)
- return
+ current_settings = TLV["other"]
+ var/other_moles = 0.0
+ for(var/datum/gas/G in environment.trace_gases)
+ other_moles+=G.moles
+ var/other_dangerlevel = get_danger_level(other_moles*partial_pressure, current_settings)
+ current_settings = TLV["temperature"]
+ var/temperature_dangerlevel = get_danger_level(environment.temperature, current_settings)
-/obj/machinery/alarm/proc/isWireColorCut(var/wireColor)
- var/wireFlag = AAlarmWireColorToFlag[wireColor]
- return ((src.AAlarmwires & wireFlag) == 0)
+ var/old_danger_level = danger_level
+ danger_level = max(pressure_dangerlevel,
+ oxygen_dangerlevel,
+ co2_dangerlevel,
+ plasma_dangerlevel,
+ other_dangerlevel,
+ temperature_dangerlevel)
-/obj/machinery/alarm/proc/isWireCut(var/wireIndex)
- var/wireFlag = AAlarmIndexToFlag[wireIndex]
- return ((src.AAlarmwires & wireFlag) == 0)
-/obj/machinery/alarm/proc/cut(var/wireColor)
- var/wireFlag = AAlarmWireColorToFlag[wireColor]
- var/wireIndex = AAlarmWireColorToIndex[wireColor]
- AAlarmwires &= ~wireFlag
- switch(wireIndex)
- if(AALARM_WIRE_IDSCAN)
- src.locked = 1
- //world << "Idscan wire cut"
+ if (old_danger_level != danger_level)
+ apply_danger_level(danger_level)
- if(AALARM_WIRE_POWER)
- src.shock(usr, 50)
- src.shorted = 1
- update_icon()
- //world << "Power wire cut"
- if (AALARM_WIRE_AI_CONTROL)
- if (src.aidisabled == 0)
- src.aidisabled = 1
- //world << "AI Control Wire Cut"
-
- if(AALARM_WIRE_SYPHON)
- mode = AALARM_MODE_PANIC
- apply_mode()
- //world << "Syphon Wire Cut"
-
- if(AALARM_WIRE_AALARM)
-
- if (alarm_area.atmosalert(2))
- post_alert(2)
- spawn(1)
- src.updateUsrDialog()
- update_icon()
-
- //world << "AAlarm Wire Cut"
-
- src.updateDialog()
-
- return
-
-/obj/machinery/alarm/proc/mend(var/wireColor)
- var/wireFlag = AAlarmWireColorToFlag[wireColor]
- var/wireIndex = AAlarmWireColorToIndex[wireColor] //not used in this function
- AAlarmwires |= wireFlag
- switch(wireIndex)
- if(AALARM_WIRE_IDSCAN)
- //world << "Idscan wire mended"
-
- if(AALARM_WIRE_POWER)
- src.shorted = 0
- src.shock(usr, 50)
- update_icon()
- //world << "Power wire mended"
-
- if(AALARM_WIRE_AI_CONTROL)
- if (src.aidisabled == 1)
- src.aidisabled = 0
- //world << "AI Cont. wire mended"
-
-
- // if(AALARM_WIRE_SYPHON)
- // world << "Syphon Wire mended"
-
-
- // if(AALARM_WIRE_AALARM)
- //world << "AAlarm Wire mended"
-
- src.updateDialog()
- return
-
-/obj/machinery/alarm/proc/pulse(var/wireColor)
- //var/wireFlag = AAlarmWireColorToFlag[wireColor] //not used in this function
- var/wireIndex = AAlarmWireColorToIndex[wireColor]
- switch(wireIndex)
- if(AALARM_WIRE_IDSCAN) //unlocks for 30 seconds, if you have a better way to hack I'm all ears
- src.locked = 0
- spawn(300)
- src.locked = 1
- //world << "Idscan wire pulsed"
-
- if (AALARM_WIRE_POWER)
- // world << "Power wire pulsed"
- if(shorted == 0)
- shorted = 1
- update_icon()
-
- spawn(1200)
- if(shorted == 1)
- shorted = 0
- update_icon()
-
-
- if (AALARM_WIRE_AI_CONTROL)
- // world << "AI Control wire pulsed"
- if (src.aidisabled == 0)
- src.aidisabled = 1
- src.updateDialog()
- spawn(10)
- if (src.aidisabled == 1)
- src.aidisabled = 0
- src.updateDialog()
-
- if(AALARM_WIRE_SYPHON)
- // world << "Syphon wire pulsed"
- mode = AALARM_MODE_REPLACEMENT
- apply_mode()
-
- if(AALARM_WIRE_AALARM)
- // world << "Aalarm wire pulsed"
- if (alarm_area.atmosalert(0))
- post_alert(0)
- spawn(1)
- src.updateUsrDialog()
- update_icon()
-
- src.updateDialog()
- return
-
-/obj/machinery/alarm/proc/shock(mob/user, prb)
- if((stat & (NOPOWER))) // unpowered, no shock
- return 0
- if(!prob(prb))
- return 0 //you lucked out, no shock for you
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start() //sparks always.
- if (electrocute_mob(user, get_area(src), src))
- return 1
- else
- return 0
-
-/obj/machinery/alarm/Topic(href, href_list)
- src.add_fingerprint(usr)
- usr.machine = src
-
- if ( (get_dist(src, usr) > 1 ))
- if (!istype(usr, /mob/living/silicon))
- usr.machine = null
- usr << browse(null, "window=air_alarm")
- usr << browse(null, "window=AAlarmwires")
- return
-
- if (href_list["AAlarmwires"])
- var/t1 = text2num(href_list["AAlarmwires"])
- if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) ))
- usr << "You need wirecutters!"
- return
- if (src.isWireColorCut(t1))
- src.mend(t1)
- else
- src.cut(t1)
- else if (href_list["pulse"])
- var/t1 = text2num(href_list["pulse"])
- if (!istype(usr.equipped(), /obj/item/device/multitool))
- usr << "You need a multitool!"
- return
- if (src.isWireColorCut(t1))
- usr << "You can't pulse a cut wire."
- return
- else
- src.pulse(t1)
-
-/obj/machinery/alarm/receive_signal(datum/signal/signal)
- if(stat & (NOPOWER|BROKEN))
- return
- if (alarm_area.master_air_alarm != src)
- if (master_is_operating())
- return
- elect_master()
- if (alarm_area.master_air_alarm != src)
- return
- if(!signal || signal.encryption)
- return
- var/id_tag = signal.data["tag"]
- if (!id_tag)
- return
- if (signal.data["area"] != area_uid)
- return
- if (signal.data["sigtype"] != "status")
- return
-
- var/dev_type = signal.data["device"]
- if(!(id_tag in alarm_area.air_scrub_names) && !(id_tag in alarm_area.air_vent_names))
- register_env_machine(id_tag, dev_type)
- if(dev_type == "AScr")
- alarm_area.air_scrub_info[id_tag] = signal.data
- else if(dev_type == "AVP")
- alarm_area.air_vent_info[id_tag] = signal.data
-
-/obj/machinery/alarm/proc/register_env_machine(var/m_id, var/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/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_TO_AIRALARM)
-
-/obj/machinery/alarm/proc/send_signal(var/target, var/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)
-// world << text("Signal [] Broadcasted to []", command, target)
-
- return 1
-
-/obj/machinery/alarm/proc/return_text(mob/user)
- if(!(istype(user, /mob/living/silicon)) && locked)
- return "[src][return_status()]
[rcon_text()]
(Swipe ID card to unlock interface)"
- else
- return "[src][return_status()]
[rcon_text()]
[return_controls()]"
-
-/obj/machinery/alarm/proc/return_status()
- var/turf/location = src.loc
- var/datum/gas_mixture/environment = location.return_air()
- var/total = environment.oxygen + environment.carbon_dioxide + environment.toxins + environment.nitrogen
- var/output = "Air Status:
"
-
- if(total == 0)
- output +={"Warning: Cannot obtain air sample for analysis."}
- return output
-
- output += {"
-
-"}
- var/datum/tlv/cur_tlv
- var/GET_PP = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
-
- cur_tlv = TLV["pressure"]
- var/environment_pressure = environment.return_pressure()
- var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure)
-
- cur_tlv = TLV["oxygen"]
- var/oxygen_dangerlevel = cur_tlv.get_danger_level(environment.oxygen*GET_PP)
- var/oxygen_percent = round(environment.oxygen / total * 100, 2)
-
- cur_tlv = TLV["carbon dioxide"]
- var/co2_dangerlevel = cur_tlv.get_danger_level(environment.carbon_dioxide*GET_PP)
- var/co2_percent = round(environment.carbon_dioxide / total * 100, 2)
-
- cur_tlv = TLV["plasma"]
- var/plasma_dangerlevel = cur_tlv.get_danger_level(environment.toxins*GET_PP)
- var/plasma_percent = round(environment.toxins / total * 100, 2)
-
- cur_tlv = TLV["other"]
- var/other_moles = 0.0
- for(var/datum/gas/G in environment.trace_gases)
- other_moles+=G.moles
- var/other_dangerlevel = cur_tlv.get_danger_level(other_moles*GET_PP)
-
- cur_tlv = TLV["temperature"]
- var/temperature_dangerlevel = cur_tlv.get_danger_level(environment.temperature)
-
- output += {"
-Pressure: [environment_pressure]kPa
-Oxygen: [oxygen_percent]%
-Carbon dioxide: [co2_percent]%
-Toxins: [plasma_percent]%
-"}
- if (other_dangerlevel==2)
- output += {"Notice: High Concentration of Unknown Particles Detected
"}
- else if (other_dangerlevel==1)
- output += {"Notice: Low Concentration of Unknown Particles Detected
"}
-
- output += {"
-Temperature: [environment.temperature]K
-"}
-
- var/display_danger_level = max(
- pressure_dangerlevel,
- oxygen_dangerlevel,
- co2_dangerlevel,
- plasma_dangerlevel,
- other_dangerlevel,
- temperature_dangerlevel
- )
-
- //Overall status
- output += {"Local Status: "}
- if(display_danger_level == 2)
- output += {"DANGER: Internals Required"}
- else if(display_danger_level == 1)
- output += {"Caution"}
- else if (alarm_area.atmosalm)
- output += {"Caution: Atmos alert in area"}
- else
- output += {"Optimal"}
-
- return output
-
-/obj/machinery/alarm/proc/rcon_text()
- var/dat = "Remote Control:
"
- if(src.rcon_setting == RCON_NO)
- dat += "Off"
- else
- dat += "Off"
- dat += " | "
- if(src.rcon_setting == RCON_AUTO)
- dat += "Auto"
- else
- dat += "Auto"
- dat += " | "
- if(src.rcon_setting == RCON_YES)
- dat += "On"
- else
- dat += "On"
- return dat
-
-/obj/machinery/alarm/proc/return_controls()
- var/output = ""//"[alarm_zone] Air [name]
"
-
- switch(screen)
- if (AALARM_SCREEN_MAIN)
- if(alarm_area.atmosalm)
- output += {"Reset - Atmospheric Alarm
"}
- else
- output += {"Activate - Atmospheric Alarm
"}
-
- output += {"
-Scrubbers Control
-Vents Control
-Set environmentals mode
-Sensor Settings
-
-"}
- if (mode==AALARM_MODE_PANIC)
- output += "PANIC SYPHON ACTIVE
Turn syphoning off"
- else
- output += "ACTIVATE PANIC SYPHON IN AREA"
- if (AALARM_SCREEN_VENT)
- var/sensor_data = ""
- if(alarm_area.air_vent_names.len)
- for(var/id_tag in alarm_area.air_vent_names)
- var/long_name = alarm_area.air_vent_names[id_tag]
- var/list/data = alarm_area.air_vent_info[id_tag]
- if(!data)
- continue;
- var/state = ""
-
- sensor_data += {"
-[long_name][state]
-Operating:
-[data["power"]?"on":"off"]
-
-Pressure checks:
-external
-internal
-
-External pressure bound:
--
--
--
--
-[data["external"]]
-+
-+
-+
-+
- (reset)
-
-"}
- if (data["direction"] == "siphon")
- sensor_data += {"
-Direction:
-siphoning
-
-"}
- sensor_data += {"
"}
- else
- sensor_data = "No vents connected.
"
- output = {"Main menu
[sensor_data]"}
- if (AALARM_SCREEN_SCRUB)
- var/sensor_data = ""
- 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/data = alarm_area.air_scrub_info[id_tag]
- if(!data)
- continue;
- var/state = ""
-
- sensor_data += {"
-[long_name][state]
-Operating:
-[data["power"]?"on":"off"]
-Type:
-[data["scrubbing"]?"scrubbing":"syphoning"]
-"}
-
- 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"]
-
-"}
- sensor_data += {"
-Panic syphon: [data["panic"]?"PANIC SYPHON ACTIVATED":""]
-Dea":"red'>A")]ctivate
-
-"}
- else
- sensor_data = "No scrubbers connected.
"
- output = {"Main menu
[sensor_data]"}
-
- if (AALARM_SCREEN_MODE)
- output += {"
-Main menu
-Air machinery mode for the area:"}
- var/list/modes = list(
- AALARM_MODE_SCRUBBING = "Filtering",
- AALARM_MODE_VENTING = "Draught",
- AALARM_MODE_PANIC = "PANIC",
- AALARM_MODE_REPLACEMENT = "REPLACE AIR",
- AALARM_MODE_OFF = "Off",
- )
- for (var/m=1,m<=modes.len,m++)
- if (mode==m)
- output += {"- [modes[m]] (selected)
"}
+ //atmos computer remote controll stuff
+ switch(rcon_setting)
+ if(RCON_NO)
+ remote_control = 0
+ if(RCON_AUTO)
+ if(danger_level == 2)
+ remote_control = 1
else
- output += {"- [modes[m]]
"}
- output += "
"
- if (AALARM_SCREEN_SENSORS)
- output += {"
-Main menu
-Alarm thresholds:
-Partial pressure for gases
-
-
- | min2 | min1 | max1 | max2 |
-"}
- var/list/gases = list(
- "oxygen" = "O2",
- "carbon dioxide" = "CO2",
- "plasma" = "Toxin",
- "other" = "Other",
- )
- var/list/thresholds = list("min2", "min1", "max1", "max2")
- var/datum/tlv/tlv
- for (var/g in gases)
- output += {"
-| [gases[g]] |
-"}
- tlv = TLV[g]
- for (var/v in thresholds)
- output += {"
-
-[tlv.vars[v]>=0?tlv.vars[v]:"OFF"]
- |
-"}
- output += {"
-
-"}
- tlv = TLV["pressure"]
- output += {"
-| Pressure |
-"}
- for (var/v in thresholds)
- output += {"
-
-[tlv.vars[v]>=0?tlv.vars[v]:"OFF"]
- |
-"}
- output += {"
-
-"}
- tlv = TLV["temperature"]
- output += {"
-| Temperature |
-"}
- for (var/v in thresholds)
- output += {"
-
-[tlv.vars[v]>=0?tlv.vars[v]:"OFF"]
- |
-"}
- output += {"
-
-"}
- output += {"
"}
-
- return output
-
-/obj/machinery/alarm/Topic(href, href_list)
- if(..())
- return
- if(href_list["rcon"])
- rcon_setting = text2num(href_list["rcon"])
- src.updateUsrDialog()
-
- if ( (get_dist(src, usr) > 1 ))
- if (!istype(usr, /mob/living/silicon))
- usr.machine = null
- usr << browse(null, "window=air_alarm")
-
- if(href_list["command"])
- var/device_id = href_list["id_tag"]
- switch(href_list["command"])
- if(
- "power",
- "adjust_external_pressure",
- "set_external_pressure",
- "checks",
- "co2_scrub",
- "tox_scrub",
- "n2o_scrub",
- "panic_siphon",
- "scrubbing"
- )
- send_signal(device_id, list (href_list["command"] = text2num(href_list["val"])))
- spawn(3)
- src.updateUsrDialog()
-
- //if("adjust_threshold") //was a good idea but required very wide window
- if("set_threshold")
- var/env = href_list["env"]
- var/varname = href_list["var"]
- var/datum/tlv/tlv = TLV[env]
- var/newval = input("Enter [varname] for env", "Alarm triggers", tlv.vars[varname]) as num|null
- if (isnull(newval) || ..() || (locked && issilicon(usr)))
- return
- if (newval<0)
- tlv.vars[varname] = -1.0
- else if (env=="temperature" && newval>5000)
- tlv.vars[varname] = 5000
- else if (env=="pressure" && newval>50*ONE_ATMOSPHERE)
- tlv.vars[varname] = 50*ONE_ATMOSPHERE
- else if (env!="temperature" && env!="pressure" && newval>200)
- tlv.vars[varname] = 200
- else
- newval = round(newval,0.01)
- tlv.vars[varname] = newval
- spawn(1)
- src.updateUsrDialog()
-
- if(href_list["screen"])
- screen = text2num(href_list["screen"])
- spawn(1)
- src.updateUsrDialog()
-
-
- if(href_list["atmos_alarm"])
- if (alarm_area.atmosalert(2))
- post_alert(2)
- spawn(1)
- src.updateUsrDialog()
- update_icon()
- if(href_list["atmos_reset"])
- if (alarm_area.atmosalert(0))
- post_alert(0)
- spawn(1)
- src.updateUsrDialog()
- update_icon()
-
- if(href_list["mode"])
- mode = text2num(href_list["mode"])
- apply_mode()
- spawn(5)
- src.updateUsrDialog()
-
- return
-
-/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"= 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"= ONE_ATMOSPHERE
- ))
-
- if(AALARM_MODE_VENTING)
- for(var/device_id in alarm_area.air_scrub_names)
- send_signal(device_id, list(
- "power"= 1,
- "panic_siphon"= 0,
- "scrubbing"= 0
- ))
- for(var/device_id in alarm_area.air_vent_names)
- send_signal(device_id, list(
- "power"= 1,
- "checks"= 1,
- "set_external_pressure"= ONE_ATMOSPHERE
- ))
- if(
- AALARM_MODE_PANIC,
- AALARM_MODE_REPLACEMENT
- )
- 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"= 0
- ))
- /*if(AALARM_MODE_OFF) Commented out cause the "turn off panic" uses scrubbing mode now instead.
- for(var/device_id in alarm_area.air_scrub_names)
- send_signal(device_id, list(
- "panic_siphon" = 0
- ))
- for(var/device_id in alarm_area.air_vent_names)
- send_signal(device_id, list(
- "power"= 1
- ))*/
-
-/obj/machinery/alarm/update_icon()
- if(wiresexposed)
- icon_state = "alarmx"
- return
- if((stat & (NOPOWER|BROKEN)) || shorted)
- icon_state = "alarmp"
- return
- switch(max(danger_level, alarm_area.atmosalm))
- if (0)
- src.icon_state = "alarm0"
- if (1)
- src.icon_state = "alarm2" //yes, alarm2 is yellow alarm
- if (2)
- src.icon_state = "alarm1"
-
-/obj/machinery/alarm/process()
- if((stat & (NOPOWER|BROKEN)) || shorted)
- return
-
- var/turf/simulated/location = src.loc
- if (!istype(location))
- return 0
-
- var/datum/gas_mixture/environment = location.return_air()
-
- var/datum/tlv/cur_tlv
- var/GET_PP = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
-
- cur_tlv = TLV["pressure"]
- var/environment_pressure = environment.return_pressure()
- var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure)
-
- cur_tlv = TLV["oxygen"]
- var/oxygen_dangerlevel = cur_tlv.get_danger_level(environment.oxygen*GET_PP)
-
- cur_tlv = TLV["carbon dioxide"]
- var/co2_dangerlevel = cur_tlv.get_danger_level(environment.carbon_dioxide*GET_PP)
-
- cur_tlv = TLV["plasma"]
- var/plasma_dangerlevel = cur_tlv.get_danger_level(environment.toxins*GET_PP)
-
- cur_tlv = TLV["other"]
- var/other_moles = 0.0
- for(var/datum/gas/G in environment.trace_gases)
- other_moles+=G.moles
- var/other_dangerlevel = cur_tlv.get_danger_level(other_moles*GET_PP)
-
- cur_tlv = TLV["temperature"]
- var/temperature_dangerlevel = cur_tlv.get_danger_level(environment.temperature)
-
- var/old_danger_level = danger_level
- danger_level = max(
- pressure_dangerlevel,
- oxygen_dangerlevel,
- co2_dangerlevel,
- plasma_dangerlevel,
- other_dangerlevel,
- temperature_dangerlevel
- )
- if (old_danger_level!=danger_level)
- apply_danger_level()
-
- if (mode==AALARM_MODE_REPLACEMENT && environment_pressure 0)
- rcon_time--
- else if(rcon_setting == RCON_AUTO)
- remote_control = 0
- src.updateDialog()
- return
+ updateDialog()
+ return
-/obj/machinery/alarm/proc/post_alert(alert_level)
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(alarm_frequency)
+ proc/master_is_operating()
+ return alarm_area.master_air_alarm && !(alarm_area.master_air_alarm.stat & (NOPOWER|BROKEN))
- if(!frequency) return
- var/datum/signal/alert_signal = new
- alert_signal.source = src
- alert_signal.transmission_method = 1
- alert_signal.data["zone"] = alarm_area.name
- alert_signal.data["type"] = "Atmospheric"
+ proc/elect_master()
+ for (var/area/A in alarm_area.related)
+ for (var/obj/machinery/alarm/AA in A)
+ if (!(AA.stat & (NOPOWER|BROKEN)))
+ alarm_area.master_air_alarm = AA
+ if (!alarm_area.air_vent_names)
+ alarm_area.air_vent_names = list()
+ alarm_area.air_scrub_names = list()
+ alarm_area.air_vent_info = list()
+ alarm_area.air_scrub_info = list()
+ return 1
+ return 0
- if(alert_level==2)
- alert_signal.data["alert"] = "severe"
- tension_master.new_air_alarm() //log this for stats purposes
- else if (alert_level==1)
- alert_signal.data["alert"] = "minor"
- else if (alert_level==0)
- alert_signal.data["alert"] = "clear"
-
- frequency.post_signal(src, alert_signal)
-
-/obj/machinery/alarm/proc/apply_danger_level()
- var/new_area_danger_level = 0
- for (var/area/A in alarm_area.related)
- for (var/obj/machinery/alarm/AA in A)
- 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)) //if area was in normal state or if area was in alert state
- post_alert(new_area_danger_level)
-
-// if(danger_level > 1)
- // air_doors_close(0)
-// else
- // air_doors_open(0)
+ proc/get_danger_level(var/current_value, var/list/danger_levels)
+ if(current_value >= danger_levels[4] || current_value <= danger_levels[1])
+ return 2
+ if(current_value >= danger_levels[3] || current_value <= danger_levels[2])
+ return 1
+ return 0
update_icon()
+ if(wiresexposed)
+ icon_state = "alarmx"
+ return
+ if((stat & (NOPOWER|BROKEN)) || shorted)
+ icon_state = "alarmp"
+ return
+ switch(max(danger_level, alarm_area.atmosalm))
+ if (0)
+ icon_state = "alarm0"
+ if (1)
+ icon_state = "alarm2" //yes, alarm2 is yellow alarm
+ if (2)
+ icon_state = "alarm1"
+
+ proc/send_signal(var/target, var/list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise
+
+ 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"
+
+ var/obj/machinery/target_machine = machines[target]
+ target_machine.receive_signal(signal)
+
+ return 1
+
+ receive_signal(datum/signal/signal)
+ if(stat & (NOPOWER|BROKEN))
+ return
+ if (alarm_area.master_air_alarm != src)
+ if (master_is_operating())
+ return
+ elect_master()
+ if (alarm_area.master_air_alarm != src)
+ return
+ if(!signal || signal.encryption)
+ return
+ var/id_tag = signal.data["tag"]
+ if (!id_tag)
+ return
+ if (signal.data["area"] != area_uid)
+ return
+ if (signal.data["sigtype"] != "status")
+ return
+
+ var/dev_type = signal.data["device"]
+ if(!(id_tag in alarm_area.air_scrub_names) && !(id_tag in alarm_area.air_vent_names))
+ register_env_machine(id_tag, dev_type)
+ if(dev_type == "AScr")
+ alarm_area.air_scrub_info[id_tag] = signal.data
+ else if(dev_type == "AVP")
+ alarm_area.air_vent_info[id_tag] = signal.data
+
+ proc/register_env_machine(var/m_id, var/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) )
+
+ 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
+ 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, "setting"= 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, "setting"= 1, "set_external_pressure"= target_pressure) )
+
+ if(AALARM_MODE_PANIC)
+ 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"= 0) )
+
+ if(AALARM_MODE_REPLACEMENT)
+ for(var/device_id in alarm_area.air_scrub_names)
+ send_signal(device_id, list("power"= 1, "co2_scrub"= 1, "setting"= 2, "scrubbing"= 1, "panic_siphon"= 0) )
+ for(var/device_id in alarm_area.air_vent_names)
+ send_signal(device_id, list("power"= 1, "checks"= 1, "setting"= 2, "set_external_pressure"= target_pressure) )
+
+ 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, "setting"= 2, "set_external_pressure"= target_pressure) )
+
+ proc/apply_danger_level(var/new_danger_level)
+ alarm_area.atmosalm = new_danger_level
+
+ for (var/area/A in alarm_area.related)
+ for (var/obj/machinery/alarm/AA in A)
+ if (!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.danger_level != new_danger_level)
+ AA.update_icon()
+
+ if(danger_level > 2)
+ air_doors_close(0)
+ else
+ air_doors_open(0)
+
+ update_icon()
+
proc/air_doors_close(manual)
var/area/A = get_area(src)
if(!A.master.air_doors_activated)
@@ -1078,6 +383,531 @@ table tr:first-child th:first-child { border: none;}
E:air_locked = null
E.update_icon()
+///////////
+//HACKING//
+///////////
+ proc/isWireColorCut(var/wireColor)
+ var/wireFlag = AAlarmWireColorToFlag[wireColor]
+ return ((AAlarmwires & wireFlag) == 0)
+
+ proc/isWireCut(var/wireIndex)
+ var/wireFlag = AAlarmIndexToFlag[wireIndex]
+ return ((AAlarmwires & wireFlag) == 0)
+
+ proc/cut(var/wireColor)
+ var/wireFlag = AAlarmWireColorToFlag[wireColor]
+ var/wireIndex = AAlarmWireColorToIndex[wireColor]
+ AAlarmwires &= ~wireFlag
+ switch(wireIndex)
+ if(AALARM_WIRE_IDSCAN)
+ locked = 1
+
+ if(AALARM_WIRE_POWER)
+ shock(usr, 50)
+ shorted = 1
+ update_icon()
+
+ if (AALARM_WIRE_AI_CONTROL)
+ if (aidisabled == 0)
+ aidisabled = 1
+
+ if(AALARM_WIRE_SYPHON)
+ mode = AALARM_MODE_PANIC
+ apply_mode()
+
+ if(AALARM_WIRE_AALARM)
+
+ if (alarm_area.atmosalert(2))
+ apply_danger_level(2)
+ spawn(1)
+ updateUsrDialog()
+ update_icon()
+
+ updateDialog()
+
+ return
+
+ proc/mend(var/wireColor)
+ var/wireFlag = AAlarmWireColorToFlag[wireColor]
+ var/wireIndex = AAlarmWireColorToIndex[wireColor] //not used in this function
+ AAlarmwires |= wireFlag
+ switch(wireIndex)
+ if(AALARM_WIRE_IDSCAN)
+
+ if(AALARM_WIRE_POWER)
+ src.shorted = 0
+ src.shock(usr, 50)
+ update_icon()
+
+ if(AALARM_WIRE_AI_CONTROL)
+ if (src.aidisabled == 1)
+ src.aidisabled = 0
+
+ src.updateDialog()
+ return
+
+ proc/pulse(var/wireColor)
+ //var/wireFlag = AAlarmWireColorToFlag[wireColor] //not used in this function
+ var/wireIndex = AAlarmWireColorToIndex[wireColor]
+ switch(wireIndex)
+ if(AALARM_WIRE_IDSCAN) //unlocks for 30 seconds, if you have a better way to hack I'm all ears
+ locked = 0
+ spawn(300)
+ locked = 1
+
+ if (AALARM_WIRE_POWER)
+ if(shorted == 0)
+ shorted = 1
+ update_icon()
+
+ spawn(1200)
+ if(shorted == 1)
+ shorted = 0
+ update_icon()
+
+
+ if (AALARM_WIRE_AI_CONTROL)
+ if (aidisabled == 0)
+ aidisabled = 1
+ updateDialog()
+ spawn(10)
+ if (aidisabled == 1)
+ aidisabled = 0
+ updateDialog()
+
+ if(AALARM_WIRE_SYPHON)
+ mode = AALARM_MODE_REPLACEMENT
+ apply_mode()
+
+ if(AALARM_WIRE_AALARM)
+ if (alarm_area.atmosalert(0))
+ apply_danger_level(0)
+ spawn(1)
+ updateUsrDialog()
+ update_icon()
+
+ updateDialog()
+ return
+
+ proc/shock(mob/user, prb)
+ if((stat & (NOPOWER))) // unpowered, no shock
+ return 0
+ if(!prob(prb))
+ return 0 //you lucked out, no shock for you
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start() //sparks always.
+ if (electrocute_mob(user, get_area(src), src))
+ return 1
+ else
+ return 0
+///////////////
+//END HACKING//
+///////////////
+
+
+ attack_hand(mob/user)
+ . = ..()
+ if (.)
+ return
+ user.machine = src
+
+ if ( (get_dist(src, user) > 1 ))
+ if (!istype(user, /mob/living/silicon))
+ user.machine = null
+ user << browse(null, "window=air_alarm")
+ user << browse(null, "window=AAlarmwires")
+ return
+
+
+ else if (istype(user, /mob/living/silicon) && aidisabled)
+ user << "AI control for this Air Alarm interface has been disabled."
+ user << browse(null, "window=air_alarm")
+ return
+
+ if(wiresexposed && (!istype(user, /mob/living/silicon)))
+ var/t1 = text("[alarm_area.name] Air Alarm WiresAccess Panel
\n")
+ var/list/AAlarmwires = list(
+ "Orange" = 1,
+ "Dark red" = 2,
+ "White" = 3,
+ "Yellow" = 4,
+ "Black" = 5,
+ )
+ for(var/wiredesc in AAlarmwires)
+ var/is_uncut = AAlarmwires & AAlarmWireColorToFlag[AAlarmwires[wiredesc]]
+ t1 += "[wiredesc] wire: "
+ if(!is_uncut)
+ t1 += "Mend"
+
+ else
+ t1 += "Cut "
+ t1 += "Pulse "
+
+ t1 += "
"
+ t1 += text("
\n[(locked ? "The Air Alarm is locked." : "The Air Alarm is unlocked.")]
\n[((shorted || (stat & (NOPOWER|BROKEN))) ? "The Air Alarm is offline." : "The Air Alarm is working properly!")]
\n[(aidisabled ? "The 'AI control allowed' light is off." : "The 'AI control allowed' light is on.")]")
+ t1 += text("Close
")
+ user << browse(t1, "window=AAlarmwires")
+ onclose(user, "AAlarmwires")
+
+ if(!shorted)
+ user << browse(return_text(user),"window=air_alarm")
+ onclose(user, "air_alarm")
+ refresh_all()
+
+ return
+
+ proc/return_text(mob/user)
+ if(!(istype(user, /mob/living/silicon)) && locked)
+ return "\The [src][return_status()]
[rcon_text()]
(Swipe ID card to unlock interface)"
+ else
+ return "\The [src][return_status()]
[rcon_text()]
[return_controls()]"
+
+ proc/return_status()
+ var/turf/location = get_turf(src)
+ var/datum/gas_mixture/environment = location.return_air()
+ var/total = environment.oxygen + environment.carbon_dioxide + environment.toxins + environment.nitrogen
+ var/output = "Air Status:
"
+
+ if(total == 0)
+ output += "Warning: Cannot obtain air sample for analysis."
+ return output
+
+ output += {"
+
+"}
+
+ var/partial_pressure = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
+
+ var/list/current_settings = TLV["pressure"]
+ var/environment_pressure = environment.return_pressure()
+ var/pressure_dangerlevel = get_danger_level(environment_pressure, current_settings)
+
+ current_settings = TLV["oxygen"]
+ var/oxygen_dangerlevel = get_danger_level(environment.oxygen*partial_pressure, current_settings)
+ var/oxygen_percent = round(environment.oxygen / total * 100, 2)
+
+ current_settings = TLV["carbon dioxide"]
+ var/co2_dangerlevel = get_danger_level(environment.carbon_dioxide*partial_pressure, current_settings)
+ var/co2_percent = round(environment.carbon_dioxide / total * 100, 2)
+
+ current_settings = TLV["plasma"]
+ var/plasma_dangerlevel = get_danger_level(environment.toxins*partial_pressure, current_settings)
+ var/plasma_percent = round(environment.toxins / total * 100, 2)
+
+ current_settings = TLV["other"]
+ var/other_moles = 0.0
+ for(var/datum/gas/G in environment.trace_gases)
+ other_moles+=G.moles
+ var/other_dangerlevel = get_danger_level(other_moles*partial_pressure, current_settings)
+
+ current_settings = TLV["temperature"]
+ var/temperature_dangerlevel = get_danger_level(environment.temperature, current_settings)
+
+ output += {"
+Pressure: [environment_pressure]kPa
+Oxygen: [oxygen_percent]%
+Carbon dioxide: [co2_percent]%
+Toxins: [plasma_percent]%
+"}
+ if (other_dangerlevel==2)
+ output += "Notice: High Concentration of Unknown Particles Detected
"
+ else if (other_dangerlevel==1)
+ output += "Notice: Low Concentration of Unknown Particles Detected
"
+
+ output += "Temperature: [environment.temperature]K
"
+
+ //Overall status
+ output += "Local Status: "
+ switch(max(pressure_dangerlevel,oxygen_dangerlevel,co2_dangerlevel,plasma_dangerlevel,other_dangerlevel,temperature_dangerlevel))
+ if(2)
+ output += "DANGER: Internals Required"
+ if(1)
+ output += "Caution"
+ if(0)
+ if(alarm_area.atmosalm)
+ output += {"Caution: Atmos alert in area"}
+ else
+ output += {"Optimal"}
+
+ return output
+
+ proc/rcon_text()
+ var/dat = "Remote Control:
"
+ if(rcon_setting == RCON_NO)
+ dat += "Off"
+ else
+ dat += "Off"
+ dat += " | "
+ if(rcon_setting == RCON_AUTO)
+ dat += "Auto"
+ else
+ dat += "Auto"
+ dat += " | "
+ if(rcon_setting == RCON_YES)
+ dat += "On"
+ else
+ dat += "On"
+ return dat
+
+ proc/return_controls()
+ var/output = ""//"[alarm_zone] Air [name]
"
+
+ switch(screen)
+ if (AALARM_SCREEN_MAIN)
+ if(alarm_area.atmosalm)
+ output += "Reset - Atmospheric Alarm
"
+ else
+ output += "Activate - Atmospheric Alarm
"
+
+ output += {"
+Scrubbers Control
+Vents Control
+Set environmentals mode
+Sensor Settings
+
+"}
+ if (mode==AALARM_MODE_PANIC)
+ output += "PANIC SYPHON ACTIVE
Turn syphoning off"
+ else
+ output += "ACTIVATE PANIC SYPHON IN AREA"
+
+
+ if (AALARM_SCREEN_VENT)
+ var/sensor_data = ""
+ if(alarm_area.air_vent_names.len)
+ for(var/id_tag in alarm_area.air_vent_names)
+ var/long_name = alarm_area.air_vent_names[id_tag]
+ var/list/data = alarm_area.air_vent_info[id_tag]
+ if(!data)
+ continue;
+
+ sensor_data += {"
+[long_name]
+Operating:
+[data["power"]?"on":"off"]
+
+Pressure checks:
+external
+internal
+
+External pressure bound:
+-
+-
+-
+-
+[data["external"]]
++
++
++
++
+ (reset)
+
"}
+ if (data["direction"] == "siphon")
+ sensor_data += {"
+Direction:
+siphoning
+
+"}
+ sensor_data += {"
"}
+ else
+ sensor_data = "No vents connected.
"
+ output = "Main menu
[sensor_data]"
+
+
+ if (AALARM_SCREEN_SCRUB)
+ var/sensor_data = ""
+ 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/data = alarm_area.air_scrub_info[id_tag]
+ if(!data)
+ continue
+
+ sensor_data += {"
+[long_name]
+Operating:
+[data["power"]?"on":"off"]
+Type:
+[data["scrubbing"]?"scrubbing":"syphoning"]
+"}
+
+ 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"]
+
+"}
+ sensor_data += {"
+Panic syphon: [data["panic"]?"PANIC SYPHON ACTIVATED":"Disabled"]
+Dea":"red'>A")]ctivate
+
+"}
+ else
+ sensor_data = "No scrubbers connected.
"
+ output = {"Main menu
[sensor_data]"}
+
+
+ if (AALARM_SCREEN_MODE)
+ output += "Main menu
Air machinery mode for the area:"
+ var/list/modes = list(
+ AALARM_MODE_SCRUBBING = "Filtering",
+ AALARM_MODE_PANIC = "PANIC",
+ AALARM_MODE_REPLACEMENT = "REPLACE AIR",
+ AALARM_MODE_FILL = "FILL"
+ )
+ for (var/m=1, m<=modes.len, m++)
+ if (mode==m)
+ output += "- [modes[m]] (selected)
"
+ else
+ output += "- [modes[m]]
"
+ output += "
"
+
+ if (AALARM_SCREEN_SENSORS)
+ output += {"
+Main menu
+Alarm thresholds:
+Partial pressure for gases
+
+
+ | min2 | min1 | max1 | max2 |
+"}
+ var/list/gases = list(
+ "oxygen" = "O2",
+ "carbon dioxide" = "CO2",
+ "plasma" = "Toxin",
+ "other" = "Other",)
+
+ var/list/selected
+ for (var/g in gases)
+ output += "| [gases[g]] | "
+ selected = TLV[g]
+ for(var/i = 1, i <= 4, i++)
+ output += "[selected[i] ? selected[i] :"OFF"] | "
+ output += "
"
+
+ selected = TLV["pressure"]
+ output += " | Pressure | "
+ for(var/i = 1, i <= 4, i++)
+ output += "[selected[i] ? selected[i] :"OFF"] | "
+ output += "
"
+
+ selected = TLV["temperature"]
+ output += "| Temperature | "
+ for(var/i = 1, i <= 4, i++)
+ output += "[selected[i] ? selected[i] :"OFF"] | "
+ output += "
|---|
"
+
+ return output
+
+ Topic(href, href_list)
+
+ if(href_list["rcon"])
+ rcon_setting = text2num(href_list["rcon"])
+
+ if ( (get_dist(src, usr) > 1 ))
+ if (!istype(usr, /mob/living/silicon))
+ usr.machine = null
+ usr << browse(null, "window=air_alarm")
+ usr << browse(null, "window=AAlarmwires")
+ return
+
+ add_fingerprint(usr)
+ usr.machine = src
+
+ if(href_list["command"])
+ var/device_id = href_list["id_tag"]
+ switch(href_list["command"])
+ if(
+ "power",
+ "adjust_external_pressure",
+ "set_external_pressure",
+ "checks",
+ "co2_scrub",
+ "tox_scrub",
+ "n2o_scrub",
+ "panic_siphon",
+ "scrubbing")
+
+ send_signal(device_id, list(href_list["command"] = text2num(href_list["val"]) ) )
+
+ if("set_threshold")
+ var/env = href_list["env"]
+ var/threshold = text2num(href_list["var"])
+ var/list/selected = TLV[env]
+ var/list/thresholds = list("lower bound", "low warning", "high warning", "upper bound")
+ var/newval = input("Enter [thresholds[threshold]] for [env]", "Alarm triggers", selected[threshold]) as null|num
+ if (isnull(newval) || ..() || (locked && issilicon(usr)))
+ return
+ if (newval<0)
+ selected[threshold] = -1.0
+ else if (env=="temperature" && newval>5000)
+ selected[threshold] = 5000
+ else if (env=="pressure" && newval>50*ONE_ATMOSPHERE)
+ selected[threshold] = 50*ONE_ATMOSPHERE
+ else if (env!="temperature" && env!="pressure" && newval>200)
+ selected[threshold] = 200
+ else
+ newval = round(newval,0.01)
+ selected[threshold] = newval
+
+ if(href_list["screen"])
+ screen = text2num(href_list["screen"])
+
+ if(href_list["atmos_alarm"])
+ if (alarm_area.atmosalert(2))
+ apply_danger_level(2)
+ update_icon()
+
+ if(href_list["atmos_reset"])
+ if (alarm_area.atmosalert(0))
+ apply_danger_level(0)
+ update_icon()
+
+ if(href_list["mode"])
+ mode = text2num(href_list["mode"])
+ apply_mode()
+
+ if (href_list["AAlarmwires"])
+ var/t1 = text2num(href_list["AAlarmwires"])
+ if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) ))
+ usr << "You need wirecutters!"
+ return
+ if (isWireColorCut(t1))
+ mend(t1)
+ else
+ cut(t1)
+
+ else if (href_list["pulse"])
+ var/t1 = text2num(href_list["pulse"])
+ if (!istype(usr.equipped(), /obj/item/device/multitool))
+ usr << "You need a multitool!"
+ return
+ if (isWireColorCut(t1))
+ usr << "You can't pulse a cut wire."
+ return
+ else
+ pulse(t1)
+
+ updateUsrDialog()
+
/obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob)
/* if (istype(W, /obj/item/weapon/wirecutters))
@@ -1096,7 +926,7 @@ table tr:first-child th:first-child { border: none;}
return
if (wiresexposed && ((istype(W, /obj/item/device/multitool) || istype(W, /obj/item/weapon/wirecutters))))
- return src.attack_hand(user)
+ return attack_hand(user)
else if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card
diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm
index e905e2866f3..1083d1d96c4 100644
--- a/code/game/machinery/telecomms/logbrowser.dm
+++ b/code/game/machinery/telecomms/logbrowser.dm
@@ -204,7 +204,7 @@
network = newnet
screen = 0
- machines = list()
+ servers = list()
temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -"
updateUsrDialog()
diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm
index 6fbecc441a4..4e9c114b535 100644
--- a/code/game/machinery/telecomms/telemonitor.dm
+++ b/code/game/machinery/telecomms/telemonitor.dm
@@ -12,7 +12,7 @@
icon_state = "comm_monitor"
var/screen = 0 // the screen number:
- var/list/machines = list() // the machines located by the computer
+ var/list/t_machines = list() // the machines located by the computer
var/obj/machinery/telecomms/SelectedMachine
var/network = "NULL" // the network to probe
@@ -83,7 +83,7 @@
switch(href_list["operation"])
if("release")
- machines = list()
+ t_machines = list()
screen = 0
if("mainmenu")
@@ -116,7 +116,7 @@
else
network = newnet
screen = 0
- machines = list()
+ t_machines = list()
temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -"
updateUsrDialog()
diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm
index 0f45a2f43cd..dfd47ca6882 100644
--- a/code/game/machinery/telecomms/traffic_control.dm
+++ b/code/game/machinery/telecomms/traffic_control.dm
@@ -200,7 +200,7 @@
network = newnet
screen = 0
- machines = list()
+ servers = list()
temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -"
updateUsrDialog()