diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 3ea80548f4a..a46e1626d2b 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -72,7 +72,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
while(looping)
sleep(1)
for(var/datum/subsystem/ss in subsystems)
- qdel(ss)
+ ss.Shutdown
..()
// Tell qdel() to Del() this object.
return QDEL_HINT_HARDDEL_NOW
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index c6ea3c45cbc..bead5f5822f 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -544,104 +544,43 @@ var/list/airlock_overlays = list()
//Separate interface for the AI.
user.set_machine(src)
- var/t1 = text("Airlock Control
\n")
- if(src.secondsMainPowerLost > 0)
- if(!wires.is_cut(WIRE_POWER1) && !wires.is_cut(WIRE_POWER2))
- t1 += text("Main power is offline for [] seconds.
\n", src.secondsMainPowerLost)
- else
- t1 += text("Main power is offline indefinitely.
\n")
- else
- t1 += text("Main power is online.")
+ ui_interact(user)
- if(src.secondsBackupPowerLost > 0)
- if(!wires.is_cut(WIRE_BACKUP1) && !wires.is_cut(WIRE_BACKUP2))
- t1 += text("Backup power is offline for [] seconds.
\n", src.secondsBackupPowerLost)
- else
- t1 += text("Backup power is offline indefinitely.
\n")
- else if(src.secondsMainPowerLost > 0)
- t1 += text("Backup power is online.")
- else
- t1 += text("Backup power is offline, but will turn on if main power fails.")
- t1 += "
\n"
+/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "ai_airlockk", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "ai_airlock", name, 500, 500, master_ui, state)
+ ui.open()
- if(wires.is_cut(WIRE_IDSCAN))
- t1 += text("IdScan wire is cut.
\n")
- else if(src.aiDisabledIdScanner)
- t1 += text("IdScan disabled. Enable?
\n", src)
- else
- t1 += text("IdScan enabled. Disable?
\n", src)
+/obj/machinery/door/airlock/ui_act(action, params)
+ return
- if(src.emergency)
- t1 += text("Emergency Access Override is enabled. Disable?
\n", src)
- else
- t1 += text("Emergency Access Override is disabled. Enable?
\n", src)
+/obj/machinery/door/airlock/ui_data(mob/user)
+ var/list/data = list()
+ data["mrepower_time"] = secondsMainPowerLost
+ data["mpowered"] = !wires.is_cut(WIRE_POWER1) && !wires.is_cut(WIRE_POWER2)
- if(wires.is_cut(WIRE_POWER1))
- t1 += text("Main Power Input wire is cut.
\n")
- if(wires.is_cut(WIRE_POWER2))
- t1 += text("Main Power Output wire is cut.
\n")
- if(src.secondsMainPowerLost == 0)
- t1 += text("Temporarily disrupt main power?.
\n", src)
- if(src.secondsBackupPowerLost == 0)
- t1 += text("Temporarily disrupt backup power?.
\n", src)
+ data["brepower_time"] = secondsBackupPowerLost
+ data["bpowered"] = !wires.is_cut(WIRE_BACKUP1) && !wires.is_cut(WIRE_BACKUP2)
- if(wires.is_cut(WIRE_BACKUP1))
- t1 += text("Backup Power Input wire is cut.
\n")
- if(wires.is_cut(WIRE_BACKUP2))
- t1 += text("Backup Power Output wire is cut.
\n")
+ data["idscan_wire"] = !wires.is_cut(WIRE_IDSCAN)
+ data["idscan_disabled"] = aiDisabledIdScanner
- if(wires.is_cut(WIRE_BOLTS))
- t1 += text("Door bolt drop wire is cut.
\n")
- else if(!src.locked)
- t1 += text("Door bolts are up. Drop them?
\n", src)
- else
- t1 += text("Door bolts are down.")
- if(src.hasPower())
- t1 += text(" Raise?
\n", src)
- else
- t1 += text(" Cannot raise door bolts due to power failure.
\n")
+ data["emergency"] = emergency
- if(wires.is_cut(WIRE_LIGHT))
- t1 += text("Door bolt lights wire is cut.
\n")
- else if(!src.lights)
- t1 += text("Door bolt lights are off. Enable?
\n", src)
- else
- t1 += text("Door bolt lights are on. Disable?
\n", src)
+ data["bolt_wire"] = !wires.is_cut(WIRE_BOLTS)
+ data["bolts"] = locked
- if(wires.is_cut(WIRE_SHOCK))
- t1 += text("Electrification wire is cut.
\n")
- if(src.secondsElectrified==-1)
- t1 += text("Door is electrified indefinitely. Un-electrify it?
\n", src)
- else if(src.secondsElectrified>0)
- t1 += text("Door is electrified temporarily ([] seconds). Un-electrify it?
\n", src.secondsElectrified, src)
- else
- t1 += text("Door is not electrified. Electrify it for 30 seconds? Or, Electrify it indefinitely until someone cancels the electrification?
\n", src, src)
+ data["lights_wire"] = !wires.is_cut(WIRE_LIGHT)
+ data["lights"] = lights
- if(wires.is_cut(WIRE_SAFETY))
- t1 += text("Door force sensors not responding.
\n")
- else if(src.safe)
- t1 += text("Door safeties operating normally. Override?
\n",src)
- else
- t1 += text("Danger. Door safeties disabled. Restore?
\n",src)
+ data["safety_wire"] = !wires.is_cut(WIRE_SAFETY)
+ data["safety"] = safe
- if(wires.is_cut(WIRE_TIMING))
- t1 += text("Door timing circuitry not responding.
\n")
- else if(src.normalspeed)
- t1 += text("Door timing circuitry operating normally. Override?
\n",src)
- else
- t1 += text("Warning. Door timing circuitry operating abnormally. Restore?
\n",src)
+ data["openable"] = !welded && !locked
- if(src.welded)
- t1 += text("Door appears to have been welded shut.
\n")
- else if(!src.locked)
- if(src.density)
- t1 += text("Open door
\n", src)
- else
- t1 += text("Close door
\n", src)
-
- t1 += text("