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

🆑 LT3
code: Removed some Skyrat lighting delay code
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
This commit is contained in:
LT3
2025-09-07 14:16:52 -04:00
committed by GitHub
co-authored by SmArtKar
parent ff392a76a7
commit f9cbbe936e
3 changed files with 39 additions and 94 deletions
+1 -1
View File
@@ -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
+35 -58
View File
@@ -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
@@ -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