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("
  1. [lines.Join("
  2. ")]
", "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"