diff --git a/code/WorkInProgress/Mini/atmos_control.dm b/code/WorkInProgress/Mini/atmos_control.dm
index 8e9b63f9e5..a72f060366 100644
--- a/code/WorkInProgress/Mini/atmos_control.dm
+++ b/code/WorkInProgress/Mini/atmos_control.dm
@@ -11,8 +11,17 @@
circuit = "/obj/item/weapon/circuitboard/atmoscontrol"
var/obj/machinery/alarm/current
var/overridden = 0 //not set yet, can't think of a good way to do it
- req_access = list(access_atmospherics)
+ req_access = list(access_ce)
+ var/list/monitored_alarm_ids = null
+ var/list/monitored_alarms = null
+/obj/machinery/computer/atmoscontrol/laptop
+ name = "Atmospherics Laptop"
+ desc = "Cheap Nanotrasen Laptop."
+ icon_state = "medlaptop"
+
+/obj/machinery/computer/atmoscontrol/New()
+ ..()
/obj/machinery/computer/atmoscontrol/attack_ai(var/mob/user as mob)
return interact(user)
@@ -25,17 +34,29 @@
return
return interact(user)
+// Original implementation used "in typesof(/obj/machinery/alarm/)" in New()
+// but would throw runtime errors when attempting to access alarm_id
+obj/machinery/computer/atmoscontrol/proc/setup_monitor()
+ if(!monitored_alarms && monitored_alarm_ids)
+ monitored_alarms = new
+ for(var/obj/machinery/alarm/alarm in machines)
+ if(alarm.alarm_id && alarm.alarm_id in monitored_alarm_ids)
+ monitored_alarms += alarm
+
/obj/machinery/computer/atmoscontrol/interact(mob/user)
+ setup_monitor()
user.set_machine(src)
if(allowed(user))
overridden = 1
else if(!emagged)
overridden = 0
var/dat = "Main Menu
"
+ if(monitored_alarms && monitored_alarms.len == 1)
+ current = monitored_alarms[1]
if(current)
dat += specific()
else
- for(var/obj/machinery/alarm/alarm in dd_sortedObjectList(machines))
+ for(var/obj/machinery/alarm/alarm in dd_sortedObjectList(monitored_alarms ? monitored_alarms : machines))
dat += ""
switch(max(alarm.danger_level, alarm.alarm_area.atmosalm))
if (0)
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 1914e5206c..090586bfd2 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -68,6 +68,7 @@
active_power_usage = 1000 //For heating/cooling rooms. 1000 joules equates to about 1 degree every 2 seconds for a single tile of air.
power_channel = ENVIRON
req_one_access = list(access_atmospherics, access_engine_equip)
+ var/alarm_id = null
var/breach_detection = 1 // Whether to use automatic breach detection or not
var/frequency = 1439
//var/skipprocess = 0 //Experimenting
@@ -216,7 +217,7 @@
regulating_temperature = 0
visible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\
"You hear a click as a faint electronic humming stops.")
-
+
if (regulating_temperature)
if(target_temperature > T0C + MAX_TEMPERATURE)
target_temperature = T0C + MAX_TEMPERATURE
@@ -227,26 +228,26 @@
var/datum/gas_mixture/gas
gas = environment.remove(0.25*environment.total_moles)
if(gas)
-
+
if (gas.temperature <= target_temperature) //gas heating
var/energy_used = min( gas.get_thermal_energy_change(target_temperature) , active_power_usage)
-
+
gas.add_thermal_energy(energy_used)
//use_power(energy_used, ENVIRON) //handle by update_use_power instead
else //gas cooling
var/heat_transfer = min(abs(gas.get_thermal_energy_change(target_temperature)), active_power_usage)
-
+
//Assume the heat is being pumped into the hull which is fixed at 20 C
//none of this is really proper thermodynamics but whatever
-
+
var/cop = gas.temperature/T20C //coefficient of performance -> power used = heat_transfer/cop
-
+
heat_transfer = min(heat_transfer, cop * active_power_usage) //this ensures that we don't use more than active_power_usage amount of power
-
+
heat_transfer = -gas.add_thermal_energy(-heat_transfer) //get the actual heat transfer
-
+
//use_power(heat_transfer / cop, ENVIRON) //handle by update_use_power instead
-
+
environment.merge(gas)
/obj/machinery/alarm/proc/overall_danger_level(var/datum/gas_mixture/environment)
@@ -412,7 +413,7 @@
for (var/area/RA in alarm_area.related)
for (var/obj/machinery/alarm/AA in RA)
AA.mode = mode
-
+
switch(mode)
if(AALARM_MODE_SCRUBBING)
for(var/device_id in alarm_area.air_scrub_names)