From 87877363a3d1b8d9a68f2b0bcdb024c0997d8bb1 Mon Sep 17 00:00:00 2001 From: Toastical <20125180+Toastical@users.noreply.github.com> Date: Sun, 17 May 2026 14:56:53 +0300 Subject: [PATCH] Add fire alarm functionality to air alarms (#31970) * Add fire alarm functionality to air alarms * prettier --- code/game/area/areas.dm | 19 +++++++++++-------- .../atmospherics/machinery/airalarm.dm | 9 +++++++++ tgui/packages/tgui/interfaces/AirAlarm.jsx | 11 ++++++++++- tgui/public/tgui.bundle.js | 2 +- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 60946d79b4d..903ac6d5cb7 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -341,10 +341,7 @@ if(!fire) set_fire_alarm_effect() ModifyFiredoors(FALSE) - for(var/item in firealarms) - var/obj/machinery/firealarm/F = item - F.update_icon() - GLOB.firealarm_soundloop.start(F) + start_alarm_sounds() if(!firealarm_sound_stop_timer) firealarm_sound_stop_timer = addtimer(CALLBACK(src, PROC_REF(stop_alarm_sounds)), 4 MINUTES, TIMER_STOPPABLE | TIMER_UNIQUE) @@ -357,10 +354,19 @@ START_PROCESSING(SSobj, src) +/area/proc/start_alarm_sounds() + for(var/obj/machinery/firealarm/F in firealarms) + F.update_icon() + GLOB.firealarm_soundloop.start(F) + for(var/obj/machinery/alarm/A in air_alarms) + GLOB.firealarm_soundloop.start(A) + /area/proc/stop_alarm_sounds() for(var/obj/machinery/firealarm/F in firealarms) F.update_icon() GLOB.firealarm_soundloop.stop(F) + for(var/obj/machinery/alarm/A in air_alarms) + GLOB.firealarm_soundloop.stop(A) /** * Reset the firealarm alert for this area * @@ -376,10 +382,7 @@ if(firealarm_sound_stop_timer) deltimer(firealarm_sound_stop_timer) firealarm_sound_stop_timer = null - for(var/item in firealarms) - var/obj/machinery/firealarm/F = item - F.update_icon() - GLOB.firealarm_soundloop.stop(F, TRUE) + stop_alarm_sounds() for(var/thing in cameras) var/obj/machinery/camera/C = locateUID(thing) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 4b17269260a..afc7063ab01 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -706,6 +706,9 @@ GLOBAL_LIST_INIT(aalarm_modes, list( data["alarmActivated"] = alarmActivated || danger_level == ATMOS_ALARM_DANGER data["thresholds"] = generate_thresholds_menu() + var/area/area_loc = get_area(src) + data["fireAlarmActivated"] = area_loc.fire + // Locked when: // Not sent from atmos console AND // Not silicon AND locked. @@ -891,6 +894,12 @@ GLOBAL_LIST_INIT(aalarm_modes, list( if(RCON_YES) rcon_setting = RCON_YES + if("set_fire_alarm") + var/area/area_loc = get_area(src) + if(area_loc.fire) + area_loc.firereset(src) + else + area_loc.firealert(src) if("command") if(!is_authenticated(usr, active_ui)) diff --git a/tgui/packages/tgui/interfaces/AirAlarm.jsx b/tgui/packages/tgui/interfaces/AirAlarm.jsx index 177a66bcf0a..f3de1160605 100644 --- a/tgui/packages/tgui/interfaces/AirAlarm.jsx +++ b/tgui/packages/tgui/interfaces/AirAlarm.jsx @@ -48,7 +48,7 @@ const Danger2Colour = (danger) => { const AirStatus = (props) => { const { act, data } = useBackend(); - const { air, mode, atmos_alarm, locked, alarmActivated, rcon, target_temp } = data; + const { air, mode, atmos_alarm, locked, alarmActivated, fireAlarmActivated, rcon, target_temp } = data; let areaStatus; if (air.danger.overall === 0) { @@ -162,6 +162,15 @@ const AirStatus = (props) => { )} + + {!locked && ( +