diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 8cc5dfafab..071338e56c 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -56,6 +56,11 @@ #define AALARM_REPORT_TIMEOUT 100 +#define AALARM_OVERLAY_OFF "alarm_off" +#define AALARM_OVERLAY_GREEN "alarm_green" +#define AALARM_OVERLAY_WARN "alarm_amber" +#define AALARM_OVERLAY_DANGER "alarm_red" + /obj/machinery/airalarm name = "air alarm" desc = "A machine that monitors atmosphere levels. Goes off if the area is dangerous." @@ -78,6 +83,7 @@ var/aidisabled = 0 var/shorted = 0 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone + var/brightness_on = 1 var/frequency = FREQ_ATMOS_CONTROL var/alarm_frequency = FREQ_ATMOS_ALARMS @@ -198,12 +204,11 @@ panel_open = TRUE pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0 + update_icon() if(name == initial(name)) name = "[get_area_name(src)] Air Alarm" - update_icon() - /obj/machinery/airalarm/Destroy() SSradio.remove_object(src, frequency) qdel(wires) @@ -212,7 +217,11 @@ /obj/machinery/airalarm/Initialize(mapload) . = ..() + if(!mapload) + return + power_change() set_frequency(frequency) + update_icon() /obj/machinery/airalarm/examine(mob/user) . = ..() @@ -619,6 +628,16 @@ )) /obj/machinery/airalarm/update_icon() + set_light(0) + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + if(stat & NOPOWER) + icon_state = "alarm0" + return + + if(stat & BROKEN) + icon_state = "alarmx" + return + if(panel_open) switch(buildstage) if(2) @@ -629,22 +648,29 @@ icon_state = "alarm_b1" return - if((stat & (NOPOWER|BROKEN)) || shorted) - icon_state = "alarmp" - return - + icon_state = "alarm1" + var/overlay_state = AALARM_OVERLAY_OFF var/area/A = get_area(src) switch(max(danger_level, A.atmosalm)) if(0) - icon_state = "alarm0" + overlay_state = AALARM_OVERLAY_GREEN + light_color = LIGHT_COLOR_GREEN + set_light(brightness_on) if(1) - icon_state = "alarm2" //yes, alarm2 is yellow alarm + overlay_state = AALARM_OVERLAY_WARN + light_color = LIGHT_COLOR_LAVA + set_light(brightness_on) if(2) - icon_state = "alarm1" + overlay_state = AALARM_OVERLAY_DANGER + light_color = LIGHT_COLOR_RED + set_light(brightness_on) + + SSvis_overlays.add_vis_overlay(src, icon, overlay_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + update_light() /obj/machinery/airalarm/process() if((stat & (NOPOWER|BROKEN)) || shorted) - return + return FALSE var/turf/location = get_turf(src) if(!location) @@ -681,6 +707,8 @@ mode = AALARM_MODE_SCRUBBING apply_mode() + return TRUE + /obj/machinery/airalarm/proc/post_alert(alert_level) var/datum/radio_frequency/frequency = SSradio.return_frequency(alarm_frequency) @@ -816,7 +844,12 @@ /obj/machinery/airalarm/power_change() ..() + if(stat & NOPOWER) + set_light(0) + else + set_light(brightness_on) update_icon() + return /obj/machinery/airalarm/emag_act(mob/user) if(obj_flags & EMAGGED) @@ -826,8 +859,12 @@ playsound(src, "sparks", 50, 1) /obj/machinery/airalarm/obj_break(damage_flag) - ..() - update_icon() + if(circuit && !(flags_1 & NODECONSTRUCT_1)) //no circuit, no breaking + if(!(stat & BROKEN)) + playsound(loc, 'sound/effects/glassbr3.ogg', 100, 1) + stat |= BROKEN + update_icon() + set_light(0) /obj/machinery/airalarm/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi index b9c34380de..07fc6f035e 100644 Binary files a/icons/obj/monitors.dmi and b/icons/obj/monitors.dmi differ