From 85b4a62b097c0166201f6ac0a9acccab32f80d90 Mon Sep 17 00:00:00 2001 From: Iain Price Date: Sun, 29 Dec 2019 15:19:57 +0000 Subject: [PATCH] Make fire alarm monitoring work at the area level (#48422) * Make fire alarm monitoring work at the area level * Use TRUE/FALSE for arealevelalarm --- .../file_system/programs/alarm.dm | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index ca075b51e46..4737f298c99 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -72,15 +72,23 @@ /datum/computer_file/program/alarm_monitor/proc/cancelAlarm(class, area/A, obj/origin) var/list/L = alarms[class] var/cleared = 0 + var/arealevelalarm = FALSE // set to TRUE for alarms that set/clear whole areas + if (class=="Fire") + arealevelalarm = TRUE for (var/I in L) if (I == A.name) - var/list/alarm = L[I] - var/list/srcs = alarm[3] - if (origin in srcs) - srcs -= origin - if (srcs.len == 0) + if (!arealevelalarm) // the traditional behaviour + var/list/alarm = L[I] + var/list/srcs = alarm[3] + if (origin in srcs) + srcs -= origin + if (srcs.len == 0) + cleared = 1 + L -= I + else + L -= I // wipe the instances entirely cleared = 1 - L -= I + update_alarm_display() return !cleared