From f9cbbe936e5ce1d462e4f20de27e9fa411dbe865 Mon Sep 17 00:00:00 2001 From: LT3 <83487515+lessthnthree@users.noreply.github.com> Date: Sun, 7 Sep 2025 11:16:52 -0700 Subject: [PATCH] Remove Skyrat light management (#4453) ## About The Pull Request Removes Skyrat's convoluted system of delaying lights based on mapload status, instant flags, etc. Perhaps it was useful years ago, but TG lighting code is now fine and the wheel doesn't need to be poorly reinvented. ## Why It's Good For The Game It's cool that the station lights flicker when things explode, but it makes me irrationally mad that this useless additional lighting code adds delay, making the effect show up well after the bomb goes off. ## Changelog :cl: LT3 code: Removed some Skyrat lighting delay code /:cl: --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> --- code/modules/power/apc/apc_power_proc.dm | 2 +- code/modules/power/lighting/light.dm | 93 +++++++------------ .../aesthetics/lights/code/lighting.dm | 38 +------- 3 files changed, 39 insertions(+), 94 deletions(-) diff --git a/code/modules/power/apc/apc_power_proc.dm b/code/modules/power/apc/apc_power_proc.dm index a561ba88a84..7c00dc20c50 100644 --- a/code/modules/power/apc/apc_power_proc.dm +++ b/code/modules/power/apc/apc_power_proc.dm @@ -152,5 +152,5 @@ for(var/obj/machinery/light/night_light in area_turf) if(night_light.nightshift_allowed) night_light.nightshift_enabled = nightshift_lights - night_light.update(FALSE) + night_light.update(trigger = FALSE, play_sound = FALSE) // BUBBER EDIT CHANGE - LIGHTING - Original: update(FALSE) CHECK_TICK diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index 73671f01501..a98694af531 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -1,3 +1,5 @@ +#define NIGHTSHIFT_COLOR_MODIFIER 0.15 // BUBBER EDIT ADDITION - LIGHTING + // the standard tube light fixture /obj/machinery/light name = "light fixture" @@ -191,15 +193,6 @@ return . += mutable_appearance(overlay_icon, base_state) - -// SKYRAT EDIT ADDITION BEGIN - AESTHETICS -#define LIGHT_ON_DELAY_UPPER (2 SECONDS) -#define LIGHT_ON_DELAY_LOWER (0.25 SECONDS) -/// Dynamically calculate nightshift brightness -#define NIGHTSHIFT_LIGHT_MODIFIER 0.15 -#define NIGHTSHIFT_COLOR_MODIFIER 0.15 -//SKYRAT EDIT END - // Area sensitivity is traditionally tied directly to power use, as an optimization // But since we want it for fire reacting, we disregard that /obj/machinery/light/setup_area_power_relationship() @@ -220,10 +213,10 @@ /obj/machinery/light/proc/handle_fire(area/source, new_fire) SIGNAL_HANDLER - update(instant = TRUE, play_sound = FALSE) //SKYRAT EDIT CHANGE - ORIGINAL: update() + update(play_sound = FALSE) // BUBBER EDIT CHANGE - LIGHTING - ORIGINAL: update() // update the icon_state and luminosity of the light depending on its state -/obj/machinery/light/proc/update(trigger = TRUE, instant = FALSE, play_sound = TRUE) // SKYRAT EDIT CHANGE +/obj/machinery/light/proc/update(trigger = TRUE, play_sound = TRUE) // BUBBER EDIT CHANGE - LIGHTING - add play_sound switch(status) if(LIGHT_BROKEN,LIGHT_BURNED,LIGHT_EMPTY) on = FALSE @@ -238,7 +231,7 @@ START_PROCESSING(SSmachines, src) var/area/local_area = get_room_area() if (flickering) - brightness_set = brightness * bulb_low_power_brightness_mul + brightness_set = brightness * 0.25 // BUBBER EDIT CHANGE - LIGHTING - Original: brightness * bulb_low_power_brightness_mul power_set = bulb_low_power_pow_mul color_set = nightshift_light_color else if (local_area?.fire) @@ -249,30 +242,29 @@ color_set = bulb_emergency_colour brightness_set = brightness * bulb_major_emergency_brightness_mul else if (nightshift_enabled) - brightness_set -= brightness_set * NIGHTSHIFT_LIGHT_MODIFIER // SKYRAT EDIT CHANGE - ORIGINAL: brightness_set = nightshift_brightness - power_set -= power_set * NIGHTSHIFT_LIGHT_MODIFIER // SKYRAT EDIT CHANGE - ORIGINAL: power_set = nightshift_light_power + brightness_set = nightshift_brightness + power_set = nightshift_light_power if(!color) - color_set = nightshift_light_color - // SKYRAT EDIT ADDITION START - Dynamic nightshift color - if(!color_set) - // Adjust light values to be warmer. I doubt caching would speed this up by any worthwhile amount, as it's all very fast number and string operations. - // Convert to numbers for easier manipulation. - var/list/color_parts = rgb2num(bulb_colour) - var/red = color_parts[1] - var/green = color_parts[2] - var/blue = color_parts[3] + // BUBBER EDIT CHANGE START - Dynamic nightshift color + // color_set = nightshift_light_color + // Adjust light values to be warmer. I doubt caching would speed this up by any worthwhile amount, as it's all very fast number and string operations. + // Convert to numbers for easier manipulation. + var/list/color_parts = rgb2num(bulb_colour) + var/red = color_parts[1] + var/green = color_parts[2] + var/blue = color_parts[3] - red += round(red * NIGHTSHIFT_COLOR_MODIFIER) - green -= round(green * NIGHTSHIFT_COLOR_MODIFIER * 0.3) - red = clamp(red, 0, 255) // clamp to be safe, or you can end up with an invalid hex value - green = clamp(green, 0, 255) - blue = clamp(blue, 0, 255) - color_set = rgb(red, green, blue) // Splice the numbers together and turn them back to hex. - // SKYRAT EDIT ADDITION END + red += round(red * NIGHTSHIFT_COLOR_MODIFIER) + green -= round(green * NIGHTSHIFT_COLOR_MODIFIER * 0.3) + red = clamp(red, 0, 255) // clamp to be safe, or you can end up with an invalid hex value + green = clamp(green, 0, 255) + blue = clamp(blue, 0, 255) + color_set = rgb(red, green, blue) // Splice the numbers together and turn them back to hex. + // BUBBER EDIT ADDITION END if (cached_color_filter) color_set = apply_matrix_to_color(color_set, cached_color_filter["color"], cached_color_filter["space"] || COLORSPACE_RGB) var/matching = light && brightness_set == light.light_range && power_set == light.light_power && color_set == light.light_color - if(!matching && (maploaded || instant)) // SKYRAT EDIT CHANGE - ORIGINAL: if(!matching) + if(!matching) switchcount++ if( prob( min(60, (switchcount**2)*0.01) ) ) if(trigger) @@ -284,15 +276,10 @@ l_power = power_set, l_color = color_set ) - // SKYRAT EDIT ADDITION START - maploaded = FALSE + // BUBBER EDIT ADDITION BEGIN - LIGHTING if(play_sound) playsound(src.loc, 'modular_skyrat/modules/aesthetics/lights/sound/light_on.ogg', 65, 1) - else if(!matching && !turning_on) - switchcount++ - turning_on = TRUE - addtimer(CALLBACK(src, PROC_REF(delayed_turn_on), trigger, play_sound, color_set, power_set, brightness_set), rand(LIGHT_ON_DELAY_LOWER, LIGHT_ON_DELAY_UPPER)) - // SKYRAT EDIT ADDITION END + // BUBBER EDIT ADDITION END else if(has_emergency_power(LIGHT_EMERGENCY_POWER_USE) && !turned_off()) use_power = IDLE_POWER_USE low_power_mode = TRUE @@ -304,14 +291,6 @@ update_current_power_usage() broken_sparks(start_only=TRUE) - -//SKYRAT EDIT ADDITION BEGIN - AESTHETICS -#undef LIGHT_ON_DELAY_UPPER -#undef LIGHT_ON_DELAY_LOWER -#undef NIGHTSHIFT_LIGHT_MODIFIER -#undef NIGHTSHIFT_COLOR_MODIFIER -// SKYRAT EDIT ADDITION END - /obj/machinery/light/update_current_power_usage() if(!on && static_power_used > 0) //Light is off but still powered removeStaticPower(static_power_used, AREA_USAGE_STATIC_LIGHT) @@ -330,7 +309,7 @@ /obj/machinery/light/update_atom_colour() ..() - update() + update(play_sound = FALSE) // BUBBER EDIT CHANGE - LIGHTING - ORIGINAL: update() /obj/machinery/light/proc/broken_sparks(start_only=FALSE) if(!QDELETED(src) && status == LIGHT_BROKEN && has_power() && MC_RUNNING()) @@ -355,7 +334,7 @@ reagents.adjust_thermal_energy(8 * reagents.total_volume * SPECIFIC_HEAT_DEFAULT * seconds_per_tick) reagents.handle_reactions() if(low_power_mode && !use_emergency_power(LIGHT_EMERGENCY_POWER_USE * seconds_per_tick)) - update(FALSE) //Disables emergency mode and sets the color to normal + update(trigger = FALSE, play_sound = FALSE) // BUBBER EDIT CHANGE - LIGHTING - Original: update(FALSE) //Disables emergency mode and sets the color to normal /obj/machinery/light/proc/burn_out() if(status == LIGHT_OK) @@ -517,10 +496,6 @@ // true if area has power and lightswitch is on /obj/machinery/light/proc/has_power() var/area/local_area = get_room_area() - //SKYRAT EDIT ADDITION BEGIN - if(isnull(local_area)) - return FALSE - //SKYRAT EDIT END return local_area.lightswitch && local_area.power_light // returns whether this light has emergency power @@ -558,7 +533,7 @@ . = TRUE // did we actually flicker? Send this now because we expect immediate response, before sleeping. set_light( - l_range = brightness * bulb_low_power_brightness_mul, + l_range = brightness * 0.25, // BUBBER EDIT CHANGE - LIGHTING - Original: brightness * bulb_low_power_brightness_mul, l_power = bulb_low_power_pow_mul, l_color = nightshift_light_color, ) @@ -571,7 +546,7 @@ if(status != LIGHT_OK || !has_power()) break flickering = !flickering - update(FALSE) + update(trigger = FALSE, play_sound = FALSE) // BUBBER EDIT CHANGE - LIGHTING - Original: update(FALSE) stoplag(pick(list(2 SECONDS, 4 SECONDS, 6 SECONDS))) if(has_power()) @@ -580,14 +555,14 @@ on = FALSE flickering = FALSE - update(FALSE) + update(trigger = FALSE, play_sound = FALSE) // BUBBER EDIT CHANGE - LIGHTING - Original: update(FALSE) // ai attack - make lights flicker, because why not /obj/machinery/light/attack_ai(mob/user) no_low_power = !no_low_power to_chat(user, span_notice("Emergency lights for this fixture have been [no_low_power ? "disabled" : "enabled"].")) - update(FALSE) + update(trigger = FALSE, play_sound = FALSE) // BUBBER EDIT CHANGE - LIGHTING - Original: update(FALSE) return // attack with hand - remove tube/bulb @@ -659,11 +634,11 @@ /obj/machinery/light/proc/set_major_emergency_light() major_emergency = TRUE - update() + update(trigger = FALSE, play_sound = FALSE) // BUBBER EDIT CHANGE - LIGHTING - Original: update() /obj/machinery/light/proc/unset_major_emergency_light() major_emergency = FALSE - update() + update(trigger = FALSE, play_sound = FALSE) // BUBBER EDIT CHANGE - LIGHTING - Original: update() /obj/machinery/light/proc/drop_light_tube(mob/user) var/obj/item/light/light_object = new light_type() @@ -805,3 +780,5 @@ // has to render above tram things (trams are stupid) layer = BELOW_OPEN_DOOR_LAYER plane = GAME_PLANE + +#undef NIGHTSHIFT_COLOR_MODIFIER // BUBBER EDIT ADDITION - LIGHTING diff --git a/modular_skyrat/modules/aesthetics/lights/code/lighting.dm b/modular_skyrat/modules/aesthetics/lights/code/lighting.dm index 1b030798a6c..6925629790b 100644 --- a/modular_skyrat/modules/aesthetics/lights/code/lighting.dm +++ b/modular_skyrat/modules/aesthetics/lights/code/lighting.dm @@ -1,45 +1,13 @@ -/// Dynamically calculate nightshift brightness. How TG does it is painful to modify. -#define NIGHTSHIFT_LIGHT_MODIFIER 0.15 -#define NIGHTSHIFT_COLOR_MODIFIER 0.15 - /obj/machinery/light brightness = 7.5 + nightshift_brightness = 7.5 fire_brightness = 6 fire_colour = COLOR_FIRE_LIGHT_RED bulb_colour = COLOR_OFF_WHITE bulb_power = 0.9 - nightshift_light_color = null // Let the dynamic night shift color code handle this. - bulb_low_power_colour = LIGHT_COLOR_BROWN + nightshift_light_power = 0.5 + bulb_low_power_colour = LIGHT_COLOR_INTENSE_RED bulb_low_power_brightness_mul = 0.75 bulb_low_power_pow_min = 0.75 bulb_emergency_colour = LIGHT_COLOR_INTENSE_RED bulb_major_emergency_brightness_mul = 0.9 - var/maploaded = FALSE //So we don't have a lot of stress on startup. - var/turning_on = FALSE //More stress stuff. - -/obj/machinery/light/proc/delayed_turn_on(trigger, play_sound = TRUE, color_set, power_set, brightness_set) - if(QDELETED(src)) - return - turning_on = FALSE - if(!on) - return - if( prob( min(60, (switchcount**2)*0.01) ) ) - if(trigger) - burn_out() - else - use_power = ACTIVE_POWER_USE - set_light( - l_range = brightness_set, - l_power = power_set, - l_color = color_set - ) - if(play_sound) - playsound(src.loc, 'modular_skyrat/modules/aesthetics/lights/sound/light_on.ogg', 65, 1) - -/obj/machinery/light/Initialize(mapload = TRUE) - . = ..() - if(on) - maploaded = TRUE - -#undef NIGHTSHIFT_LIGHT_MODIFIER -#undef NIGHTSHIFT_COLOR_MODIFIER