From f74c221b0f0baf8db2c0a9f50a9b3d1d7ece00a1 Mon Sep 17 00:00:00 2001 From: Rykka Stormheart Date: Mon, 13 Feb 2023 04:52:06 -0800 Subject: [PATCH] Makes Fire Alarms loop, replaces the old, jarring air alarm sound Newer sound is easier on the ears and loops better. Yes, yes, we use the airalarm.ogg as actual fire alarms in most places, but it is so loud it's usually painful. --- code/datums/looping_sounds/alarm_sounds.dm | 33 +++++++++++----------- code/game/machinery/air_alarm.dm | 4 +-- code/game/machinery/fire_alarm.dm | 18 +++++++++--- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/code/datums/looping_sounds/alarm_sounds.dm b/code/datums/looping_sounds/alarm_sounds.dm index 77dc97a6d8..9e4ce79970 100644 --- a/code/datums/looping_sounds/alarm_sounds.dm +++ b/code/datums/looping_sounds/alarm_sounds.dm @@ -1,55 +1,56 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/datum/looping_sound/fire_alarm // Commented out start/end as I don't feel they're very fitting +/datum/looping_sound/alarm + volume_chan = VOLUME_CHANNEL_ALARMS + pref_check = /datum/client_preference/looping_alarms + +/datum/looping_sound/alarm/fire_alarm // Commented out start/end as I don't feel they're very fitting // start_sound = 'sound/effects/alarms/fire_alarm/fire_alarm_start.ogg' // start_length = 40 mid_sounds = list('sound/effects/alarms/fire_alarm/fire_alarm_mid.ogg' = 1) - mid_length = 20 + mid_length = 6 SECONDS // Exact loop, these things should be constantly running while there's a fire actively going // end_sound = 'sound/effects/alarms/fire_alarm/fire_alarm_stop.ogg' volume = 30 - pref_check = /datum/client_preference/looping_alarms + extra_range = 60 // Alarms should be clearly heard from far away /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/datum/looping_sound/decompression_alarm +/datum/looping_sound/alarm/decompression_alarm mid_sounds = list('sound/effects/alarms/decon_alarm.ogg'=1) - mid_length = 60 + mid_length = 4 SECONDS // Delay by 1 second so as to not spam it volume = 100 extra_range = 20 - pref_check = /datum/client_preference/looping_alarms /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/datum/looping_sound/ship_alarm +/datum/looping_sound/alarm/ship_alarm mid_sounds = list('sound/effects/alarms/ship_alarm.ogg'=1) mid_length = 20 volume = 60 extra_range = 10 - pref_check = /datum/client_preference/looping_alarms /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/datum/looping_sound/engineering_alarm +/datum/looping_sound/alarm/engineering_alarm mid_sounds = list('sound/effects/alarms/engineering_alarm.ogg'=1) mid_length = 30 volume = 15 - pref_check = /datum/client_preference/looping_alarms /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/datum/looping_sound/threat_level_high +/datum/looping_sound/alarm/threat_level_high mid_sounds = list('sound/effects/alarms/threat_level_high.ogg'=1) - mid_length = 30 + mid_length = 4 SECONDS volume = 60 - pref_check = /datum/client_preference/looping_alarms + extra_range = 40 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/datum/looping_sound/threat_level_extreme +/datum/looping_sound/alarm/threat_level_extreme mid_sounds = list('sound/effects/alarms/threat_level_extreme.ogg'=1) - mid_length = 30 + mid_length = 4 SECONDS volume = 60 - pref_check = /datum/client_preference/looping_alarms + extra_range = 40 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index 845b58449c..934bbb50af 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -84,7 +84,7 @@ var/alarms_hidden = FALSE //If the alarms from this machine are visible on consoles - var/datum/looping_sound/decompression_alarm/soundloop + var/datum/looping_sound/alarm/decompression_alarm/soundloop /obj/machinery/alarm/nobreach breach_detection = 0 @@ -864,4 +864,4 @@ // CHOMPEdit END #undef LOAD_TLV_VALUES #undef TEST_TLV_VALUES -#undef DECLARE_TLV_VALUES \ No newline at end of file +#undef DECLARE_TLV_VALUES diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm index a7e0da37f6..fbeda0c7fa 100644 --- a/code/game/machinery/fire_alarm.dm +++ b/code/game/machinery/fire_alarm.dm @@ -26,6 +26,8 @@ FIRE ALARM circuit = /obj/item/weapon/circuitboard/firealarm var/alarms_hidden = FALSE //If the alarms from this machine are visible on consoles + var/datum/looping_sound/alarm/fire_alarm/soundloop + /obj/machinery/firealarm/alarms_hidden alarms_hidden = TRUE @@ -51,6 +53,12 @@ FIRE ALARM if(z in using_map.contact_levels) set_security_level(security_level ? get_security_level() : "green") + soundloop = new(list(src), FALSE) // Create soundloop + +/obj/machinery/firealarm/Destroy() + QDEL_NULL(soundloop) // Just clearing the loop here + return ..() + /obj/machinery/firealarm/proc/offset_alarm() pixel_x = (dir & 3) ? 0 : (dir == 4 ? 26 : -26) pixel_y = (dir & 3) ? (dir == 1 ? -26 : 26) : 0 @@ -88,14 +96,14 @@ FIRE ALARM if("blue") set_light(l_range = 2, l_power = 0.25, l_color = "#1024A9") if("red") set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000") if("delta") set_light(l_range = 4, l_power = 0.9, l_color = "#FF6633") - + . += mutable_appearance(icon, fire_state) . += emissive_appearance(icon, fire_state) - + if(seclevel) . += mutable_appearance(icon, "overlay_[seclevel]") . += emissive_appearance(icon, "overlay_[seclevel]") - + add_overlay(.) /obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume) @@ -177,6 +185,7 @@ FIRE ALARM var/area/area = get_area(src) for(var/obj/machinery/firealarm/FA in area) fire_alarm.clearAlarm(src.loc, FA) + FA.soundloop.stop() update_icon() if(user) log_game("[user] reset a fire alarm at [COORD(src)]") @@ -187,8 +196,9 @@ FIRE ALARM var/area/area = get_area(src) for(var/obj/machinery/firealarm/FA in area) fire_alarm.triggerAlarm(loc, FA, duration, hidden = alarms_hidden) + FA.soundloop.start() update_icon() - playsound(src, 'sound/machines/airalarm.ogg', 25, 0, 4, volume_channel = VOLUME_CHANNEL_ALARMS) + // playsound(src, 'sound/machines/airalarm.ogg', 25, 0, 4, volume_channel = VOLUME_CHANNEL_ALARMS) if(user) log_game("[user] triggered a fire alarm at [COORD(src)]")