Update SSOverlays (ported from Baystation) (#19051)

Our SSOverlays system is outdated, and is likely the cause of many of
the issues seen in #18895. It has also been linked to a massive server
performance decrease.

This brings an updated system from Baystation, hopefully with speed
increases.

Should be testmerged, ideally with #18895.

---------

Co-authored-by: Cody Brittain <cbrittain10@live.com>
This commit is contained in:
Cody Brittain
2024-05-01 07:46:27 +00:00
committed by GitHub
co-authored by Cody Brittain
parent 405a05b819
commit 9983fca311
350 changed files with 1626 additions and 1498 deletions
+1 -1
View File
@@ -125,7 +125,7 @@
check_stability()
/obj/machinery/am_shielding/update_icon()
cut_overlays()
ClearOverlays()
coredirs = 0
dirs = 0
for(var/direction in GLOB.alldirs)
+7 -7
View File
@@ -628,18 +628,18 @@
if(!(update_state & UPDATE_ALLGOOD))
if(overlays.len)
cut_overlays()
ClearOverlays()
return
if(update & 2)
cut_overlays()
ClearOverlays()
if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD)
add_overlay(status_overlays_lock[locked+coverlocked+1])
add_overlay(status_overlays_charging[charging+1])
AddOverlays(status_overlays_lock[locked+coverlocked+1])
AddOverlays(status_overlays_charging[charging+1])
if(operating)
add_overlay(status_overlays_equipment[equipment+1])
add_overlay(status_overlays_lighting[lighting+1])
add_overlay(status_overlays_environ[environ+1])
AddOverlays(status_overlays_equipment[equipment+1])
AddOverlays(status_overlays_lighting[lighting+1])
AddOverlays(status_overlays_environ[environ+1])
if(update & 3)
if(update_state & UPDATE_BLUESCREEN)
+2 -2
View File
@@ -88,8 +88,8 @@
/obj/machinery/power/smes/batteryrack/makeshift/update_icon()
.=..()
if(overcharge_percent > 100)
cut_overlays()
add_overlay("smes-crit")
ClearOverlays()
AddOverlays("smes-crit")
//This mess of if-elses and magic numbers handles what happens if the engies don't pay attention and let it eat too much charge
//What happens depends on how much capacity has the ghetto smes and how much it is overcharged.
+4 -4
View File
@@ -625,8 +625,8 @@ By design, d1 is the smallest direction and d2 is the highest
item_state = "[initial(icon_state)]"
name += " coil"
update_held_icon()
cut_overlays()
add_overlay(overlay_image(icon, "[icon_state]_end", flags=RESET_COLOR))
ClearOverlays()
AddOverlays(overlay_image(icon, "[icon_state]_end", flags=RESET_COLOR))
check_maptext(SMALL_FONTS(7, get_amount()))
/obj/item/stack/cable_coil/attackby(obj/item/attacking_item, mob/user)
@@ -1058,13 +1058,13 @@ By design, d1 is the smallest direction and d2 is the highest
/obj/structure/noose/post_buckle(mob/living/M)
if(M == buckled)
layer = MOB_LAYER
add_overlay(over)
AddOverlays(over)
START_PROCESSING(SSprocessing, src)
M.pixel_y = initial(M.pixel_y) + 8 //rise them up a bit
M.dir = SOUTH
else
reset_plane_and_layer()
cut_overlay(over)
CutOverlays(over)
STOP_PROCESSING(SSprocessing, src)
pixel_x = initial(pixel_x)
M.pixel_x = initial(M.pixel_x)
+4 -4
View File
@@ -28,14 +28,14 @@
return use(cell_amt) / CELLRATE
/obj/item/cell/update_icon()
cut_overlays()
ClearOverlays()
switch(percent())
if(95 to 100)
add_overlay("cell-o2")
AddOverlays("cell-o2")
if(25 to 94)
add_overlay("cell-o1")
AddOverlays("cell-o1")
if(0.05 to 25)
add_overlay("cell-o0")
AddOverlays("cell-o0")
if(0 to 0.05)
return
+2 -2
View File
@@ -77,7 +77,7 @@
/obj/machinery/power/generator/update_icon()
icon_state = anchored ? "teg-assembled" : "teg-unassembled"
cut_overlays()
ClearOverlays()
if (circ1)
circ1.temperature_overlay = null
if (circ2)
@@ -86,7 +86,7 @@
return TRUE
else
if (lastgenlev != 0)
add_overlay("teg-op[lastgenlev]")
AddOverlays("teg-op[lastgenlev]")
if (circ1 && circ2)
var/extreme = (lastgenlev > 9) ? "ex" : ""
if (circ1.last_temperature < circ2.last_temperature)
+5 -5
View File
@@ -85,7 +85,7 @@
/obj/machinery/gravity_generator/main/station/Initialize()
. = ..()
setup_parts()
middle.add_overlay("activated")
middle.AddOverlays("activated")
update_list(TRUE)
addtimer(CALLBACK(src, PROC_REF(round_startset)), 100)
@@ -180,7 +180,7 @@
for(var/obj/machinery/gravity_generator/M in parts)
if(!(M.stat & BROKEN))
M.set_broken()
middle.cut_overlays()
middle.ClearOverlays()
charge_count = 0
breaker = 0
set_power()
@@ -305,7 +305,7 @@
pulse_radiation(100)
set_state(0)
if(middle)
middle.cut_overlays()
middle.ClearOverlays()
if(prob(1)) //It will spawn a small one and eat the generator. Won't cause any other issues considering it's a 1x1 and will go away on it's own.
new /obj/singularity(src.loc)
if(prob(33)) //Releasing all that power at once is dangerous.
@@ -411,9 +411,9 @@
if(overlay_state != current_overlay)
if(middle)
middle.cut_overlays()
middle.ClearOverlays()
if(overlay_state)
middle.add_overlay(overlay_state)
middle.AddOverlays(overlay_state)
current_overlay = overlay_state
/obj/machinery/gravity_generator/main/proc/pulse_radiation(var/amount = 20)
+4 -4
View File
@@ -36,25 +36,25 @@
// update the icon state and description of the light
/obj/item/light/proc/update()
cut_overlays()
ClearOverlays()
switch(status)
if(LIGHT_OK)
icon_state = "[lighttype]_attachment"
var/image/I = image(icon, "[lighttype]")
I.color = brightness_color
add_overlay(I)
AddOverlays(I)
desc = "A replacement [name]."
if(LIGHT_BURNED)
icon_state = "[lighttype]_attachment"
var/image/I = image(icon, "[lighttype]_burned")
I.color = brightness_color
add_overlay(I)
AddOverlays(I)
desc = "A burnt-out [name]."
if(LIGHT_BROKEN)
icon_state = "[lighttype]_attachment_broken"
var/image/I = image(icon, "[lighttype]_broken")
I.color = brightness_color
add_overlay(I)
AddOverlays(I)
desc = "A broken [name]."
// attack bulb/tube with object
+5 -5
View File
@@ -230,7 +230,7 @@
pixel_y = pixel_y
/obj/machinery/light/update_icon()
cut_overlays()
ClearOverlays()
if ((status == LIGHT_EMPTY) || !fitting_has_empty_icon)
icon_state = "[base_state]_empty"
else
@@ -252,17 +252,17 @@
I.plane = EFFECTS_ABOVE_LIGHTING_PLANE
else
I.plane = plane
add_overlay(I)
AddOverlays(I)
else
add_overlay(LIGHT_FIXTURE_CACHE(icon, "[base_state]_off", target_color))
AddOverlays(LIGHT_FIXTURE_CACHE(icon, "[base_state]_off", target_color))
if(LIGHT_BURNED)
add_overlay(LIGHT_FIXTURE_CACHE(icon, "[base_state]_burned", brightness_color))
AddOverlays(LIGHT_FIXTURE_CACHE(icon, "[base_state]_burned", brightness_color))
stat |= BROKEN
stat &= ~MAINT
if(LIGHT_BROKEN)
add_overlay(LIGHT_FIXTURE_CACHE(icon, "[base_state]_broken", brightness_color))
AddOverlays(LIGHT_FIXTURE_CACHE(icon, "[base_state]_broken", brightness_color))
stat |= BROKEN
stat &= ~MAINT
+2 -2
View File
@@ -60,8 +60,8 @@
update_icon()
/obj/machinery/power/radial_floodlight/update_icon()
cut_overlays()
ClearOverlays()
if(on)
var/image/light = image(icon, src, "[icon_state]-light")
light.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(light)
AddOverlays(light)
@@ -35,26 +35,26 @@ field_generator power level display
/obj/machinery/field_generator/update_icon()
cut_overlays()
ClearOverlays()
if(!active)
if(warming_up)
add_overlay("+a[warming_up]")
AddOverlays("+a[warming_up]")
if(fields.len)
add_overlay("+on")
AddOverlays("+on")
// Power level indicator
// Scale % power to % num_power_levels and truncate value
var/level = round(num_power_levels * power / field_generator_max_power)
// Clamp between 0 and num_power_levels for out of range power values
level = between(0, level, num_power_levels)
if(level)
add_overlay("+p[level]")
AddOverlays("+p[level]")
if(anchored)
add_overlay("+bolts")
AddOverlays("+bolts")
if(state == 2)
add_overlay("+welding")
AddOverlays("+welding")
var/image/lights_image = image(icon, null, "+lights")
lights_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(lights_image)
AddOverlays(lights_image)
/obj/machinery/field_generator/process()
if(Varedit_start == 1)
+3 -3
View File
@@ -11,12 +11,12 @@
var/creation_type = /obj/singularity
/obj/machinery/the_singularitygen/update_icon()
cut_overlays()
ClearOverlays()
if(anchored)
add_overlay("[icon_state]+bolts")
AddOverlays("[icon_state]+bolts")
var/image/lights_image = image(icon, null, "[icon_state]+lights")
lights_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(lights_image)
AddOverlays(lights_image)
/obj/machinery/the_singularitygen/process()
var/turf/T = get_turf(src)
@@ -479,15 +479,15 @@
move_self = 0
switch (current_size)
if(1)
add_overlay(image('icons/obj/singularity.dmi',"chain_s1"))
AddOverlays(image('icons/obj/singularity.dmi',"chain_s1"))
if(3)
add_overlay(image('icons/effects/96x96.dmi',"chain_s3"))
AddOverlays(image('icons/effects/96x96.dmi',"chain_s3"))
if(5)
add_overlay(image('icons/effects/160x160.dmi',"chain_s5"))
AddOverlays(image('icons/effects/160x160.dmi',"chain_s5"))
if(7)
add_overlay(image('icons/effects/224x224.dmi',"chain_s7"))
AddOverlays(image('icons/effects/224x224.dmi',"chain_s7"))
if(9)
add_overlay(image('icons/effects/288x288.dmi',"chain_s9"))
AddOverlays(image('icons/effects/288x288.dmi',"chain_s9"))
/obj/singularity/proc/on_release()
chained = 0
+8 -8
View File
@@ -162,27 +162,27 @@
return 0
/obj/machinery/power/smes/update_icon()
cut_overlays()
ClearOverlays()
if(!can_function())
return
if(inputting == 2)
add_overlay("[icon_state]-oc2")
AddOverlays("[icon_state]-oc2")
else if (inputting == 1)
add_overlay("[icon_state]-oc1")
AddOverlays("[icon_state]-oc1")
else if (input_attempt)
add_overlay("[icon_state]-oc0")
AddOverlays("[icon_state]-oc0")
var/clevel = chargedisplay()
if(clevel)
add_overlay("[icon_state]-og[clevel]")
AddOverlays("[icon_state]-og[clevel]")
if(outputting == 2)
add_overlay("[icon_state]-op2")
AddOverlays("[icon_state]-op2")
else if (outputting == 1)
add_overlay("[icon_state]-op1")
AddOverlays("[icon_state]-op1")
else
add_overlay("[icon_state]-op0")
AddOverlays("[icon_state]-op0")
/obj/machinery/power/smes/proc/chargedisplay()
return round(5.5*charge/(capacity ? capacity : 5e6))
+3 -3
View File
@@ -368,9 +368,9 @@
// Description: Allows us to use special icon overlay for critical SMESs
/obj/machinery/power/smes/buildable/update_icon()
if(failing)
cut_overlays()
add_overlay("smes-crit")
add_overlay("smes-crit_screen")
ClearOverlays()
AddOverlays("smes-crit")
AddOverlays("smes-crit_screen")
else
..()
+6 -6
View File
@@ -91,11 +91,11 @@
/obj/machinery/power/solar/update_icon()
..()
cut_overlays()
ClearOverlays()
if(stat & BROKEN)
add_overlay("solar_panel-b")
AddOverlays("solar_panel-b")
else
add_overlay("solar_panel")
AddOverlays("solar_panel")
set_angle(adir)
return
@@ -526,7 +526,7 @@
set_panels(cdir)
/obj/machinery/power/solar_control/update_icon()
cut_overlays()
ClearOverlays()
if(stat & NOPOWER)
set_light(0)
return
@@ -538,10 +538,10 @@
if(stat & BROKEN)
icon_state = "[initial(icon_state)]-broken"
holographic_overlay(src, src.icon, "broken")
add_overlay("red_key")
AddOverlays("red_key")
else
holographic_overlay(src, src.icon, "solar")
add_overlay("yellow_key")
AddOverlays("yellow_key")
//
// MISC
+6 -6
View File
@@ -14,12 +14,12 @@
)
/obj/machinery/power/tesla_coil/update_icon()
cut_overlays()
ClearOverlays()
if(anchored)
add_overlay("[icon_state]+bolts")
AddOverlays("[icon_state]+bolts")
var/image/lights_image = image(icon, null, "[icon_state]+lights")
lights_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(lights_image)
AddOverlays(lights_image)
/obj/machinery/power/tesla_coil/RefreshParts()
var/power_multiplier = 0
@@ -75,12 +75,12 @@
)
/obj/machinery/power/grounding_rod/update_icon()
cut_overlays()
ClearOverlays()
if(anchored)
add_overlay("[icon_state]+bolts")
AddOverlays("[icon_state]+bolts")
var/image/lights_image = image(icon, null, "[icon_state]+lights")
lights_image.plane = EFFECTS_ABOVE_LIGHTING_PLANE
add_overlay(lights_image)
AddOverlays(lights_image)
/obj/machinery/power/grounding_rod/attackby(obj/item/attacking_item, mob/user)
if(default_deconstruction_screwdriver(user, attacking_item))