diff --git a/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm b/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm index b2d8a6bac22..5751a354b4b 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm @@ -192,7 +192,7 @@ if(window.fulltile) new /obj/effect/temp_visual/revenant/cracks(window.loc) for(var/obj/machinery/light/light in victim) - light.flicker(20) //spooky + light.flicker(rand(3, 5)) //spooky //Malfunction: Makes bad stuff happen to robots and machines. /datum/action/cooldown/spell/aoe/revenant/malfunction diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index 9306712be36..3491c23e2c0 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -180,6 +180,9 @@ var/area/local_area = get_room_area() + if(flickering) + . += mutable_appearance(overlay_icon, "[base_state]_flickering") + return if(low_power_mode || major_emergency || (local_area?.fire)) . += mutable_appearance(overlay_icon, "[base_state]_emergency") return @@ -225,7 +228,11 @@ if(reagents) START_PROCESSING(SSmachines, src) var/area/local_area = get_room_area() - if (local_area?.fire) + if (flickering) + brightness_set = brightness * bulb_low_power_brightness_mul + power_set = bulb_low_power_pow_mul + color_set = nightshift_light_color + else if (local_area?.fire) color_set = fire_colour power_set = fire_power brightness_set = fire_brightness @@ -500,27 +507,36 @@ ) return TRUE -/obj/machinery/light/proc/flicker(amount = rand(10, 20)) +/obj/machinery/light/proc/flicker(amount = 1) set waitfor = FALSE if(flickering || !on || status != LIGHT_OK) return . = TRUE // did we actually flicker? Send this now because we expect immediate response, before sleeping. - flickering = TRUE + set_light( + l_range = brightness * bulb_low_power_brightness_mul, + l_power = bulb_low_power_pow_mul, + l_color = nightshift_light_color, + ) + cut_overlays(src) + stoplag(0.7 SECONDS) + if(prob(30)) + do_sparks(number = 2, cardinal_only = TRUE, source = src) + for(var/i in 1 to amount) if(status != LIGHT_OK || !has_power()) break - on = !on + flickering = !flickering update(FALSE) - stoplag(rand(0.5 SECONDS, 1.5 SECONDS)) + stoplag(pick(list(2 SECONDS, 4 SECONDS, 6 SECONDS))) if(has_power()) on = (status == LIGHT_OK) else on = FALSE - update(FALSE) flickering = FALSE + update(FALSE) // ai attack - make lights flicker, because why not diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index f09b175878f..852ae3a2008 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -111,7 +111,6 @@ return flickering = TRUE - var/most_flickers = 1 for(var/obj/machinery/power/terminal/terminal in nodes) if(!istype(terminal.master, /obj/machinery/power/apc)) continue @@ -123,12 +122,10 @@ if(!prob(flicker_prob)) continue - var/flicker_count = rand(1, 3) - most_flickers = max(most_flickers, flicker_count) var/obj/machinery/power/apc/apc = terminal.master for(var/obj/machinery/light/light as anything in apc.get_lights()) - light.flicker(flicker_count) + light.flicker(amount = 1) CHECK_TICK // don't let another flicker propagation until our slowest area is done (with some added leeway) - addtimer(VARSET_CALLBACK(src, flickering, FALSE), most_flickers * 2 SECONDS) + addtimer(VARSET_CALLBACK(src, flickering, FALSE), 9 SECONDS) diff --git a/icons/obj/lighting_overlay.dmi b/icons/obj/lighting_overlay.dmi index de25dbe1709..df3f480f25c 100644 Binary files a/icons/obj/lighting_overlay.dmi and b/icons/obj/lighting_overlay.dmi differ