diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
index bf675c1e12..7709bb5658 100644
--- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
@@ -66,7 +66,7 @@
if(!check_icon_cache())
return
- overlays.Cut()
+ cut_overlays()
var/vent_icon = "vent"
@@ -82,7 +82,7 @@
else
vent_icon += "[use_power ? "[pump_direction ? "out" : "in"]" : "off"]"
- overlays += icon_manager.get_atmos_icon("device", , , vent_icon)
+ add_overlay(icon_manager.get_atmos_icon("device", , , vent_icon))
/obj/machinery/atmospherics/binary/dp_vent_pump/update_underlays()
if(..())
diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
index 8e7637e6f1..8af0308677 100644
--- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
+++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
@@ -48,12 +48,15 @@
build_icons()
/obj/machinery/atmospherics/omni/update_icon()
+ cut_overlays()
if(stat & NOPOWER)
- overlays = overlays_off
+ add_overlay(overlays_off)
else if(error_check())
- overlays = overlays_error
+ add_overlay(overlays_error)
+ else if (use_power)
+ add_overlay(overlays_on)
else
- overlays = use_power ? (overlays_on) : (overlays_off)
+ add_overlay(overlays_off)
underlays = underlays_current
diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index c9eff73a55..7ed4040e66 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -122,7 +122,7 @@
if(!check_icon_cache())
return
- overlays.Cut()
+ cut_overlays()
var/vent_icon = "vent"
@@ -140,7 +140,7 @@
else
vent_icon += "[pump_direction ? "out" : "in"]"
- overlays += icon_manager.get_atmos_icon("device", , , vent_icon)
+ add_overlay(icon_manager.get_atmos_icon("device", , , vent_icon))
/obj/machinery/atmospherics/unary/vent_pump/update_underlays()
if(..())
diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
index 454a268549..969cee0690 100644
--- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
@@ -54,7 +54,7 @@
if(!check_icon_cache())
return
- overlays.Cut()
+ cut_overlays()
var/scrubber_icon = "scrubber"
@@ -67,7 +67,7 @@
else
scrubber_icon += "[use_power ? "[scrubbing ? "on" : "in"]" : "off"]"
- overlays += icon_manager.get_atmos_icon("device", , , scrubber_icon)
+ add_overlay(icon_manager.get_atmos_icon("device", , , scrubber_icon))
/obj/machinery/atmospherics/unary/vent_scrubber/update_underlays()
if(..())
diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/ATMOSPHERICS/pipes/cap.dm
index 2a63bb3a20..94ce782b6d 100644
--- a/code/ATMOSPHERICS/pipes/cap.dm
+++ b/code/ATMOSPHERICS/pipes/cap.dm
@@ -53,8 +53,8 @@
alpha = 255
- overlays.Cut()
- overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "cap[icon_connect_type]")
+ cut_overlays()
+ add_overlay(icon_manager.get_atmos_icon("pipe", , pipe_color, "cap[icon_connect_type]"))
/obj/machinery/atmospherics/pipe/cap/atmos_init()
for(var/obj/machinery/atmospherics/target in get_step(src, dir))
diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm
index ad270148da..88cb10994e 100644
--- a/code/ATMOSPHERICS/pipes/manifold.dm
+++ b/code/ATMOSPHERICS/pipes/manifold.dm
@@ -102,9 +102,9 @@
alpha = 255
- overlays.Cut()
- overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)
- overlays += icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type)
+ cut_overlays()
+ add_overlay(icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type))
+ add_overlay(icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type))
underlays.Cut()
var/turf/T = get_turf(src)
diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm
index 8a67a6ad1c..3773ebce73 100644
--- a/code/ATMOSPHERICS/pipes/manifold4w.dm
+++ b/code/ATMOSPHERICS/pipes/manifold4w.dm
@@ -102,9 +102,9 @@
alpha = 255
- overlays.Cut()
- overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)
- overlays += icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type)
+ cut_overlays()
+ add_overlay(icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type))
+ add_overlay(icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type))
underlays.Cut()
var/turf/T = get_turf(src)
diff --git a/code/ATMOSPHERICS/pipes/simple.dm b/code/ATMOSPHERICS/pipes/simple.dm
index f67f7c1383..4036d509b9 100644
--- a/code/ATMOSPHERICS/pipes/simple.dm
+++ b/code/ATMOSPHERICS/pipes/simple.dm
@@ -117,12 +117,12 @@
alpha = 255
- overlays.Cut()
+ cut_overlays()
if(node1 && node2)
- overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]")
+ add_overlay(icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]"))
else
- overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]exposed[node1?1:0][node2?1:0][icon_connect_type]")
+ add_overlay(icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]exposed[node1?1:0][node2?1:0][icon_connect_type]"))
/obj/machinery/atmospherics/pipe/simple/update_underlays()
return
diff --git a/code/ATMOSPHERICS/pipes/universal.dm b/code/ATMOSPHERICS/pipes/universal.dm
index a72ef219f7..f2a5307485 100644
--- a/code/ATMOSPHERICS/pipes/universal.dm
+++ b/code/ATMOSPHERICS/pipes/universal.dm
@@ -16,8 +16,8 @@
alpha = 255
- overlays.Cut()
- overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")
+ cut_overlays()
+ add_overlay(icon_manager.get_atmos_icon("pipe", , pipe_color, "universal"))
underlays.Cut()
if (node1)
@@ -54,8 +54,10 @@
alpha = 255
- overlays.Cut()
- overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")
+ cut_overlays()
+ var/icon/add = icon_manager.get_atmos_icon("pipe", , pipe_color, "universal")
+ add_overlay(add)
+
underlays.Cut()
if (node1)
diff --git a/code/ZAS/Controller.dm b/code/ZAS/Controller.dm
index be103e7a55..7f7b575246 100644
--- a/code/ZAS/Controller.dm
+++ b/code/ZAS/Controller.dm
@@ -170,7 +170,7 @@ Class Procs:
if(T.needs_air_update) return
tiles_to_update |= T
#ifdef ZASDBG
- T.overlays += mark
+ T.add_overlay(mark)
#endif
T.needs_air_update = 1
diff --git a/code/ZAS/Debug.dm b/code/ZAS/Debug.dm
index d16cf167db..224904a567 100644
--- a/code/ZAS/Debug.dm
+++ b/code/ZAS/Debug.dm
@@ -12,8 +12,8 @@ var/image/mark = image('icons/Testing/Zone.dmi', icon_state = "mark")
/turf/var/tmp/dbg_img
/turf/proc/dbg(image/img, d = 0)
if(d > 0) img.dir = d
- overlays -= dbg_img
- overlays += img
+ cut_overlay(dbg_img)
+ add_overlay(img)
dbg_img = img
/proc/soft_assert(thing,fail)
diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm
index 06e52565f2..a9a5d9399a 100644
--- a/code/ZAS/Phoron.dm
+++ b/code/ZAS/Phoron.dm
@@ -57,11 +57,11 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi')
else
if(!contaminated)
contaminated = 1
- overlays += contamination_overlay
+ add_overlay(contamination_overlay)
/obj/item/proc/decontaminate()
contaminated = 0
- overlays -= contamination_overlay
+ cut_overlay(contamination_overlay)
/mob/proc/contaminate()
diff --git a/code/__defines/flags.dm b/code/__defines/flags.dm
index 2ff8f44dba..d07bd21ce2 100644
--- a/code/__defines/flags.dm
+++ b/code/__defines/flags.dm
@@ -29,7 +29,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define OPENCONTAINER (1<<4) // Is an open container for chemistry purposes.
#define PHORONGUARD (1<<5) // Does not get contaminated by phoron.
#define NOREACT (1<<6) // Reagents don't react inside this container.
-#define OVERLAY_QUEUED (1<<7)// Atom queued to SSoverlay for COMPILE_OVERLAYS
+#define OVERLAY_QUEUED (1<<7) // Atom is queued for an overlay update
//Flags for items (equipment) - Used in /obj/item/var/item_flags
#define THICKMATERIAL (1<<0) // Prevents syringes, parapens and hyposprays if equipped to slot_suit or slot_head.
diff --git a/code/__defines/stat_tracking.dm b/code/__defines/stat_tracking.dm
deleted file mode 100644
index 79337bda5c..0000000000
--- a/code/__defines/stat_tracking.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// Defines used for advanced performance profiling of subsystems.
-// Currently used only by SSoverlays (2018-02-24 ~Leshana)
-//
-#define STAT_ENTRY_TIME 1
-#define STAT_ENTRY_COUNT 2
-#define STAT_ENTRY_LENGTH 2
-
-#define STAT_START_STOPWATCH var/STAT_STOP_WATCH = TICK_USAGE
-#define STAT_STOP_STOPWATCH var/STAT_TIME = TICK_USAGE_TO_MS(STAT_STOP_WATCH)
-#define STAT_LOG_ENTRY(entrylist, entryname) \
- var/list/STAT_ENTRY = entrylist[entryname] || (entrylist[entryname] = new /list(STAT_ENTRY_LENGTH));\
- STAT_ENTRY[STAT_ENTRY_TIME] += STAT_TIME;\
- var/STAT_INCR_AMOUNT = min(1, 2**round((STAT_ENTRY[STAT_ENTRY_COUNT] || 0)/SHORT_REAL_LIMIT));\
- if (STAT_INCR_AMOUNT == 1 || prob(100/STAT_INCR_AMOUNT)) {\
- STAT_ENTRY[STAT_ENTRY_COUNT] += STAT_INCR_AMOUNT;\
- };\
diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm
index 7675fb2126..fa35c9a8cd 100644
--- a/code/__defines/subsystems.dm
+++ b/code/__defines/subsystems.dm
@@ -108,26 +108,3 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
#define FIRE_PRIORITY_PROJECTILES 150
#define FIRE_PRIORITY_CHAT 400
#define FIRE_PRIORITY_OVERLAYS 500
-
-// Macro defining the actual code applying our overlays lists to the BYOND overlays list. (I guess a macro for speed)
-// TODO - I don't really like the location of this macro define. Consider it. ~Leshana
-#define COMPILE_OVERLAYS(A)\
- do {\
- var/list/oo = A.our_overlays;\
- var/list/po = A.priority_overlays;\
- if(LAZYLEN(po)){\
- if(LAZYLEN(oo)){\
- A.overlays = oo + po;\
- }\
- else{\
- A.overlays = po;\
- }\
- }\
- else if(LAZYLEN(oo)){\
- A.overlays = oo;\
- }\
- else{\
- A.overlays.Cut();\
- }\
- A.flags &= ~OVERLAY_QUEUED;\
- } while (FALSE)
diff --git a/code/_helpers/image.dm b/code/_helpers/image.dm
new file mode 100644
index 0000000000..08a66cdfcd
--- /dev/null
+++ b/code/_helpers/image.dm
@@ -0,0 +1,26 @@
+/image/proc/add_overlay(x)
+ overlays += x
+
+
+/image/proc/cut_overlay(x)
+ overlays -= x
+
+
+/image/proc/cut_overlays(x)
+ overlays.Cut()
+
+
+/image/proc/copy_overlays(atom/other, cut_old)
+ if(!other)
+ if(cut_old)
+ cut_overlays()
+ return
+
+ var/list/cached_other = other.our_overlays
+ if(cached_other)
+ if(cut_old || !overlays.len)
+ overlays = cached_other.Copy()
+ else
+ overlays |= cached_other
+ else if(cut_old)
+ cut_overlays()
diff --git a/code/_helpers/sorts/comparators.dm b/code/_helpers/sorts/comparators.dm
index 6e59f479c5..dbb6588e76 100644
--- a/code/_helpers/sorts/comparators.dm
+++ b/code/_helpers/sorts/comparators.dm
@@ -51,11 +51,6 @@
if(. == 0) // If they have the same var, then sort by name.
. = sorttext(b.name, a.name)
-// Sorts entries in a performance stats list.
-/proc/cmp_generic_stat_item_time(list/A, list/B)
- . = B[STAT_ENTRY_TIME] - A[STAT_ENTRY_TIME]
- if (!.)
- . = B[STAT_ENTRY_COUNT] - A[STAT_ENTRY_COUNT]
/proc/cmp_typepaths_asc(A, B)
return sorttext("[B]","[A]")
diff --git a/code/_helpers/visual_filters.dm b/code/_helpers/visual_filters.dm
index 6cafa5a04d..7d541dc3ff 100644
--- a/code/_helpers/visual_filters.dm
+++ b/code/_helpers/visual_filters.dm
@@ -1,8 +1,5 @@
// These involve BYOND's built in filters that do visual effects, and not stuff that distinguishes between things.
-// All of this ported from TG.
-/atom/movable
- var/list/filter_data // For handling persistent filters
/proc/cmp_filter_data_priority(list/A, list/B)
return A["priority"] - B["priority"]
diff --git a/code/_onclick/hud/ability_screen_objects.dm b/code/_onclick/hud/ability_screen_objects.dm
index 49c25650b3..3c62e20093 100644
--- a/code/_onclick/hud/ability_screen_objects.dm
+++ b/code/_onclick/hud/ability_screen_objects.dm
@@ -53,14 +53,14 @@
my_mob.client.screen -= O
// O.handle_icon_updates = 0
showing = 0
- overlays.len = 0
- overlays.Add(closed_state)
+ cut_overlays()
+ add_overlay(closed_state)
else if(forced_state != 1) // We're opening it, show the icons.
open_ability_master()
update_abilities(1)
showing = 1
- overlays.len = 0
- overlays.Add(open_state)
+ cut_overlays()
+ add_overlay(open_state)
update_icon()
/obj/screen/movable/ability_master/proc/open_ability_master()
@@ -211,51 +211,13 @@
..()
/obj/screen/ability/update_icon()
-// if(!spell)
-// qdel(src)
-// return
-
-// if((last_charge == spell.charge_counter || !handle_icon_updates) && !forced_update)
-// return //nothing to see here
-
-// overlays -= spell.hud_state
-
-// if(spell.charge_type == Sp_RECHARGE || spell.charge_type == Sp_CHARGES)
-// if(spell.charge_counter < spell.charge_max)
-// icon_state = "[background_base_state]_spell_base"
-// if(spell.charge_counter > 0)
-// var/icon/partial_charge = icon(src.icon, "[spell_base]_spell_ready")
-// partial_charge.Crop(1, 1, partial_charge.Width(), round(partial_charge.Height() * spell.charge_counter / spell.charge_max))
-// overlays += partial_charge
-// if(last_charged_icon)
-// overlays -= last_charged_icon
-// last_charged_icon = partial_charge
-// else if(last_charged_icon)
-// overlays -= last_charged_icon
-// last_charged_icon = null
-// else
-// icon_state = "[spell_base]_spell_ready"
-// if(last_charged_icon)
-// overlays -= last_charged_icon
-// else
-// icon_state = "[spell_base]_spell_ready"
- overlays.Cut()
+ cut_overlays()
icon_state = "[background_base_state]_spell_base"
-
- overlays += ability_icon_state
-
-// last_charge = spell.charge_counter
-
-// overlays -= "silence"
-// if(spell.silenced)
-// overlays += "silence"
+ cut_overlay(ability_icon_state)
/obj/screen/ability/Click()
if(!usr)
-// qdel(src)
return
-
-// spell.perform(usr)
activate()
/obj/screen/ability/MouseDrop(var/atom/A)
diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm
index 160413135b..d725fb8064 100644
--- a/code/_onclick/hud/action.dm
+++ b/code/_onclick/hud/action.dm
@@ -134,7 +134,7 @@
icon = owner.button_icon
icon_state = owner.background_icon_state
- overlays.Cut()
+ cut_overlays()
var/image/img
if(owner.action_type == AB_ITEM && owner.target)
var/obj/item/I = owner.target
@@ -143,7 +143,7 @@
img = image(owner.button_icon,src,owner.button_icon_state)
img.pixel_x = 0
img.pixel_y = 0
- overlays += img
+ add_overlay(img)
if(!owner.IsAvailable())
color = rgb(128,0,0,128)
@@ -178,9 +178,9 @@
return
/obj/screen/movable/action_button/hide_toggle/UpdateIcon()
- overlays.Cut()
+ cut_overlays()
var/image/img = image(icon,src,hidden?"show":"hide")
- overlays += img
+ add_overlay(img)
return
//This is the proc used to update all the action buttons. Properly defined in /mob/living/
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index b4b7b8add9..1029f6a0a7 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -279,8 +279,8 @@
zone_sel.icon = HUD.ui_style
zone_sel.color = HUD.ui_color
zone_sel.alpha = HUD.ui_alpha
- zone_sel.overlays.Cut()
- zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[zone_sel.selecting]")
+ zone_sel.cut_overlays()
+ zone_sel.add_overlay(image('icons/mob/zone_sel.dmi', "[zone_sel.selecting]"))
hud_elements |= zone_sel
//Handle the gun settings buttons
diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm
index 57f0c13293..93c41e7c10 100644
--- a/code/_onclick/hud/picture_in_picture.dm
+++ b/code/_onclick/hud/picture_in_picture.dm
@@ -59,7 +59,7 @@
var/matrix/M = matrix()
M.Translate(0, (height + 0.25) * world.icon_size)
move_tab.transform = M
- overlays += move_tab
+ add_overlay(move_tab)
if(!button_x)
button_x = new /obj/screen/component_button(null, src)
@@ -102,6 +102,7 @@
/obj/screen/movable/pic_in_pic/proc/add_background()
if((width > 0) && (height > 0))
+ var/list/add = list()
for(var/mutable_appearance/dir in background_mas)
var/matrix/M = matrix()
var/x_scale = 1
@@ -129,7 +130,8 @@
M.Scale(x_scale, y_scale)
M.Translate(x_off, y_off)
dir.transform = M
- overlays += dir
+ add += dir
+ add_overlay(add)
/obj/screen/movable/pic_in_pic/proc/set_view_size(width, height, do_refresh = TRUE)
width = clamp(width, 0, max_dimensions)
@@ -139,7 +141,7 @@
y_off = -height * world.icon_size - 16
- overlays.Cut()
+ cut_overlays()
add_background()
add_buttons()
if(do_refresh)
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index 95ff6e1104..22ea9bf562 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -141,8 +141,8 @@ var/obj/screen/robot_inventory
zone_sel = new /obj/screen/zone_sel()
zone_sel.icon = HUD.ui_style
zone_sel.alpha = HUD.ui_alpha
- zone_sel.overlays.Cut()
- zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[zone_sel.selecting]")
+ zone_sel.cut_overlays()
+ zone_sel.add_overlay(image('icons/mob/zone_sel.dmi', "[zone_sel.selecting]"))
//Handle the gun settings buttons
gun_setting_icon = new /obj/screen/gun/mode(null)
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index aea7f59996..e33d596ac0 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -598,11 +598,11 @@
if(!handcuff_overlay)
var/state = (hud.l_hand_hud_object == src) ? "l_hand_hud_handcuffs" : "r_hand_hud_handcuffs"
handcuff_overlay = image("icon"='icons/mob/screen_gen.dmi', "icon_state"=state)
- overlays.Cut()
+ cut_overlays()
if(hud.mymob && iscarbon(hud.mymob))
var/mob/living/carbon/C = hud.mymob
if(C.handcuffed)
- overlays |= handcuff_overlay
+ add_overlay(handcuff_overlay)
// PIP stuff
/obj/screen/component_button
@@ -873,13 +873,13 @@
var/hud_state = ammo_type[1]
var/hud_state_empty = ammo_type[2]
- overlays.Cut()
+ cut_overlays()
var/empty = image('icons/mob/screen_ammo.dmi', src, "[hud_state_empty]")
if(rounds == 0)
if(warned)
- overlays += empty
+ add_overlay(empty)
else
warned = TRUE
var/obj/screen/ammo/F = new /obj/screen/ammo(src)
@@ -889,24 +889,26 @@
spawn(20)
user.client.screen -= F
qdel(F)
- overlays += empty
+ add_overlay(empty)
else
warned = FALSE
- overlays += image('icons/mob/screen_ammo.dmi', src, "[hud_state]")
+ var/image/image = image('icons/mob/screen_ammo.dmi', src, "[hud_state]")
+ add_overlay(image)
+ var/list/add = list()
rounds = num2text(rounds)
- //Handle the amount of rounds
switch(length(rounds))
if(1)
- overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[1]]")
+ add += image('icons/mob/screen_ammo.dmi', src, "o[rounds[1]]")
if(2)
- overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[2]]")
- overlays += image('icons/mob/screen_ammo.dmi', src, "t[rounds[1]]")
+ add += image('icons/mob/screen_ammo.dmi', src, "o[rounds[2]]")
+ add += image('icons/mob/screen_ammo.dmi', src, "t[rounds[1]]")
if(3)
- overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[3]]")
- overlays += image('icons/mob/screen_ammo.dmi', src, "t[rounds[2]]")
- overlays += image('icons/mob/screen_ammo.dmi', src, "h[rounds[1]]")
+ add += image('icons/mob/screen_ammo.dmi', src, "o[rounds[3]]")
+ add += image('icons/mob/screen_ammo.dmi', src, "t[rounds[2]]")
+ add += image('icons/mob/screen_ammo.dmi', src, "h[rounds[1]]")
else //"0" is still length 1 so this means it's over 999
- overlays += image('icons/mob/screen_ammo.dmi', src, "o9")
- overlays += image('icons/mob/screen_ammo.dmi', src, "t9")
- overlays += image('icons/mob/screen_ammo.dmi', src, "h9")
\ No newline at end of file
+ add += image('icons/mob/screen_ammo.dmi', src, "o9")
+ add += image('icons/mob/screen_ammo.dmi', src, "t9")
+ add += image('icons/mob/screen_ammo.dmi', src, "h9")
+ add_overlay(add)
diff --git a/code/_onclick/hud/spell_screen_objects.dm b/code/_onclick/hud/spell_screen_objects.dm
index 92d9487401..5b668e915b 100644
--- a/code/_onclick/hud/spell_screen_objects.dm
+++ b/code/_onclick/hud/spell_screen_objects.dm
@@ -43,14 +43,14 @@
spell_holder.client.screen -= O
O.handle_icon_updates = 0
showing = 0
- overlays.len = 0
- overlays.Add(closed_state)
+ cut_overlays()
+ add_overlay(closed_state)
else if(forced_state != 1)
open_spellmaster()
update_spells(1)
showing = 1
- overlays.len = 0
- overlays.Add(open_state)
+ cut_overlays()
+ add_overlay(open_state)
/obj/screen/movable/spell_master/proc/open_spellmaster()
var/list/screen_loc_xy = splittext(screen_loc,",")
@@ -181,7 +181,7 @@
if((last_charge == spell.charge_counter || !handle_icon_updates) && !forced_update)
return //nothing to see here
- overlays -= spell.hud_state
+ cut_overlay(spell.hud_state)
if(spell.charge_type == Sp_RECHARGE || spell.charge_type == Sp_CHARGES)
if(spell.charge_counter < spell.charge_max)
@@ -189,27 +189,27 @@
if(spell.charge_counter > 0)
var/icon/partial_charge = icon(src.icon, "[spell_base]_spell_ready")
partial_charge.Crop(1, 1, partial_charge.Width(), round(partial_charge.Height() * spell.charge_counter / spell.charge_max))
- overlays += partial_charge
+ add_overlay(partial_charge)
if(last_charged_icon)
- overlays -= last_charged_icon
+ cut_overlay(last_charged_icon)
last_charged_icon = partial_charge
else if(last_charged_icon)
- overlays -= last_charged_icon
+ cut_overlay(last_charged_icon)
last_charged_icon = null
else
icon_state = "[spell_base]_spell_ready"
if(last_charged_icon)
- overlays -= last_charged_icon
+ cut_overlay(last_charged_icon)
else
icon_state = "[spell_base]_spell_ready"
- overlays += spell.hud_state
+ add_overlay(spell.hud_state)
last_charge = spell.charge_counter
- overlays -= "silence"
+ cut_overlay("silence")
if(spell.silenced)
- overlays += "silence"
+ add_overlay("silence")
/obj/screen/spell/Click()
if(!usr || !spell)
diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm
index 4398dbf7e6..049db78c3a 100644
--- a/code/_onclick/telekinesis.dm
+++ b/code/_onclick/telekinesis.dm
@@ -163,7 +163,7 @@ var/const/tk_maxrange = 15
return
/obj/item/tk_grab/update_icon()
- overlays.Cut()
+ cut_overlays()
if(focus && focus.icon && focus.icon_state)
- overlays += icon(focus.icon,focus.icon_state)
+ add_overlay(icon(focus.icon, focus.icon_state))
return
diff --git a/code/controllers/subsystems/air.dm b/code/controllers/subsystems/air.dm
index a0429d8d0f..e9952fe380 100644
--- a/code/controllers/subsystems/air.dm
+++ b/code/controllers/subsystems/air.dm
@@ -123,7 +123,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun
T.post_update_air_properties()
T.needs_air_update = 0
#ifdef ZASDBG
- T.overlays -= mark
+ T.cut_overlay(mark)
#endif
if(MC_TICK_CHECK)
return
@@ -138,7 +138,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun
T.post_update_air_properties()
T.needs_air_update = 0
#ifdef ZASDBG
- T.overlays -= mark
+ T.cut_overlay(mark)
#endif
if(MC_TICK_CHECK)
return
diff --git a/code/controllers/subsystems/overlays.dm b/code/controllers/subsystems/overlays.dm
index 307d9b8837..3fcdb88566 100644
--- a/code/controllers/subsystems/overlays.dm
+++ b/code/controllers/subsystems/overlays.dm
@@ -5,166 +5,148 @@ SUBSYSTEM_DEF(overlays)
priority = FIRE_PRIORITY_OVERLAYS
init_order = INIT_ORDER_OVERLAY
- var/list/queue // Queue of atoms needing overlay compiling (TODO-VERIFY!)
- var/list/stats
- var/list/overlay_icon_state_caches // Cache thing
- var/list/overlay_icon_cache // Cache thing
+ /// The queue of atoms that need overlay updates.
+ var/static/tmp/list/queue = list()
-var/global/image/stringbro = new() // Temporarily super-global because of BYOND init order dumbness.
-var/global/image/iconbro = new() // Temporarily super-global because of BYOND init order dumbness.
-var/global/image/appearance_bro = new() // Temporarily super-global because of BYOND init order dumbness.
+ /// An image used to create appearances to be cached.
+ var/static/tmp/image/renderer = new
+
+ /// A list([icon] = list([state] = [appearance], ...), ...) cache of appearances.
+ var/static/tmp/list/state_cache = list()
+
+ /// A list([icon] = [appearance], ...) cache of appearances.
+ var/static/tmp/list/icon_cache = list()
+
+ /// The number of appearances currently cached.
+ var/static/tmp/cache_size = 0
+
+
+/datum/controller/subsystem/overlays/Recover()
+ queue.Cut()
+ renderer = new
+ state_cache.Cut()
+ icon_cache.Cut()
+ cache_size = 0
-/datum/controller/subsystem/overlays/OnNew()
- overlay_icon_state_caches = list()
- overlay_icon_cache = list()
- queue = list()
- stats = list()
/datum/controller/subsystem/overlays/Initialize(timeofday)
fire(FALSE, TRUE)
+
/datum/controller/subsystem/overlays/stat_entry()
- ..("Ov:[length(queue)]")
-
-
-/datum/controller/subsystem/overlays/Shutdown()
- text2file(render_stats(stats), "[log_path]-overlay.log")
-
-/datum/controller/subsystem/overlays/Recover()
- overlay_icon_state_caches = SSoverlays.overlay_icon_state_caches
- overlay_icon_cache = SSoverlays.overlay_icon_cache
- queue = SSoverlays.queue
+ ..("Queued Atoms: [queue.len], Cache Size: [cache_size]")
/datum/controller/subsystem/overlays/fire(resumed, no_mc_tick)
- var/list/queue = src.queue
- var/static/count = 0
- if (count)
- var/c = count
- count = 0 //so if we runtime on the Cut, we don't try again.
- queue.Cut(1,c+1)
-
- for (var/thing in queue)
- count++
- if(thing)
- STAT_START_STOPWATCH
- var/atom/A = thing
- COMPILE_OVERLAYS(A)
- STAT_STOP_STOPWATCH
- STAT_LOG_ENTRY(stats, A.type)
+ var/count = 1
+ for (var/atom/atom as anything in queue)
+ ++count
+ atom?.UpdateOverlays()
if (no_mc_tick)
CHECK_TICK
else if (MC_TICK_CHECK)
- break
+ queue.Cut(count)
+ return
+ queue.Cut()
- if (count)
- queue.Cut(1,count+1)
- count = 0
-/proc/iconstate2appearance(icon, iconstate)
- // var/static/image/stringbro = new() // Moved to be superglobal due to BYOND insane init order stupidness.
- var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches
- var/list/cached_icon = icon_states_cache[icon]
- if (cached_icon)
- var/cached_appearance = cached_icon["[iconstate]"]
- if (cached_appearance)
- return cached_appearance
- stringbro.icon = icon
- stringbro.icon_state = iconstate
- if (!cached_icon) //not using the macro to save an associated lookup
- cached_icon = list()
- icon_states_cache[icon] = cached_icon
- var/cached_appearance = stringbro.appearance
- cached_icon["[iconstate]"] = cached_appearance
- return cached_appearance
+/datum/controller/subsystem/overlays/proc/GetStateAppearance(icon, state)
+ var/list/subcache = state_cache[icon]
+ if (!subcache)
+ subcache = list()
+ state_cache[icon] = subcache
+ if (!subcache[state])
+ renderer.icon = icon
+ renderer.icon_state = state
+ subcache[state] = renderer.appearance
+ ++cache_size
+ return subcache[state]
-/proc/icon2appearance(icon)
- // var/static/image/iconbro = new() // Moved to be superglobal due to BYOND insane init order stupidness.
- var/list/icon_cache = SSoverlays.overlay_icon_cache
- . = icon_cache[icon]
- if (!.)
- iconbro.icon = icon
- . = iconbro.appearance
- icon_cache[icon] = .
-/atom/proc/build_appearance_list(old_overlays)
- // var/static/image/appearance_bro = new() // Moved to be superglobal due to BYOND insane init order stupidness.
- var/list/new_overlays = list()
- if (!islist(old_overlays))
- old_overlays = list(old_overlays)
- for (var/overlay in old_overlays)
- if(!overlay)
+/datum/controller/subsystem/overlays/proc/GetIconAppearance(icon)
+ if (!icon_cache[icon])
+ renderer.icon = icon
+ icon_cache[icon] = renderer.appearance
+ ++cache_size
+ return icon_cache[icon]
+
+
+/datum/controller/subsystem/overlays/proc/GetAppearanceList(atom/subject, list/sources)
+ if (!sources)
+ return list()
+ if (!islist(sources))
+ sources = list(sources)
+ var/image/image
+ var/list/result = list()
+ var/icon/icon = subject.icon
+ for (var/atom/entry as anything in sources)
+ if (!entry)
continue
- if (istext(overlay))
- new_overlays += iconstate2appearance(icon, overlay)
- else if(isicon(overlay))
- new_overlays += icon2appearance(overlay)
+ else if (istext(entry))
+ result += GetStateAppearance(icon, entry)
+ else if (isicon(entry))
+ result += GetIconAppearance(entry)
else
- if(isloc(overlay))
- var/atom/A = overlay
- if (A.flags & OVERLAY_QUEUED)
- COMPILE_OVERLAYS(A)
- appearance_bro.appearance = overlay //this works for images and atoms too!
- if(!ispath(overlay))
- var/image/I = overlay
- appearance_bro.dir = I.dir
- new_overlays += appearance_bro.appearance
- return new_overlays
+ if (isloc(entry))
+ if (entry.flags & OVERLAY_QUEUED)
+ entry.ImmediateOverlayUpdate()
+ renderer.appearance = entry
+ if (!ispath(entry))
+ image = entry
+ renderer.dir = image.dir
+ result += renderer.appearance
+ return result
-#define NOT_QUEUED_ALREADY (!(flags & OVERLAY_QUEUED))
-#define QUEUE_FOR_COMPILE flags |= OVERLAY_QUEUED; SSoverlays.queue += src;
-/**
- * Cut all of atom's normal overlays. Usually leaves "priority" overlays untouched.
- *
- * @param priority If true, also will cut priority overlays.
- */
-/atom/proc/cut_overlays(priority = FALSE)
- var/list/cached_overlays = our_overlays
- var/list/cached_priority = priority_overlays
-
- var/need_compile = FALSE
-
- if(LAZYLEN(cached_overlays)) //don't queue empty lists, don't cut priority overlays
- cached_overlays.Cut() //clear regular overlays
- need_compile = TRUE
-
- if(priority && LAZYLEN(cached_priority))
- cached_priority.Cut()
- need_compile = TRUE
-
- if(NOT_QUEUED_ALREADY && need_compile)
- QUEUE_FOR_COMPILE
-
-/**
- * Removes specific overlay(s) from the atom. Usually does not remove them from "priority" overlays.
- *
- * @param overlays The overlays to removed, type can be anything that is allowed for add_overlay().
- * @param priority If true, also will remove them from the "priority" overlays.
- */
-/atom/proc/cut_overlay(list/overlays, priority)
- if(!overlays)
+/// Enqueues the atom for an overlay update if not already queued
+/atom/proc/QueueOverlayUpdate()
+ if (flags & OVERLAY_QUEUED)
return
+ SSoverlays.queue += src
+ flags |= OVERLAY_QUEUED
- overlays = build_appearance_list(overlays)
- var/list/cached_overlays = our_overlays //sanic
- var/list/cached_priority = priority_overlays
- var/init_o_len = LAZYLEN(cached_overlays)
- var/init_p_len = LAZYLEN(cached_priority) //starter pokemon
+/// Builds the atom's overlay state from caches
+/atom/proc/UpdateOverlays()
+ if (gc_destroyed)
+ if (length(overlays))
+ overlays.Cut()
+ return
+ flags &= ~OVERLAY_QUEUED
+ if (length(priority_overlays))
+ if (length(our_overlays))
+ overlays = priority_overlays + our_overlays
+ else
+ overlays = priority_overlays
+ else if (length(our_overlays))
+ overlays = our_overlays
+ else
+ overlays.Cut()
- LAZYREMOVE(cached_overlays, overlays)
- if(priority)
- LAZYREMOVE(cached_priority, overlays)
- if(NOT_QUEUED_ALREADY && ((init_o_len != LAZYLEN(cached_overlays)) || (init_p_len != LAZYLEN(cached_priority))))
- QUEUE_FOR_COMPILE
+/// Immediately runs an overlay update and dequeues the atom
+/atom/proc/ImmediateOverlayUpdate()
+ SSoverlays.queue -= src
+ UpdateOverlays()
+
+
+/// Clears the atom's overlay cache(s) and queues an update if needed
+/atom/proc/cut_overlays(priority)
+ if (priority)
+ if (!length(priority_overlays))
+ return
+ priority_overlays.Cut()
+ QueueOverlayUpdate()
+ else if (length(our_overlays))
+ our_overlays.Cut()
+ QueueOverlayUpdate()
+
/**
* Adds specific overlay(s) to the atom.
* It is designed so any of the types allowed to be added to /atom/overlays can be added here too. More details below.
*
- * @param overlays The overlay(s) to add. These may be
+ * @param add The overlay(s) to add. These may be
* - A string: In which case it is treated as an icon_state of the atom's icon.
* - An icon: It is treated as an icon.
* - An atom: Its own overlays are compiled and then it's appearance is added. (Meaning its current apperance is frozen).
@@ -173,30 +155,46 @@ var/global/image/appearance_bro = new() // Temporarily super-global because of B
* - Or a list containing any of the above.
* @param priority The overlays are added to the "priority" list istead of the normal one.
*/
-/atom/proc/add_overlay(list/overlays, priority = FALSE)
- if(!overlays)
+/atom/proc/add_overlay(list/add, priority)
+ if (!add)
return
-
- overlays = build_appearance_list(overlays)
-
- LAZYINITLIST(our_overlays) //always initialized after this point
- LAZYINITLIST(priority_overlays)
-
- var/list/cached_overlays = our_overlays //sanic
- var/list/cached_priority = priority_overlays
- var/init_o_len = cached_overlays.len
- var/init_p_len = cached_priority.len //starter pokemon
- var/need_compile
-
- if(priority)
- cached_priority += overlays //or in the image. Can we use [image] = image?
- need_compile = init_p_len != cached_priority.len
+ add = SSoverlays.GetAppearanceList(src, add)
+ if (!length(add))
+ return
+ if (priority)
+ if (priority_overlays)
+ priority_overlays += add
+ else
+ priority_overlays = add
+ else if (our_overlays)
+ our_overlays += add
else
- cached_overlays += overlays
- need_compile = init_o_len != cached_overlays.len
+ our_overlays = add
+ QueueOverlayUpdate()
+
+
+/**
+ * Removes specific overlay(s) from the atom. Usually does not remove them from "priority" overlays.
+ *
+ * @param overlays The overlays to removed, type can be anything that is allowed for add_overlay().
+ * @param priority If true, also will remove them from the "priority" overlays.
+ */
+/atom/proc/cut_overlay(list/cut, priority)
+ if (!cut)
+ return
+ cut = SSoverlays.GetAppearanceList(src, cut)
+ if (!length(cut))
+ return
+ var/update
+ if (priority && length(priority_overlays))
+ priority_overlays -= cut
+ update = TRUE
+ if (length(our_overlays))
+ our_overlays -= cut
+ update = TRUE
+ if (update)
+ QueueOverlayUpdate()
- if(NOT_QUEUED_ALREADY && need_compile) //have we caught more pokemon?
- QUEUE_FOR_COMPILE
/**
* Copy the overlays from another atom, either replacing all of ours or appending to our existing overlays.
@@ -205,47 +203,40 @@ var/global/image/appearance_bro = new() // Temporarily super-global because of B
* @param other The atom to copy overlays from.
* @param cut_old If true, all of our overlays will be *replaced* by the other's. If other is null, that means cutting all ours.
*/
-/atom/proc/copy_overlays(atom/other, cut_old) //copys our_overlays from another atom
- if(!other)
- if(cut_old)
+/atom/proc/copy_overlays(atom/other, cut)
+ if (!other)
+ if (cut)
cut_overlays()
return
-
- var/list/cached_other = other.our_overlays
- if(cached_other)
- if(cut_old || !LAZYLEN(our_overlays))
- our_overlays = cached_other.Copy()
- else
- our_overlays |= cached_other
- if(NOT_QUEUED_ALREADY)
- QUEUE_FOR_COMPILE
- else if(cut_old)
- cut_overlays()
-
-#undef NOT_QUEUED_ALREADY
-#undef QUEUE_FOR_COMPILE
-
-//TODO: Better solution for these?
-/image/proc/add_overlay(x)
- overlays += x
-
-/image/proc/cut_overlay(x)
- overlays -= x
-
-/image/proc/cut_overlays(x)
- overlays.Cut()
-
-/image/proc/copy_overlays(atom/other, cut_old)
- if(!other)
- if(cut_old)
+ if (!length(other.our_overlays))
+ if (cut)
cut_overlays()
return
+ if (cut || !length(our_overlays))
+ our_overlays = other.our_overlays.Copy()
+ else
+ our_overlays |= other.our_overlays
+ QueueOverlayUpdate()
- var/list/cached_other = other.our_overlays
- if(cached_other)
- if(cut_old || !overlays.len)
- overlays = cached_other.Copy()
- else
- overlays |= cached_other
- else if(cut_old)
- cut_overlays()
+
+/**
+ * Returns a list of overlays that the target atom has
+ *
+ * @param priority If true, returns priority overlays as well
+ * @param special If true, returns special overlays like emissives and em_blockers
+ */
+/proc/get_overlays(atom/other, priority, special)
+ var/list/including = list()
+ if (!other)
+ return including
+ for (var/image/I as anything in other.our_overlays)
+ if (!special && I.plane > 0)
+ continue
+ including += I
+ if (!priority)
+ return including
+ for (var/image/I as anything in other.priority_overlays)
+ if (!special && I.plane > 0)
+ continue
+ including += I
+ return including
diff --git a/code/controllers/subsystems/skybox.dm b/code/controllers/subsystems/skybox.dm
index 3df25b0f4f..65b0917fca 100644
--- a/code/controllers/subsystems/skybox.dm
+++ b/code/controllers/subsystems/skybox.dm
@@ -78,25 +78,29 @@ SUBSYSTEM_DEF(skybox)
if(settings.use_stars)
var/image/stars = image(settings.icon, settings.star_state)
stars.appearance_flags = RESET_COLOR
- base.overlays += stars
+ base.add_overlay(stars)
- res.overlays += base
+ res.add_overlay(base)
if(global.using_map.use_overmap && settings.use_overmap_details)
var/obj/effect/overmap/visitable/O = get_overmap_sector(z)
if(istype(O))
var/image/overmap = image(settings.icon)
- overmap.overlays += O.generate_skybox()
+ overmap.add_overlay(O.generate_skybox())
+ var/list/add = list()
for(var/obj/effect/overmap/visitable/other in O.loc)
if(other != O)
- overmap.overlays += other.get_skybox_representation()
+ add += other.get_skybox_representation()
+ overmap.add_overlay(add)
overmap.appearance_flags = RESET_COLOR
- res.overlays += overmap
+ res.add_overlay(overmap)
// Allow events to apply custom overlays to skybox! (Awesome!)
+ var/list/add = list()
for(var/datum/event/E in SSevents.active_events)
if(E.has_skybox_image && E.isRunning && (z in E.affecting_z))
- res.overlays += E.get_skybox_image()
+ add += E.get_skybox_image()
+ res.add_overlay(add)
return res
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 2d957ecf38..47fdb87692 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -324,19 +324,7 @@ var/global/list/PDA_Manifest = list()
var/hidden
var/datum/job/J = SSjob.get_job(H.mind.assigned_role)
hidden = J?.offmap_spawn
-
- /* Note: Due to cached_character_icon, a number of emergent properties occur due to the initialization
- * order of readied-up vs latejoiners. Namely, latejoiners will get a uniform in their datacore picture, but readied-up will
- * not. This is due to the fact that SSticker calls data_core.manifest_inject() inside of ticker/proc/create_characters(),
- * but does not equip them until ticker/proc/equip_characters(), which is called later. So, this proc is literally called before
- * they ever get their equipment, and so it can't get a picture of them in their equipment.
- * Latejoiners do not have this problem, because /mob/new_player/proc/AttemptLateSpawn calls EquipRank() before it calls
- * this proc, which means that they're already clothed by the time they get their picture taken here.
- * The COMPILE_OVERLAYS() here is just to bypass SSoverlays taking for-fucking-ever to update the mob, since we're about to
- * take a picture of them, we want all the overlays.
- */
- COMPILE_OVERLAYS(H)
- SSoverlays.queue -= H
+ H.ImmediateOverlayUpdate()
var/id = generate_record_id()
//General Record
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 89fdf91a99..6e38890a7f 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -26,8 +26,15 @@
///Chemistry.
// Overlays
- var/list/our_overlays //our local copy of (non-priority) overlays without byond magic. Use procs in SSoverlays to manipulate
- var/list/priority_overlays //overlays that should remain on top and not normally removed when using cut_overlay functions, like c4.
+ ///Our local copy of (non-priority) overlays without byond magic. Use procs in SSoverlays to manipulate
+ var/list/our_overlays
+ ///Overlays that should remain on top and not normally removed when using cut_overlay functions, like c4.
+ var/list/priority_overlays
+ ///vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays
+ var/list/managed_vis_overlays
+
+ ///Our local copy of filter data so we can add/remove it
+ var/list/filter_data
//Detective Work, used for the duplicate data points kept in the scanners
var/list/original_atom
diff --git a/code/game/gamemodes/changeling/powers/lesser_form.dm b/code/game/gamemodes/changeling/powers/lesser_form.dm
index 938fba8fd3..b74159e68b 100644
--- a/code/game/gamemodes/changeling/powers/lesser_form.dm
+++ b/code/game/gamemodes/changeling/powers/lesser_form.dm
@@ -69,7 +69,7 @@
C.transforming = 1
C.canmove = 0
C.icon = null
- C.overlays.Cut()
+ C.cut_overlays()
C.invisibility = 101
var/atom/movable/overlay/animation = new /atom/movable/overlay( C.loc )
animation.icon_state = "blank"
diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm
index 9c63b8857e..fa263e8c85 100644
--- a/code/game/gamemodes/cult/cultify/mob.dm
+++ b/code/game/gamemodes/cult/cultify/mob.dm
@@ -10,7 +10,7 @@
if(icon_state != "ghost-narsie")
icon = 'icons/mob/mob.dmi'
icon_state = "ghost-narsie"
- overlays = 0
+ cut_overlays()
invisibility = 0
to_chat(src, "Even as a non-corporal being, you can feel Nar-Sie's presence altering you. You are now visible to everyone.")
@@ -24,7 +24,7 @@
var/mob/observer/dead/G = (ghostize())
G.icon = 'icons/mob/mob.dmi'
G.icon_state = "ghost-narsie"
- G.overlays = 0
+ G.cut_overlays()
G.invisibility = 0
to_chat(G, "You feel relieved as what's left of your soul finally escapes its prison of flesh.")
diff --git a/code/game/gamemodes/cult/soulstone.dm b/code/game/gamemodes/cult/soulstone.dm
index 5290dc86f0..a5c44ffbea 100644
--- a/code/game/gamemodes/cult/soulstone.dm
+++ b/code/game/gamemodes/cult/soulstone.dm
@@ -140,7 +140,7 @@
S.real_name = "Shade of [T.real_name]"
S.icon = T.icon
S.icon_state = T.icon_state
- S.overlays = T.overlays
+ S.copy_overlays(T, TRUE)
S.color = rgb(254,0,0)
S.alpha = 127
if (T.client)
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
index 44b64b2691..65094bba7b 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm
@@ -19,7 +19,7 @@
START_PROCESSING(SSobj, src)
/obj/singularity/narsie/large/exit/update_icon()
- overlays = 0
+ cut_overlays()
/obj/singularity/narsie/large/exit/process()
for(var/mob/M in player_list)
diff --git a/code/game/gamemodes/technomancer/instability.dm b/code/game/gamemodes/technomancer/instability.dm
index 01e7f23561..1da95bfefe 100644
--- a/code/game/gamemodes/technomancer/instability.dm
+++ b/code/game/gamemodes/technomancer/instability.dm
@@ -90,9 +90,9 @@
last_instability_event = world.time
spawn(1)
var/image/instability_flash = image('icons/obj/spells.dmi',"instability")
- overlays |= instability_flash
+ add_overlay(instability_flash)
sleep(4)
- overlays.Remove(instability_flash)
+ cut_overlay(instability_flash)
qdel(instability_flash)
/mob/living/silicon/instability_effects()
diff --git a/code/game/gamemodes/technomancer/spell_objs.dm b/code/game/gamemodes/technomancer/spell_objs.dm
index 2657e31295..5c01a06311 100644
--- a/code/game/gamemodes/technomancer/spell_objs.dm
+++ b/code/game/gamemodes/technomancer/spell_objs.dm
@@ -146,9 +146,9 @@
/obj/item/spell/update_icon()
if(toggled)
var/image/new_overlay = image('icons/obj/spells.dmi',"toggled")
- overlays |= new_overlay
+ add_overlay(new_overlay)
else
- overlays.Cut()
+ cut_overlays()
..()
// Proc: run_checks()
diff --git a/code/game/gamemodes/technomancer/spells/illusion.dm b/code/game/gamemodes/technomancer/spells/illusion.dm
index 36a1eea2c9..1b86920df9 100644
--- a/code/game/gamemodes/technomancer/spells/illusion.dm
+++ b/code/game/gamemodes/technomancer/spells/illusion.dm
@@ -65,11 +65,11 @@
// Makes a tiny overlay of the thing the player has copied, so they can easily tell what they currently have.
/obj/item/spell/illusion/update_icon()
- overlays.Cut()
+ cut_overlays()
if(copied)
var/image/temp_image = image(copied)
var/matrix/M = matrix()
M.Scale(0.5, 0.5)
temp_image.transform = M
// temp_image.pixel_y = 8
- src.overlays.Add(temp_image)
+ add_overlay(temp_image)
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index 007dcad8da..b7a22af553 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -147,7 +147,7 @@
var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin("#job_icon")
dress_mannequin(mannequin)
mannequin.dir = SOUTH
- COMPILE_OVERLAYS(mannequin)
+ mannequin.ImmediateOverlayUpdate()
var/icon/preview_icon = getFlatIcon(mannequin)
preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser.
diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm
index 0c6ec6d3fe..2438899256 100644
--- a/code/game/machinery/air_alarm.dm
+++ b/code/game/machinery/air_alarm.dm
@@ -290,6 +290,7 @@
return 0
/obj/machinery/alarm/update_icon()
+ cut_overlays()
if(panel_open)
icon_state = "alarmx"
set_light(0)
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 610cb511f3..89692d30af 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -131,7 +131,7 @@ update_flag
*/
if (src.destroyed)
- src.overlays = 0
+ cut_overlays()
src.icon_state = text("[]-1", src.canister_color)
return
@@ -141,20 +141,20 @@ update_flag
if(check_change()) //Returns 1 if no change needed to icons.
return
- src.overlays = 0
+ cut_overlays()
if(update_flag & 1)
- overlays += "can-open"
+ add_overlay("can-open")
if(update_flag & 2)
- overlays += "can-connector"
+ add_overlay("can-connector")
if(update_flag & 4)
- overlays += "can-o0"
+ add_overlay("can-o0")
if(update_flag & 8)
- overlays += "can-o1"
+ add_overlay("can-o1")
else if(update_flag & 16)
- overlays += "can-o2"
+ add_overlay("can-o2")
else if(update_flag & 32)
- overlays += "can-o3"
+ add_overlay("can-o3")
return
/obj/machinery/portable_atmospherics/canister/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm
index 644e90af01..0bb62f6713 100644
--- a/code/game/machinery/atmoalter/pump.dm
+++ b/code/game/machinery/atmoalter/pump.dm
@@ -29,7 +29,7 @@
src.air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"])
/obj/machinery/portable_atmospherics/powered/pump/update_icon()
- src.overlays = 0
+ cut_overlays()
if(on && cell && cell.charge)
icon_state = "psiphon:1"
@@ -37,10 +37,10 @@
icon_state = "psiphon:0"
if(holding)
- overlays += "siphon-open"
+ add_overlay("siphon-open")
if(connected_port)
- overlays += "siphon-connector"
+ add_overlay("siphon-connector")
return
diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm
index b63f7bf665..98213ecb66 100644
--- a/code/game/machinery/atmoalter/scrubber.dm
+++ b/code/game/machinery/atmoalter/scrubber.dm
@@ -36,7 +36,7 @@
..(severity)
/obj/machinery/portable_atmospherics/powered/scrubber/update_icon()
- src.overlays = 0
+ cut_overlays()
if(on && cell && cell.charge)
icon_state = "pscrubber:1"
@@ -44,10 +44,10 @@
icon_state = "pscrubber:0"
if(holding)
- overlays += "scrubber-open"
+ add_overlay("scrubber-open")
if(connected_port)
- overlays += "scrubber-connector"
+ add_overlay("scrubber-connector")
return
@@ -175,7 +175,7 @@
to_chat(user, "You can't directly interact with this machine. Use the scrubber control console.")
/obj/machinery/portable_atmospherics/powered/scrubber/huge/update_icon()
- src.overlays = 0
+ cut_overlays()
if(on && !(stat & (NOPOWER|BROKEN)))
icon_state = "scrubber:1"
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index eec6cb1b74..27161b6e26 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -338,12 +338,12 @@
updateUsrDialog()
/obj/machinery/autolathe/update_icon()
- overlays.Cut()
+ cut_overlays()
icon_state = initial(icon_state)
if(panel_open)
- overlays.Add(image(icon, "[icon_state]_panel"))
+ add_overlay("[icon_state]_panel")
if(stat & NOPOWER)
return
if(busy)
diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm
index f6ce390c86..7575d8b697 100644
--- a/code/game/machinery/bioprinter.dm
+++ b/code/game/machinery/bioprinter.dm
@@ -69,11 +69,11 @@
return ..()
/obj/machinery/organ_printer/update_icon()
- overlays.Cut()
+ cut_overlays()
if(panel_open)
- overlays += "bioprinter_panel_open"
+ add_overlay("bioprinter_panel_open")
if(printing)
- overlays += "bioprinter_working"
+ add_overlay("bioprinter_working")
/obj/machinery/organ_printer/Initialize()
. = ..()
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index be10584b4d..3cf16e808e 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -27,12 +27,12 @@
if(chargelevel != newlevel)
- overlays.Cut()
- overlays += "ccharger-o[newlevel]"
+ cut_overlays()
+ add_overlay("ccharger-o[newlevel]")
chargelevel = newlevel
else
- overlays.Cut()
+ cut_overlays()
/obj/machinery/cell_charger/examine(mob/user)
. = ..()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 012f6e10b5..e23a4daf20 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -752,35 +752,35 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/update_icon()
- if(overlays) overlays.Cut()
+ cut_overlays()
if(density)
if(locked && lights && src.arePowerSystemsOn())
icon_state = "door_locked"
else
icon_state = "door_closed"
if(p_open || welded)
- overlays = list()
+ cut_overlays()
if(p_open)
- overlays += image(icon, "panel_open")
+ add_overlay("panel_open")
if (!(stat & NOPOWER))
if(stat & BROKEN)
- overlays += image(icon, "sparks_broken")
+ add_overlay("sparks_broken")
else if (health < maxhealth * 3/4)
- overlays += image(icon, "sparks_damaged")
+ add_overlay("sparks_damaged")
if(welded)
- overlays += image(icon, "welded")
+ add_overlay("welded")
else if (health < maxhealth * 3/4 && !(stat & NOPOWER))
- overlays += image(icon, "sparks_damaged")
+ add_overlay("sparks_damaged")
else
icon_state = "door_open"
if((stat & BROKEN) && !(stat & NOPOWER))
- overlays += image(icon, "sparks_open")
+ add_overlay("sparks_open")
return
/obj/machinery/door/airlock/do_animate(animation)
switch(animation)
if("opening")
- if(overlays) overlays.Cut()
+ cut_overlay()
if(p_open)
spawn(2) // The only work around that works. Downside is that the door will be gone for a millisecond.
flick("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking
@@ -789,7 +789,7 @@ About the new airlock wires panel:
flick("door_opening", src)//[stat ? "_stat":]
update_icon()
if("closing")
- if(overlays) overlays.Cut()
+ cut_overlay()
if(p_open)
spawn(2)
flick("o_door_closing", src)
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 0f1a8ca705..addcf65b5d 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -439,29 +439,29 @@
/obj/machinery/door/firedoor/update_icon()
- overlays.Cut()
+ cut_overlays()
if(density)
icon_state = "door_closed"
if(prying)
icon_state = "prying_closed"
if(hatch_open)
- overlays += "hatch"
+ add_overlay("hatch")
if(blocked)
- overlays += "welded"
+ add_overlay("welded")
if(pdiff_alert)
- overlays += "palert"
+ add_overlay("palert")
if(dir_alerts)
for(var/d=1;d<=4;d++)
var/cdir = cardinal[d]
for(var/i=1;i<=ALERT_STATES.len;i++)
if(dir_alerts[d] & (1<<(i-1)))
- overlays += new/icon(icon,"alert_[ALERT_STATES[i]]", dir=cdir)
+ add_overlay(new/icon(icon,"alert_[ALERT_STATES[i]]", dir=cdir))
else
icon_state = "door_open"
if(prying)
icon_state = "prying_open"
if(blocked)
- overlays += "welded_open"
+ add_overlay("welded_open")
return
//These are playing merry hell on ZAS. Sorry fellas :(
diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm
index ef18798f65..f3c5e33ae5 100644
--- a/code/game/machinery/floodlight.dm
+++ b/code/game/machinery/floodlight.dm
@@ -16,7 +16,7 @@
cell = new(src)
/obj/machinery/floodlight/update_icon()
- overlays.Cut()
+ cut_overlays()
icon_state = "flood[open ? "o" : ""][open && cell ? "b" : ""]0[on]"
/obj/machinery/floodlight/process()
@@ -109,7 +109,7 @@
if(unlocked)
if(open)
open = 0
- overlays = null
+ cut_overlays()
to_chat(user, "You crowbar the battery panel in place.")
else
if(unlocked)
diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm
index 9198bdb472..29ad91e047 100644
--- a/code/game/machinery/floor_light.dm
+++ b/code/game/machinery/floor_light.dm
@@ -103,7 +103,7 @@ var/list/floor_light_cache = list()
update_icon()
/obj/machinery/floor_light/update_icon()
- overlays.Cut()
+ cut_overlays()
if(use_power && !broken())
if(isnull(damaged))
var/cache_key = "floorlight-[default_light_colour]"
@@ -112,7 +112,7 @@ var/list/floor_light_cache = list()
I.color = default_light_colour
I.layer = layer+0.001
floor_light_cache[cache_key] = I
- overlays |= floor_light_cache[cache_key]
+ add_overlay(floor_light_cache[cache_key])
else
if(damaged == 0) //Needs init.
damaged = rand(1,4)
@@ -122,7 +122,7 @@ var/list/floor_light_cache = list()
I.color = default_light_colour
I.layer = layer+0.001
floor_light_cache[cache_key] = I
- overlays |= floor_light_cache[cache_key]
+ add_overlay(floor_light_cache[cache_key])
/obj/machinery/floor_light/proc/broken()
return (stat & (BROKEN|NOPOWER))
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index 878146e772..99efb2b365 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -16,7 +16,7 @@
else
icon_state = ""
- overlays = null
+ cut_overlays()
if(beaker)
var/datum/reagents/reagents = beaker.reagents
@@ -34,7 +34,7 @@
if(91 to INFINITY) filling.icon_state = "reagent100"
filling.icon += reagents.get_color()
- overlays += filling
+ add_overlay(filling)
/obj/machinery/iv_drip/MouseDrop(over_object, src_location, over_location)
..()
diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm
index 666e50a8fd..2b75d72245 100644
--- a/code/game/machinery/jukebox.dm
+++ b/code/game/machinery/jukebox.dm
@@ -84,7 +84,7 @@
update_icon()
/obj/machinery/media/jukebox/update_icon()
- overlays.Cut()
+ cut_overlays()
if(stat & (NOPOWER|BROKEN) || !anchored)
if(stat & BROKEN)
icon_state = "[state_base]-broken"
@@ -94,11 +94,11 @@
icon_state = state_base
if(playing)
if(emagged)
- overlays += "[state_base]-emagged"
+ add_overlay("[state_base]-emagged")
else
- overlays += "[state_base]-running"
+ add_overlay("[state_base]-running")
if (panel_open)
- overlays += "panel_open"
+ add_overlay("panel_open")
/obj/machinery/media/jukebox/Topic(href, href_list)
if(..() || !(Adjacent(usr) || istype(usr, /mob/living/silicon)))
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index 5a1e31b2a2..d87f8cc580 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -40,14 +40,14 @@
overlay = image(icon, "light1-overlay")
overlay.plane = PLANE_LIGHTING_ABOVE
- overlays.Cut()
+ cut_overlays()
if(stat & NOPOWER)
icon_state = "light-p"
set_light(0)
else
icon_state = "light[on]"
overlay.icon_state = "light[on]-overlay"
- overlays += overlay
+ add_overlay(overlay)
set_light(2, 0.1, on ? "#82FF4C" : "#F86060")
/obj/machinery/light_switch/examine(mob/user)
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index b67c3aedd5..a8a0f4df4b 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -188,6 +188,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster)
/obj/machinery/newscaster/LateInitialize()
node = get_exonet_node()
+ update_icon()
/obj/machinery/newscaster/Destroy()
allCasters -= src
@@ -195,24 +196,24 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster)
return ..()
/obj/machinery/newscaster/update_icon()
+ cut_overlays()
if(!ispowered || isbroken)
icon_state = "newscaster_off"
if(isbroken) //If the thing is smashed, add crack overlay on top of the unpowered sprite.
- overlays.Cut()
- overlays += image(icon, "crack3")
+ add_overlay("crack3")
return
- overlays.Cut() //reset overlays
+ cut_overlays() //reset overlays
if(news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message
icon_state = "newscaster_wanted"
return
if(alert) //new message alert overlay
- overlays += "newscaster_alert"
+ add_overlay("newscaster_alert")
if(hitstaken > 0) //Cosmetic damage overlay
- overlays += image(icon, "crack[hitstaken]")
+ add_overlay("crack[hitstaken]")
icon_state = "newscaster_normal"
return
diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm
index 61ee7ac5f6..5a733ffb89 100644
--- a/code/game/machinery/nuclear_bomb.dm
+++ b/code/game/machinery/nuclear_bomb.dm
@@ -61,19 +61,19 @@ var/bomb_set
if(auth)
if(opened == 0)
opened = 1
- overlays += image(icon, "npanel_open")
+ add_overlay("npanel_open")
to_chat(user, "You unscrew the control panel of [src].")
else
opened = 0
- overlays -= image(icon, "npanel_open")
+ cut_overlay("npanel_open")
to_chat(user, "You screw the control panel of [src] back on.")
else
if(opened == 0)
to_chat(user, "The [src] emits a buzzing noise, the panel staying locked in.")
if(opened == 1)
opened = 0
- overlays -= image(icon, "npanel_open")
+ cut_overlay("npanel_open")
to_chat(user, "You screw the control panel of [src] back on.")
flick("nuclearbombc", src)
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index f911763aeb..18287be44c 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -197,20 +197,20 @@
desc += "
It is capable of repairing burn damage."
/obj/machinery/recharge_station/proc/build_overlays()
- overlays.Cut()
+ cut_overlay()
switch(round(chargepercentage()))
if(1 to 20)
- overlays += image('icons/obj/objects.dmi', "statn_c0")
+ add_overlay("statn_c0")
if(21 to 40)
- overlays += image('icons/obj/objects.dmi', "statn_c20")
+ add_overlay("statn_c20")
if(41 to 60)
- overlays += image('icons/obj/objects.dmi', "statn_c40")
+ add_overlay("statn_c40")
if(61 to 80)
- overlays += image('icons/obj/objects.dmi', "statn_c60")
+ add_overlay("statn_c60")
if(81 to 98)
- overlays += image('icons/obj/objects.dmi', "statn_c80")
+ add_overlay("statn_c80")
if(99 to 110)
- overlays += image('icons/obj/objects.dmi', "statn_c100")
+ add_overlay("statn_c100")
/obj/machinery/recharge_station/update_icon()
..()
diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm
index e5c342d417..43c281e42e 100644
--- a/code/game/machinery/robot_fabricator.dm
+++ b/code/game/machinery/robot_fabricator.dm
@@ -16,7 +16,7 @@
var/obj/item/stack/M = O
if(metal_amount < 150000.0)
var/count = 0
- overlays += "fab-load-metal"
+ add_overlay("fab-load-metal")
spawn(15)
if(M)
if(!M.get_amount())
@@ -27,7 +27,7 @@
count++
to_chat(user, "You insert [count] metal sheet\s into the fabricator.")
- overlays -= "fab-load-metal"
+ cut_overlay("fab-load-metal")
updateDialog()
else
to_chat(user, "The robot part maker is full. Please remove metal from the robot part maker in order to insert more.")
@@ -121,7 +121,7 @@ Please wait until completion...
being_built = new building(src)
- overlays += "fab-active"
+ add_overlay("fab-active")
updateUsrDialog()
spawn (build_time)
@@ -130,7 +130,7 @@ Please wait until completion...
being_built = null
update_use_power(USE_POWER_IDLE)
operating = 0
- overlays -= "fab-active"
+ cut_overlay("fab-active")
return
for (var/mob/M in viewers(1, src))
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index a882e5befb..4ead0b6d15 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -197,7 +197,7 @@
if(!picture || picture_state != state)
picture_state = state
picture = image('icons/obj/status_display.dmi', icon_state=picture_state)
- overlays |= picture
+ add_overlay(picture)
/obj/machinery/status_display/proc/update_display(line1, line2)
var/new_text = {"
[line1]
[line2]
"}
@@ -233,8 +233,7 @@
return ""
/obj/machinery/status_display/proc/remove_display()
- if(overlays.len)
- overlays.Cut()
+ cut_overlays()
if(maptext)
maptext = ""
diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm
index abdc50ca52..6e44ece955 100644
--- a/code/game/machinery/status_display_ai.dm
+++ b/code/game/machinery/status_display_ai.dm
@@ -90,7 +90,7 @@ var/list/ai_status_emotions = list(
/obj/machinery/ai_status_display/proc/update()
if(mode==0) //Blank
- overlays.Cut()
+ cut_overlays()
return
if(mode==1) // AI emoticon
@@ -104,14 +104,12 @@ var/list/ai_status_emotions = list(
/obj/machinery/ai_status_display/proc/set_picture(var/state)
picture_state = state
- if(overlays.len)
- overlays.Cut()
- overlays += image('icons/obj/status_display.dmi', icon_state=picture_state)
+ cut_overlays()
+ add_overlay(picture_state)
/obj/machinery/ai_status_display/power_change()
..()
if(stat & NOPOWER)
- if(overlays.len)
- overlays.Cut()
+ cut_overlays()
else
update()
diff --git a/code/game/mecha/equipment/tools/shield.dm b/code/game/mecha/equipment/tools/shield.dm
index 75cf76c1df..f6c39cdbff 100644
--- a/code/game/mecha/equipment/tools/shield.dm
+++ b/code/game/mecha/equipment/tools/shield.dm
@@ -28,7 +28,7 @@
return
/obj/item/mecha_parts/mecha_equipment/combat_shield/Destroy()
- chassis.overlays -= drone_overlay
+ chassis.cut_overlay(drone_overlay)
my_shield.forceMove(src)
my_shield.destroy_shields()
my_shield.my_tool = null
@@ -41,7 +41,7 @@
..()
if(!drone_overlay)
drone_overlay = new(src.icon, icon_state = "shield_droid")
- M.overlays += drone_overlay
+ M.add_overlay(drone_overlay)
return
/obj/item/mecha_parts/mecha_equipment/combat_shield/attach(obj/mecha/M as obj)
@@ -53,7 +53,7 @@
return
/obj/item/mecha_parts/mecha_equipment/combat_shield/detach()
- chassis.overlays -= drone_overlay
+ chassis.cut_overlay(drone_overlay)
..()
my_shield.destroy_shields()
my_shield.my_mecha = null
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index f342a1ff31..5082f66373 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -55,13 +55,13 @@
update_icon()
/obj/machinery/mecha_part_fabricator/update_icon()
- overlays.Cut()
+ cut_overlays()
if(panel_open)
icon_state = "mechfab-o"
else
icon_state = "mechfab-idle"
if(busy)
- overlays += "mechfab-active"
+ add_overlay("mechfab-active")
/obj/machinery/mecha_part_fabricator/dismantle()
for(var/f in materials)
@@ -156,9 +156,9 @@
if(materials[S.material.name] + amnt <= res_max_amount)
if(S && S.get_amount() >= 1)
var/count = 0
- overlays += "mechfab-load-metal"
+ add_overlay("mechfab-load-metal")
spawn(10)
- overlays -= "mechfab-load-metal"
+ cut_overlays("mechfab-load-metal")
while(materials[S.material.name] + amnt <= res_max_amount && S.get_amount() >= 1)
materials[S.material.name] += amnt
S.use(1)
diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm
index 05f0e71c86..14e30b5b19 100644
--- a/code/game/mecha/mech_prosthetics.dm
+++ b/code/game/mecha/mech_prosthetics.dm
@@ -49,11 +49,11 @@
update_icon()
/obj/machinery/pros_fabricator/update_icon()
- overlays.Cut()
+ cut_overlays()
icon_state = initial(icon_state)
if(panel_open)
- overlays.Add(image(icon, "[icon_state]_panel"))
+ add_overlay(image(icon, "[icon_state]_panel"))
if(stat & NOPOWER)
return
if(busy)
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index c5b252e807..529c6e5405 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -79,7 +79,7 @@
/datum/construction/mecha/ripley_chassis/custom_action(step, obj/item/I, mob/user)
user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
- holder.overlays += I.icon_state+"+o"
+ holder.add_overlay(I.icon_state+"+o")
qdel(I)
return 1
@@ -92,7 +92,7 @@
const_holder.icon = 'icons/mecha/mech_construction.dmi'
const_holder.icon_state = "ripley0"
const_holder.density = 1
- const_holder.overlays.len = 0
+ const_holder.cut_overlays()
spawn()
qdel(src)
return
@@ -291,7 +291,7 @@
/datum/construction/mecha/gygax_chassis/custom_action(step, obj/item/I, mob/user)
user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
- holder.overlays += I.icon_state+"+o"
+ holder.add_overlay(I.icon_state+"+o")
qdel(I)
return 1
@@ -575,7 +575,7 @@
/datum/construction/mecha/serenity_chassis/custom_action(step, obj/item/I, mob/user)
user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
- holder.overlays += I.icon_state+"+o"
+ holder.add_overlay(I.icon_state+"+o")
qdel(I)
return 1
@@ -860,7 +860,7 @@
/datum/construction/mecha/firefighter_chassis/custom_action(step, obj/item/I, mob/user)
user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
- holder.overlays += I.icon_state+"+o"
+ holder.add_overlay(I.icon_state+"+o")
user.drop_item()
qdel(I)
return 1
@@ -1085,7 +1085,7 @@
/datum/construction/mecha/durand_chassis/custom_action(step, obj/item/I, mob/user)
user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
- holder.overlays += I.icon_state+"+o"
+ holder.add_overlay(I.icon_state+"+o")
qdel(I)
return 1
@@ -1369,7 +1369,7 @@
/datum/construction/mecha/odysseus_chassis/custom_action(step, obj/item/I, mob/user)
user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
- holder.overlays += I.icon_state+"+o"
+ holder.add_overlay(I.icon_state+"+o")
qdel(I)
return 1
@@ -1582,7 +1582,7 @@
/datum/construction/mecha/phazon_chassis/custom_action(step, obj/item/I, mob/user)
user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
- holder.overlays += I.icon_state+"+o"
+ holder.add_overlay(I.icon_state+"+o")
qdel(I)
return 1
@@ -1864,7 +1864,7 @@
/datum/construction/mecha/janus_chassis/custom_action(step, obj/item/I, mob/user)
user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
- holder.overlays += I.icon_state+"+o"
+ holder.add_overlay(I.icon_state+"+o")
qdel(I)
return 1
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 63c85adb29..92e4d66a05 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -87,10 +87,10 @@ var/global/list/image/splatter_cache=list()
if(!S.blood_DNA)
S.blood_DNA = list()
S.blood_overlay.color = basecolor
- S.overlays += S.blood_overlay
+ S.add_overlay(S.blood_overlay)
if(S.blood_overlay && S.blood_overlay.color != basecolor)
S.blood_overlay.color = basecolor
- S.overlays += S.blood_overlay
+ S.add_overlay(S.blood_overlay)
S.blood_DNA |= blood_DNA.Copy()
perp.update_inv_shoes()
@@ -191,8 +191,8 @@ var/global/list/image/splatter_cache=list()
blood.Blend(basecolor,ICON_MULTIPLY)
icon = blood
- overlays.Cut()
- overlays += giblets
+ cut_overlays()
+ add_overlay(giblets)
/obj/effect/decal/cleanable/blood/gibs/up
random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6","gibup1","gibup1","gibup1")
diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm
index 41f8e26891..cc24fd13e6 100644
--- a/code/game/objects/effects/decals/Cleanable/tracks.dm
+++ b/code/game/objects/effects/decals/Cleanable/tracks.dm
@@ -129,7 +129,7 @@ var/global/list/image/fluidtrack_cache=list()
update_icon()
/obj/effect/decal/cleanable/blood/tracks/update_icon()
- overlays.Cut()
+ cut_overlays()
color = "#FFFFFF"
var/truedir=0
@@ -150,7 +150,7 @@ var/global/list/image/fluidtrack_cache=list()
track.fresh=0
track.overlay=I
stack[stack_idx]=track
- overlays += I
+ add_overlay(I)
updatedtracks=0 // Clear our memory of updated tracks.
/obj/effect/decal/cleanable/blood/tracks/footprints
diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm
index 8042239431..aad643e7be 100644
--- a/code/game/objects/effects/decals/crayon.dm
+++ b/code/game/objects/effects/decals/crayon.dm
@@ -23,7 +23,7 @@
mainOverlay.Blend(main,ICON_ADD)
shadeOverlay.Blend(shade,ICON_ADD)
- overlays += mainOverlay
- overlays += shadeOverlay
+ add_overlay(mainOverlay)
+ add_overlay(shadeOverlay)
add_hiddenprint(usr)
\ No newline at end of file
diff --git a/code/game/objects/effects/decals/warning_stripes.dm b/code/game/objects/effects/decals/warning_stripes.dm
index 0e3d12897d..e69c90a8d8 100644
--- a/code/game/objects/effects/decals/warning_stripes.dm
+++ b/code/game/objects/effects/decals/warning_stripes.dm
@@ -6,5 +6,5 @@
var/turf/T=get_turf(src)
var/image/I=image(icon, icon_state = icon_state, dir = dir)
I.color=color
- T.overlays += I
+ T.add_overlay(I)
return INITIALIZE_HINT_QDEL
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 6770adf0d1..e61fe74c51 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -604,7 +604,7 @@ var/list/global/slot_flags_enumeration = list(
/obj/item/clean_blood()
. = ..()
if(blood_overlay)
- overlays.Remove(blood_overlay)
+ cut_overlay(blood_overlay)
/obj/item/reveal_blood()
if(was_bloodied && !fluorescent)
@@ -626,7 +626,7 @@ var/list/global/slot_flags_enumeration = list(
//Make the blood_overlay have the proper color then apply it.
blood_overlay.color = blood_color
- overlays += blood_overlay
+ add_overlay(blood_overlay)
//if this blood isn't already in the list, add it
if(istype(M))
@@ -643,7 +643,7 @@ GLOBAL_LIST_EMPTY(blood_overlays_by_type)
// Already cached
if(GLOB.blood_overlays_by_type[type])
- blood_overlay = GLOB.blood_overlays_by_type[type]
+ add_overlay(blood_overlay)
return
// Firsties!
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 9cd243e2d1..2cf2b4f1ed 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -43,7 +43,7 @@
if (t)
src.name = "body bag - "
src.name += t
- src.overlays += image(src.icon, "bodybag_label")
+ add_overlay("bodybag_label")
else
src.name = "body bag"
//..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
@@ -51,7 +51,7 @@
else if(W.is_wirecutter())
to_chat(user, "You cut the tag off the bodybag")
src.name = "body bag"
- src.overlays.Cut()
+ cut_overlays()
return
/obj/structure/closet/body_bag/store_mobs(var/stored_units)
@@ -99,12 +99,7 @@
else
icon_state = "closed_unlocked"
- src.overlays.Cut()
- /* Ours don't have toetags
- if(has_label)
- src.overlays += image(src.icon, "bodybag_label")
- */
-
+ cut_overlays()
/obj/item/bodybag/cryobag
name = "stasis bag"
@@ -164,11 +159,11 @@
/obj/structure/closet/body_bag/cryobag/update_icon()
..()
- overlays.Cut()
+ cut_overlays()
var/image/I = image(icon, "indicator[opened]")
I.appearance_flags = RESET_COLOR
I.color = COLOR_LIME
- overlays += I
+ add_overlay(I)
/obj/structure/closet/body_bag/cryobag/MouseDrop(over_object, src_location, over_location)
. = ..()
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index 79d1a97411..07e6787741 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -87,10 +87,10 @@
return TRUE
/obj/item/aicard/update_icon()
- overlays.Cut()
+ cut_overlays()
if(carded_ai)
if (!carded_ai.control_disabled)
- overlays += image('icons/obj/pda.dmi', "aicard-on")
+ add_overlay(image('icons/obj/pda.dmi', "aicard-on"))
if(carded_ai.stat)
icon_state = "aicard-404"
else
@@ -182,4 +182,4 @@
AI.adjustOxyLoss(2)
AI.updatehealth()
sleep(10)
- flush = FALSE
\ No newline at end of file
+ flush = FALSE
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index 0a2c81fbb3..ab27511e43 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -39,7 +39,7 @@
saved_item = target.type
saved_icon = target.icon
saved_icon_state = target.icon_state
- saved_overlays = target.overlays
+ saved_overlays = target.overlays.Copy()
/obj/item/chameleon/proc/toggle()
if(!can_use || !saved_item) return
@@ -99,7 +99,8 @@
desc = O.desc
icon = new_icon
icon_state = new_iconstate
- overlays = new_overlays
+ cut_overlays()
+ add_overlay(new_overlays)
set_dir(O.dir)
M.loc = src
master = C
diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm
index ba1c043946..d9108d5260 100644
--- a/code/game/objects/items/devices/defib.dm
+++ b/code/game/objects/items/devices/defib.dm
@@ -43,25 +43,23 @@
/obj/item/defib_kit/update_icon()
- var/list/new_overlays = list()
+ cut_overlays()
if(paddles && paddles.loc == src) //in case paddles got destroyed somehow.
- new_overlays += "[initial(icon_state)]-paddles"
+ add_overlay("[initial(icon_state)]-paddles")
if(bcell && paddles)
if(bcell.check_charge(paddles.chargecost))
if(paddles.combat)
- new_overlays += "[initial(icon_state)]-combat"
+ add_overlay("[initial(icon_state)]-combat")
else if(!paddles.safety)
- new_overlays += "[initial(icon_state)]-emagged"
+ add_overlay("[initial(icon_state)]-emagged")
else
- new_overlays += "[initial(icon_state)]-powered"
+ add_overlay("[initial(icon_state)]-powered")
var/ratio = CEILING(bcell.percent()/25, 1) * 25
- new_overlays += "[initial(icon_state)]-charge[ratio]"
+ add_overlay("[initial(icon_state)]-charge[ratio]")
else
- new_overlays += "[initial(icon_state)]-nocell"
-
- overlays = new_overlays
+ add_overlay("[initial(icon_state)]-nocell")
/obj/item/defib_kit/ui_action_click()
toggle_paddles()
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 83c1384899..1d41d3ee9a 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -24,7 +24,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/paicard)
/obj/item/paicard/Initialize()
. = ..()
- overlays += "pai-off"
+ add_overlay("pai-off")
/obj/item/paicard/Destroy()
//Will stop people throwing friend pAIs into the singularity so they can respawn
@@ -297,34 +297,34 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/paicard)
/obj/item/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
src.pai = personality
- src.overlays += "pai-happy"
+ add_overlay("pai-happy")
/obj/item/paicard/proc/removePersonality()
src.pai = null
- src.overlays.Cut()
- src.overlays += "pai-off"
+ cut_overlays()
+ add_overlay("pai-off")
/obj/item/paicard
var/current_emotion = 1
/obj/item/paicard/proc/setEmotion(var/emotion)
if(pai)
- src.overlays.Cut()
+ cut_overlays()
switch(emotion)
- if(1) src.overlays += "pai-happy"
- if(2) src.overlays += "pai-cat"
- if(3) src.overlays += "pai-extremely-happy"
- if(4) src.overlays += "pai-face"
- if(5) src.overlays += "pai-laugh"
- if(6) src.overlays += "pai-off"
- if(7) src.overlays += "pai-sad"
- if(8) src.overlays += "pai-angry"
- if(9) src.overlays += "pai-what"
- if(10) src.overlays += "pai-neutral"
- if(11) src.overlays += "pai-silly"
- if(12) src.overlays += "pai-nose"
- if(13) src.overlays += "pai-smirk"
- if(14) src.overlays += "pai-exclamation"
- if(15) src.overlays += "pai-question"
+ if(1) add_overlay("pai-happy")
+ if(2) add_overlay("pai-cat")
+ if(3) add_overlay("pai-extremely-happy")
+ if(4) add_overlay("pai-face")
+ if(5) add_overlay("pai-laugh")
+ if(6) add_overlay("pai-off")
+ if(7) add_overlay("pai-sad")
+ if(8) add_overlay("pai-angry")
+ if(9) add_overlay("pai-what")
+ if(10) add_overlay("pai-neutral")
+ if(11) add_overlay("pai-silly")
+ if(12) add_overlay("pai-nose")
+ if(13) add_overlay("pai-smirk")
+ if(14) add_overlay("pai-exclamation")
+ if(15) add_overlay("pai-question")
current_emotion = emotion
/obj/item/paicard/proc/alertUpdate()
diff --git a/code/game/objects/items/devices/radio/jammer.dm b/code/game/objects/items/devices/radio/jammer.dm
index 4851a0f48e..7943ab9265 100644
--- a/code/game/objects/items/devices/radio/jammer.dm
+++ b/code/game/objects/items/devices/radio/jammer.dm
@@ -112,8 +112,7 @@ var/global/list/active_radio_jammers = list()
// Only Cut() if we need to.
if(overlay_percent != last_overlay_percent)
- overlays.Cut()
- var/image/I = image(src.icon, src, "jammer_overlay_[overlay_percent]")
- overlays += I
+ cut_overlays()
+ add_overlay("jammer_overlay_[overlay_percent]")
last_overlay_percent = overlay_percent
diff --git a/code/game/objects/items/devices/t_scanner.dm b/code/game/objects/items/devices/t_scanner.dm
index 85deffc120..e490770da8 100644
--- a/code/game/objects/items/devices/t_scanner.dm
+++ b/code/game/objects/items/devices/t_scanner.dm
@@ -90,7 +90,7 @@
if(istype(scanned, /obj/machinery/atmospherics/pipe))
var/obj/machinery/atmospherics/pipe/P = scanned
I.color = P.pipe_color
- I.overlays += P.overlays
+ I.copy_overlays(P)
I.alpha = 128
I.mouse_opacity = 0
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 5feeb3a983..5f3897bd4e 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -378,9 +378,9 @@
/obj/item/tape/update_icon()
- overlays.Cut()
+ cut_overlays()
if(ruined)
- overlays += "ribbonoverlay"
+ add_overlay("ribbonoverlay")
/obj/item/tape/fire_act()
@@ -439,4 +439,4 @@
//Random colour tapes
/obj/item/tape/random/Initialize()
. = ..()
- icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
\ No newline at end of file
+ icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index ca579dcefb..f66a0a2d91 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -121,7 +121,7 @@
VARSET_IN(src, toggle, TRUE, 5 SECONDS)
/obj/item/transfer_valve/update_icon()
- overlays.Cut()
+ cut_overlays()
underlays = null
if(!tank_one && !tank_two && !attached_device)
@@ -130,13 +130,13 @@
icon_state = "valve"
if(tank_one)
- overlays += "[tank_one.icon_state]"
+ add_overlay("[tank_one.icon_state]")
if(tank_two)
var/icon/J = new(icon, icon_state = "[tank_two.icon_state]")
J.Shift(WEST, 13)
underlays += J
if(attached_device)
- overlays += "device"
+ add_overlay("device")
/obj/item/transfer_valve/proc/remove_tank(obj/item/tank/T)
if(tank_one == T)
diff --git a/code/game/objects/items/glassjar.dm b/code/game/objects/items/glassjar.dm
index 7ef1ec0698..84d8067150 100644
--- a/code/game/objects/items/glassjar.dm
+++ b/code/game/objects/items/glassjar.dm
@@ -86,7 +86,7 @@
/obj/item/glass_jar/update_icon() // Also updates name and desc
underlays.Cut()
- overlays.Cut()
+ cut_overlays()
switch(contains)
if(JAR_NOTHING)
name = initial(name)
@@ -138,7 +138,7 @@
/obj/item/glass_jar/fish/update_icon() // Also updates name and desc
underlays.Cut()
- overlays.Cut()
+ cut_overlays()
if(filled)
underlays += image(icon, "[icon_state]_water")
diff --git a/code/game/objects/items/robobag.dm b/code/game/objects/items/robobag.dm
index 1a52957b67..1811e34f2c 100644
--- a/code/game/objects/items/robobag.dm
+++ b/code/game/objects/items/robobag.dm
@@ -32,7 +32,7 @@
. += "[src] has a [corptag] attached to it."
/obj/structure/closet/body_bag/cryobag/robobag/update_icon()
- overlays.Cut()
+ cut_overlays()
..()
if(corptag)
var/corptag_icon_state = "tag_blank"
@@ -45,8 +45,7 @@
else if(istype(corptag, /obj/item/clothing/accessory/badge/corporate_tag))
corptag_icon_state = corptag.icon_state
- var/image/I = image(icon, corptag_icon_state)
- overlays += I
+ add_overlay(corptag_icon_state)
/obj/structure/closet/body_bag/cryobag/robobag/AltClick(mob/user)
if(!Adjacent(user))
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 0dcee18969..2230808bab 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -73,19 +73,19 @@
src.updateicon()
/obj/item/robot_parts/robot_suit/proc/updateicon()
- src.overlays.Cut()
+ cut_overlays()
if(src.l_arm)
- src.overlays += "l_arm+o"
+ add_overlay("l_arm+o")
if(src.r_arm)
- src.overlays += "r_arm+o"
+ add_overlay("r_arm+o")
if(src.chest)
- src.overlays += "chest+o"
+ add_overlay("chest+o")
if(src.l_leg)
- src.overlays += "l_leg+o"
+ add_overlay("l_leg+o")
if(src.r_leg)
- src.overlays += "r_leg+o"
+ add_overlay("r_leg+o")
if(src.head)
- src.overlays += "head+o"
+ add_overlay("head+o")
/obj/item/robot_parts/robot_suit/proc/check_completion()
if(src.l_arm && src.r_arm)
diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm
index 819eb58f7b..d0ecd79636 100644
--- a/code/game/objects/items/shooting_range.dm
+++ b/code/game/objects/items/shooting_range.dm
@@ -36,7 +36,7 @@
if (istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0, user))
- overlays.Cut()
+ cut_overlays()
to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
return
@@ -139,7 +139,7 @@
virtualIcon.DrawBox(null, B.b1x1, B.b1y, B.b1x2, B.b1y) // horizontal line, left to right
virtualIcon.DrawBox(null, B.b2x, B.b2y1, B.b2x, B.b2y2) // vertical line, top to bottom
- overlays += bmark // add the decal
+ add_overlay(bmark) // add the decal
icon = virtualIcon // apply bulletholes over decals
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index b7224f6811..65ad72c49a 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -66,7 +66,7 @@
message_admins("[key_name(user, user.client)](?) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [timer] second fuse",0,1)
log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse")
- target.overlays += image_overlay
+ target.add_overlay(image_overlay, TRUE)
to_chat(user, "Bomb has been planted. Timer counting down from [timer].")
addtimer(CALLBACK(src, .proc/detonate), timer SECONDS)
@@ -97,7 +97,7 @@
else
target.ex_act(1)
if(target)
- target.overlays -= image_overlay
+ target.cut_overlay(image_overlay, TRUE)
qdel(src)
/obj/item/plastique/attack(mob/M as mob, mob/user as mob, def_zone)
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index e545b74036..f29014befc 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -46,13 +46,13 @@
/obj/item/flamethrower/update_icon()
- overlays.Cut()
+ cut_overlays()
if(igniter)
- overlays += "+igniter[status]"
+ add_overlay("+igniter[status]")
if(ptank)
- overlays += "+ptank"
+ add_overlay("+ptank")
if(lit)
- overlays += "+lit"
+ add_overlay("+lit")
item_state = "flamethrower_1"
else
item_state = "flamethrower_0"
diff --git a/code/game/objects/items/weapons/grenades/supermatter.dm b/code/game/objects/items/weapons/grenades/supermatter.dm
index d122ae0f54..9b41c2c65b 100644
--- a/code/game/objects/items/weapons/grenades/supermatter.dm
+++ b/code/game/objects/items/weapons/grenades/supermatter.dm
@@ -19,9 +19,9 @@
playsound(src, 'sound/weapons/wave.ogg', 100)
/obj/item/grenade/supermatter/update_icon()
- overlays.Cut()
+ cut_overlays()
if(implode_at)
- overlays += image(icon = 'icons/rust.dmi', icon_state = "emfield_s1")
+ add_overlay(image(icon = 'icons/rust.dmi', icon_state = "emfield_s1"))
/obj/item/grenade/supermatter/process()
if(!isturf(loc))
@@ -33,4 +33,4 @@
supermatter_pull(src, world.view, STAGE_THREE)
if(world.time > implode_at)
explosion(loc, 1, 3, 5, 4)
- qdel(src)
\ No newline at end of file
+ qdel(src)
diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm
index f45c443c8d..1797d25bd2 100644
--- a/code/game/objects/items/weapons/id cards/station_ids.dm
+++ b/code/game/objects/items/weapons/id cards/station_ids.dm
@@ -52,9 +52,8 @@
/obj/item/card/id/proc/update_name()
name = "[src.registered_name]'s ID Card ([src.assignment])"
-/obj/item/card/id/proc/set_id_photo(var/mob/M)
- COMPILE_OVERLAYS(M)
- SSoverlays.queue -= M
+/obj/item/card/id/proc/set_id_photo(mob/M)
+ M.ImmediateOverlayUpdate()
var/icon/F = getFlatIcon(M, defdir = SOUTH, no_anim = TRUE)
front = "'data:image/png;base64,[icon2base64(F)]'"
diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm
index de8cca0b7b..a47185e610 100644
--- a/code/game/objects/items/weapons/material/ashtray.dm
+++ b/code/game/objects/items/weapons/material/ashtray.dm
@@ -20,23 +20,23 @@ var/global/list/ashtray_cache = list()
/obj/item/material/ashtray/update_icon()
color = null
- overlays.Cut()
+ cut_overlays()
var/cache_key = "base-[material.name]"
if(!ashtray_cache[cache_key])
var/image/I = image('icons/obj/objects.dmi',"ashtray")
I.color = material.icon_colour
ashtray_cache[cache_key] = I
- overlays |= ashtray_cache[cache_key]
+ add_overlay(ashtray_cache[cache_key])
if (contents.len == max_butts)
if(!ashtray_cache["full"])
ashtray_cache["full"] = image('icons/obj/objects.dmi',"ashtray_full")
- overlays |= ashtray_cache["full"]
+ add_overlay(ashtray_cache["full"])
desc = "It's stuffed full."
else if (contents.len > max_butts/2)
if(!ashtray_cache["half"])
ashtray_cache["half"] = image('icons/obj/objects.dmi',"ashtray_half")
- overlays |= ashtray_cache["half"]
+ add_overlay(ashtray_cache["half"])
desc = "It's half-filled."
else
desc = "An ashtray made of [material.display_name]."
diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm
index 6ab8d5881c..1fc526d3d7 100644
--- a/code/game/objects/items/weapons/policetape.dm
+++ b/code/game/objects/items/weapons/policetape.dm
@@ -114,7 +114,7 @@ var/list/tape_roll_applications = list()
color = COLOR_DEEP_SKY_BLUE
/obj/item/taperoll/update_icon()
- overlays.Cut()
+ cut_overlays()
var/image/overlay = image(icon = src.icon)
overlay.appearance_flags = RESET_COLOR
if(ismob(loc))
@@ -122,7 +122,7 @@ var/list/tape_roll_applications = list()
overlay.icon_state = "start"
else
overlay.icon_state = "stop"
- overlays += overlay
+ add_overlay(overlay)
/obj/item/taperoll/dropped(mob/user)
@@ -303,11 +303,11 @@ var/list/tape_roll_applications = list()
if(tape_roll_applications[F] & direction) // hazard_overlay in F.overlays wouldn't work.
user.visible_message("\The [user] uses the adhesive of \the [src] to remove area markings from \the [F].", "You use the adhesive of \the [src] to remove area markings from \the [F].")
- F.overlays -= hazard_overlay
+ F.cut_overlay(hazard_overlay)
tape_roll_applications[F] &= ~direction
else
user.visible_message("\The [user] applied \the [src] on \the [F] to create area markings.", "You apply \the [src] on \the [F] to create area markings.")
- F.overlays |= hazard_overlay
+ F.add_overlay(hazard_overlay)
tape_roll_applications[F] |= direction
return
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 124d34890f..146d6d875c 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -125,9 +125,9 @@
/obj/item/storage/fancy/crayons/update_icon()
var/mutable_appearance/ma = new(src)
- ma.overlays = list()
+ ma.cut_overlays()
for(var/obj/item/pen/crayon/crayon in contents)
- ma.overlays += image('icons/obj/crayons.dmi',crayon.colourName)
+ add_overlay(image('icons/obj/crayons.dmi',crayon.colourName))
appearance = ma
/obj/item/storage/fancy/crayons/attackby(obj/item/W as obj, mob/user as mob)
@@ -167,9 +167,9 @@
/obj/item/storage/fancy/markers/update_icon()
var/mutable_appearance/ma = new(src)
- ma.overlays = list()
+ ma.cut_overlays()
for(var/obj/item/pen/crayon/marker/marker in contents)
- ma.overlays += image('icons/obj/crayons.dmi',"m"+marker.colourName)
+ ma.add_overlay(image('icons/obj/crayons.dmi',"m"+marker.colourName))
appearance = ma
/obj/item/storage/fancy/markers/attackby(obj/item/W as obj, mob/user as mob)
@@ -399,14 +399,13 @@
/obj/item/storage/lockbox/vials/update_icon(var/itemremoved = 0)
var/total_contents = contents.len - itemremoved
icon_state = "vialbox[total_contents]"
- overlays.Cut()
+ cut_overlays()
if (!broken)
- overlays += image(icon, src, "led[locked]")
+ add_overlay("led[locked]")
if(locked)
- overlays += image(icon, src, "cover")
+ add_overlay("cover")
else
- overlays += image(icon, src, "ledb")
- return
+ add_overlay("ledb")
/obj/item/storage/lockbox/vials/attackby(obj/item/W as obj, mob/user as mob)
..()
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index e2c503bb60..dcf2fe4caf 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -198,11 +198,11 @@
update_icon()
/obj/item/storage/pill_bottle/update_icon()
- overlays.Cut()
+ cut_overlays()
if(wrapper_color)
var/image/I = image(icon, "pillbottle_wrap")
I.color = wrapper_color
- overlays += I
+ add_overlay(I)
/obj/item/storage/pill_bottle/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/pen) || istype(W, /obj/item/flashlight/pen))
diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm
index f812997db3..c203deed0f 100644
--- a/code/game/objects/items/weapons/storage/secure.dm
+++ b/code/game/objects/items/weapons/storage/secure.dm
@@ -111,15 +111,15 @@
src.l_set = 1
else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1))
src.locked = 0
- src.overlays = null
- overlays += image('icons/obj/storage.dmi', icon_opened)
+ cut_overlays()
+ add_overlay(icon_opened)
src.code = null
else
src.code = "ERROR"
else
if ((digit == "R") && (src.emagged == 0) && (!src.l_setshort))
src.locked = 1
- src.overlays = null
+ cut_overlays()
src.code = null
src.close(usr)
else
@@ -133,10 +133,10 @@
/obj/item/storage/secure/emag_act(var/remaining_charges, var/mob/user, var/feedback)
if(!emagged)
emagged = 1
- src.overlays += image('icons/obj/storage.dmi', icon_sparking)
+ src.add_overlay(icon_sparking)
sleep(6)
- src.overlays = null
- overlays += image('icons/obj/storage.dmi', icon_locking)
+ cut_overlays()
+ add_overlay(icon_locking)
locked = 0
to_chat(user, (feedback ? feedback : "You short out the lock of \the [src]."))
return 1
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index c7d67fde7d..d1a7dfc1cd 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -221,7 +221,7 @@
var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item
var/storage_width = min( round( 224 * max_storage_space/baseline_max_storage_space ,1) ,274) //length of sprite for the box representing total storage space
- storage_start.overlays.Cut()
+ storage_start.cut_overlays()
var/matrix/M = matrix()
M.Scale((storage_width-storage_cap_width*2+3)/32,1)
@@ -248,9 +248,9 @@
src.stored_start.transform = M_start
src.stored_continue.transform = M_continue
src.stored_end.transform = M_end
- storage_start.overlays += src.stored_start
- storage_start.overlays += src.stored_continue
- storage_start.overlays += src.stored_end
+ storage_start.add_overlay(stored_start)
+ storage_start.add_overlay(stored_continue)
+ storage_start.add_overlay(stored_end)
O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16"
O.maptext = ""
@@ -696,7 +696,7 @@
var/closed_state
/obj/item/storage/trinketbox/update_icon()
- overlays.Cut()
+ cut_overlays()
if(open)
icon_state = open_state
@@ -709,7 +709,7 @@
else if(istype(contents[1], /obj/item/clothing/accessory/medal))
contained_image = "medal_trinket"
if(contained_image)
- overlays += contained_image
+ add_overlay(contained_image)
else
icon_state = closed_state
diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm
index 7cc590c6dd..7bd795f310 100644
--- a/code/game/objects/items/weapons/storage/wallets.dm
+++ b/code/game/objects/items/weapons/storage/wallets.dm
@@ -63,14 +63,14 @@
update_icon()
/obj/item/storage/wallet/update_icon()
- overlays.Cut()
+ cut_overlays()
if(front_id)
var/tiny_state = "id-generic"
if("id-[front_id.icon_state]" in cached_icon_states(icon))
tiny_state = "id-"+front_id.icon_state
var/image/tiny_image = new/image(icon, icon_state = tiny_state)
tiny_image.appearance_flags = RESET_COLOR
- overlays += tiny_image
+ add_overlay(tiny_image)
/obj/item/storage/wallet/GetID()
return front_id
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index a8f29030b7..8eafb6dc38 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -85,14 +85,14 @@
add_fingerprint(user)
if(blood_overlay && blood_DNA && (blood_DNA.len >= 1)) //updates blood overlay, if any
- overlays.Cut()//this might delete other item overlays as well but eeeeeeeh
+ cut_overlays()
var/icon/I = new /icon(src.icon, src.icon_state)
I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD)
I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY)
blood_overlay = I
- overlays += blood_overlay
+ add_overlay(blood_overlay)
return
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index 9a4c7c6d6a..3a4283676a 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -139,7 +139,7 @@ var/list/global/tank_gauge_cache = list()
to_chat(user, "You carefully begin clipping the wires that attach to the tank.")
if(do_after(user, 100,src))
wired = 0
- src.overlays -= "bomb_assembly"
+ cut_overlay("bomb_assembly")
to_chat(user, "You cut the wire and remove the device.")
var/obj/item/assembly_holder/assy = src.proxyassembly.assembly
@@ -154,7 +154,7 @@ var/list/global/tank_gauge_cache = list()
assy.a_right = null
src.proxyassembly.assembly = null
qdel(assy)
- src.overlays.Cut()
+ cut_overlays()
last_gauge_pressure = 0
update_gauge()
@@ -167,7 +167,7 @@ var/list/global/tank_gauge_cache = list()
if(do_after(user, 10, src))
to_chat(user, "You quickly clip the wire from the tank.")
wired = 0
- src.overlays -= "bomb_assembly"
+ cut_overlay("bomb_assembly")
else
to_chat(user, "There are no wires to cut!")
@@ -351,12 +351,12 @@ var/list/global/tank_gauge_cache = list()
/obj/item/tank/proc/add_bomb_overlay()
if(src.wired)
- src.overlays += "bomb_assembly"
+ add_overlay("bomb_assembly")
if(src.proxyassembly.assembly)
var/icon/test = getFlatIcon(src.proxyassembly.assembly)
test.Shift(SOUTH,1)
test.Shift(WEST,3)
- overlays += test
+ add_overlay(test)
/obj/item/tank/proc/update_gauge()
@@ -372,12 +372,12 @@ var/list/global/tank_gauge_cache = list()
return
last_gauge_pressure = gauge_pressure
- overlays.Cut()
+ cut_overlays()
add_bomb_overlay()
var/indicator = "[gauge_icon][(gauge_pressure == -1) ? "overload" : gauge_pressure]"
if(!tank_gauge_cache[indicator])
tank_gauge_cache[indicator] = image(icon, indicator)
- overlays += tank_gauge_cache[indicator]
+ add_overlay(tank_gauge_cache[indicator])
@@ -561,7 +561,7 @@ var/list/global/tank_gauge_cache = list()
H.update_icon()
- src.overlays += "bomb_assembly"
+ add_overlay("bomb_assembly")
/obj/item/tank/phoron/onetankbomb/Initialize()
@@ -657,10 +657,10 @@ var/list/global/tank_gauge_cache = list()
/obj/item/tankassemblyproxy/update_icon()
if(assembly)
tank.update_icon()
- tank.overlays += "bomb_assembly"
+ tank.add_overlay("bomb_assembly")
else
tank.update_icon()
- tank.overlays -= "bomb_assembly"
+ tank.cut_overlay("bomb_assembly")
/obj/item/tankassemblyproxy/HasProximity(turf/T, atom/movable/AM, old_loc)
assembly?.HasProximity(T, AM, old_loc)
diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm
index 9c3fa43f68..3eccb48678 100644
--- a/code/game/objects/items/weapons/tape.dm
+++ b/code/game/objects/items/weapons/tape.dm
@@ -134,7 +134,7 @@
W.forceMove(src)
icon_state = W.icon_state + "_taped"
name = W.name + " (taped)"
- overlays = W.overlays
+ copy_overlays(W, TRUE)
/obj/item/ducttape/attack_self(mob/user)
if(!stuck)
@@ -146,7 +146,7 @@
stuck.forceMove(get_turf(src))
user.put_in_hands(stuck)
stuck = null
- overlays = null
+ cut_overlays()
qdel(src)
/obj/item/ducttape/attackby(var/obj/item/I, var/mob/user)
diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm
index 77ffc186d8..a0d8c510a5 100644
--- a/code/game/objects/items/weapons/tools/weldingtool.dm
+++ b/code/game/objects/items/weapons/tools/weldingtool.dm
@@ -203,11 +203,10 @@
/obj/item/weldingtool/update_icon()
..()
- overlays.Cut()
+ cut_overlays()
// Welding overlay.
if(welding)
- var/image/I = image(icon, src, "[icon_state]-on")
- overlays.Add(I)
+ add_overlay("[icon_state]-on")
item_state = "[initial(item_state)]1"
else
item_state = initial(item_state)
@@ -216,8 +215,7 @@
if(change_icons && get_max_fuel())
var/ratio = get_fuel() / get_max_fuel()
ratio = CEILING(ratio * 4, 1) * 25
- var/image/I = image(icon, src, "[icon_state][ratio]")
- overlays.Add(I)
+ add_overlay("[icon_state][ratio]")
// Lights
if(welding && flame_intensity)
diff --git a/code/game/objects/items/weapons/trays.dm b/code/game/objects/items/weapons/trays.dm
index 052fb2d12d..4396ef2b27 100644
--- a/code/game/objects/items/weapons/trays.dm
+++ b/code/game/objects/items/weapons/trays.dm
@@ -19,7 +19,7 @@
/obj/item/tray/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
user.setClickCooldown(user.get_attack_speed(src))
// Drop all the things. All of them.
- overlays.Cut()
+ cut_overlays()
for(var/obj/item/I in carrying)
I.loc = M.loc
carrying.Remove(I)
@@ -193,7 +193,7 @@
var/obj/item/material/O = I
if(O.applies_material_colour)
Img.color = O.color
- overlays += Img
+ add_overlay(Img)
/obj/item/tray/dropped(mob/user)
var/noTable = null
@@ -203,7 +203,7 @@
noTable = 1
if(isturf(loc) && !(locate(/mob/living) in src.loc))
- overlays.Cut()
+ cut_overlays()
for(var/obj/item/I in carrying)
I.forceMove(src.loc)
carrying.Remove(I)
diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm
index 379d1a3752..4178457456 100644
--- a/code/game/objects/structures/bonfire.dm
+++ b/code/game/objects/structures/bonfire.dm
@@ -184,7 +184,7 @@
L.IgniteMob()
/obj/structure/bonfire/update_icon()
- overlays.Cut()
+ cut_overlays()
if(burning)
var/state
switch(get_fuel_amount())
@@ -194,14 +194,14 @@
state = "bonfire_hot"
var/image/I = image(icon, state)
I.appearance_flags = RESET_COLOR
- overlays += I
+ add_overlay(I)
if(has_buckled_mobs() && get_fuel_amount() >= 5)
I = image(icon, "bonfire_intense")
I.pixel_y = 13
I.layer = MOB_LAYER + 0.1
I.appearance_flags = RESET_COLOR
- overlays += I
+ add_overlay(I)
var/light_strength = max(get_fuel_amount() / 2, 2)
set_light(light_strength, light_strength, "#FF9933")
@@ -211,7 +211,7 @@
if(grill)
var/image/grille_image = image(icon, "bonfire_grill")
grille_image.appearance_flags = RESET_COLOR
- overlays += grille_image
+ add_overlay(grille_image)
/obj/structure/bonfire/process()
@@ -373,7 +373,7 @@
O.fire_act(null, 1000, 500)
/obj/structure/fireplace/update_icon()
- overlays.Cut()
+ cut_overlays()
if(burning)
var/state
switch(get_fuel_amount())
@@ -385,7 +385,7 @@
state = "fireplace_intense" //don't need to throw a corpse inside to make it burn hotter.
var/image/I = image(icon, state)
I.appearance_flags = RESET_COLOR
- overlays += I
+ add_overlay(I)
var/light_strength = max(get_fuel_amount() / 2, 2)
set_light(light_strength, light_strength, "#FF9933")
diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm
index 57018a05af..a9beeeba2f 100644
--- a/code/game/objects/structures/coathanger.dm
+++ b/code/game/objects/structures/coathanger.dm
@@ -43,10 +43,10 @@
return 1
/obj/structure/coatrack/update_icon()
- overlays.Cut()
+ cut_overlays()
if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat))
- overlays += image(icon, icon_state = "coat_lab")
+ add_overlay("coat_lab")
if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat/cmo))
- overlays += image(icon, icon_state = "coat_cmo")
+ add_overlay("coat_cmo")
if (istype(coat, /obj/item/clothing/suit/storage/det_trench))
- overlays += image(icon, icon_state = "coat_det")
+ add_overlay("coat_det")
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
index d7fc90bd0b..938b998728 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
@@ -14,9 +14,9 @@
update_icon()
/obj/structure/closet/secure_closet/guncabinet/update_icon()
- overlays.Cut()
+ cut_overlays()
if(opened)
- overlays += icon(icon,"door_open")
+ add_overlay("door_open")
else
var/lazors = 0
var/shottas = 0
@@ -35,17 +35,17 @@
shottas--
gun.icon_state = "projectile"
gun.pixel_x = i*4
- overlays += gun
+ add_overlay(gun)
- overlays += icon(src.icon, "door")
+ add_overlay("door")
if(sealed)
- overlays += icon(src.icon,"sealed")
+ add_overlay("sealed")
if(broken)
- overlays += icon(src.icon,"broken")
+ add_overlay("broken")
else if (locked)
- overlays += icon(src.icon,"locked")
+ add_overlay("locked")
else
- overlays += icon(src.icon,"open")
+ add_overlay("open")
diff --git a/code/game/objects/structures/crates_lockers/vehiclecage.dm b/code/game/objects/structures/crates_lockers/vehiclecage.dm
index d707002f1c..c8bcc5af5e 100644
--- a/code/game/objects/structures/crates_lockers/vehiclecage.dm
+++ b/code/game/objects/structures/crates_lockers/vehiclecage.dm
@@ -44,13 +44,13 @@
/obj/structure/vehiclecage/update_icon()
..()
- overlays.Cut()
+ cut_overlays()
underlays.Cut()
var/image/framepaint = new(icon = 'icons/obj/storage.dmi', icon_state = "[initial(icon_state)]_a", layer = MOB_LAYER + 1.1)
framepaint.plane = MOB_PLANE
framepaint.color = paint_color
- overlays += framepaint
+ add_overlay(framepaint)
for(var/obj/vehicle/V in src.contents)
var/image/showcase = new(V)
diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm
index 8cd5220d92..848fe2f5b5 100644
--- a/code/game/objects/structures/electricchair.dm
+++ b/code/game/objects/structures/electricchair.dm
@@ -8,7 +8,7 @@
/obj/structure/bed/chair/e_chair/Initialize()
. = ..()
- overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir)
+ add_overlay(image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir))
return
/obj/structure/bed/chair/e_chair/attackby(obj/item/W as obj, mob/user as mob)
@@ -39,8 +39,8 @@
/obj/structure/bed/chair/e_chair/rotate_clockwise()
..()
- overlays.Cut()
- overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir) //there's probably a better way of handling this, but eh. -Pete
+ cut_overlays()
+ add_overlay(image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir))
return
/obj/structure/bed/chair/e_chair/proc/shock()
diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm
index 23d987401e..6b8ca8c5d1 100644
--- a/code/game/objects/structures/flora/trees.dm
+++ b/code/game/objects/structures/flora/trees.dm
@@ -115,7 +115,7 @@
is_stump = TRUE
density = FALSE
icon_state = "[base_state]_stump"
- overlays.Cut() // For the Sif tree and other future glowy trees.
+ cut_overlays() // For the Sif tree and other future glowy trees.
set_light(0)
/obj/structure/flora/tree/ex_act(var/severity)
@@ -292,4 +292,5 @@
set_light(5 - light_shift, 1, "#33ccff") // 5 variants, missing bulbs. 5th has no bulbs, so no glow.
var/image/glow = image(icon = icon, icon_state = "[base_state][light_shift]_glow")
glow.plane = PLANE_LIGHTING_ABOVE
- overlays = list(glow)
+ cut_overlays()
+ add_overlay(glow)
diff --git a/code/game/objects/structures/holoplant.dm b/code/game/objects/structures/holoplant.dm
index dbd39361d6..01a0436be9 100644
--- a/code/game/objects/structures/holoplant.dm
+++ b/code/game/objects/structures/holoplant.dm
@@ -46,12 +46,13 @@
return
plant = prepare_icon(emagged ? "emagged" : null)
- overlays = list(plant)
+ cut_overlays()
+ add_overlay(plant)
set_light(2)
update_use_power(USE_POWER_ACTIVE)
/obj/machinery/holoplant/proc/deactivate()
- overlays.Cut()
+ cut_overlays()
QDEL_NULL(plant)
set_light(0)
update_use_power(USE_POWER_OFF)
@@ -66,16 +67,16 @@
/obj/machinery/holoplant/proc/flicker()
interference = TRUE
spawn(0)
- overlays.Cut()
+ cut_overlays()
set_light(0)
sleep(rand(2,4))
- overlays = list(plant)
+ add_overlay(plant)
set_light(2)
sleep(rand(2,4))
- overlays.Cut()
+ cut_overlays()
set_light(0)
sleep(rand(2,4))
- overlays = list(plant)
+ add_overlay(plant)
set_light(2)
interference = FALSE
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index 26c7afd16e..5d09f66ec2 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -212,22 +212,22 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
/obj/structure/janitorialcart/update_icon()
- overlays.Cut()
+ cut_overlays()
if(mybucket)
- overlays += "cart_bucket"
+ add_overlay("cart_bucket")
if(mybucket.reagents.total_volume >= 1)
- overlays += "water_cart"
+ add_overlay("water_cart")
if(mybag)
- overlays += "cart_garbage"
+ add_overlay("cart_garbage")
if(mymop)
- overlays += "cart_mop"
+ add_overlay("cart_mop")
if(myspray)
- overlays += "cart_spray"
+ add_overlay("cart_spray")
if(myreplacer)
- overlays += "cart_replacer"
+ add_overlay("cart_replacer")
if(signs)
- overlays += "cart_sign[signs]"
+ add_overlay("cart_sign[signs]")
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index df6d00a4d9..5f05e6605c 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -22,19 +22,19 @@
icon = 'icons/obj/smoothlattice.dmi'
icon_state = "latticeblank"
- updateOverlays()
+ ImmediateOverlayUpdate()
for (var/dir in cardinal)
var/obj/structure/lattice/L
if(locate(/obj/structure/lattice, get_step(src, dir)))
L = locate(/obj/structure/lattice, get_step(src, dir))
- L.updateOverlays()
+ L.UpdateAdjacentLattices()
/obj/structure/lattice/Destroy()
for (var/dir in cardinal)
var/obj/structure/lattice/L
if(locate(/obj/structure/lattice, get_step(src, dir)))
L = locate(/obj/structure/lattice, get_step(src, dir))
- L.updateOverlays(src.loc)
+ L.UpdateAdjacentLattices()
if(istype(loc, /turf/simulated/open))
var/turf/simulated/open/O = loc
spawn(1)
@@ -80,20 +80,14 @@
return
return
-/obj/structure/lattice/proc/updateOverlays()
- //if(!(istype(src.loc, /turf/space)))
- // qdel(src)
+/obj/structure/lattice/proc/UpdateAdjacentLattices()
spawn(1)
- overlays = list()
-
+ cut_overlays()
var/dir_sum = 0
-
for (var/direction in cardinal)
if(locate(/obj/structure/lattice, get_step(src, direction)))
dir_sum += direction
else
if(!(istype(get_step(src, direction), /turf/space)))
dir_sum += direction
-
icon_state = "lattice[dir_sum]"
- return
diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm
index 187ea7f1ff..d3026c2859 100644
--- a/code/game/objects/structures/railing.dm
+++ b/code/game/objects/structures/railing.dm
@@ -105,27 +105,27 @@
/obj/structure/railing/update_icon(var/UpdateNeighgors = 1)
NeighborsCheck(UpdateNeighgors)
//layer = (dir == SOUTH) ? FLY_LAYER : initial(layer) // wtf does this even do
- overlays.Cut()
+ cut_overlays()
if (!check || !anchored)//|| !anchored
icon_state = "[icon_modifier]railing0"
else
icon_state = "[icon_modifier]railing1"
if (check & 32)
- overlays += image ('icons/obj/railing.dmi', src, "[icon_modifier]corneroverlay")
+ add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]corneroverlay"))
if ((check & 16) || !(check & 32) || (check & 64))
- overlays += image ('icons/obj/railing.dmi', src, "[icon_modifier]frontoverlay_l")
+ add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]frontoverlay_l"))
if (!(check & 2) || (check & 1) || (check & 4))
- overlays += image ('icons/obj/railing.dmi', src, "[icon_modifier]frontoverlay_r")
+ add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]frontoverlay_r"))
if(check & 4)
switch (src.dir)
if (NORTH)
- overlays += image ('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_x = 32)
+ add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_x = 32))
if (SOUTH)
- overlays += image ('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_x = -32)
+ add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_x = -32))
if (EAST)
- overlays += image ('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_y = -32)
+ add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_y = -32))
if (WEST)
- overlays += image ('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_y = 32)
+ add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_y = 32))
/obj/structure/railing/verb/rotate_counterclockwise()
set name = "Rotate Railing Counter-Clockwise"
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index bcf36bb620..d8c6b33387 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -313,7 +313,7 @@
var/image/I = image(icon, "[base_icon]_over")
I.layer = ABOVE_MOB_LAYER
I.plane = MOB_PLANE
- overlays |= I
+ add_overlay(I)
/obj/structure/bed/chair/modern_bar_stool
name = "bar stool"
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index d21ea00b1b..0d5a501de7 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -28,13 +28,13 @@
update_icon()
/obj/structure/dispenser/update_icon()
- overlays.Cut()
+ cut_overlays()
switch(oxygentanks)
- if(1 to 3) overlays += "oxygen-[oxygentanks]"
- if(4 to INFINITY) overlays += "oxygen-4"
+ if(1 to 3) add_overlay("oxygen-[oxygentanks]")
+ if(4 to INFINITY) add_overlay("oxygen-4")
switch(phorontanks)
- if(1 to 4) overlays += "phoron-[phorontanks]"
- if(5 to INFINITY) overlays += "phoron-5"
+ if(1 to 4) add_overlay("phoron-[phorontanks]")
+ if(5 to INFINITY) add_overlay("phoron-5")
/obj/structure/dispenser/attack_ai(mob/user)
// This looks silly, but robots also call attack_ai, and they're allowed physical state stuff.
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 00c9e979c0..16e0f8bf52 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -214,13 +214,13 @@
add_fingerprint(user)
/obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up
- overlays.Cut() //once it's been on for a while, in addition to handling the water overlay.
+ cut_overlay() //once it's been on for a while, in addition to handling the water overlay.
if(mymist)
qdel(mymist)
mymist = null
if(on)
- overlays += image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir)
+ add_overlay(image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir))
if(temperature_settings[watertemp] < T20C)
return //no mist for cold water
if(!ismist)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index f1fb7ba3ca..c70cf37449 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -84,14 +84,13 @@
updateSilicate()
/obj/structure/window/proc/updateSilicate()
- if (overlays)
- overlays.Cut()
+ cut_overlays()
update_icon()
var/image/img = image(src)
img.color = "#ffffff"
img.alpha = silicate * 255 / 100
- overlays += img
+ add_overlay(img)
/obj/structure/window/proc/shatter(var/display_message = 1)
playsound(src, "shatter", 70, 1)
@@ -458,7 +457,7 @@
/obj/structure/window/update_icon()
//A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong.
//this way it will only update full-tile ones
- overlays.Cut()
+ cut_overlays()
if(!is_fulltile())
// Rotate the sprite somewhat so non-fulltiled windows can be seen as needing repair.
var/full_tilt_degrees = 15
@@ -478,9 +477,11 @@
var/list/connections = dirs_to_corner_states(dirs)
icon_state = ""
+ var/list/add = list()
for(var/i = 1 to 4)
- var/image/I = image(icon, "[basestate][connections[i]]", dir = 1<<(i-1))
- overlays += I
+ var/image/image = image(icon, "[basestate][connections[i]]", dir = 1<<(i-1))
+ add += image
+ add_overlay(add)
// Damage overlays.
var/ratio = health / maxhealth
@@ -488,8 +489,7 @@
if(ratio > 75)
return
- var/image/I = image(icon, "damage[ratio]", layer = layer + 0.1)
- overlays += I
+ add_overlay(image(icon, "damage[ratio]", layer = layer + 0.1))
return
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index d9d071cbdc..b295f9deaf 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1605,7 +1605,7 @@ var/global/floorIsLava = 0
if(!P.stamped)
P.stamped = new
P.stamped += /obj/item/stamp/centcomm
- P.overlays += stampoverlay
+ P.add_overlay(stampoverlay)
var/obj/item/rcvdcopy
rcvdcopy = destination.copy(P)
diff --git a/code/modules/admin/admin_verb_lists.dm b/code/modules/admin/admin_verb_lists.dm
index 223e353e3b..d0e698457e 100644
--- a/code/modules/admin/admin_verb_lists.dm
+++ b/code/modules/admin/admin_verb_lists.dm
@@ -206,7 +206,6 @@ var/list/admin_verbs_debug = list(
/client/proc/cmd_debug_tog_aliens,
/client/proc/cmd_display_del_log,
/client/proc/cmd_display_init_log,
- /client/proc/cmd_display_overlay_log,
/client/proc/air_report,
/client/proc/reload_admins,
/client/proc/reload_eventMs,
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 3e0d76e290..c3e4bbdc29 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -245,27 +245,6 @@
if(!check_rights(R_DEBUG)) return
src << browse(replacetext(SSatoms.InitLog(), "\n", "
"), "window=initlog")
-/client/proc/cmd_display_overlay_log()
- set category = "Debug"
- set name = "Display overlay Log"
- set desc = "Display SSoverlays log of everything that's passed through it."
-
- if(!check_rights(R_DEBUG)) return
- render_stats(SSoverlays.stats, src)
-
-// Render stats list for round-end statistics.
-/proc/render_stats(list/stats, user, sort = /proc/cmp_generic_stat_item_time)
- sortTim(stats, sort, TRUE)
-
- var/list/lines = list()
- for (var/entry in stats)
- var/list/data = stats[entry]
- lines += "[entry] => [num2text(data[STAT_ENTRY_TIME], 10)]ms ([data[STAT_ENTRY_COUNT]]) (avg:[num2text(data[STAT_ENTRY_TIME]/(data[STAT_ENTRY_COUNT] || 1), 99)])"
-
- if (user)
- user << browse("- [lines.Join("
- ")]
", "window=[url_encode("stats:\ref[stats]")]")
- else
- . = lines.Join("\n")
/client/proc/cmd_admin_grantfullaccess(var/mob/M in mob_list)
set category = "Admin"
diff --git a/code/modules/admin/verbs/grief_fixers.dm b/code/modules/admin/verbs/grief_fixers.dm
index b8815876b2..a2eb2df3d1 100644
--- a/code/modules/admin/verbs/grief_fixers.dm
+++ b/code/modules/admin/verbs/grief_fixers.dm
@@ -40,7 +40,7 @@
for(var/turf/simulated/T in world)
T.air = null
- T.overlays.Remove(unsorted_overlays)
+ T.cut_overlay(unsorted_overlays)
T.zone = null
to_chat(usr, "\[4/5\] - All turfs reset to roundstart values.")
diff --git a/code/modules/ai/ai_holder_movement.dm b/code/modules/ai/ai_holder_movement.dm
index bc5916917a..5062492684 100644
--- a/code/modules/ai/ai_holder_movement.dm
+++ b/code/modules/ai/ai_holder_movement.dm
@@ -126,7 +126,7 @@
if(path_display)
var/turf/T = src.path[1]
- T.overlays -= path_overlay
+ T.cut_overlay(path_overlay)
// step_towards(holder, src.path[1])
if(holder.IMove(get_step_towards(holder, src.path[1])) != MOVEMENT_ON_COOLDOWN)
diff --git a/code/modules/ai/ai_holder_pathfinding.dm b/code/modules/ai/ai_holder_pathfinding.dm
index 1a20c6f682..fed867ee24 100644
--- a/code/modules/ai/ai_holder_pathfinding.dm
+++ b/code/modules/ai/ai_holder_pathfinding.dm
@@ -14,7 +14,7 @@
ai_log("forget_path() : Entering.", AI_LOG_DEBUG)
if(path_display)
for(var/turf/T in path)
- T.overlays -= path_overlay
+ T.cut_overlay(path_overlay)
path.Cut()
ai_log("forget_path() : Exiting.", AI_LOG_DEBUG)
@@ -49,7 +49,7 @@
ai_log("get_path() : Made new path.",AI_LOG_DEBUG)
if(path_display)
for(var/turf/T in path)
- T.overlays |= path_overlay
+ T.add_overlay(path_overlay)
else
ai_log("get_path() : Failed to make new path. Exiting.",AI_LOG_DEBUG)
return 0
diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm
index ca52c8b7e0..7a53e29f38 100644
--- a/code/modules/ai/ai_holder_targeting.dm
+++ b/code/modules/ai/ai_holder_targeting.dm
@@ -226,17 +226,17 @@
lose_target_position()
if(last_turf_display && target_last_seen_turf)
- target_last_seen_turf.overlays -= last_turf_overlay
+ target_last_seen_turf.cut_overlay(last_turf_overlay)
target_last_seen_turf = get_turf(target)
if(last_turf_display)
- target_last_seen_turf.overlays += last_turf_overlay
+ target_last_seen_turf.add_overlay(last_turf_overlay)
// Resets the last known position to null.
/datum/ai_holder/proc/lose_target_position()
if(last_turf_display && target_last_seen_turf)
- target_last_seen_turf.overlays -= last_turf_overlay
+ target_last_seen_turf.cut_overlay(last_turf_overlay)
ai_log("lose_target_position() : Last position is being reset.", AI_LOG_INFO)
target_last_seen_turf = null
diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm
index 2cef874480..1e27a3b27f 100644
--- a/code/modules/assembly/timer.dm
+++ b/code/modules/assembly/timer.dm
@@ -53,10 +53,10 @@
time = 10
/obj/item/assembly/timer/update_icon()
- overlays.Cut()
+ cut_overlays()
attached_overlays = list()
if(timing)
- overlays += "timer_timing"
+ add_overlay("timer_timing")
attached_overlays += "timer_timing"
if(holder)
holder.update_icon()
diff --git a/code/modules/blob2/blobs/core.dm b/code/modules/blob2/blobs/core.dm
index 300eb0490f..d696c7ea85 100644
--- a/code/modules/blob2/blobs/core.dm
+++ b/code/modules/blob2/blobs/core.dm
@@ -122,14 +122,14 @@ var/list/blob_cores = list()
return ..()
/obj/structure/blob/core/update_icon()
- overlays.Cut()
+ cut_overlays()
color = null
var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob")
if(overmind)
blob_overlay.color = overmind.blob_type.color
name = "[overmind.blob_type.name] [base_name]"
- overlays += blob_overlay
- overlays += mutable_appearance('icons/mob/blob.dmi', "blob_core_overlay")
+ add_overlay(blob_overlay)
+ add_overlay("blob_core_overlay")
/obj/structure/blob/core/process()
set waitfor = FALSE
diff --git a/code/modules/blob2/blobs/node.dm b/code/modules/blob2/blobs/node.dm
index 77a7cb91c8..64617d5f98 100644
--- a/code/modules/blob2/blobs/node.dm
+++ b/code/modules/blob2/blobs/node.dm
@@ -21,14 +21,14 @@ var/list/blob_nodes = list()
return ..()
/obj/structure/blob/node/update_icon()
- overlays.Cut()
+ cut_overlays()
color = null
var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob")
if(overmind)
name = "[overmind.blob_type.name] [base_name]"
blob_overlay.color = overmind.blob_type.color
- overlays += blob_overlay
- overlays += mutable_appearance('icons/mob/blob.dmi', "blob_node_overlay")
+ add_overlay(blob_overlay)
+ add_overlay("blob_node_overlay")
/obj/structure/blob/node/process()
set waitfor = FALSE
diff --git a/code/modules/blob2/mobs/spore.dm b/code/modules/blob2/mobs/spore.dm
index fd3923659b..e8ee223eed 100644
--- a/code/modules/blob2/mobs/spore.dm
+++ b/code/modules/blob2/mobs/spore.dm
@@ -61,14 +61,14 @@
set_light(0)
if(is_infesting)
- overlays.Cut()
+ cut_overlays()
icon = infested.icon
- overlays = infested.overlays
+ copy_overlays(infested)
var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head")
if(overmind)
blob_head_overlay.color = overmind.blob_type.complementary_color
color = initial(color)//looks better.
- overlays += blob_head_overlay
+ add_overlay(blob_head_overlay)
/mob/living/simple_animal/hostile/blob/spore/Life()
if(can_infest && !is_infesting && isturf(src.loc))
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index db48e9e9d5..41eeb32f63 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -51,7 +51,7 @@
set_clothing_index()
/obj/item/clothing/update_icon()
- overlays.Cut() //This removes all the overlays on the sprite and then goes down a checklist adding them as required.
+ cut_overlays()
if(blood_DNA)
add_blood()
. = ..()
@@ -618,7 +618,7 @@
usr.visible_message("\The [usr] pulls a knife out of their boot!")
playsound(src, 'sound/weapons/holster/sheathout.ogg', 25)
holding = null
- overlays -= image(icon, "[icon_state]_knife")
+ cut_overlay(image(icon, "[icon_state]_knife"))
else
to_chat(usr, "Your need an empty, unbroken hand to do that.")
holding.forceMove(src)
@@ -665,7 +665,7 @@
/obj/item/clothing/shoes/update_icon()
. = ..()
if(holding)
- overlays += image(icon, "[icon_state]_knife")
+ add_overlay(image(icon, "[icon_state]_knife"))
if(ismob(usr))
var/mob/M = usr
M.update_inv_shoes()
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 6c743d79b1..c942df5a9a 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -584,8 +584,7 @@
/obj/item/rig/update_icon(var/update_mob_icon)
- //TODO: Maybe consider a cache for this (use mob_icon as blank canvas, use suit icon overlay).
- overlays.Cut()
+ cut_overlays()
if(!mob_icon || update_mob_icon)
var/species_icon = 'icons/mob/rig_back.dmi'
// Since setting mob_icon will override the species checks in
@@ -597,7 +596,7 @@
if(installed_modules.len)
for(var/obj/item/rig_module/module in installed_modules)
if(module.suit_overlay)
- chest.overlays += image("icon" = 'icons/mob/rig_modules.dmi', "icon_state" = "[module.suit_overlay]", "dir" = SOUTH)
+ chest.add_overlay(image('icons/mob/rig_modules.dmi', icon_state = "[module.suit_overlay]", dir = SOUTH))
if(wearer)
wearer.update_inv_shoes()
diff --git a/code/modules/compass/compass_holder.dm b/code/modules/compass/compass_holder.dm
index b4f739224e..2f1e065b7d 100644
--- a/code/modules/compass/compass_holder.dm
+++ b/code/modules/compass/compass_holder.dm
@@ -72,10 +72,12 @@
. = 0
/obj/compass_holder/update_icon()
- var/set_overlays = (compass_static_labels | compass_waypoint_markers)
+ var/list/add = (compass_static_labels | compass_waypoint_markers)
if(show_heading)
- set_overlays |= compass_heading_marker
- overlays = set_overlays
+ add |= compass_heading_marker
+ if (add.len)
+ cut_overlays()
+ add_overlay(add)
/obj/compass_holder/proc/clear_waypoint(var/id)
LAZYREMOVE(compass_waypoints, id)
diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm
index 09d96a8d34..5a75f64e06 100644
--- a/code/modules/detectivework/microscope/dnascanner.dm
+++ b/code/modules/detectivework/microscope/dnascanner.dm
@@ -111,7 +111,8 @@
var/obj/item/paper/P = new(src)
P.name = "[src] report #[++report_num]: [bloodsamp.name]"
P.stamped = list(/obj/item/stamp)
- P.overlays = list("paper_stamped")
+ P.cut_overlays()
+ P.add_overlay("paper_stamped")
//dna data itself
var/data = "No scan information available."
if(bloodsamp.dna != null)
@@ -141,4 +142,4 @@
else if(bloodsamp)
icon_state = "dnaclosed"
else
- icon_state = "dnaopen"
\ No newline at end of file
+ icon_state = "dnaopen"
diff --git a/code/modules/detectivework/microscope/microscope.dm b/code/modules/detectivework/microscope/microscope.dm
index 62675a5d64..012f014cec 100644
--- a/code/modules/detectivework/microscope/microscope.dm
+++ b/code/modules/detectivework/microscope/microscope.dm
@@ -39,7 +39,8 @@
to_chat(user, "Printing findings now...")
var/obj/item/paper/report = new(get_turf(src))
report.stamped = list(/obj/item/stamp)
- report.overlays = list("paper_stamped")
+ report.cut_overlays()
+ report.add_overlay("paper_stamped")
report_num++
if(istype(sample, /obj/item/forensics/swab))
diff --git a/code/modules/detectivework/tools/evidencebag.dm b/code/modules/detectivework/tools/evidencebag.dm
index 16708a9074..d01279f2a1 100644
--- a/code/modules/detectivework/tools/evidencebag.dm
+++ b/code/modules/detectivework/tools/evidencebag.dm
@@ -62,8 +62,8 @@
var/image/img = image("icon"=I, "layer"=FLOAT_LAYER) //take a snapshot. (necessary to stop the underlays appearing under our inventory-HUD slots ~Carn
I.pixel_x = xx //and then return it
I.pixel_y = yy
- overlays += img
- overlays += "evidence" //should look nicer for transparent stuff. not really that important, but hey.
+ add_overlay(img)
+ add_overlay("evidence")
desc = "An evidence bag containing [I]."
I.loc = src
@@ -77,7 +77,7 @@
var/obj/item/I = contents[1]
user.visible_message("[user] takes [I] out of [src]", "You take [I] out of [src].",\
"You hear someone rustle around in a plastic bag, and remove something.")
- overlays.Cut() //remove the overlays
+ cut_overlays()
user.put_in_hands(I)
stored_item = null
diff --git a/code/modules/detectivework/tools/uvlight.dm b/code/modules/detectivework/tools/uvlight.dm
index ee7b08a363..76336358d9 100644
--- a/code/modules/detectivework/tools/uvlight.dm
+++ b/code/modules/detectivework/tools/uvlight.dm
@@ -45,7 +45,7 @@
stored_alpha.Cut()
if(reset_objects.len)
for(var/obj/item/I in reset_objects)
- I.overlays -= I.blood_overlay
+ I.cut_overlay(I.blood_overlay)
if(I.fluorescent == 2) I.fluorescent = 1
reset_objects.Cut()
@@ -69,5 +69,5 @@
if(istype(A, /obj/item))
var/obj/item/O = A
if(O.was_bloodied && !(O.blood_overlay in O.overlays))
- O.overlays |= O.blood_overlay
+ O.add_overlay(O.blood_overlay)
reset_objects |= O
\ No newline at end of file
diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm
index 30442dabf5..3d48ecdbad 100644
--- a/code/modules/economy/ATM.dm
+++ b/code/modules/economy/ATM.dm
@@ -379,7 +379,7 @@ log transactions
if(!R.stamped)
R.stamped = new
R.stamped += /obj/item/stamp
- R.overlays += stampoverlay
+ R.add_overlay(stampoverlay)
R.stamps += "
This paper has been stamped by the Automatic Teller Machine."
if(prob(50))
@@ -421,7 +421,7 @@ log transactions
if(!R.stamped)
R.stamped = new
R.stamped += /obj/item/stamp
- R.overlays += stampoverlay
+ R.add_overlay(stampoverlay)
R.stamps += "
This paper has been stamped by the Automatic Teller Machine."
if(prob(50))
diff --git a/code/modules/economy/Accounts.dm b/code/modules/economy/Accounts.dm
index 0627bf38d2..9386404acc 100644
--- a/code/modules/economy/Accounts.dm
+++ b/code/modules/economy/Accounts.dm
@@ -69,7 +69,7 @@
if(!R.stamped)
R.stamped = new
R.stamped += /obj/item/stamp
- R.overlays += stampoverlay
+ R.add_overlay(stampoverlay)
R.stamps += "
This paper has been stamped by the Accounts Database."
//add the account
diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm
index be6f659cb8..1895e4bb18 100644
--- a/code/modules/economy/EFTPOS.dm
+++ b/code/modules/economy/EFTPOS.dm
@@ -46,7 +46,7 @@
R.offset_y += 0
R.ico += "paper_stamp-cent"
R.stamped += /obj/item/stamp
- R.overlays += stampoverlay
+ R.add_overlay(stampoverlay)
R.stamps += "
This paper has been stamped by the EFTPOS device."
/obj/item/eftpos/Destroy()
@@ -66,7 +66,7 @@
if(!R.stamped)
R.stamped = new
R.stamped += /obj/item/stamp
- R.overlays += stampoverlay
+ R.add_overlay(stampoverlay)
R.stamps += "
This paper has been stamped by the EFTPOS device."
var/obj/item/smallDelivery/D = new(R.loc)
R.loc = D
diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm
index d4f53ecfa6..b6cbdbe54e 100644
--- a/code/modules/economy/cash.dm
+++ b/code/modules/economy/cash.dm
@@ -36,7 +36,7 @@
qdel(src)
/obj/item/spacecash/update_icon()
- overlays.Cut()
+ cut_overlays()
name = "[worth] [initial_name]\s"
if(worth in list(1000,500,200,100,50,20,10,1))
icon_state = "spacecash[worth]"
@@ -53,14 +53,14 @@
M.Translate(rand(-6, 6), rand(-4, 8))
M.Turn(pick(-45, -27.5, 0, 0, 0, 0, 0, 0, 0, 27.5, 45))
banknote.transform = M
- src.overlays += banknote
+ add_overlay(banknote)
if(num == 0) // Less than one thaler, let's just make it look like 1 for ease
var/image/banknote = image('icons/obj/items.dmi', "spacecash1")
var/matrix/M = matrix()
M.Translate(rand(-6, 6), rand(-4, 8))
M.Turn(pick(-45, -27.5, 0, 0, 0, 0, 0, 0, 0, 27.5, 45))
banknote.transform = M
- src.overlays += banknote
+ add_overlay(banknote)
src.desc = "They are worth [worth] [initial_name]s."
/obj/item/spacecash/proc/adjust_worth(var/adjust_worth = 0, var/update = 1)
diff --git a/code/modules/economy/cash_register.dm b/code/modules/economy/cash_register.dm
index 71cb81d522..31f845ca74 100644
--- a/code/modules/economy/cash_register.dm
+++ b/code/modules/economy/cash_register.dm
@@ -50,7 +50,7 @@
if(cash_stored)
spawn_money(cash_stored, loc, user)
cash_stored = 0
- overlays -= "register_cash"
+ cut_overlay("register_cash")
else
open_cash_box()
else
@@ -181,7 +181,7 @@
if(cash_open)
to_chat(user, "You neatly sort the cash into the box.")
cash_stored += SC.worth
- overlays |= "register_cash"
+ add_overlay("register_cash")
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.drop_from_inventory(SC)
@@ -468,15 +468,15 @@
if(cash_open)
cash_open = 0
- overlays -= "register_approve"
- overlays -= "register_open"
- overlays -= "register_cash"
+ cut_overlay("register_approve")
+ cut_overlay("register_open")
+ cut_overlay("register_cash")
else if(!cash_locked)
cash_open = 1
- overlays += "register_approve"
- overlays += "register_open"
+ add_overlay("register_approve")
+ add_overlay("register_open")
if(cash_stored)
- overlays += "register_cash"
+ add_overlay("register_cash")
else
to_chat(usr, "The cash box is locked.")
diff --git a/code/modules/economy/coins.dm b/code/modules/economy/coins.dm
index 1ba67e44b9..442ee0fe3c 100644
--- a/code/modules/economy/coins.dm
+++ b/code/modules/economy/coins.dm
@@ -76,7 +76,7 @@
to_chat(user, "There already is a string attached to this coin.")
return
if (CC.use(1))
- overlays += image('icons/obj/items.dmi',"coin_string_overlay")
+ add_overlay("coin_string_overlay")
string_attached = 1
to_chat(user, "You attach a string to the coin.")
else
@@ -90,7 +90,7 @@
var/obj/item/stack/cable_coil/CC = new/obj/item/stack/cable_coil(user.loc)
CC.amount = 1
CC.update_icon()
- overlays = list()
+ cut_overlays()
string_attached = null
to_chat(user, "You detach the string from the coin.")
else ..()
diff --git a/code/modules/fishing/fishing_net.dm b/code/modules/fishing/fishing_net.dm
index 9cfb27d1b6..179c655a6f 100644
--- a/code/modules/fishing/fishing_net.dm
+++ b/code/modules/fishing/fishing_net.dm
@@ -78,7 +78,7 @@
/obj/item/material/fishing_net/update_icon() // Also updates name and desc
underlays.Cut()
- overlays.Cut()
+ cut_overlays()
..()
diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm
index 79aa26b3fb..4f06dc33fb 100644
--- a/code/modules/fishing/fishing_rod.dm
+++ b/code/modules/fishing/fishing_rod.dm
@@ -78,10 +78,10 @@
return ..()
/obj/item/material/fishing_rod/update_icon()
- overlays.Cut()
+ cut_overlays()
..()
if(strung)
- overlays += image(icon, "[icon_state]_string")
+ add_overlay("[icon_state]_string")
/obj/item/material/fishing_rod/proc/update_bait()
if(istype(Bait, bait_type))
@@ -128,4 +128,4 @@
desc = "Mass produced, but somewhat reliable."
default_material = "plastic"
- toolspeed = 0.9
\ No newline at end of file
+ toolspeed = 0.9
diff --git a/code/modules/food/food/drinks/drinkingglass.dm b/code/modules/food/food/drinks/drinkingglass.dm
index 0f85e8c843..e9485ce24a 100644
--- a/code/modules/food/food/drinks/drinkingglass.dm
+++ b/code/modules/food/food/drinks/drinkingglass.dm
@@ -104,7 +104,7 @@
matter = list("glass" = 175)
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change()
- overlays.Cut()
+ cut_overlays()
name = "shot glass"
if(!reagents.total_volume)
@@ -117,7 +117,7 @@
if(8 to INFINITY) filling.icon_state = "[icon_state]12"
filling.color += reagents.get_color()
- overlays += filling
+ add_overlay(filling)
name += " of [reagents.get_master_reagent_name()]" //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future.
/obj/item/reagent_containers/food/drinks/drinkingglass/fitnessflask
@@ -132,7 +132,7 @@
icon_state = pick("fitness-cup_black", "fitness-cup_red", "fitness-cup_black")
/obj/item/reagent_containers/food/drinks/drinkingglass/fitnessflask/on_reagent_change()
- overlays.Cut()
+ cut_overlays()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "fitness-cup10")
@@ -150,7 +150,7 @@
if(90 to INFINITY) filling.icon_state = "fitness-cup100"
filling.color += reagents.get_color()
- overlays += filling
+ add_overlay(filling)
/obj/item/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake
name = "protein shake"
@@ -160,4 +160,4 @@
reagents.add_reagent("nutriment", 30)
reagents.add_reagent("iron", 10)
reagents.add_reagent("protein", 15)
- reagents.add_reagent("water", 45)
\ No newline at end of file
+ reagents.add_reagent("water", 45)
diff --git a/code/modules/food/food/sandwich.dm b/code/modules/food/food/sandwich.dm
index 3c3c012758..8f5fd828b8 100644
--- a/code/modules/food/food/sandwich.dm
+++ b/code/modules/food/food/sandwich.dm
@@ -46,7 +46,7 @@
var/fullname = "" //We need to build this from the contents of the var.
var/i = 0
- overlays.Cut()
+ cut_overlays()
for(var/obj/item/reagent_containers/food/snacks/O in ingredients)
@@ -62,12 +62,12 @@
I.color = O.filling_color
I.pixel_x = pick(list(-1,0,1))
I.pixel_y = (i*2)+1
- overlays += I
+ add_overlay(I)
var/image/T = new(src.icon, "sandwich_top")
T.pixel_x = pick(list(-1,0,1))
T.pixel_y = (ingredients.len * 2)+1
- overlays += T
+ add_overlay(T)
name = lowertext("[fullname] sandwich")
if(length(name) > 80) name = "[pick(list("absurd","colossal","enormous","ridiculous"))] sandwich"
diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm
index 161f21b1b5..352041986d 100644
--- a/code/modules/food/food/snacks.dm
+++ b/code/modules/food/food/snacks.dm
@@ -3332,7 +3332,7 @@
/obj/item/pizzabox/update_icon()
- overlays = list()
+ cut_overlays()
// Set appropriate description
if( open && pizza )
@@ -3360,7 +3360,7 @@
if( pizza )
var/image/pizzaimg = image("food.dmi", icon_state = pizza.icon_state)
pizzaimg.pixel_y = -3
- overlays += pizzaimg
+ add_overlay(pizzaimg)
return
else
@@ -3377,7 +3377,7 @@
if( doimgtag )
var/image/tagimg = image("food.dmi", icon_state = "pizzabox_tag")
tagimg.pixel_y = boxes.len * 3
- overlays += tagimg
+ add_overlay(tagimg)
icon_state = "pizzabox[boxes.len+1]"
@@ -4308,7 +4308,7 @@
J.alpha = 200
J.blend_mode = BLEND_OVERLAY
J.tag = "coating"
- overlays += J
+ add_overlay(J)
if (user)
user.visible_message(span("notice", "[user] dips \the [src] into \the [coating.name]"), span("notice", "You dip \the [src] into \the [coating.name]"))
@@ -4319,16 +4319,13 @@
//Called by cooking machines. This is mainly intended to set properties on the food that differ between raw/cooked
/obj/item/reagent_containers/food/snacks/proc/cook()
if (coating)
- var/list/temp = overlays.Copy()
- for (var/i in temp)
- if (istype(i, /image))
- var/image/I = i
- if (I.tag == "coating")
- temp.Remove(I)
- break
-
- overlays = temp
- //Carefully removing the old raw-batter overlay
+ var/image/coating_overlay
+ for (var/image/image in overlays)
+ if (image.tag == "coating")
+ coating_overlay = image
+ break
+ if (coating_overlay)
+ cut_overlay(coating_overlay)
if (!flat_icon)
flat_icon = getFlatIcon(src)
@@ -4339,7 +4336,7 @@
var/image/J = image(I)
J.alpha = 200
J.tag = "coating"
- overlays += J
+ add_overlay(J)
if (do_coating_prefix == 1)
diff --git a/code/modules/food/glass/bottle.dm b/code/modules/food/glass/bottle.dm
index bd70fabc79..d9914537e9 100644
--- a/code/modules/food/glass/bottle.dm
+++ b/code/modules/food/glass/bottle.dm
@@ -35,7 +35,7 @@
icon_state = "bottle-[rand(1,4)]"
/obj/item/reagent_containers/glass/bottle/update_icon()
- overlays.Cut()
+ cut_overlays()
if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4"))
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
@@ -51,11 +51,11 @@
if(91 to INFINITY) filling.icon_state = "[icon_state]-100"
filling.color = reagents.get_color()
- overlays += filling
+ add_overlay(filling)
if (!is_open_container())
var/image/lid = image(icon, src, "lid_bottle")
- overlays += lid
+ add_overlay(lid)
/obj/item/reagent_containers/glass/bottle/inaprovaline
name = "inaprovaline bottle"
@@ -174,4 +174,4 @@
desc = "A bottle of raw biomass! Gross!"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
- prefill = list("biomass" = 60)
\ No newline at end of file
+ prefill = list("biomass" = 60)
diff --git a/code/modules/food/kitchen/cooking_machines/cereal.dm b/code/modules/food/kitchen/cooking_machines/cereal.dm
index a66926cef8..cafb952288 100644
--- a/code/modules/food/kitchen/cooking_machines/cereal.dm
+++ b/code/modules/food/kitchen/cooking_machines/cereal.dm
@@ -14,33 +14,16 @@
"Cereal" = /obj/item/reagent_containers/food/snacks/variable/cereal
)
+
/obj/machinery/appliance/mixer/cereal/Initialize()
. = ..()
-
cerealmaker_loop = new(list(src), FALSE)
-
+
+
/obj/machinery/appliance/mixer/cereal/Destroy()
- . = ..()
-
QDEL_NULL(cerealmaker_loop)
+ return ..()
-/*
-/obj/machinery/appliance/mixer/cereal/change_product_strings(var/obj/item/reagent_containers/food/snacks/product, var/datum/cooking_item/CI)
- . = ..()
- product.name = "box of [CI.object.name] cereal"
-
-/obj/machinery/appliance/mixer/cereal/change_product_appearance(var/obj/item/reagent_containers/food/snacks/product)
- product.icon = 'icons/obj/food.dmi'
- product.icon_state = "cereal_box"
- product.filling_color = CI.object.color
-
- var/image/food_image = image(CI.object.icon, CI.object.icon_state)
- food_image.color = CI.object.color
- food_image.overlays += CI.object.overlays
- food_image.transform *= 0.7
-
- product.overlays += food_image
-*/
/obj/machinery/appliance/mixer/cereal/update_icon()
. = ..()
@@ -65,7 +48,7 @@
var/image/food_image = image(I.icon, I.icon_state)
food_image.color = I.color
- food_image.add_overlay(I.overlays)
+ food_image.copy_overlays(I)
food_image.transform *= 0.7 - (num * 0.05)
food_image.pixel_x = rand(-2,2)
food_image.pixel_y = rand(-3,5)
@@ -83,4 +66,4 @@
result.color = result.filling_color
for (var/i in images)
- result.overlays += images[i]
+ result.add_overlay(images[i])
diff --git a/code/modules/food/kitchen/gibber.dm b/code/modules/food/kitchen/gibber.dm
index 7ca2d9c042..8927b54619 100644
--- a/code/modules/food/kitchen/gibber.dm
+++ b/code/modules/food/kitchen/gibber.dm
@@ -58,20 +58,20 @@
/obj/machinery/gibber/Initialize()
. = ..()
- src.overlays += image('icons/obj/kitchen.dmi', "grjam")
+ add_overlay("grjam")
/obj/machinery/gibber/update_icon()
- overlays.Cut()
+ cut_overlays()
if (dirty)
- src.overlays += image('icons/obj/kitchen.dmi', "grbloody")
+ add_overlay("grbloody")
if(stat & (NOPOWER|BROKEN))
return
if (!occupant)
- src.overlays += image('icons/obj/kitchen.dmi', "grjam")
+ add_overlay("grjam")
else if (operating)
- src.overlays += image('icons/obj/kitchen.dmi', "gruse")
+ add_overlay("gruse")
else
- src.overlays += image('icons/obj/kitchen.dmi', "gridle")
+ add_overlay("gridle")
/obj/machinery/gibber/relaymove(mob/user as mob)
src.go_out()
diff --git a/code/modules/food/kitchen/icecream.dm b/code/modules/food/kitchen/icecream.dm
index f0121345c9..c09c821f02 100644
--- a/code/modules/food/kitchen/icecream.dm
+++ b/code/modules/food/kitchen/icecream.dm
@@ -184,7 +184,7 @@
/obj/item/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour_name)
name = "[flavour_name] icecream"
- src.overlays += "icecream_[flavour_name]"
+ add_overlay("icecream_[flavour_name]")
desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream."
ice_creamed = 1
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index 9f9b43e880..c0eae3692b 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -410,7 +410,7 @@
name = "a playing card"
desc = "A playing card."
- overlays.Cut()
+ cut_overlays()
if(cards.len == 1)
@@ -418,7 +418,7 @@
var/image/I = new(src.icon, (concealed ? "[P.back_icon]" : "[P.card_icon]") )
I.pixel_x += (-5+rand(10))
I.pixel_y += (-5+rand(10))
- overlays += I
+ add_overlay(I)
return
var/offset = FLOOR(20/cards.len, 1)
@@ -450,7 +450,7 @@
else
I.pixel_x = -7+(offset*i)
I.transform = M
- overlays += I
+ add_overlay(I)
i++
/obj/item/hand/dropped(mob/user as mob)
diff --git a/code/modules/holomap/holomap_datum.dm b/code/modules/holomap/holomap_datum.dm
index f0c9a9960e..4d4a026d24 100644
--- a/code/modules/holomap/holomap_datum.dm
+++ b/code/modules/holomap/holomap_datum.dm
@@ -20,15 +20,15 @@
legend.pixel_x = HOLOMAP_LEGEND_X(T.z)
legend.pixel_y = HOLOMAP_LEGEND_Y(T.z)
- station_map.overlays |= cursor
- station_map.overlays |= legend
+ station_map.add_overlay(cursor)
+ station_map.add_overlay(legend)
/datum/station_holomap/proc/initialize_holomap_bogus()
station_map = image('icons/480x480.dmi', "stationmap")
legend = image('icons/effects/64x64.dmi', "notfound")
legend.pixel_x = 7 * WORLD_ICON_SIZE
legend.pixel_y = 7 * WORLD_ICON_SIZE
- station_map.overlays |= legend
+ station_map.add_overlay(legend)
// TODO - Strategic Holomap support
// /datum/station_holomap/strategic/initialize_holomap(var/turf/T, var/isAI=null, var/mob/user=null)
@@ -37,4 +37,4 @@
// legend = image('icons/effects/64x64.dmi', "strategic")
// legend.pixel_x = 3*WORLD_ICON_SIZE
// legend.pixel_y = 3*WORLD_ICON_SIZE
-// station_map.overlays |= legend
+// station_map.add_overlay(legend)
diff --git a/code/modules/holomap/mapper.dm b/code/modules/holomap/mapper.dm
index b992e8ed6e..795a9cfaf4 100644
--- a/code/modules/holomap/mapper.dm
+++ b/code/modules/holomap/mapper.dm
@@ -265,7 +265,7 @@
markerImage.appearance_flags = RESET_COLOR|PIXEL_SCALE
markerImage.pixel_x = holomarker.x+holomarker.offset_x
markerImage.pixel_y = holomarker.y+holomarker.offset_y
- map_app.overlays += markerImage
+ map_app.add_overlay(markerImage)
var/obj/screen/mapper/map/tmp = new()
tmp.appearance = map_app
diff --git a/code/modules/holomap/station_holomap.dm b/code/modules/holomap/station_holomap.dm
index 7020de1095..2c1e3b5cce 100644
--- a/code/modules/holomap/station_holomap.dm
+++ b/code/modules/holomap/station_holomap.dm
@@ -169,7 +169,7 @@
if(!holomap_datum)
return //Not yet.
- overlays.Cut()
+ cut_overlays()
if(stat & BROKEN)
icon_state = "station_mapb"
else if((stat & NOPOWER) || !anchored)
@@ -180,8 +180,8 @@
if(bogus)
holomap_datum.initialize_holomap_bogus()
else
- small_station_map.icon = SSholomaps.extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"]
- overlays |= small_station_map
+ small_station_map = image(SSholomaps.extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"], dir = src.dir)
+ add_overlay(small_station_map)
holomap_datum.initialize_holomap(get_turf(src))
// Put the little "map" overlay down where it looks nice
@@ -189,12 +189,12 @@
floor_markings.dir = src.dir
floor_markings.pixel_x = -src.pixel_x
floor_markings.pixel_y = -src.pixel_y
- overlays += floor_markings
+ add_overlay(floor_markings)
if(panel_open)
- overlays += "station_map-panel"
+ add_overlay("station_map-panel")
else
- overlays -= "station_map-panel"
+ cut_overlay("station_map-panel")
/obj/machinery/station_map/attackby(obj/item/W as obj, mob/user as mob)
src.add_fingerprint(user)
diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm
index 25ce596b2e..fe749cf2cb 100644
--- a/code/modules/hydroponics/beekeeping/beehive.dm
+++ b/code/modules/hydroponics/beekeeping/beehive.dm
@@ -13,22 +13,22 @@
var/maxFrames = 5
/obj/machinery/beehive/update_icon()
- overlays.Cut()
+ cut_overlays()
icon_state = "beehive"
if(closed)
- overlays += "lid"
+ add_overlay("lid")
if(frames)
- overlays += "empty[frames]"
+ add_overlay("empty[frames]")
if(honeycombs >= 100)
- overlays += "full[round(honeycombs / 100)]"
+ add_overlay("full[round(honeycombs / 100)]")
if(!smoked)
switch(bee_count)
if(1 to 40)
- overlays += "bees1"
+ add_overlay("bees1")
if(41 to 80)
- overlays += "bees2"
+ add_overlay("bees2")
if(81 to 100)
- overlays += "bees3"
+ add_overlay("bees3")
/obj/machinery/beehive/examine(var/mob/user)
. = ..()
@@ -219,7 +219,7 @@
/obj/item/honey_frame/filled/Initialize()
. = ..()
- overlays += "honeycomb"
+ add_overlay("honeycomb")
/obj/item/beehive_assembly
name = "beehive assembly"
@@ -271,18 +271,18 @@ var/global/list/datum/stack_recipe/wax_recipes = list( \
/obj/item/bee_pack/Initialize()
. = ..()
- overlays += "beepack-full"
+ add_overlay("beepack-full")
/obj/item/bee_pack/proc/empty()
full = 0
name = "empty bee pack"
desc = "A stasis pack for moving bees. It's empty."
- overlays.Cut()
- overlays += "beepack-empty"
+ cut_overlays()
+ add_overlay("beepack-empty")
/obj/item/bee_pack/proc/fill()
full = initial(full)
name = initial(name)
desc = initial(desc)
- overlays.Cut()
- overlays += "beepack-full"
\ No newline at end of file
+ cut_overlays()
+ add_overlay("beepack-full")
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 4f7a09fd49..80bf8a4fd1 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -129,7 +129,7 @@
/obj/item/reagent_containers/food/snacks/grown/update_icon()
if(!seed || !plant_controller || !plant_controller.plant_icon_cache)
return
- overlays.Cut()
+ cut_overlays()
var/image/plant_icon
var/icon_key = "fruit-[seed.get_trait(TRAIT_PRODUCT_ICON)]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"
if(plant_controller.plant_icon_cache[icon_key])
@@ -138,13 +138,13 @@
plant_icon = image('icons/obj/hydroponics_products.dmi',"blank")
var/image/fruit_base = image('icons/obj/hydroponics_products.dmi',"[seed.get_trait(TRAIT_PRODUCT_ICON)]-product")
fruit_base.color = "[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"
- plant_icon.overlays |= fruit_base
+ plant_icon.add_overlay(fruit_base)
if("[seed.get_trait(TRAIT_PRODUCT_ICON)]-leaf" in cached_icon_states('icons/obj/hydroponics_products.dmi'))
var/image/fruit_leaves = image('icons/obj/hydroponics_products.dmi',"[seed.get_trait(TRAIT_PRODUCT_ICON)]-leaf")
fruit_leaves.color = "[seed.get_trait(TRAIT_PLANT_COLOUR)]"
- plant_icon.overlays |= fruit_leaves
+ add_overlay(fruit_leaves)
plant_controller.plant_icon_cache[icon_key] = plant_icon
- overlays |= plant_icon
+ add_overlay(plant_icon)
/obj/item/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M)
if(M.is_incorporeal())
@@ -383,9 +383,9 @@ var/list/fruit_icon_cache = list()
var/image/I = image(icon,"fruit_rind")
I.color = rind_colour
fruit_icon_cache["rind-[rind_colour]"] = I
- overlays |= fruit_icon_cache["rind-[rind_colour]"]
+ add_overlay(fruit_icon_cache["rind-[rind_colour]"])
if(!fruit_icon_cache["slice-[rind_colour]"])
var/image/I = image(icon,"fruit_slice")
I.color = flesh_colour
fruit_icon_cache["slice-[rind_colour]"] = I
- overlays |= fruit_icon_cache["slice-[rind_colour]"]
+ add_overlay(fruit_icon_cache["slice-[rind_colour]"])
\ No newline at end of file
diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm
index 98973f22fb..87b3bc6c4e 100644
--- a/code/modules/hydroponics/seed_packets.dm
+++ b/code/modules/hydroponics/seed_packets.dm
@@ -30,7 +30,7 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
if(!seed) return
// Update icon.
- overlays.Cut()
+ cut_overlays()
var/is_seeds = ((seed.seed_noun in list("seeds","pits","nodes")) ? 1 : 0)
var/image/seed_mask
var/seed_base_key = "base-[is_seeds ? seed.get_trait(TRAIT_PLANT_COLOUR) : "spores"]"
@@ -51,8 +51,8 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
seed_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR)
plant_seed_sprites[seed_overlay_key] = seed_overlay
- overlays |= seed_mask
- overlays |= seed_overlay
+ add_overlay(seed_mask)
+ add_overlay(seed_overlay)
if(is_seeds)
src.name = "packet of [seed.seed_name] [seed.seed_noun]"
diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm
index fbad9782e9..4abb57544a 100644
--- a/code/modules/hydroponics/seed_storage.dm
+++ b/code/modules/hydroponics/seed_storage.dm
@@ -516,9 +516,9 @@
panel_open = !panel_open
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
playsound(src, O.usesound, 50, 1)
- overlays.Cut()
+ cut_overlays()
if(panel_open)
- overlays += image(icon, "[initial(icon_state)]-panel")
+ add_overlay("[initial(icon_state)]-panel")
else if((O.is_wirecutter() || istype(O, /obj/item/multitool)) && panel_open)
wires.Interact(user)
diff --git a/code/modules/hydroponics/trays/tray_update_icons.dm b/code/modules/hydroponics/trays/tray_update_icons.dm
index 1a816abb3f..7930965979 100644
--- a/code/modules/hydroponics/trays/tray_update_icons.dm
+++ b/code/modules/hydroponics/trays/tray_update_icons.dm
@@ -17,15 +17,14 @@
if(!isnull(seed))
if(mechanical && health <= (seed.get_trait(TRAIT_ENDURANCE) / 2))
- overlays += "over_lowhealth3"
-
+ add_overlay("over_lowhealth3")
if(dead)
var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-dead"
var/image/dead_overlay = plant_controller.plant_icon_cache["[ikey]"]
if(!dead_overlay)
dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
dead_overlay.color = DEAD_PLANT_COLOUR
- overlays |= dead_overlay
+ add_overlay(dead_overlay)
else
if(!seed.growth_stages)
seed.update_growth_stages()
@@ -49,7 +48,7 @@
plant_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
plant_overlay.color = seed.get_trait(TRAIT_PLANT_COLOUR)
plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay
- overlays |= plant_overlay
+ add_overlay(plant_overlay)
if(harvest && overlay_stage == seed.growth_stages)
ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]"
@@ -58,25 +57,27 @@
harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]")
harvest_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR)
plant_controller.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay
- overlays |= harvest_overlay
+ add_overlay(harvest_overlay)
//Draw the cover.
if(closed_system)
- overlays += "hydrocover"
+ add_overlay("hydrocover")
//Updated the various alert icons.
if(mechanical)
+ var/list/add = list()
if(waterlevel <= 10)
- overlays += "over_lowwater3"
+ add += "over_lowwater3"
if(nutrilevel <= 2)
- overlays += "over_lownutri3"
+ add += "over_lownutri3"
if(weedlevel >= 5 || pestlevel >= 5 || toxins >= 40)
- overlays += "over_alert3"
+ add += "over_alert3"
if(harvest)
- overlays += "over_harvest3"
+ add += "over_harvest3"
if(frozen)
- overlays += "over_frozen3"
+ add += "over_frozen3"
+ add_overlay(add)
// Update bioluminescence.
if(seed)
diff --git a/code/modules/materials/sheets/organic/tanning/tanning_rack.dm b/code/modules/materials/sheets/organic/tanning/tanning_rack.dm
index 96d70d9096..885b65dd8f 100644
--- a/code/modules/materials/sheets/organic/tanning/tanning_rack.dm
+++ b/code/modules/materials/sheets/organic/tanning/tanning_rack.dm
@@ -27,14 +27,12 @@
. += "\The [drying] is [drying.get_dryness_text()]."
/obj/structure/tanning_rack/update_icon()
- overlays.Cut()
+ cut_overlays()
if(drying)
- var/image/I
if(drying.wetness)
- I = image(icon, "leather_wet")
+ add_overlay("leather_wet")
else
- I = image(icon, "leather_dry")
- add_overlay(I)
+ add_overlay("leather_dry")
/obj/structure/tanning_rack/attackby(var/atom/A, var/mob/user)
if(istype(A, /obj/item/stack/wetleather))
diff --git a/code/modules/mining/mine_outcrops.dm b/code/modules/mining/mine_outcrops.dm
index 2a9ac0435c..a1c2c675ff 100644
--- a/code/modules/mining/mine_outcrops.dm
+++ b/code/modules/mining/mine_outcrops.dm
@@ -14,7 +14,7 @@
/obj/structure/outcrop/Initialize()
. = ..()
if(prob(1))
- overlays += image(icon, "[initial(icon_state)]-egg")
+ add_overlay("[initial(icon_state)]-egg")
/obj/structure/outcrop/diamond
name = "shiny outcrop"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index ce35865a3e..66edd8bc30 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -904,7 +904,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(choice)
icon = 'icons/mob/ghost.dmi'
- overlays.Cut()
+ cut_overlays()
if(icon_state && icon)
previous_state = icon_state
@@ -934,9 +934,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/obj/item/paicard/PP = p
if(PP.pai == null)
count++
- PP.overlays += "pai-ghostalert"
+ PP.add_overlay("pai-ghostalert")
spawn(54)
- PP.overlays.Cut()
+ PP.cut_overlays()
to_chat(usr,"Flashing the displays of [count] unoccupied PAIs.")
else
to_chat(usr,"You have 'Be pAI' disabled in your character prefs, so we can't help you.")
diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm
index 18d843ab46..4103e777f2 100644
--- a/code/modules/mob/death.dm
+++ b/code/modules/mob/death.dm
@@ -93,7 +93,7 @@
drop_l_hand()
if(healths)
- healths.overlays = null // This is specific to humans but the relevant code is here; shouldn't mess with other mobs.
+ healths.cut_overlays()
healths.icon_state = "health6"
timeofdeath = world.time
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index 2c086026dd..de6b450cf2 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -87,14 +87,14 @@ var/list/holder_mob_icon_cache = list()
/obj/item/holder/proc/sync(var/mob/living/M)
dir = 2
- overlays.Cut()
+ overlays.Cut() // Not using SSoverlays for this due to performance
icon = M.icon
icon_state = M.icon_state
item_state = M.item_state
color = M.color
name = M.name
desc = M.desc
- overlays |= M.overlays
+ overlays |= M.overlays // Not using SSoverlays for this due to performance
var/mob/living/carbon/human/H = loc
if(istype(H))
if(H.l_hand == src)
diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm
index 849c920ad2..8cfc24c099 100644
--- a/code/modules/mob/living/bot/medbot.dm
+++ b/code/modules/mob/living/bot/medbot.dm
@@ -186,9 +186,9 @@
update_icons()
/mob/living/bot/medbot/update_icons()
- overlays.Cut()
+ cut_overlays()
if(skin)
- overlays += image('icons/obj/aibots.dmi', "medskin_[skin]")
+ add_overlay("medskin_[skin]")
if(busy)
icon_state = "medibots"
else
@@ -529,7 +529,7 @@
/obj/item/firstaid_arm_assembly/Initialize()
. = ..()
if(skin)
- overlays += image('icons/obj/aibots.dmi', "kit_skin_[src.skin]")
+ add_overlay("kit_skin_[src.skin]")
/obj/item/firstaid_arm_assembly/attackby(obj/item/W as obj, mob/user as mob)
..()
@@ -549,7 +549,7 @@
build_step++
to_chat(user, "You add the health sensor to [src].")
name = "First aid/robot arm/health analyzer assembly"
- overlays += image('icons/obj/aibots.dmi', "na_scanner")
+ add_overlay("na_scanner")
if(1)
if(isprox(W))
diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm
index 60fe98ec6e..bc4cd9e82f 100644
--- a/code/modules/mob/living/bot/mulebot.dm
+++ b/code/modules/mob/living/bot/mulebot.dm
@@ -303,7 +303,7 @@
C.pixel_y += 9
if(C.layer < layer)
C.layer = layer + 0.1
- overlays += C
+ add_overlay(C)
busy = 0
@@ -312,7 +312,7 @@
return
busy = 1
- overlays.Cut()
+ cut_overlays()
load.forceMove(loc)
load.pixel_y -= 9
diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm
index e71e19d0d6..70189568a1 100644
--- a/code/modules/mob/living/bot/secbot.dm
+++ b/code/modules/mob/living/bot/secbot.dm
@@ -353,7 +353,7 @@
var/obj/item/secbot_assembly/Sa = new /obj/item/secbot_assembly(Tsec)
Sa.build_step = 1
- Sa.overlays += image('icons/obj/aibots.dmi', "hs_hole")
+ Sa.add_overlay("hs_hole")
Sa.created_name = name
new /obj/item/assembly/prox_sensor(Tsec)
new used_weapon(Tsec)
@@ -425,14 +425,14 @@
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0, user))
build_step = 1
- overlays += image('icons/obj/aibots.dmi', "hs_hole")
+ add_overlay("hs_hole")
to_chat(user, "You weld a hole in \the [src].")
else if(isprox(W) && (build_step == 1))
user.drop_item()
build_step = 2
to_chat(user, "You add \the [W] to [src].")
- overlays += image('icons/obj/aibots.dmi', "hs_eye")
+ add_overlay("hs_eye")
name = "helmet/signaler/prox sensor assembly"
qdel(W)
@@ -441,7 +441,7 @@
build_step = 3
to_chat(user, "You add \the [W] to [src].")
name = "helmet/signaler/prox sensor/robot arm assembly"
- overlays += image('icons/obj/aibots.dmi', "hs_arm")
+ add_overlay(image('icons/obj/aibots.dmi', "hs_arm"))
qdel(W)
else if(istype(W, /obj/item/melee/baton) && build_step == 3)
diff --git a/code/modules/mob/living/carbon/alien/diona/update_icons.dm b/code/modules/mob/living/carbon/alien/diona/update_icons.dm
index 1d694cf624..9fc10ab4a8 100644
--- a/code/modules/mob/living/carbon/alien/diona/update_icons.dm
+++ b/code/modules/mob/living/carbon/alien/diona/update_icons.dm
@@ -7,6 +7,6 @@
else
icon_state = "[initial(icon_state)]"
- overlays.Cut()
+ cut_overlays()
if(hat)
- overlays |= get_hat_icon(hat, 0, -8)
\ No newline at end of file
+ add_overlay(get_hat_icon(hat, 0, -8))
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/update_icons.dm b/code/modules/mob/living/carbon/alien/update_icons.dm
index 7bb90a4d9e..a91445cc44 100644
--- a/code/modules/mob/living/carbon/alien/update_icons.dm
+++ b/code/modules/mob/living/carbon/alien/update_icons.dm
@@ -1,5 +1,5 @@
/mob/living/carbon/alien/regenerate_icons()
- overlays = list()
+ cut_overlays()
update_icons()
/mob/living/carbon/alien/update_icons()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index cd346c8cc7..44a6408804 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1314,7 +1314,7 @@
else if(no_damage)
health_images += image('icons/mob/screen1_health.dmi',"fullhealth")
- healths_ma.overlays += health_images
+ healths_ma.add_overlay(health_images)
healths.appearance = healths_ma
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index ed6ae55d9c..4589645ed6 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -195,7 +195,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
else
DI = damage_icon_parts[cache_index]
- standing_image.overlays += DI
+ standing_image.add_overlay(DI)
overlays_standing[MOB_DAM_LAYER] = standing_image
apply_layer(MOB_DAM_LAYER)
@@ -537,7 +537,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
for(var/mut in mutations)
if(mut == LASER)
- standing.overlays += "lasereyes_s" //TODO
+ standing.add_overlay("lasereyes_s")
overlays_standing[MUTATIONS_LAYER] = standing
apply_layer(MUTATIONS_LAYER)
@@ -1038,7 +1038,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
for(var/datum/modifier/M in modifiers)
if(M.mob_overlay_state)
var/image/I = image(icon = 'icons/mob/modifier_effects.dmi', icon_state = M.mob_overlay_state)
- effects.overlays += I //TODO, this compositing is annoying.
+ effects.add_overlay(I)
overlays_standing[MODIFIER_EFFECTS_LAYER] = effects
@@ -1084,7 +1084,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
for(var/obj/item/organ/external/E in organs)
if(E.open)
var/image/I = image(icon = 'icons/mob/surgery.dmi', icon_state = "[E.icon_name][round(E.open)]", layer = BODY_LAYER+SURGERY_LAYER)
- total.overlays += I //TODO: This compositing is annoying
+ total.add_overlay(I)
if(total.overlays.len)
overlays_standing[SURGERY_LAYER] = total
diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm
index c6fd56cb6e..6f83805372 100644
--- a/code/modules/mob/living/silicon/ai/multicam.dm
+++ b/code/modules/mob/living/silicon/ai/multicam.dm
@@ -70,7 +70,7 @@
M.Scale(x_scale, y_scale)
M.Translate(x_off, y_off)
dir.transform = M
- overlays += dir
+ add_overlay(dir)
/obj/screen/movable/pic_in_pic/ai/set_view_size(width, height, do_refresh = TRUE)
if(!aiEye) // Exploit fix
@@ -102,7 +102,7 @@
qdel(src)
return
highlighted = TRUE
- overlays.Cut()
+ cut_overlays()
add_background()
add_buttons()
@@ -113,7 +113,7 @@
qdel(src)
return
highlighted = FALSE
- overlays.Cut()
+ cut_overlays()
add_background()
add_buttons()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index b31e0ee944..df9919c665 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -142,13 +142,13 @@ var/list/mob_hat_cache = list()
/mob/living/silicon/robot/drone/updateicon()
- overlays.Cut()
+ cut_overlays()
if(stat == 0)
- overlays += "eyes-[icon_state]"
+ add_overlay("eyes-[icon_state]")
else
- overlays -= "eyes"
+ cut_overlay("eyes")
if(hat) // Let the drones wear hats.
- overlays |= get_hat_icon(hat, hat_x_offset, hat_y_offset)
+ add_overlay(get_hat_icon(hat, hat_x_offset, hat_y_offset))
/mob/living/silicon/robot/drone/choose_icon()
return
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 5b5660d35e..c0c05b9964 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -359,9 +359,9 @@
return canmove
/mob/living/silicon/robot/update_fire()
- overlays -= image("icon"='icons/mob/OnFire.dmi', "icon_state" = get_fire_icon_state())
+ cut_overlay(image(icon = 'icons/mob/OnFire.dmi', icon_state = get_fire_icon_state()))
if(on_fire)
- overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state" = get_fire_icon_state())
+ add_overlay(image(icon = 'icons/mob/OnFire.dmi', icon_state = get_fire_icon_state()))
/mob/living/silicon/robot/fire_act()
if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them
diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm
index c82a3f625f..d4055812b2 100644
--- a/code/modules/mob/living/silicon/robot/robot_items.dm
+++ b/code/modules/mob/living/silicon/robot/robot_items.dm
@@ -211,7 +211,7 @@
I.loc = src
carrying.Add(I)
- overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = 30 + I.layer)
+ add_overlay(image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = 30 + I.layer))
addedSomething = 1
if ( addedSomething )
user.visible_message("[user] loads some items onto their service tray.")
@@ -237,7 +237,7 @@
dropspot = target.loc
- overlays = null
+ cut_overlays()
var droppedSomething = 0
diff --git a/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
index 913589292d..3706f212c9 100644
--- a/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
+++ b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
@@ -12,9 +12,9 @@
/mob/living/silicon/robot/gravekeeper/init()
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
- mmi = new /obj/item/mmi/digital/robot(src) // Explicitly a drone.
+ mmi = new /obj/item/mmi/digital/robot(src)
module = new /obj/item/robot_module/robot/gravekeeper(src)
- overlays.Cut()
+ cut_overlays()
init_id()
updatename("Gravekeeper")
diff --git a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
index cc8a8b59e9..41a750332f 100644
--- a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
+++ b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
@@ -11,9 +11,9 @@
/mob/living/silicon/robot/lost/init()
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
- mmi = new /obj/item/mmi/digital/robot(src) // Explicitly a drone.
+ mmi = new /obj/item/mmi/digital/robot(src)
module = new /obj/item/robot_module/robot/lost(src)
- overlays.Cut()
+ cut_overlays()
init_id()
updatename("Lost")
@@ -134,4 +134,4 @@
- return
\ No newline at end of file
+ return
diff --git a/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm b/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm
index 1210d20b16..9c6652f815 100644
--- a/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm
+++ b/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm
@@ -11,8 +11,8 @@
/mob/living/silicon/robot/syndicate/init()
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
- mmi = new /obj/item/mmi/digital/robot(src) // Explicitly a drone.
- overlays.Cut()
+ mmi = new /obj/item/mmi/digital/robot(src)
+ cut_overlays()
init_id()
updatename("Syndicate")
@@ -43,4 +43,4 @@
updatename("Combat Medic")
/mob/living/silicon/robot/syndicate/speech_bubble_appearance()
- return "synthetic_evil"
\ No newline at end of file
+ return "synthetic_evil"
diff --git a/code/modules/mob/living/silicon/robot/syndicate.dm b/code/modules/mob/living/silicon/robot/syndicate.dm
index b0bfa4241d..b164b332ea 100644
--- a/code/modules/mob/living/silicon/robot/syndicate.dm
+++ b/code/modules/mob/living/silicon/robot/syndicate.dm
@@ -17,7 +17,7 @@
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
laws = new /datum/ai_laws/syndicate_override
- overlays.Cut()
+ cut_overlays()
init_id()
new /obj/item/robot_module/robot/syndicate(src)
diff --git a/code/modules/mob/living/simple_mob/simple_hud.dm b/code/modules/mob/living/simple_mob/simple_hud.dm
index d9641b4068..30d6e97f53 100644
--- a/code/modules/mob/living/simple_mob/simple_hud.dm
+++ b/code/modules/mob/living/simple_mob/simple_hud.dm
@@ -164,8 +164,8 @@
zone_sel.icon = ui_style
zone_sel.color = ui_color
zone_sel.alpha = ui_alpha
- zone_sel.overlays.Cut()
- zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[zone_sel.selecting]")
+ zone_sel.cut_overlays()
+ zone_sel.add_overlay(image('icons/mob/zone_sel.dmi', "[zone_sel.selecting]"))
hud_elements |= zone_sel
//Hand things
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
index 05a4f05c56..277d6ae386 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
@@ -182,7 +182,7 @@
update_icon()
/mob/living/simple_mob/animal/passive/fish/icebass/update_icon()
- overlays.Cut()
+ cut_overlays()
..()
if(!dorsal_image)
@@ -255,7 +255,7 @@
update_icon()
/mob/living/simple_mob/animal/passive/fish/rockfish/update_icon()
- overlays.Cut()
+ cut_overlays()
..()
if(!head_image)
head_image = image(icon, "[icon_state]_mask")
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
index eee87ab639..15c66bf6bd 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
@@ -41,7 +41,7 @@
..()
/mob/living/simple_mob/animal/passive/dog/regenerate_icons()
- overlays = list()
+ cut_overlays()
if(inventory_head)
var/head_icon_state = inventory_head.icon_state
@@ -50,7 +50,7 @@
var/icon/head_icon = image('icons/mob/corgi_head.dmi',head_icon_state)
if(head_icon)
- overlays += head_icon
+ add_overlay(head_icon)
if(inventory_back)
var/back_icon_state = inventory_back.icon_state
@@ -59,7 +59,7 @@
var/icon/back_icon = image('icons/mob/corgi_back.dmi',back_icon_state)
if(back_icon)
- overlays += back_icon
+ add_overlay(back_icon)
return
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm
index d2211c7247..085e095d47 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm
@@ -140,7 +140,7 @@
..()
/mob/living/simple_mob/animal/sif/sakimm/update_icon()
- overlays.Cut()
+ cut_overlays()
..()
if(hat)
var/hat_state = hat.item_state ? hat.item_state : hat.icon_state
diff --git a/code/modules/mob/living/voice/voice.dm b/code/modules/mob/living/voice/voice.dm
index 575c85b088..7d595423ab 100644
--- a/code/modules/mob/living/voice/voice.dm
+++ b/code/modules/mob/living/voice/voice.dm
@@ -22,7 +22,7 @@
if(ismob(speaker))
icon = speaker.icon
icon_state = speaker.icon_state
- overlays = speaker.overlays
+ copy_overlays(speaker, TRUE)
timeofdeath = speaker.timeofdeath
alpha = 127 //Maybe we'll have hologram calls later.
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 7796c86ea1..9fede3c505 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -259,7 +259,7 @@
mannequin.toggle_tail(setting = TRUE)
mannequin.toggle_wing(setting = TRUE)
mannequin.update_tail_showing()
- COMPILE_OVERLAYS(mannequin)
+ mannequin.ImmediateOverlayUpdate()
update_character_previews(new /mutable_appearance(mannequin))
diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm
index 90d36d0907..febb587480 100644
--- a/code/modules/modular_computers/computers/modular_computer/core.dm
+++ b/code/modules/modular_computers/computers/modular_computer/core.dm
@@ -71,23 +71,26 @@
/obj/item/modular_computer/update_icon()
icon_state = icon_state_unpowered
+ cut_overlays()
- overlays.Cut()
if(bsod)
- overlays += image(icon = overlay_icon, icon_state = "bsod")
+ add_overlay(image(overlay_icon, "bsod"))
return
if(!enabled)
if(icon_state_screensaver)
- overlays += image(icon = overlay_icon, icon_state = icon_state_screensaver)
+ add_overlay(image(overlay_icon, icon_state_screensaver))
set_light(0)
return
set_light(light_strength)
if(active_program)
- overlays += image(icon = overlay_icon, icon_state = active_program.program_icon_state ? active_program.program_icon_state : icon_state_menu)
- if(active_program.program_key_state)
- overlays += image(icon = overlay_icon, icon_state = active_program.program_key_state)
+ var/list/add = list(
+ image(overlay_icon, active_program.program_icon_state ? active_program.program_icon_state : icon_state_menu)
+ )
+ if (active_program.program_key_state)
+ add += image(overlay_icon, active_program.program_key_state)
+ add_overlay(add)
else
- overlays += image(icon = overlay_icon, icon_state = icon_state_menu)
+ add_overlay(image(overlay_icon, icon_state_menu))
/obj/item/modular_computer/proc/turn_on(var/mob/user)
if(bsod)
diff --git a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm
index 37f0a0377b..fcbcea4d1e 100644
--- a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm
+++ b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm
@@ -33,7 +33,7 @@
if(anchored)
..()
else
- overlays.Cut()
+ cut_overlays()
set_light(0) // No glow from closed laptops
icon_state = icon_state_closed
diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm
index e97ba76a0a..c833a6251c 100644
--- a/code/modules/multiz/turf.dm
+++ b/code/modules/multiz/turf.dm
@@ -128,7 +128,7 @@
temp2.icon_state = null
temp2.plane = src.plane
temp2.color = O.color
- temp2.overlays += O.overlays
+ temp2.copy_overlays(O)
// TODO Is pixelx/y needed?
o_img += temp2
add_overlay(o_img)
diff --git a/code/modules/multiz/zshadow.dm b/code/modules/multiz/zshadow.dm
index f3ae564b43..ad86c06425 100644
--- a/code/modules/multiz/zshadow.dm
+++ b/code/modules/multiz/zshadow.dm
@@ -55,7 +55,7 @@ INITIALIZE_IMMEDIATE(/mob/zshadow)
icon_state = M.icon_state
//color = M.color
color = "#848484"
- overlays = M.overlays
+ copy_overlays(M, TRUE)
transform = M.transform
dir = M.dir
invisibility = M.invisibility
@@ -118,10 +118,10 @@ INITIALIZE_IMMEDIATE(/mob/zshadow)
if(!typing_indicator)
init_typing_indicator("typing")
if(state && !typing)
- overlays += typing_indicator
+ add_overlay(typing_indicator)
typing = 1
else if(!state && typing)
- overlays -= typing_indicator
+ cut_overlay(typing_indicator)
typing = 0
if(shadow)
shadow.set_typing_indicator(state)
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 979b1ea53a..74eefd5055 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -355,7 +355,7 @@ var/const/CE_STABLE_THRESHOLD = 0.5
var/obj/effect/decal/cleanable/blood/drip/drop = B
if(istype(drop) && drips && drips.len && !large)
- drop.overlays |= drips
+ drop.add_overlay(drips)
drop.drips |= drips
// If there's no data to copy, call it quits here.
diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm
index df152dc2c5..a7ebb21264 100644
--- a/code/modules/organs/organ_icon.dm
+++ b/code/modules/organs/organ_icon.dm
@@ -9,7 +9,7 @@ var/global/list/limb_icon_cache = list()
for(var/obj/item/organ/external/organ in contents)
if(organ.children && organ.children.len)
for(var/obj/item/organ/external/child in organ.children)
- overlays += child.mob_icon
+ add_overlay(child.mob_icon)
add_overlay(organ.mob_icon)
/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human)
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 8feeab3a63..3de1c505ce 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -35,13 +35,13 @@
return
/obj/item/clipboard/update_icon()
- overlays.Cut()
+ cut_overlays()
if(toppaper)
- overlays += toppaper.icon_state
- overlays += toppaper.overlays
+ add_overlay(toppaper.icon_state)
+ copy_overlays(toppaper)
if(haspen)
- overlays += "clipboard_pen"
- overlays += "clipboard_over"
+ add_overlay("clipboard_pen")
+ add_overlay("clipboard_over")
return
/obj/item/clipboard/attackby(obj/item/W as obj, mob/user as mob)
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 321fd52fca..bb0ff85f0f 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -58,9 +58,9 @@
icon_state = "folder_hos"
/obj/item/folder/update_icon()
- overlays.Cut()
+ cut_overlays()
if(contents.len)
- overlays += "folder_paper"
+ add_overlay("folder_paper")
return
/obj/item/folder/attackby(obj/item/W as obj, mob/user as mob)
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 2622708233..36f313dfb8 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -313,7 +313,7 @@
stamps = null
free_space = MAX_PAPER_MESSAGE_LEN
stamped = list()
- overlays.Cut()
+ cut_overlays()
updateinfolinks()
update_icon()
@@ -616,7 +616,7 @@
if(!stamped)
stamped = new
stamped += P.type
- overlays += stampoverlay
+ add_overlay(stampoverlay)
playsound(src, 'sound/bureaucracy/stamp.ogg', 50, 1)
to_chat(user, "You stamp the paper with your rubber stamp.")
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index 65734280b3..c0ebfb5bb9 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -217,7 +217,7 @@
/obj/item/paper_bundle/update_icon()
var/obj/item/paper/P = pages[1]
icon_state = P.icon_state
- overlays = P.overlays
+ copy_overlays(P)
underlays = 0
var/i = 0
var/photo
@@ -235,12 +235,12 @@
var/obj/item/photo/Ph = O
img = Ph.tiny
photo = 1
- overlays += img
+ add_overlay(img)
if(i>1)
desc = "[i] papers clipped to each other."
else
desc = "A single sheet of paper."
if(photo)
desc += "\nThere is a photo attached to it."
- overlays += image('icons/obj/bureaucracy.dmi', "clip")
+ add_overlay(image('icons/obj/bureaucracy.dmi', "clip"))
return
\ No newline at end of file
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
index 9f460a83e3..1a6fb2efbd 100644
--- a/code/modules/paperwork/paperplane.dm
+++ b/code/modules/paperwork/paperplane.dm
@@ -31,7 +31,7 @@
return ..()
/obj/item/paperplane/update_icon()
- overlays.Cut()
+ cut_overlays()
var/list/stamped = internalPaper.stamped
if(!stamped)
stamped = new
@@ -39,7 +39,7 @@
for(var/S in stamped)
var/obj/item/stamp/ = S
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[initial(stamp.icon_state)]")
- overlays += stampoverlay
+ add_overlay(stampoverlay)
/obj/item/paperplane/attack_self(mob/user)
to_chat(user, "You unfold [src].")
diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm
index 361a65ef02..11f9a2e3ab 100644
--- a/code/modules/paperwork/papershredder.dm
+++ b/code/modules/paperwork/papershredder.dm
@@ -126,15 +126,15 @@
update_icon()
/obj/machinery/papershredder/update_icon()
- overlays.Cut()
+ cut_overlays()
if(operable())
icon_state = "shredder-on"
else
icon_state = "shredder-off"
// Fullness overlay
- overlays += "shredder-[max(0,min(5,FLOOR(paperamount/max_paper*5, 1)))]"
+ add_overlay("shredder-[max(0,min(5,FLOOR(paperamount/max_paper*5, 1)))]")
if (panel_open)
- overlays += "panel_open"
+ add_overlay("panel_open")
//
// Shredded Paper Item
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index f28ee2db0a..8a856111ba 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -221,7 +221,7 @@
img = image('icons/obj/bureaucracy.dmi', "paper_stamp-dots")
img.pixel_x = copy.offset_x[j]
img.pixel_y = copy.offset_y[j]
- c.overlays += img
+ c.add_overlay(img)
c.updateinfolinks()
if(need_toner)
toner--
diff --git a/code/modules/pda/app.dm b/code/modules/pda/app.dm
index a0ac96b99f..2ba9228640 100644
--- a/code/modules/pda/app.dm
+++ b/code/modules/pda/app.dm
@@ -41,14 +41,14 @@
pda.play_ringtone()
if(blink && !(src in pda.notifying_programs))
- pda.overlays += image('icons/obj/pda.dmi', "pda-r")
+ pda.add_overlay("pda-r")
pda.notifying_programs |= src
/datum/data/pda/proc/unnotify()
if(src in pda.notifying_programs)
pda.notifying_programs -= src
if(!pda.notifying_programs.len)
- pda.overlays -= image('icons/obj/pda.dmi', "pda-r")
+ pda.cut_overlay("pda-r")
// An app has a button on the home screen and its own UI
/datum/data/pda/app
diff --git a/code/modules/pda/pda.dm b/code/modules/pda/pda.dm
index e507e726e1..63846e3601 100644
--- a/code/modules/pda/pda.dm
+++ b/code/modules/pda/pda.dm
@@ -306,7 +306,7 @@ var/global/list/obj/item/pda/PDAs = list()
if(can_use(usr))
start_program(find_program(/datum/data/pda/app/main_menu))
notifying_programs.Cut()
- overlays -= image('icons/obj/pda.dmi', "pda-r")
+ cut_overlay("pda-r")
to_chat(usr, "You press the reset button on \the [src].")
else
to_chat(usr, "You cannot do this while restrained.")
diff --git a/code/modules/persistence/noticeboard.dm b/code/modules/persistence/noticeboard.dm
index 0b847a264c..2958dedae7 100644
--- a/code/modules/persistence/noticeboard.dm
+++ b/code/modules/persistence/noticeboard.dm
@@ -192,33 +192,33 @@
P.name = "Memo RE: proper analysis procedure"
P.info = "
We keep test dummies in pens here for a reason, so standard procedure should be to activate newfound alien artifacts and place the two in close proximity. Promising items I might even approve monkey testing on."
P.stamped = list(/obj/item/stamp/rd)
- P.overlays = list("paper_stamped_rd")
+ P.add_overlay("paper_stamped_rd")
src.contents += P
P = new()
P.name = "Memo RE: materials gathering"
P.info = "Corasang,
the hands-on approach to gathering our samples may very well be slow at times, but it's safer than allowing the blundering miners to roll willy-nilly over our dig sites in their mechs, destroying everything in the process. And don't forget the escavation tools on your way out there!
- R.W"
P.stamped = list(/obj/item/stamp/rd)
- P.overlays = list("paper_stamped_rd")
+ P.add_overlay("paper_stamped_rd")
src.contents += P
P = new()
P.name = "Memo RE: ethical quandaries"
P.info = "Darion-
I don't care what his rank is, our business is that of science and knowledge - questions of moral application do not come into this. Sure, so there are those who would employ the energy-wave particles my modified device has managed to abscond for their own personal gain, but I can hardly see the practical benefits of some of these artifacts our benefactors left behind. Ward--"
P.stamped = list(/obj/item/stamp/rd)
- P.overlays = list("paper_stamped_rd")
+ P.add_overlay("paper_stamped_rd")
src.contents += P
P = new()
P.name = "READ ME! Before you people destroy any more samples"
P.info = "how many times do i have to tell you people, these xeno-arch samples are del-i-cate, and should be handled so! careful application of a focussed, concentrated heat or some corrosive liquids should clear away the extraneous carbon matter, while application of an energy beam will most decidedly destroy it entirely - like someone did to the chemical dispenser! W, the one who signs your paychecks"
P.stamped = list(/obj/item/stamp/rd)
- P.overlays = list("paper_stamped_rd")
+ P.add_overlay("paper_stamped_rd")
src.contents += P
P = new()
P.name = "Reminder regarding the anomalous material suits"
P.info = "Do you people think the anomaly suits are cheap to come by? I'm about a hair trigger away from instituting a log book for the damn things. Only wear them if you're going out for a dig, and for god's sake don't go tramping around in them unless you're field testing something, R"
P.stamped = list(/obj/item/stamp/rd)
- P.overlays = list("paper_stamped_rd")
- src.contents += P
\ No newline at end of file
+ P.add_overlay("paper_stamped_rd")
+ src.contents += P
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index 05b13ae8a9..cbbf53c134 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -105,14 +105,14 @@
/obj/machinery/am_shielding/update_icon()
- overlays.Cut()
+ cut_overlays()
for(var/direction in alldirs)
var/machine = locate(/obj/machinery, get_step(loc, direction))
if((istype(machine, /obj/machinery/am_shielding) && machine:control_unit == control_unit)||(istype(machine, /obj/machinery/power/am_control_unit) && machine == control_unit))
- overlays += "shield_[direction]"
+ add_overlay("shield_[direction]")
if(core_check())
- overlays += "core"
+ add_overlay("core")
if(!processing) setup_core()
else if(processing) shutdown_core()
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 955b8b4119..b289724793 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -363,20 +363,23 @@ GLOBAL_LIST_EMPTY(apcs)
icon_state = "apcemag"
if(!(update_state & UPDATE_ALLGOOD))
- if(overlays.len)
- overlays = 0
- return
+ cut_overlays()
+ return
if(update & 2)
- if(overlays.len)
- overlays.len = 0
+ cut_overlays()
if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD)
- overlays += status_overlays_lock[locked+1]
- overlays += status_overlays_charging[charging+1]
- if(operating)
- overlays += status_overlays_equipment[equipment+1]
- overlays += status_overlays_lighting[lighting+1]
- overlays += status_overlays_environ[environ+1]
+ var/list/add = list(
+ status_overlays_lock[locked+1],
+ status_overlays_charging[charging+1]
+ )
+ if (operating)
+ add += list(
+ status_overlays_equipment[equipment+1],
+ status_overlays_lighting[lighting+1],
+ status_overlays_environ[environ+1]
+ )
+ add_overlay(add)
if(update & 3)
if(update_state & UPDATE_BLUESCREEN)
diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm
index 545bef47f4..97f97be915 100644
--- a/code/modules/power/batteryrack.dm
+++ b/code/modules/power/batteryrack.dm
@@ -61,22 +61,22 @@
return ..()
/obj/machinery/power/smes/batteryrack/update_icon()
- overlays.Cut()
+ cut_overlays()
icon_update = 0
var/cellcount = 0
var/charge_level = between(0, round(Percentage() / 12), 7)
- overlays += "charge[charge_level]"
+ add_overlay("charge[charge_level]")
for(var/obj/item/cell/C in internal_cells)
cellcount++
- overlays += "cell[cellcount]"
+ add_overlay("cell[cellcount]")
if(C.fully_charged())
- overlays += "cell[cellcount]f"
+ add_overlay("cell[cellcount]f")
else if(!C.charge)
- overlays += "cell[cellcount]e"
+ add_overlay("cell[cellcount]e")
// Recalculate maxcharge and similar variables.
/obj/machinery/power/smes/batteryrack/proc/update_maxcharge()
diff --git a/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm b/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm
index d69968f45c..d4283e68d4 100644
--- a/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm
+++ b/code/modules/power/fusion/fuel_assembly/fuel_assembly.dm
@@ -38,7 +38,7 @@
icon_state = "blank"
var/image/I = image(icon, "fuel_assembly")
I.color = fuel_colour
- overlays += list(I, image(icon, "fuel_assembly_bracket"))
+ add_overlay(list(I, image(icon, "fuel_assembly_bracket")))
rod_quantities[fuel_type] = initial_amount
/obj/item/fuel_assembly/process()
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 1db7d102cb..d42c330ea6 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -138,13 +138,13 @@ var/global/list/rad_collectors = list()
/obj/machinery/power/rad_collector/proc/update_icons()
- overlays.Cut()
+ cut_overlays()
if(P)
- overlays += image('icons/obj/singularity.dmi', "ptank")
+ add_overlay("ptank")
if(stat & (NOPOWER|BROKEN))
return
if(active)
- overlays += image('icons/obj/singularity.dmi', "on")
+ add_overlay("on")
/obj/machinery/power/rad_collector/proc/toggle_power()
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index b6aa780cea..36c75bb1fb 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -38,19 +38,19 @@ field_generator power level display
/obj/machinery/field_generator/update_icon()
- overlays.Cut()
+ cut_overlays()
if(!active)
if(warming_up)
- overlays += "+a[warming_up]"
+ add_overlay("+a[warming_up]")
if(fields.len)
- overlays += "+on"
+ add_overlay("+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)
- overlays += "+p[level]"
+ add_overlay("+p[level]")
return
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 30b98f9fb7..386dcb46bc 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -132,9 +132,9 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
dissipate_delay = 10
dissipate_track = 0
dissipate_strength = 1
- overlays = 0
+ cut_overlays()
if(chained)
- overlays = "chain_s1"
+ add_overlay("chain_s1")
visible_message("The singularity has shrunk to a rather pitiful size.")
if (STAGE_TWO) //1 to 3 does not check for the turfs if you put the gens right next to a 1x1 then its going to eat them.
name = "gravitational singularity"
@@ -149,9 +149,9 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
dissipate_delay = 10
dissipate_track = 0
dissipate_strength = 5
- overlays = 0
+ cut_overlays()
if(chained)
- overlays = "chain_s3"
+ add_overlay("chain_s3")
if(growing)
visible_message("The singularity noticeably grows in size.")
else
@@ -170,9 +170,9 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
dissipate_delay = 4
dissipate_track = 0
dissipate_strength = 20
- overlays = 0
+ cut_overlays()
if(chained)
- overlays = "chain_s5"
+ add_overlay("chain_s5")
if(growing)
visible_message("The singularity expands to a reasonable size.")
else
@@ -191,9 +191,9 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
dissipate_delay = 10
dissipate_track = 0
dissipate_strength = 8
- overlays = 0
+ cut_overlays()
if(chained)
- overlays = "chain_s7"
+ add_overlay("chain_s7")
if(growing)
visible_message("The singularity expands to a dangerous size.")
else
@@ -209,9 +209,9 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
grav_pull = 10
consume_range = 4
dissipate = 0 //It cant go smaller due to e loss.
- overlays = 0
+ cut_overlays()
if(chained)
- overlays = "chain_s9"
+ add_overlay("chain_s9")
if(growing)
visible_message("The singularity has grown out of control!")
else
@@ -229,7 +229,7 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
dissipate = 0 //It cant go smaller due to e loss
event_chance = 25 //Events will fire off more often.
if(chained)
- overlays = "chain_s9"
+ add_overlay("chain_s9")
visible_message("You witness the creation of a destructive force that cannot possibly be stopped by human hands.")
if (current_size == allowed_size)
@@ -456,23 +456,23 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
/obj/singularity/proc/on_capture()
chained = 1
- overlays = 0
+ cut_overlays()
move_self = 0
switch (current_size)
if(STAGE_ONE)
- overlays += image('icons/obj/singularity.dmi',"chain_s1")
+ add_overlay(image('icons/obj/singularity.dmi',"chain_s1"))
if(STAGE_TWO)
- overlays += image('icons/effects/96x96.dmi',"chain_s3")
+ add_overlay(image('icons/effects/96x96.dmi',"chain_s3"))
if(STAGE_THREE)
- overlays += image('icons/effects/160x160.dmi',"chain_s5")
+ add_overlay(image('icons/effects/160x160.dmi',"chain_s5"))
if(STAGE_FOUR)
- overlays += image('icons/effects/224x224.dmi',"chain_s7")
+ add_overlay(image('icons/effects/224x224.dmi',"chain_s7"))
if(STAGE_FIVE)
- overlays += image('icons/effects/288x288.dmi',"chain_s9")
+ add_overlay(image('icons/effects/288x288.dmi',"chain_s9"))
/obj/singularity/proc/on_release()
chained = 0
- overlays = 0
+ cut_overlays()
move_self = 1
/obj/singularity/singularity_act(S, size)
diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm
index 57c581632c..1c3cf676bd 100644
--- a/code/modules/power/smes_construction.dm
+++ b/code/modules/power/smes_construction.dm
@@ -289,8 +289,8 @@
// Description: Allows us to use special icon overlay for critical SMESs
/obj/machinery/power/smes/buildable/update_icon()
if (failing)
- overlays.Cut()
- overlays += image('icons/obj/power.dmi', "smes-crit")
+ cut_overlays()
+ add_overlay("smes-crit")
else
..()
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 3e9867f990..9e252a3ab1 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -88,11 +88,11 @@ GLOBAL_LIST_EMPTY(solars_list)
/obj/machinery/power/solar/update_icon()
..()
- overlays.Cut()
+ cut_overlays()
if(stat & BROKEN)
- overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER)
+ add_overlay("solar_panel-b")
else
- overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)
+ add_overlay("solar_panel")
src.set_dir(angle2dir(adir))
return
@@ -366,16 +366,16 @@ GLOBAL_LIST_EMPTY(solars_list)
/obj/machinery/power/solar_control/update_icon()
if(stat & BROKEN)
icon_state = "broken"
- overlays.Cut()
+ cut_overlays()
return
if(stat & NOPOWER)
icon_state = "c_unpowered"
- overlays.Cut()
+ cut_overlays()
return
icon_state = "solar"
- overlays.Cut()
+ cut_overlays()
if(cdir > -1)
- overlays += image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir))
+ add_overlay(image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir)))
return
/obj/machinery/power/solar_control/attack_hand(mob/user)
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index 1dd7bc93c3..c383f1b20d 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -150,7 +150,7 @@
return
if(!starter)
return
- overlays.Cut()
+ cut_overlays()
rpm = 0.9* rpm + 0.1 * rpmtarget
var/datum/gas_mixture/environment = inturf.return_air()
@@ -172,13 +172,13 @@
rpmtarget = 0
if(rpm>50000)
- overlays += image('icons/obj/pipes.dmi', "comp-o4", FLY_LAYER)
+ add_overlay(image('icons/obj/pipes.dmi', "comp-o4", FLY_LAYER))
else if(rpm>10000)
- overlays += image('icons/obj/pipes.dmi', "comp-o3", FLY_LAYER)
+ add_overlay(image('icons/obj/pipes.dmi', "comp-o3", FLY_LAYER))
else if(rpm>2000)
- overlays += image('icons/obj/pipes.dmi', "comp-o2", FLY_LAYER)
+ add_overlay(image('icons/obj/pipes.dmi', "comp-o2", FLY_LAYER))
else if(rpm>500)
- overlays += image('icons/obj/pipes.dmi', "comp-o1", FLY_LAYER)
+ add_overlay(image('icons/obj/pipes.dmi', "comp-o1", FLY_LAYER))
//TODO: DEFERRED
@@ -248,7 +248,7 @@
return
if(!compressor.starter)
return
- overlays.Cut()
+ cut_overlays()
// This is the power generation function. If anything is needed it's good to plot it in EXCEL before modifying
// the TURBGENQ and TURBGENG values
@@ -271,7 +271,7 @@
// If it works, put an overlay that it works!
if(lastgen > 100)
- overlays += image('icons/obj/pipes.dmi', "turb-o", FLY_LAYER)
+ add_overlay(image('icons/obj/pipes.dmi', "turb-o", FLY_LAYER))
updateDialog()
diff --git a/code/modules/projectiles/guns/magnetic/bore.dm b/code/modules/projectiles/guns/magnetic/bore.dm
index 9f046c560a..41ebae01d8 100644
--- a/code/modules/projectiles/guns/magnetic/bore.dm
+++ b/code/modules/projectiles/guns/magnetic/bore.dm
@@ -49,8 +49,8 @@
overlays_to_add += image(icon, "[icon_state]_green")
if(mat_storage)
overlays_to_add += image(icon, "[icon_state]_loaded")
-
- overlays = overlays_to_add
+ cut_overlays()
+ add_overlay(overlays_to_add)
..()
/obj/item/gun/magnetic/matfed/attack_hand(var/mob/user) // It doesn't keep a loaded item inside.
diff --git a/code/modules/reagents/machinery/dispenser/reagent_tank.dm b/code/modules/reagents/machinery/dispenser/reagent_tank.dm
index 64314594bf..098938a901 100644
--- a/code/modules/reagents/machinery/dispenser/reagent_tank.dm
+++ b/code/modules/reagents/machinery/dispenser/reagent_tank.dm
@@ -129,7 +129,7 @@
usr.visible_message("[usr] detaches [rig] from \the [src].", "You detach [rig] from \the [src]")
rig.loc = get_turf(usr)
rig = null
- overlays = new/list()
+ cut_overlays()
/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/W as obj, mob/user as mob)
src.add_fingerprint(user)
@@ -162,7 +162,7 @@
var/icon/test = getFlatIcon(W)
test.Shift(NORTH,1)
test.Shift(EAST,6)
- overlays += test
+ add_overlay(test)
return ..()
@@ -358,11 +358,9 @@
/obj/structure/reagent_dispensers/water_cooler/update_icon()
icon_state = "water_cooler"
- overlays.Cut()
- var/image/I
+ cut_overlays()
if(bottle)
- I = image(icon, "water_cooler_bottle")
- overlays += I
+ add_overlay("water_cooler_bottle")
return
/obj/structure/reagent_dispensers/beerkeg
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 36771a9a91..06261ec6db 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -179,7 +179,7 @@
update_icon()
/obj/item/reagent_containers/glass/beaker/update_icon()
- overlays.Cut()
+ cut_overlays()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
@@ -195,11 +195,10 @@
if(91 to INFINITY) filling.icon_state = "[icon_state]100"
filling.color = reagents.get_color()
- overlays += filling
+ add_overlay(filling)
if (!is_open_container())
- var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
- overlays += lid
+ add_overlay("lid_[initial(icon_state)]")
/obj/item/reagent_containers/glass/beaker/large
name = "large beaker"
@@ -306,10 +305,9 @@
return ..()
/obj/item/reagent_containers/glass/bucket/update_icon()
- overlays.Cut()
+ cut_overlays()
if (!is_open_container())
- var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
- overlays += lid
+ add_overlay("lid_[initial(icon_state)]")
/obj/item/reagent_containers/glass/bucket/wood
desc = "An old wooden bucket."
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index d41afc4078..21559013af 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -236,7 +236,7 @@
/obj/item/reagent_containers/spray/chemsprayer/hosed/update_icon()
..()
- overlays.Cut()
+ cut_overlays()
if(!hose_overlay)
hose_overlay = new icon(icon, "[icon_state]+hose")
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index e88d769495..82f254068f 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -231,7 +231,7 @@
return
/obj/item/reagent_containers/syringe/update_icon()
- overlays.Cut()
+ cut_overlays()
if(mode == SYRINGE_BROKEN)
icon_state = "broken"
@@ -245,7 +245,7 @@
injoverlay = "draw"
if (SYRINGE_INJECT)
injoverlay = "inject"
- overlays += injoverlay
+ add_overlay(injoverlay)
icon_state = "[rounded_vol]"
item_state = "syringe_[rounded_vol]"
@@ -255,7 +255,7 @@
filling.icon_state = "syringe[rounded_vol]"
filling.color = reagents.get_color()
- overlays += filling
+ add_overlay(filling)
/obj/item/reagent_containers/syringe/proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob)
if(istype(target, /mob/living/carbon/human))
diff --git a/code/modules/reagents/reagents/other.dm b/code/modules/reagents/reagents/other.dm
index 7ae039594e..a76bad9d2d 100644
--- a/code/modules/reagents/reagents/other.dm
+++ b/code/modules/reagents/reagents/other.dm
@@ -414,7 +414,7 @@
if(istype(T, /turf/simulated/wall))
var/turf/simulated/wall/W = T
W.thermite = 1
- W.overlays += image('icons/effects/effects.dmi',icon_state = "#673910")
+ W.add_overlay(image('icons/effects/effects.dmi',icon_state = "#673910")) //Yeeah that's definitely not an icon is it
remove_self(5)
return
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 5e469a7d79..a8766e440d 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -386,7 +386,7 @@
// update the icon & overlays to reflect mode & status
/obj/machinery/disposal/proc/update()
- overlays.Cut()
+ cut_overlays()
if(stat & BROKEN)
icon_state = "disposal-broken"
mode = 0
@@ -395,7 +395,7 @@
// flush handle
if(flush)
- overlays += image(src.icon, "[initial(icon_state)]-handle")
+ add_overlay("[initial(icon_state)]-handle")
// only handle is shown if no power
if(stat & NOPOWER || mode == -1)
@@ -403,13 +403,13 @@
// check for items in disposal - occupied light
if(contents.len > 0)
- overlays += image(src.icon, "[initial(icon_state)]-full")
+ add_overlay("[initial(icon_state)]-full")
// charging and ready light
if(mode == 1)
- overlays += image(src.icon, "[initial(icon_state)]-charge")
+ add_overlay("[initial(icon_state)]-charge")
else if(mode == 2)
- overlays += image(src.icon, "[initial(icon_state)]-ready")
+ add_overlay("[initial(icon_state)]-ready")
// timed process
// charge the gas reservoir and perform flush if ready
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 132c8bfa86..80918684a6 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -73,7 +73,7 @@
return
/obj/structure/bigDelivery/update_icon()
- overlays = new()
+ cut_overlays()
if(nameset || examtext)
var/image/I = new/image('icons/obj/storage.dmi',"delivery_label")
if(icon_state == "deliverycloset")
@@ -86,7 +86,7 @@
label_x = rand(-8, 6)
I.pixel_x = label_x
I.pixel_y = -3
- overlays += I
+ add_overlay(I)
if(src.sortTag)
var/image/I = new/image('icons/obj/storage.dmi',"delivery_tag")
if(icon_state == "deliverycloset")
@@ -99,7 +99,7 @@
tag_x = rand(-8, 6)
I.pixel_x = tag_x
I.pixel_y = -3
- overlays += I
+ add_overlay(I)
/obj/structure/bigDelivery/examine(mob/user)
. = ..()
@@ -185,12 +185,12 @@
return
/obj/item/smallDelivery/update_icon()
- overlays = new()
+ cut_overlays()
if((nameset || examtext) && icon_state != "deliverycrate1")
var/image/I = new/image('icons/obj/storage.dmi',"delivery_label")
if(icon_state == "deliverycrate5")
I.pixel_y = -1
- overlays += I
+ add_overlay(I)
if(src.sortTag)
var/image/I = new/image('icons/obj/storage.dmi',"delivery_tag")
switch(icon_state)
@@ -207,7 +207,7 @@
I.pixel_y = 3
if("deliverycrate5")
I.pixel_y = -3
- overlays += I
+ add_overlay(I)
/obj/item/smallDelivery/examine(mob/user)
. = ..()
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index e72f687406..78bdf7b27a 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -152,9 +152,9 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
if(materials[S.material.name] + amnt <= max_res_amount)
if(S && S.get_amount() >= 1)
var/count = 0
- overlays += "fab-load-metal"
+ add_overlay("fab-load-metal")
spawn(10)
- overlays -= "fab-load-metal"
+ cut_overlay("fab-load-metal")
while(materials[S.material.name] + amnt <= max_res_amount && S.get_amount() >= 1)
materials[S.material.name] += amnt
S.use(1)
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index b880b4972b..6b17cac379 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -87,12 +87,12 @@
/obj/machinery/r_n_d/protolathe/update_icon()
- overlays.Cut()
+ cut_overlays()
icon_state = initial(icon_state)
if(panel_open)
- overlays.Add(image(icon, "[icon_state]_panel"))
+ add_overlay(image(icon, "[icon_state]_panel"))
if(stat & NOPOWER)
return
@@ -156,9 +156,9 @@
var/stacktype = S.type
var/t = getMaterialName(stacktype)
- overlays += "protolathe_[t]"
+ add_overlay("protolathe_[t]")
spawn(10)
- overlays -= "protolathe_[t]"
+ cut_overlay("protolathe_[t]")
updateUsrDialog()
return
diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm
index f8279181a0..74013c3022 100644
--- a/code/modules/shieldgen/energy_field.dm
+++ b/code/modules/shieldgen/energy_field.dm
@@ -114,7 +114,7 @@
update_nearby_tiles()
/obj/effect/energy_field/update_icon(var/update_neightbors = 0)
- overlays.Cut()
+ cut_overlays()
var/list/adjacent_shields_dir = list()
for(var/direction in cardinal)
var/turf/T = get_step(src, direction)
@@ -134,7 +134,7 @@
// Edge overlays
for(var/found_dir in adjacent_shields_dir)
- overlays += image(src.icon, src, icon_state = "shield_edge", dir = found_dir)
+ add_overlay(image(src.icon, src, icon_state = "shield_edge", dir = found_dir))
// Small visual effect, makes the shield tiles brighten up by becoming more opaque for a moment, and spreads to nearby shields.
diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm
index 0f68cba2ea..f5bc40c97c 100644
--- a/code/modules/tables/tables.dm
+++ b/code/modules/tables/tables.dm
@@ -338,14 +338,14 @@
/obj/structure/table/update_icon()
if(flipped != 1)
icon_state = "blank"
- overlays.Cut()
+ cut_overlays()
var/image/I
// Base frame shape. Mostly done for glass/diamond tables, where this is visible.
for(var/i = 1 to 4)
I = image(icon, dir = 1<<(i-1), icon_state = connections[i])
- overlays += I
+ add_overlay(I)
// Standard table image
if(material)
@@ -353,7 +353,7 @@
I = image(icon, "[material.icon_base]_[connections[i]]", dir = 1<<(i-1))
if(material.icon_colour) I.color = material.icon_colour
I.alpha = 255 * material.opacity
- overlays += I
+ add_overlay(I)
// Reinforcements
if(reinforced)
@@ -361,14 +361,14 @@
I = image(icon, "[reinforced.icon_reinf]_[connections[i]]", dir = 1<<(i-1))
I.color = reinforced.icon_colour
I.alpha = 255 * reinforced.opacity
- overlays += I
+ add_overlay(I)
if(carpeted)
for(var/i = 1 to 4)
I = image(icon, "carpet_[connections[i]]", dir = 1<<(i-1))
- overlays += I
+ add_overlay(I)
else
- overlays.Cut()
+ cut_overlays()
var/type = 0
var/tabledirs = 0
for(var/direction in list(turn(dir,90), turn(dir,-90)) )
@@ -389,7 +389,7 @@
var/image/I = image(icon, "[material.icon_base]_flip[type]")
I.color = material.icon_colour
I.alpha = 255 * material.opacity
- overlays += I
+ add_overlay(I)
name = "[material.display_name] table"
else
name = "table frame"
@@ -398,10 +398,10 @@
var/image/I = image(icon, "[reinforced.icon_reinf]_flip[type]")
I.color = reinforced.icon_colour
I.alpha = 255 * reinforced.opacity
- overlays += I
+ add_overlay(I)
if(carpeted)
- overlays += "carpet_flip[type]"
+ add_overlay("carpet_flip[type]")
#define CORNER_NONE 0
diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm
index 1e06e78fde..e8ad3e5e6c 100644
--- a/code/modules/vehicles/bike.dm
+++ b/code/modules/vehicles/bike.dm
@@ -181,21 +181,21 @@
..()
/obj/vehicle/bike/update_icon()
- overlays.Cut()
+ cut_overlays()
if(custom_icon)
if(on)
var/image/bodypaint = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_on_a", src.layer)
bodypaint.color = paint_color
- overlays += bodypaint
+ add_overlay(bodypaint)
var/image/overmob = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_on_overlay", MOB_LAYER + 1)
var/image/overmob_color = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_on_overlay_a", MOB_LAYER + 1)
overmob.plane = MOB_PLANE
overmob_color.plane = MOB_PLANE
overmob_color.color = paint_color
- overlays += overmob
- overlays += overmob_color
+ add_overlay(overmob)
+ add_overlay(overmob_color)
if(open)
icon_state = "[bike_icon]_on-open"
else
@@ -203,15 +203,15 @@
else
var/image/bodypaint = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_off_a", src.layer)
bodypaint.color = paint_color
- overlays += bodypaint
+ add_overlay(bodypaint)
var/image/overmob = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_off_overlay", MOB_LAYER + 1)
var/image/overmob_color = image('icons/obj/custom_items_vehicle.dmi', "[bike_icon]_off_overlay_a", MOB_LAYER + 1)
overmob.plane = MOB_PLANE
overmob_color.plane = MOB_PLANE
overmob_color.color = paint_color
- overlays += overmob
- overlays += overmob_color
+ add_overlay(overmob)
+ add_overlay(overmob_color)
if(open)
icon_state = "[bike_icon]_off-open"
else
@@ -222,15 +222,15 @@
if(on)
var/image/bodypaint = image('icons/obj/bike.dmi', "[bike_icon]_on_a", src.layer)
bodypaint.color = paint_color
- overlays += bodypaint
+ add_overlay(bodypaint)
var/image/overmob = image('icons/obj/bike.dmi', "[bike_icon]_on_overlay", MOB_LAYER + 1)
var/image/overmob_color = image('icons/obj/bike.dmi', "[bike_icon]_on_overlay_a", MOB_LAYER + 1)
overmob.plane = MOB_PLANE
overmob_color.plane = MOB_PLANE
overmob_color.color = paint_color
- overlays += overmob
- overlays += overmob_color
+ add_overlay(overmob)
+ add_overlay(overmob_color)
if(open)
icon_state = "[bike_icon]_on-open"
else
@@ -238,15 +238,15 @@
else
var/image/bodypaint = image('icons/obj/bike.dmi', "[bike_icon]_off_a", src.layer)
bodypaint.color = paint_color
- overlays += bodypaint
+ add_overlay(bodypaint)
var/image/overmob = image('icons/obj/bike.dmi', "[bike_icon]_off_overlay", MOB_LAYER + 1)
var/image/overmob_color = image('icons/obj/bike.dmi', "[bike_icon]_off_overlay_a", MOB_LAYER + 1)
overmob.plane = MOB_PLANE
overmob_color.plane = MOB_PLANE
overmob_color.color = paint_color
- overlays += overmob
- overlays += overmob_color
+ add_overlay(overmob)
+ add_overlay(overmob_color)
if(open)
icon_state = "[bike_icon]_off-open"
else
diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm
index e153ceb858..4529467d16 100644
--- a/code/modules/vehicles/cargo_train.dm
+++ b/code/modules/vehicles/cargo_train.dm
@@ -47,7 +47,7 @@
cell = new /obj/item/cell/high(src)
key = new key_type(src)
var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs
- overlays += I
+ add_overlay(I)
turn_off() //so engine verbs are correctly set
/obj/vehicle/train/engine/Move(var/turf/destination)
@@ -320,7 +320,7 @@
C.pixel_y += load_offset_y
C.layer = layer
- overlays += C
+ add_overlay(C)
//we can set these back now since we have already cloned the icon into the overlay
C.pixel_x = initial(C.pixel_x)
@@ -333,7 +333,7 @@
load = dummy_load.actual_load
dummy_load.actual_load = null
qdel(dummy_load)
- overlays.Cut()
+ cut_overlays()
..()
//-------------------------------------------
diff --git a/code/modules/vehicles/quad.dm b/code/modules/vehicles/quad.dm
index 9dbd3211fd..94162f882c 100644
--- a/code/modules/vehicles/quad.dm
+++ b/code/modules/vehicles/quad.dm
@@ -85,11 +85,11 @@
/obj/vehicle/train/engine/quadbike/update_icon()
..()
- overlays.Cut()
+ cut_overlays()
if(custom_frame)
var/image/Bodypaint = new(icon = 'icons/obj/custom_items_vehicle.dmi', icon_state = "[frame_state]_a", layer = src.layer)
Bodypaint.color = paint_color
- overlays += Bodypaint
+ add_overlay(Bodypaint)
var/image/Overmob = new(icon = 'icons/obj/custom_items_vehicle.dmi', icon_state = "[frame_state]_overlay", layer = src.layer + 0.2) //over mobs
var/image/Overmob_color = new(icon = 'icons/obj/custom_items_vehicle.dmi', icon_state = "[frame_state]_overlay_a", layer = src.layer + 0.2) //over the over mobs, gives the color.
@@ -97,13 +97,13 @@
Overmob_color.plane = MOB_PLANE
Overmob_color.color = paint_color
- overlays += Overmob
- overlays += Overmob_color
+ add_overlay(Overmob)
+ add_overlay(Overmob_color)
return
var/image/Bodypaint = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[frame_state]_a", layer = src.layer)
Bodypaint.color = paint_color
- overlays += Bodypaint
+ add_overlay(Bodypaint)
var/image/Overmob = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[frame_state]_overlay", layer = src.layer + 0.2) //over mobs
var/image/Overmob_color = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[frame_state]_overlay_a", layer = src.layer + 0.2) //over the over mobs, gives the color.
@@ -111,8 +111,8 @@
Overmob_color.plane = MOB_PLANE
Overmob_color.color = paint_color
- overlays += Overmob
- overlays += Overmob_color
+ add_overlay(Overmob)
+ add_overlay(Overmob_color)
/obj/vehicle/train/engine/quadbike/Bump(atom/Obstacle)
if(!istype(Obstacle, /atom/movable))
@@ -244,11 +244,11 @@
/obj/vehicle/train/trolley/trailer/update_icon()
..()
- overlays.Cut()
+ cut_overlays()
var/image/Bodypaint = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[initial(icon_state)]_a", layer = src.layer)
Bodypaint.color = paint_color
- overlays += Bodypaint
+ add_overlay(Bodypaint)
/obj/vehicle/train/trolley/trailer/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/multitool) && open)
diff --git a/code/modules/virus2/biohazard destroyer.dm b/code/modules/virus2/biohazard destroyer.dm
index 9d86e2217f..3bd256cf7b 100644
--- a/code/modules/virus2/biohazard destroyer.dm
+++ b/code/modules/virus2/biohazard destroyer.dm
@@ -11,7 +11,7 @@
if(I.type in typesof(path))
user.drop_item()
qdel(I)
- overlays += image('icons/obj/pipes/disposal.dmi', "dispover-handle")
+ add_overlay(image('icons/obj/pipes/disposal.dmi', "dispover-handle"))
return
user.drop_item()
I.loc = src.loc
diff --git a/code/modules/xenoarcheaology/sampling.dm b/code/modules/xenoarcheaology/sampling.dm
index fb0034ec4d..87a6fba8c3 100644
--- a/code/modules/xenoarcheaology/sampling.dm
+++ b/code/modules/xenoarcheaology/sampling.dm
@@ -146,8 +146,8 @@
//update the sample bag
filled_bag.icon_state = "evidence"
var/image/I = image("icon"=R, "layer"=FLOAT_LAYER)
- filled_bag.overlays += I
- filled_bag.overlays += "evidence"
+ add_overlay(I)
+ add_overlay("evidence")
filled_bag.w_class = ITEMSIZE_TINY
to_chat(user, "You take a core sample of the [item_to_sample].")
diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm
index a4c997670c..3210a183b8 100644
--- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm
+++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm
@@ -76,7 +76,7 @@
P.info += "
"
P.info += "[bicon(scanned_object)] [results]"
P.stamped = list(/obj/item/stamp)
- P.overlays = list("paper_stamped")
+ P.add_overlay("paper_stamped")
if(scanned_object && istype(scanned_object, /obj/machinery/artifact))
var/obj/machinery/artifact/A = scanned_object
diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm
index df4ff61821..8170d4bd31 100644
--- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm
+++ b/code/modules/xenoarcheaology/tools/geosample_scanner.dm
@@ -269,7 +269,7 @@
var/obj/item/paper/P = new(src)
P.name = "[src] report #[++report_num]: [scanned_item.name]"
P.stamped = list(/obj/item/stamp)
- P.overlays = list("paper_stamped")
+ P.add_overlay("paper_stamped")
//work out data
var/data = " - Mundane object: [scanned_item.desc ? scanned_item.desc : "No information on record."]
"
@@ -361,4 +361,4 @@
scanned_item = null
add_fingerprint(usr)
- return 1 // update UIs attached to this object
\ No newline at end of file
+ return 1 // update UIs attached to this object
diff --git a/code/modules/xenoarcheaology/tools/suspension_generator.dm b/code/modules/xenoarcheaology/tools/suspension_generator.dm
index 0b71433cd8..cda00891d0 100644
--- a/code/modules/xenoarcheaology/tools/suspension_generator.dm
+++ b/code/modules/xenoarcheaology/tools/suspension_generator.dm
@@ -29,7 +29,7 @@
for(var/obj/item/I in T)
if(!suspension_field.contents.len)
suspension_field.icon_state = "energynet"
- suspension_field.overlays += "shield2"
+ suspension_field.add_overlay("shield2")
I.forceMove(suspension_field)
if(cell.charge <= 0)
@@ -194,7 +194,7 @@
if(collected)
suspension_field.icon_state = "energynet"
- suspension_field.overlays += "shield2"
+ add_overlay("shield2")
src.visible_message("[bicon(suspension_field)] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"].")
else
if(istype(T,/turf/simulated/mineral) || istype(T,/turf/simulated/wall))
diff --git a/code/modules/xenobio2/mob/slime/slime life.dm b/code/modules/xenobio2/mob/slime/slime life.dm
index 4853454476..b0b148f458 100644
--- a/code/modules/xenobio2/mob/slime/slime life.dm
+++ b/code/modules/xenobio2/mob/slime/slime life.dm
@@ -36,7 +36,7 @@ Slime specific life events go here.
I.icon_state = "aslime-sad"
else
I.icon_state = "aslime-angry"
- overlays += I
+ add_overlay(I)
emote_on = 1
spawn(30)
GenerateAdultIcon()
@@ -46,7 +46,7 @@ Slime specific life events go here.
if(is_child)
icon_state = "slime baby dead"
else
- overlays.Cut()
+ cut_overlays()
icon_state = "slime adult dead"
color = traitdat.traits[TRAIT_XENO_COLOR]
diff --git a/code/modules/xenobio2/mob/slime/slime procs.dm b/code/modules/xenobio2/mob/slime/slime procs.dm
index f2ee6013b7..7533b388c5 100644
--- a/code/modules/xenobio2/mob/slime/slime procs.dm
+++ b/code/modules/xenobio2/mob/slime/slime procs.dm
@@ -61,7 +61,7 @@ Slime specific procs go here.
GenerateAdult()
/mob/living/simple_animal/xeno/slime/proc/GenerateChild()
- overlays.Cut()
+ cut_overlays()
name = "[nameVar] baby slime"
real_name = "[nameVar] baby slime"
desc = "A shifting blob of [nameVar] goo."
@@ -75,7 +75,7 @@ Slime specific procs go here.
return 1
/mob/living/simple_animal/xeno/slime/proc/GenerateAdult()
- overlays.Cut()
+ cut_overlays()
name = "[nameVar] slime"
real_name = "[nameVar] slime"
desc = "A shifting mass of [nameVar] goo."
@@ -85,12 +85,12 @@ Slime specific procs go here.
GenerateAdultIcon()
/mob/living/simple_animal/xeno/slime/proc/GenerateAdultIcon() //Hack and slash adventure game to make slimes have no color on light effects later
- overlays.Cut()
+ cut_overlays()
var/image/Img = new(src.icon)
Img.icon_state = "slime adult"
Img.color = traitdat.traits[TRAIT_XENO_COLOR]
Img.layer = src.layer
- overlays += Img
+ add_overlay(Img)
switch(overlay)
if(SHINYOVERLAY)
@@ -99,7 +99,7 @@ Slime specific procs go here.
I.icon_state = "slime shiny"
I.layer = src.layer + 0.1
I.color = "#FFFFFF"
- overlays += I
+ add_overlay(I)
if(LIGHTOVERLAY)
var/image/I = new(src.icon)
I.icon = src.icon
@@ -107,7 +107,7 @@ Slime specific procs go here.
I.icon_state = "slime light"
I.layer = src.layer + 0.1
I.color = "#FFFFFF"
- overlays += I
+ add_overlay(I)
/mob/living/simple_animal/xeno/slime/handle_reagents()
if(!stasis)
diff --git a/polaris.dme b/polaris.dme
index a5124565e3..ea7ed602cf 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -68,7 +68,6 @@
#include "code\__defines\spaceman_dmm.dm"
#include "code\__defines\species_languages.dm"
#include "code\__defines\sqlite_defines.dm"
-#include "code\__defines\stat_tracking.dm"
#include "code\__defines\subsystems.dm"
#include "code\__defines\supply.dm"
#include "code\__defines\targeting.dm"
@@ -103,6 +102,7 @@
#include "code\_helpers\game.dm"
#include "code\_helpers\global_lists.dm"
#include "code\_helpers\icons.dm"
+#include "code\_helpers\image.dm"
#include "code\_helpers\logging.dm"
#include "code\_helpers\matrices.dm"
#include "code\_helpers\mobs.dm"