diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm
index fcd1f80a4f..3e35c12314 100644
--- a/code/game/objects/structures/ai_core.dm
+++ b/code/game/objects/structures/ai_core.dm
@@ -255,7 +255,7 @@
return
return ..()
-/obj/structure/AIcore/update_icon()
+/obj/structure/AIcore/update_icon_state()
switch(state)
if(EMPTY_CORE)
icon_state = "0"
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index 32e40bedec..a793459c5d 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -234,8 +234,7 @@
if(status == BURST)
obj_integrity = integrity_failure * max_integrity
-/obj/structure/alien/egg/update_icon()
- ..()
+/obj/structure/alien/egg/update_icon_state()
switch(status)
if(GROWING)
icon_state = "[base_icon]_growing"
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 8dc7caa5ad..0991351102 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -303,7 +303,7 @@ LINEN BINS
. += "There are [amount] sheets in the bin."
-/obj/structure/bedsheetbin/update_icon()
+/obj/structure/bedsheetbin/update_icon_state()
switch(amount)
if(0)
icon_state = "linenbin-empty"
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index c932dd96e8..e19feea582 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -58,30 +58,40 @@
return ..()
/obj/structure/closet/update_icon()
- cut_overlays()
- if(opened & icon_door_override)
- add_overlay("[icon_door]_open")
+ . = ..()
+ if(!opened)
layer = OBJ_LAYER
- return
- else if(opened)
- add_overlay("[icon_state]_open")
- return
- if(icon_door)
- add_overlay("[icon_door]_door")
else
layer = BELOW_OBJ_LAYER
- add_overlay("[icon_state]_door")
- if(welded)
- add_overlay("welded")
- if(!secure)
- return
- if(broken)
- add_overlay("off")
- add_overlay("sparking")
- else if(locked)
- add_overlay("locked")
+
+/obj/structure/closet/update_overlays()
+ . = ..()
+ closet_update_overlays(.)
+
+/obj/structure/closet/proc/closet_update_overlays(list/new_overlays)
+ . = new_overlays
+ if(!opened)
+ if(icon_door)
+ . += "[icon_door]_door"
+ else
+ . += "[icon_state]_door"
+ if(welded)
+ . += "welded"
+ if(!secure)
+ return
+ if(broken)
+ . += "off"
+ . += "sparking"
+ else if(locked)
+ . += "locked"
+ else
+ . += "unlocked"
else
- add_overlay("unlocked")
+ if(icon_door_override)
+ . += "[icon_door]_open"
+ else
+ . += "[icon_state]_open"
+
/obj/structure/closet/examine(mob/user)
. = ..()
diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
index 1c34850274..5ec3851128 100644
--- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm
+++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
@@ -38,10 +38,10 @@
tagged = 0
update_icon()
-/obj/structure/closet/body_bag/update_icon()
- ..()
+/obj/structure/closet/body_bag/update_overlays()
+ . = ..()
if (tagged)
- add_overlay("bodybag_label")
+ . += "bodybag_label"
/obj/structure/closet/body_bag/close()
if(..())
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 4f6d6729fc..b0dfec6318 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -33,12 +33,13 @@
return 1
return !density
-/obj/structure/closet/crate/update_icon()
+/obj/structure/closet/crate/update_icon_state()
icon_state = "[initial(icon_state)][opened ? "open" : ""]"
- cut_overlays()
+/obj/structure/closet/crate/closet_update_overlays(list/new_overlays)
+ . = new_overlays
if(manifest)
- add_overlay("manifest")
+ . += "manifest"
/obj/structure/closet/crate/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm
index bc3697a550..b57af43d3e 100644
--- a/code/game/objects/structures/crates_lockers/crates/bins.dm
+++ b/code/game/objects/structures/crates_lockers/crates/bins.dm
@@ -14,15 +14,15 @@
..()
update_icon()
-/obj/structure/closet/crate/bin/update_icon()
- ..()
+/obj/structure/closet/crate/bin/closet_update_overlays(list/new_overlays)
+ . = new_overlays
cut_overlays()
if(contents.len == 0)
- add_overlay("largebing")
+ . += "largebing"
else if(contents.len >= storage_capacity)
- add_overlay("largebinr")
+ . += "largebinr"
else
- add_overlay("largebino")
+ . += "largebino"
/obj/structure/closet/crate/bin/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/storage/bag/trash))
diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm
index 3c0021b513..3dbbfd5c23 100644
--- a/code/game/objects/structures/crates_lockers/crates/critter.dm
+++ b/code/game/objects/structures/crates_lockers/crates/critter.dm
@@ -22,14 +22,14 @@
return ..()
-/obj/structure/closet/crate/critter/update_icon()
- cut_overlays()
+/obj/structure/closet/crate/critter/closet_update_overlays(list/new_overlays)
+ . = new_overlays
if(opened)
- add_overlay("crittercrate_door_open")
+ . += "crittercrate_door_open"
else
- add_overlay("crittercrate_door")
+ . += "crittercrate_door"
if(manifest)
- add_overlay("manifest")
+ . += "manifest"
/obj/structure/closet/crate/critter/return_air()
if(tank)
diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm
index 602adfb367..4ac69253d3 100644
--- a/code/game/objects/structures/crates_lockers/crates/secure.dm
+++ b/code/game/objects/structures/crates_lockers/crates/secure.dm
@@ -13,14 +13,14 @@
return 0
. = ..()
-/obj/structure/closet/crate/secure/update_icon()
- ..()
+/obj/structure/closet/crate/secure/update_overlays()
+ . += ..()
if(broken)
- add_overlay("securecrateemag")
+ . += "securecrateemag"
else if(locked)
- add_overlay("securecrater")
+ . += "securecrater"
else
- add_overlay("securecrateg")
+ . += "securecrateg"
/obj/structure/closet/crate/secure/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1)
if(prob(tamperproof) && damage_amount >= DAMAGE_PRECISION)
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 8a5b678f22..c332a07edf 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -84,7 +84,7 @@
alarmed.burglaralert(src)
playsound(src, 'sound/effects/alert.ogg', 50, 1)
-/obj/structure/displaycase/update_icon()
+/obj/structure/displaycase/update_icon_state()
var/icon/I
if(open)
I = icon('icons/obj/stationobjs.dmi',"glassbox_open")
diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm
index 1da8a26b52..bca96e67d1 100644
--- a/code/game/objects/structures/divine.dm
+++ b/code/game/objects/structures/divine.dm
@@ -44,7 +44,7 @@
addtimer(CALLBACK(src, /atom/.proc/update_icon), time_between_uses)
-/obj/structure/healingfountain/update_icon()
+/obj/structure/healingfountain/update_icon_state()
if(last_process + time_between_uses > world.time)
icon_state = "fountain"
else
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index f35e9e7d55..79600d5bf2 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -260,13 +260,13 @@
update_name()
update_icon()
-/obj/structure/door_assembly/update_icon()
- cut_overlays()
+/obj/structure/door_assembly/update_overlays()
+ . = ..()
if(!glass)
- add_overlay(get_airlock_overlay("fill_construction", icon))
+ . += get_airlock_overlay("fill_construction", icon)
else if(glass)
- add_overlay(get_airlock_overlay("glass_construction", overlays_file))
- add_overlay(get_airlock_overlay("panel_c[state+1]", overlays_file))
+ . += get_airlock_overlay("glass_construction", overlays_file)
+ . += get_airlock_overlay("panel_c[state+1]", overlays_file)
/obj/structure/door_assembly/proc/update_name()
name = ""
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index 2124c83d7d..9b736517be 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -116,7 +116,7 @@
opened = !opened
update_icon()
-/obj/structure/extinguisher_cabinet/update_icon()
+/obj/structure/extinguisher_cabinet/update_icon_state()
if(!opened)
icon_state = "extinguisher_closed"
return
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 52441c2987..e44698f96e 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -64,7 +64,7 @@
update_icon()
air_update_turf(TRUE)
-/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
+/obj/structure/falsewall/update_icon_state()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
if(opening)
if(density)
icon_state = "fwall_opening"
diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm
index 8457a397a9..0f3a23dd0f 100644
--- a/code/game/objects/structures/fireaxe.dm
+++ b/code/game/objects/structures/fireaxe.dm
@@ -140,30 +140,30 @@
update_icon()
return
-/obj/structure/fireaxecabinet/update_icon()
- cut_overlays()
+/obj/structure/fireaxecabinet/update_overlays()
+ . = ..()
if(fireaxe)
- add_overlay("axe")
+ . += "axe"
if(!open)
var/hp_percent = obj_integrity/max_integrity * 100
if(broken)
- add_overlay("glass4")
+ . += "glass4"
else
switch(hp_percent)
if(-INFINITY to 40)
- add_overlay("glass3")
+ . += "glass3"
if(40 to 60)
- add_overlay("glass2")
+ . += "glass2"
if(60 to 80)
- add_overlay("glass1")
+ . += "glass1"
if(80 to INFINITY)
- add_overlay("glass")
+ . += "glass"
if(locked)
- add_overlay("locked")
+ . += "locked"
else
- add_overlay("unlocked")
+ . += "unlocked"
else
- add_overlay("glass_raised")
+ . += "glass_raised"
/obj/structure/fireaxecabinet/proc/toggle_lock(mob/user)
to_chat(user, " Resetting circuitry...")
diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm
index b670fe5cf0..ee8f285230 100644
--- a/code/game/objects/structures/fireplace.dm
+++ b/code/game/objects/structures/fireplace.dm
@@ -69,21 +69,22 @@
else
. = ..()
-/obj/structure/fireplace/update_icon()
- cut_overlays()
- if(lit)
- switch(burn_time_remaining())
- if(0 to 500)
- add_overlay("fireplace_fire0")
- if(500 to 1000)
- add_overlay("fireplace_fire1")
- if(1000 to 1500)
- add_overlay("fireplace_fire2")
- if(1500 to 2000)
- add_overlay("fireplace_fire3")
- if(2000 to MAXIMUM_BURN_TIMER)
- add_overlay("fireplace_fire4")
- add_overlay("fireplace_glow")
+/obj/structure/fireplace/update_overlays()
+ . = ..()
+ if(!lit)
+ return
+ switch(burn_time_remaining())
+ if(0 to 500)
+ . += "fireplace_fire0"
+ if(500 to 1000)
+ . += "fireplace_fire1"
+ if(1000 to 1500)
+ . += "fireplace_fire2"
+ if(1500 to 2000)
+ . += "fireplace_fire3"
+ if(2000 to MAXIMUM_BURN_TIMER)
+ . += "fireplace_fire4"
+ . += "fireplace_glow"
/obj/structure/fireplace/proc/adjust_light()
if(!lit)
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 0f43040c87..61983dcb4f 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -22,7 +22,7 @@
. = ..()
update_icon()
-/obj/structure/grille/update_icon()
+/obj/structure/grille/update_icon_state()
if(QDELETED(src) || broken)
return
diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm
index 701a4d071c..ede7e31e0d 100644
--- a/code/game/objects/structures/guncase.dm
+++ b/code/game/objects/structures/guncase.dm
@@ -22,17 +22,17 @@
break
update_icon()
-/obj/structure/guncase/update_icon()
- cut_overlays()
+/obj/structure/guncase/update_overlays()
+ . = ..()
if(case_type && LAZYLEN(contents))
var/mutable_appearance/gun_overlay = mutable_appearance(icon, case_type)
for(var/i in 1 to contents.len)
gun_overlay.pixel_x = 3 * (i - 1)
- add_overlay(gun_overlay)
+ . += gun_overlay
if(open)
- add_overlay("[icon_state]_open")
+ . += "[icon_state]_open"
else
- add_overlay("[icon_state]_door")
+ . += "[icon_state]_door"
/obj/structure/guncase/attackby(obj/item/I, mob/user, params)
if(iscyborg(user) || isalien(user))
diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm
index 81433b562d..581ce850de 100644
--- a/code/game/objects/structures/headpike.dm
+++ b/code/game/objects/structures/headpike.dm
@@ -28,14 +28,14 @@
. = ..()
pixel_x = rand(-8, 8)
-/obj/structure/headpike/update_icon()
- ..()
+/obj/structure/headpike/update_overlays()
+ . = ..()
var/obj/item/bodypart/head/H = locate() in contents
- var/mutable_appearance/MA = new()
if(H)
+ var/mutable_appearance/MA = new()
MA.copy_overlays(H)
MA.pixel_y = 12
- add_overlay(H)
+ . += H
/obj/structure/headpike/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index 58c8a739dc..b10ca8002c 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -161,20 +161,20 @@
updateUsrDialog()
-/obj/structure/janitorialcart/update_icon()
- cut_overlays()
+/obj/structure/janitorialcart/update_overlays()
+ . = ..()
if(mybag)
- add_overlay("cart_garbage")
+ . += "cart_garbage"
if(mymop)
- add_overlay("cart_mop")
+ . += "cart_mop"
if(mybroom)
- add_overlay("cart_broom")
+ . += "cart_broom"
if(myspray)
- add_overlay("cart_spray")
+ . += "cart_spray"
if(myreplacer)
- add_overlay("cart_replacer")
+ . += "cart_replacer"
if(signs)
- add_overlay("cart_sign[signs]")
+ . += "cart_sign[signs]"
if(reagents.total_volume > 0)
- add_overlay("cart_water")
+ . += "cart_water"
diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm
index b3f415bafe..53a1f609d1 100644
--- a/code/game/objects/structures/ladders.dm
+++ b/code/game/objects/structures/ladders.dm
@@ -55,7 +55,7 @@
down.update_icon()
up = down = null
-/obj/structure/ladder/update_icon()
+/obj/structure/ladder/update_icon_state()
if(up && down)
icon_state = "ladder11"
diff --git a/code/game/objects/structures/life_candle.dm b/code/game/objects/structures/life_candle.dm
index 0ae0e29459..a64dc6c6a9 100644
--- a/code/game/objects/structures/life_candle.dm
+++ b/code/game/objects/structures/life_candle.dm
@@ -46,7 +46,7 @@
STOP_PROCESSING(SSobj, src)
set_light(0)
-/obj/structure/life_candle/update_icon()
+/obj/structure/life_candle/update_icon_state()
if(linked_minds.len)
icon_state = icon_state_active
else
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index caad9e7bd4..f52fa0576a 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -118,7 +118,7 @@
update_icon()
isSwitchingStates = 0
-/obj/structure/mineral_door/update_icon()
+/obj/structure/mineral_door/update_icon_state()
if(state)
icon_state = "[initial_state]open"
else
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
index a9e12c1404..e1bb143fef 100644
--- a/code/game/objects/structures/mop_bucket.dm
+++ b/code/game/objects/structures/mop_bucket.dm
@@ -23,7 +23,7 @@
else
return ..()
-/obj/structure/mopbucket/update_icon()
- cut_overlays()
+/obj/structure/mopbucket/update_overlays()
+ . = ..()
if(reagents.total_volume > 0)
- add_overlay("mopbucket_water")
\ No newline at end of file
+ . += "mopbucket_water"
\ No newline at end of file
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index bf891ef223..8cf5b1ee66 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -45,9 +45,6 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
..()
update_icon()
-/obj/structure/bodycontainer/update_icon()
- return
-
/obj/structure/bodycontainer/relaymove(mob/user)
if(user.stat || !isturf(loc))
return
@@ -174,7 +171,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
to_chat(user, "You turn the speaker function [beeper ? "on" : "off"].")
return TRUE
-/obj/structure/bodycontainer/morgue/update_icon()
+/obj/structure/bodycontainer/morgue/update_icon_state()
if (!connected || connected.loc != src) // Open or tray is gone.
icon_state = "morgue0"
else
@@ -228,20 +225,17 @@ GLOBAL_LIST_EMPTY(crematoriums)
GLOB.crematoriums.Add(src)
..()
-/obj/structure/bodycontainer/crematorium/update_icon()
+/obj/structure/bodycontainer/crematorium/update_icon_state()
if(!connected || connected.loc != src)
icon_state = "crema0"
else
-
- if(src.contents.len > 1)
- src.icon_state = "crema2"
+ if(contents.len > 1)
+ icon_state = "crema2"
else
- src.icon_state = "crema1"
+ icon_state = "crema1"
if(locked)
- src.icon_state = "crema_active"
-
- return
+ icon_state = "crema_active"
/obj/structure/bodycontainer/crematorium/proc/cremate(mob/user)
if(locked)
diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm
index 92c4d0a066..2a7fc9aeb6 100644
--- a/code/game/objects/structures/safe.dm
+++ b/code/game/objects/structures/safe.dm
@@ -13,7 +13,7 @@ FLOOR SAFES
anchored = TRUE
density = TRUE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
- interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT
+ interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT
var/open = FALSE //is the safe open?
var/tumbler_1_pos //the tumbler position- from 0 to 72
var/tumbler_1_open //the tumbler position to open at- 0 to 72
@@ -73,7 +73,7 @@ FLOOR SAFES
num = 0
return num
-/obj/structure/safe/update_icon()
+/obj/structure/safe/update_icon_state()
if(open)
icon_state = "[initial(icon_state)]-open"
else
diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm
index f2c4e628e0..d1a2a6f9f6 100644
--- a/code/game/objects/structures/stairs.dm
+++ b/code/game/objects/structures/stairs.dm
@@ -54,7 +54,7 @@
return FALSE
return ..()
-/obj/structure/stairs/update_icon()
+/obj/structure/stairs/update_icon_state()
if(isTerminator())
icon_state = "stairs_t"
else
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index 5fabcafd75..6a8175b921 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -25,18 +25,18 @@
new /obj/item/tank/internals/plasma(src)
update_icon()
-/obj/structure/tank_dispenser/update_icon()
- cut_overlays()
+/obj/structure/tank_dispenser/update_overlays()
+ . = ..()
switch(oxygentanks)
if(1 to 3)
- add_overlay("oxygen-[oxygentanks]")
+ . += "oxygen-[oxygentanks]"
if(4 to TANK_DISPENSER_CAPACITY)
- add_overlay("oxygen-4")
+ . += "oxygen-4"
switch(plasmatanks)
if(1 to 4)
- add_overlay("plasma-[plasmatanks]")
+ . += "plasma-[plasmatanks]"
if(5 to TANK_DISPENSER_CAPACITY)
- add_overlay("plasma-5")
+ . += "plasma-5"
/obj/structure/tank_dispenser/attackby(obj/item/I, mob/user, params)
var/full
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index 392c802ed8..04f113a0c8 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -19,7 +19,7 @@
empty_pod()
return ..()
-/obj/structure/transit_tube_pod/update_icon()
+/obj/structure/transit_tube_pod/update_icon_state()
if(contents.len)
icon_state = "pod_occupied"
else
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 78df9b5d57..5f806e7fc4 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -72,7 +72,7 @@
update_icon()
-/obj/structure/toilet/update_icon()
+/obj/structure/toilet/update_icon_state()
icon_state = "toilet[open][cistern]"
@@ -216,8 +216,6 @@
density = FALSE
use_power = NO_POWER_USE
var/on = FALSE
- var/obj/effect/mist/mymist = null
- var/ismist = 0 //needs a var so we can make it linger~
var/watertemp = "normal" //freezing, normal, or boiling
var/datum/looping_sound/showering/soundloop
@@ -240,6 +238,7 @@
/obj/machinery/shower/interact(mob/M)
on = !on
update_icon()
+ handle_mist()
add_fingerprint(M)
if(on)
START_PROCESSING(SSmachines, src)
@@ -280,31 +279,30 @@
return TRUE
-/obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up
- cut_overlays() //once it's been on for a while, in addition to handling the water overlay.
- if(mymist)
- qdel(mymist)
-
+/obj/machinery/shower/update_overlays()
+ . = ..()
if(on)
- add_overlay(mutable_appearance('icons/obj/watercloset.dmi', "water", ABOVE_MOB_LAYER))
- if(watertemp == "freezing")
- return
- if(!ismist)
- spawn(50)
- if(src && on)
- ismist = 1
- mymist = new /obj/effect/mist(loc)
- else
- ismist = 1
- mymist = new /obj/effect/mist(loc)
- else if(ismist)
- ismist = 1
- mymist = new /obj/effect/mist(loc)
- spawn(250)
- if(!on && mymist)
- qdel(mymist)
- ismist = 0
+ . += mutable_appearance('icons/obj/watercloset.dmi', "water", ABOVE_MOB_LAYER)
+/obj/machinery/shower/proc/handle_mist()
+ // If there is no mist, and the shower was turned on (on a non-freezing temp): make mist in 5 seconds
+ // If there was already mist, and the shower was turned off (or made cold): remove the existing mist in 25 sec
+ var/obj/effect/mist/mist = locate() in loc
+ if(!mist && on && watertemp != "freezing")
+ addtimer(CALLBACK(src, .proc/make_mist), 5 SECONDS)
+
+ if(mist && (!on || watertemp == "freezing"))
+ addtimer(CALLBACK(src, .proc/clear_mist), 25 SECONDS)
+
+/obj/machinery/shower/proc/make_mist()
+ var/obj/effect/mist/mist = locate() in loc
+ if(!mist && on && watertemp != "freezing")
+ new /obj/effect/mist(loc)
+
+/obj/machinery/shower/proc/clear_mist()
+ var/obj/effect/mist/mist = locate() in loc
+ if(mist && (!on || watertemp == "freezing"))
+ qdel(mist)
/obj/machinery/shower/Crossed(atom/movable/AM)
..()
@@ -692,7 +690,7 @@
open = !open
update_icon()
-/obj/structure/curtain/update_icon()
+/obj/structure/curtain/update_icon_state()
if(!open)
icon_state = "closed"
layer = WALL_OBJ_LAYER
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index e824567b50..531367585e 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -47,7 +47,7 @@
setDir(ini_dir)
move_update_air(T)
-/obj/structure/windoor_assembly/update_icon()
+/obj/structure/windoor_assembly/update_icon_state()
icon_state = "[facing]_[secure ? "secure_" : ""]windoor_assembly[state]"
/obj/structure/windoor_assembly/CanPass(atom/movable/mover, turf/target)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index d4925c8604..5dd4e7d987 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -18,7 +18,6 @@
var/obj/item/stack/sheet/glass_type = /obj/item/stack/sheet/glass
var/cleanable_type = /obj/effect/decal/cleanable/glass
var/glass_amount = 1
- var/mutable_appearance/crack_overlay
can_be_unanchored = TRUE
resistance_flags = ACID_PROOF
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
@@ -337,22 +336,19 @@
queue_smooth_neighbors(src)
//merges adjacent full-tile windows into one
-/obj/structure/window/update_icon()
- if(!QDELETED(src))
- if(!fulltile)
- return
+/obj/structure/window/update_overlays()
+ . = ..()
+ if(QDELETED(src) || !fulltile)
+ return
+ var/ratio = obj_integrity / max_integrity
+ ratio = CEILING(ratio*4, 1) * 25
- var/ratio = obj_integrity / max_integrity
- ratio = CEILING(ratio*4, 1) * 25
+ if(smooth)
+ queue_smooth(src)
- if(smooth)
- queue_smooth(src)
-
- cut_overlay(crack_overlay)
- if(ratio > 75)
- return
- crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1))
- add_overlay(crack_overlay)
+ if(ratio > 75)
+ return
+ . += mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1))
/obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm
index 29d7224950..e79784290b 100644
--- a/code/modules/VR/vr_sleeper.dm
+++ b/code/modules/VR/vr_sleeper.dm
@@ -63,7 +63,7 @@
addtimer(CALLBACK(src, .proc/emagNotify), 150)
return TRUE
-/obj/machinery/vr_sleeper/update_icon()
+/obj/machinery/vr_sleeper/update_icon_state()
icon_state = "[initial(icon_state)][state_open ? "-open" : ""]"
/obj/machinery/vr_sleeper/open_machine()
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index c2a3f953f5..39cdf8a5fa 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -419,8 +419,9 @@
Congratulations! You are now trained for invasive xenobiology research!"}
-/obj/item/paper/guides/antag/abductor/update_icon()
- return
+/obj/item/paper/guides/antag/abductor/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
/obj/item/paper/guides/antag/abductor/AltClick()
return //otherwise it would fold into a paperplane.
@@ -442,6 +443,10 @@
w_class = WEIGHT_CLASS_NORMAL
actions_types = list(/datum/action/item_action/toggle_mode)
+/obj/item/abductor/baton/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
/obj/item/abductor/baton/proc/toggle(mob/living/user=usr)
mode = (mode+1)%BATON_MODES
var/txt
@@ -458,7 +463,7 @@
to_chat(usr, "You switch the baton to [txt] mode.")
update_icon()
-/obj/item/abductor/baton/update_icon()
+/obj/item/abductor/baton/update_icon_state()
switch(mode)
if(BATON_STUN)
icon_state = "wonderprodStun"
diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm
index b5233606cf..96bcd27a3b 100644
--- a/code/modules/antagonists/abductor/machinery/experiment.dm
+++ b/code/modules/antagonists/abductor/machinery/experiment.dm
@@ -223,7 +223,7 @@
return
-/obj/machinery/abductor/experiment/update_icon()
+/obj/machinery/abductor/experiment/update_icon_state()
if(state_open)
icon_state = "experiment-open"
else
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
index db286dd6fe..a8925dfb7b 100644
--- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
@@ -258,7 +258,7 @@
/obj/structure/bloodsucker/vassalrack/proc/torture_victim(mob/living/user, mob/living/target)
var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
// Check Bloodmob/living/M, force = FALSE, check_loc = TRUE
- var/convert_cost = 200 + 200 * bloodsuckerdatum.vassals
+ var/convert_cost = 200 + 200 * bloodsuckerdatum.vassals
if(user.blood_volume < convert_cost + 5)
to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target].")
return
@@ -449,7 +449,7 @@
/obj/structure/bloodsucker/candelabrum/Destroy()
STOP_PROCESSING(SSobj, src)
-/obj/structure/bloodsucker/candelabrum/update_icon()
+/obj/structure/bloodsucker/candelabrum/update_icon_state()
icon_state = "candelabrum[lit ? "_lit" : ""]"
/obj/structure/bloodsucker/candelabrum/examine(mob/user)
diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
index 1b4d26ac86..62382966f0 100644
--- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
@@ -251,6 +251,7 @@
return TRUE
/obj/effect/clockwork/sigil/transmission/update_icon()
+ . = ..()
var/power_charge = get_clockwork_power()
if(GLOB.ratvar_awakens)
alpha = 255
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index 10a0cd12cf..edeb74eeaf 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -372,7 +372,7 @@
max = 40
prefix = "darkened"
-/obj/item/sharpener/cult/update_icon()
+/obj/item/sharpener/cult/update_icon_state()
var/old_state = icon_state
icon_state = "cult_sharpener[used ? "_used" : ""]"
if(old_state != icon_state)
@@ -688,7 +688,7 @@
qdel(spear_act)
..()
-/obj/item/twohanded/cult_spear/update_icon()
+/obj/item/twohanded/cult_spear/update_icon_state()
icon_state = "bloodspear[wielded]"
/obj/item/twohanded/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
diff --git a/code/modules/antagonists/overthrow/overthrow_converter.dm b/code/modules/antagonists/overthrow/overthrow_converter.dm
index 99d1a52de8..eec6163107 100644
--- a/code/modules/antagonists/overthrow/overthrow_converter.dm
+++ b/code/modules/antagonists/overthrow/overthrow_converter.dm
@@ -49,7 +49,7 @@
else
to_chat(user, "[user] fails to implant [M].")
-/obj/item/overthrow_converter/update_icon()
+/obj/item/overthrow_converter/update_icon_state()
if(uses)
icon_state = "implanter1"
else
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index 8a01622c87..475438ba52 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -76,8 +76,9 @@
icon_state = "demon_heart-on"
decay_factor = 0
-/obj/item/organ/heart/demon/update_icon()
- return //always beating visually
+/obj/item/organ/heart/demon/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
/obj/item/organ/heart/demon/attack(mob/M, mob/living/carbon/user, obj/target)
if(M != user)
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index 28bb543828..3dfc0d859d 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -19,15 +19,17 @@
/obj/item/onetankbomb/examine(mob/user)
bombtank.examine(user)
-/obj/item/onetankbomb/update_icon()
- cut_overlays()
+/obj/item/onetankbomb/update_icon_state()
if(bombtank)
icon = bombtank.icon
icon_state = bombtank.icon_state
+
+/obj/item/onetankbomb/update_overlays()
+ . = ..()
if(bombassembly)
- add_overlay(bombassembly.icon_state)
- copy_overlays(bombassembly)
- add_overlay("bomb_assembly")
+ . += bombassembly.icon_state
+ . += bombassembly.overlays
+ . += "bomb_assembly"
/obj/item/onetankbomb/wrench_act(mob/living/user, obj/item/I)
to_chat(user, "You disassemble [src]!")
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 4d2b8de586..07ddd4c042 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -624,10 +624,7 @@
"set_internal_pressure" = 0
))
-/obj/machinery/airalarm/update_icon()
- set_light(0)
- cut_overlays()
- SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
+/obj/machinery/airalarm/update_icon_state()
if(stat & NOPOWER)
icon_state = "alarm0"
return
@@ -636,35 +633,39 @@
icon_state = "alarmx"
return
- if(panel_open)
- switch(buildstage)
- if(2)
- icon_state = "alarmx"
- if(1)
- icon_state = "alarm_b2"
- if(0)
- icon_state = "alarm_b1"
+ if(!panel_open)
+ icon_state = "alarm1"
return
- icon_state = "alarm1"
+ switch(buildstage)
+ if(2)
+ icon_state = "alarmx"
+ if(1)
+ icon_state = "alarm_b2"
+ if(0)
+ icon_state = "alarm_b1"
+
+/obj/machinery/airalarm/update_overlays()
+ . = ..()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
var/overlay_state = AALARM_OVERLAY_OFF
var/area/A = get_base_area(src)
switch(max(danger_level, A.atmosalm))
if(0)
- add_overlay(AALARM_OVERLAY_GREEN)
overlay_state = AALARM_OVERLAY_GREEN
light_color = LIGHT_COLOR_GREEN
- set_light(brightness_on)
if(1)
- add_overlay(AALARM_OVERLAY_WARN)
overlay_state = AALARM_OVERLAY_WARN
light_color = LIGHT_COLOR_LAVA
- set_light(brightness_on)
if(2)
- add_overlay(AALARM_OVERLAY_DANGER)
overlay_state = AALARM_OVERLAY_DANGER
light_color = LIGHT_COLOR_RED
- set_light(brightness_on)
+
+ if(overlay_state != AALARM_OVERLAY_OFF)
+ . += overlay_state
+ set_light(brightness_on)
+ else
+ set_light(0)
SSvis_overlays.add_vis_overlay(src, icon, overlay_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
update_light()
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 0d335da482..0b26cfc2f0 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -34,7 +34,6 @@
var/restricted = FALSE
req_access = list()
- var/update = 0
var/static/list/label2types = list(
"n2" = /obj/machinery/portable_atmospherics/canister/nitrogen,
"o2" = /obj/machinery/portable_atmospherics/canister/oxygen,
@@ -213,61 +212,26 @@
air_contents.gases[/datum/gas/oxygen] = (O2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
air_contents.gases[/datum/gas/nitrogen] = (N2STANDARD * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
-#define HOLDING (1<<0)
-#define CONNECTED (1<<1)
-#define EMPTY (1<<2)
-#define LOW (1<<3)
-#define MEDIUM (1<<4)
-#define FULL (1<<5)
-#define DANGER (1<<6)
-/obj/machinery/portable_atmospherics/canister/update_icon()
+/obj/machinery/portable_atmospherics/canister/update_icon_state()
if(stat & BROKEN)
- cut_overlays()
icon_state = "[icon_state]-1"
- return
- var/last_update = update
- update = 0
+/obj/machinery/portable_atmospherics/canister/update_overlays()
+ . = ..()
if(holding)
- update |= HOLDING
+ . += "can-open"
if(connected_port)
- update |= CONNECTED
+ . += "can-connector"
var/pressure = air_contents.return_pressure()
- if(pressure < 10)
- update |= EMPTY
- else if(pressure < 5 * ONE_ATMOSPHERE)
- update |= LOW
- else if(pressure < 10 * ONE_ATMOSPHERE)
- update |= MEDIUM
- else if(pressure < 40 * ONE_ATMOSPHERE)
- update |= FULL
- else
- update |= DANGER
-
- if(update == last_update)
- return
-
- cut_overlays()
- if(update & HOLDING)
- add_overlay("can-open")
- if(update & CONNECTED)
- add_overlay("can-connector")
- if(update & LOW)
- add_overlay("can-o0")
- else if(update & MEDIUM)
- add_overlay("can-o1")
- else if(update & FULL)
- add_overlay("can-o2")
- else if(update & DANGER)
- add_overlay("can-o3")
-#undef HOLDING
-#undef CONNECTED
-#undef EMPTY
-#undef LOW
-#undef MEDIUM
-#undef FULL
-#undef DANGER
+ if(pressure >= 40 * ONE_ATMOSPHERE)
+ . += "can-o3"
+ else if(pressure >= 10 * ONE_ATMOSPHERE)
+ . += "can-o2"
+ else if(pressure >= 5 * ONE_ATMOSPHERE)
+ . += "can-o1"
+ else if(pressure >= 10)
+ . += "can-o0"
/obj/machinery/portable_atmospherics/canister/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > temperature_resistance)
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index ddb907a2ad..3603e46490 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -29,14 +29,16 @@
QDEL_NULL(pump)
return ..()
-/obj/machinery/portable_atmospherics/pump/update_icon()
+/obj/machinery/portable_atmospherics/pump/update_icon_state()
icon_state = "psiphon:[on]"
- cut_overlays()
+
+/obj/machinery/portable_atmospherics/pump/update_overlays()
+ . = ..()
if(holding)
- add_overlay("siphon-open")
+ . += "siphon-open"
if(connected_port)
- add_overlay("siphon-connector")
+ . += "siphon-connector"
/obj/machinery/portable_atmospherics/pump/process_atmos()
..()
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index 0c902e0426..3dfce7c1bf 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -5,6 +5,7 @@
var/on = FALSE
var/volume_rate = 1000
+ var/use_overlays = TRUE
volume = 1000
var/list/scrubbing = list(/datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz, /datum/gas/nitryl, /datum/gas/tritium, /datum/gas/hypernoblium, /datum/gas/water_vapor)
@@ -15,14 +16,17 @@
air_update_turf()
return ..()
-/obj/machinery/portable_atmospherics/scrubber/update_icon()
+/obj/machinery/portable_atmospherics/scrubber/update_icon_state()
icon_state = "pscrubber:[on]"
- cut_overlays()
+/obj/machinery/portable_atmospherics/scrubber/update_overlays()
+ . = ..()
+ if(!use_overlays)
+ return
if(holding)
- add_overlay("scrubber-open")
+ . += "scrubber-open"
if(connected_port)
- add_overlay("scrubber-connector")
+ . += "scrubber-connector"
/obj/machinery/portable_atmospherics/scrubber/process_atmos()
..()
@@ -117,11 +121,12 @@
volume = 50000
var/movable = FALSE
+ use_overlays = FALSE
/obj/machinery/portable_atmospherics/scrubber/huge/movable
movable = TRUE
-/obj/machinery/portable_atmospherics/scrubber/huge/update_icon()
+/obj/machinery/portable_atmospherics/scrubber/huge/update_icon_state()
icon_state = "scrubber:[on]"
/obj/machinery/portable_atmospherics/scrubber/huge/process_atmos()
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index e693abc8e4..4f155d4174 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -53,11 +53,8 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
ready = TRUE
return ready
-/obj/machinery/gateway/update_icon()
- if(active)
- icon_state = "on"
- return
- icon_state = "off"
+/obj/machinery/gateway/update_icon_state()
+ icon_state = active ? "on" : "off"
/obj/machinery/gateway/attack_hand(mob/user)
. = ..()
@@ -100,11 +97,8 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
var/obj/machinery/gateway/centeraway/awaygate = null
can_link = TRUE
-/obj/machinery/gateway/centerstation/update_icon()
- if(active)
- icon_state = "oncenter"
- return
- icon_state = "offcenter"
+/obj/machinery/gateway/centerstation/update_icon_state()
+ icon_state = active ? "oncenter" : "offcenter"
/obj/machinery/gateway/centerstation/process()
if((stat & (NOPOWER)) && use_power)
@@ -185,11 +179,8 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation)
stationgate = locate(/obj/machinery/gateway/centerstation)
-/obj/machinery/gateway/centeraway/update_icon()
- if(active)
- icon_state = "oncenter"
- return
- icon_state = "offcenter"
+/obj/machinery/gateway/centeraway/update_icon_state()
+ icon_state = active ? "oncenter" : "offcenter"
/obj/machinery/gateway/centeraway/toggleon(mob/user)
if(!detect())
diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm
index f24cb065dd..a1453f6aa1 100644
--- a/code/modules/awaymissions/mission_code/Academy.dm
+++ b/code/modules/awaymissions/mission_code/Academy.dm
@@ -337,8 +337,9 @@
icon_state = "1"
color = rgb(0,0,255)
-/obj/structure/ladder/unbreakable/rune/update_icon()
- return
+/obj/structure/ladder/unbreakable/rune/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
/obj/structure/ladder/unbreakable/rune/show_fluff_message(up,mob/user)
user.visible_message("[user] activates \the [src].","You activate \the [src].")
diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm
index 7cbbde096d..74bcb4b302 100644
--- a/code/modules/awaymissions/pamphlet.dm
+++ b/code/modules/awaymissions/pamphlet.dm
@@ -35,5 +35,6 @@
environs."
//we don't want the silly text overlay!
-/obj/item/paper/pamphlet/update_icon()
- return
+/obj/item/paper/pamphlet/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
diff --git a/code/modules/buildmode/buttons.dm b/code/modules/buildmode/buttons.dm
index e72dbde064..c219f18cec 100644
--- a/code/modules/buildmode/buttons.dm
+++ b/code/modules/buildmode/buttons.dm
@@ -27,7 +27,7 @@
update_icon()
return 1
-/obj/screen/buildmode/mode/update_icon()
+/obj/screen/buildmode/mode/update_icon_state()
icon_state = bd.mode.get_button_iconstate()
/obj/screen/buildmode/help
@@ -44,9 +44,8 @@
screen_loc = "NORTH,WEST+2"
name = "Change Dir"
-/obj/screen/buildmode/bdir/update_icon()
+/obj/screen/buildmode/bdir/update_icon_state()
dir = bd.build_dir
- return
/obj/screen/buildmode/bdir/Click()
bd.toggle_dirswitch()
diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm
index e82a2141eb..aaa1afb004 100644
--- a/code/modules/cargo/supplypod.dm
+++ b/code/modules/cargo/supplypod.dm
@@ -78,15 +78,14 @@
. = ..()
setStyle(style, TRUE) //Upon initialization, give the supplypod an iconstate, name, and description based on the "style" variable. This system is important for the centcom_podlauncher to function correctly
-/obj/structure/closet/supplypod/update_icon()
- cut_overlays()
+/obj/structure/closet/supplypod/closet_update_overlays(list/new_overlays)
+ . = new_overlays
if (style == STYLE_SEETHROUGH || style == STYLE_INVISIBLE) //If we're invisible, we dont bother adding any overlays
return
+ if (opened)
+ . += "[icon_state]_open"
else
- if (opened)
- add_overlay("[icon_state]_open")
- else
- add_overlay("[icon_state]_door")
+ . += "[icon_state]_door"
/obj/structure/closet/supplypod/proc/setStyle(chosenStyle, var/duringInit = FALSE) //Used to give the sprite an icon state, name, and description
if (!duringInit && style == chosenStyle) //Check if the input style is already the same as the pod's style. This happens in centcom_podlauncher, and as such we set the style to STYLE_CENTCOM.
diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm
index 668698d2e9..b749d4def6 100644
--- a/code/modules/cargo/supplypod_beacon.dm
+++ b/code/modules/cargo/supplypod_beacon.dm
@@ -31,14 +31,14 @@
ready = FALSE
update_icon()
-/obj/item/supplypod_beacon/update_icon()
- cut_overlays()
+/obj/item/supplypod_beacon/update_overlays()
+ . = ..()
if (launched)
- add_overlay("sp_green")
+ . += "sp_green"
else if (ready)
- add_overlay("sp_yellow")
+ . += "sp_yellow"
else if (linked)
- add_overlay("sp_orange")
+ . += "sp_orange"
/obj/item/supplypod_beacon/proc/endLaunch()
launched = FALSE
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index ef2ee331a9..7e2d73190a 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -441,17 +441,14 @@ BLIND // can't see anything
return TRUE
-/obj/item/clothing/update_icon() // Polychrome stuff
- ..()
+/obj/item/clothing/update_overlays() // Polychrome stuff
+ . = ..()
if(hasprimary) //Checks if the overlay is enabled
- var/mutable_appearance/primary_overlay = mutable_appearance(icon, "[item_color]-primary") //Automagically picks overlays
- primary_overlay.color = primary_color //Colors the greyscaled overlay
- add_overlay(primary_overlay) //Applies the coloured overlay onto the item sprite. but NOT the mob sprite.
+ var/mutable_appearance/primary_overlay = mutable_appearance(icon, "[item_color]-primary", color = primary_color) //Automagically picks overlays
+ . += primary_overlay //Applies the coloured overlay onto the item sprite. but NOT the mob sprite.
if(hassecondary)
- var/mutable_appearance/secondary_overlay = mutable_appearance(icon, "[item_color]-secondary")
- secondary_overlay.color = secondary_color
- add_overlay(secondary_overlay)
+ var/mutable_appearance/secondary_overlay = mutable_appearance(icon, "[item_color]-secondary", color = secondary_color)
+ . += secondary_overlay
if(hastertiary)
- var/mutable_appearance/tertiary_overlay = mutable_appearance(icon, "[item_color]-tertiary")
- tertiary_overlay.color = tertiary_color
- add_overlay(tertiary_overlay)
\ No newline at end of file
+ var/mutable_appearance/tertiary_overlay = mutable_appearance(icon, "[item_color]-tertiary", color = tertiary_color)
+ . += tertiary_overlay
\ No newline at end of file
diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm
index 6775279ef6..1c31e19202 100644
--- a/code/modules/clothing/ears/_ears.dm
+++ b/code/modules/clothing/ears/_ears.dm
@@ -35,16 +35,15 @@
. = ..()
update_icon()
-/obj/item/clothing/ears/headphones/update_icon()
+/obj/item/clothing/ears/headphones/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
+/obj/item/clothing/ears/headphones/update_icon_state()
icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]"
item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]"
/obj/item/clothing/ears/headphones/proc/toggle(owner)
headphones_on = !headphones_on
update_icon()
- var/mob/living/carbon/human/H = owner
- if(istype(H))
- H.update_inv_ears()
- H.update_inv_neck()
- H.update_inv_head()
to_chat(owner, "You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]")
diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm
index 0132fa8596..2a64445776 100644
--- a/code/modules/clothing/glasses/engine_goggles.dm
+++ b/code/modules/clothing/glasses/engine_goggles.dm
@@ -31,6 +31,10 @@
START_PROCESSING(SSobj, src)
update_icon()
+/obj/item/clothing/glasses/meson/engine/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
/obj/item/clothing/glasses/meson/engine/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
@@ -120,18 +124,8 @@
pic = new('icons/turf/overlays.dmi', place, "redOverlay", AREA_LAYER)
flick_overlay(pic, list(user.client), 8)
-/obj/item/clothing/glasses/meson/engine/update_icon()
+/obj/item/clothing/glasses/meson/engine/update_icon_state()
icon_state = "trayson-[mode]"
- update_mob()
-
-/obj/item/clothing/glasses/meson/engine/proc/update_mob()
- item_state = icon_state
- if(isliving(loc))
- var/mob/living/user = loc
- if(user.get_item_by_slot(SLOT_GLASSES) == src)
- user.update_inv_glasses()
- else
- user.update_inv_hands()
/obj/item/clothing/glasses/meson/engine/tray //atmos techs have lived far too long without tray goggles while those damned engineers get their dual-purpose gogles all to themselves
name = "optical t-ray scanner"
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index e7a8243889..29b0aa9552 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -16,6 +16,11 @@
dog_fashion = /datum/dog_fashion/head
+
+/obj/item/clothing/head/hardhat/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
/obj/item/clothing/head/hardhat/attack_self(mob/living/user)
toggle_helmet_light(user)
@@ -27,15 +32,9 @@
turn_off(user)
update_icon()
-/obj/item/clothing/head/hardhat/update_icon()
+/obj/item/clothing/head/hardhat/update_icon_state()
icon_state = "hardhat[on]_[item_color]"
item_state = "hardhat[on]_[item_color]"
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- H.update_inv_head()
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon(force = TRUE)
/obj/item/clothing/head/hardhat/proc/turn_on(mob/user)
set_light(brightness_on, power_on)
@@ -132,11 +131,10 @@
if(!up)
. += mutable_appearance('icons/mob/head.dmi', "weldvisor")
-/obj/item/clothing/head/hardhat/weldhat/update_icon()
- cut_overlays()
+/obj/item/clothing/head/hardhat/weldhat/update_overlays()
+ . = ..()
if(!up)
- add_overlay("weldvisor")
- ..()
+ . += "weldvisor"
/obj/item/clothing/head/hardhat/weldhat/orange
icon_state = "hardhat0_orange"
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index e176943aa9..3b1b92ea78 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -258,7 +258,11 @@
//LightToggle
-/obj/item/clothing/head/helmet/update_icon()
+/obj/item/clothing/head/helment/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
+/obj/item/clothing/head/helmet/update_icon_state()
var/state = "[initial(icon_state)]"
if(F)
if(F.on)
@@ -268,10 +272,6 @@
icon_state = state
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- H.update_inv_head()
-
/obj/item/clothing/head/helmet/ui_action_click(mob/user, action)
if(istype(action, /datum/action/item_action/toggle_helmet_flashlight))
toggle_helmlight()
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 4be949a65e..0b58ea234c 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -197,16 +197,19 @@
. = ..()
update_icon()
-/obj/item/clothing/head/wig/update_icon()
- cut_overlays()
+/obj/item/clothing/head/wig/update_icon_state()
var/datum/sprite_accessory/S = GLOB.hair_styles_list[hair_style]
if(!S)
+ icon = 'icons/obj/clothing/hats.dmi'
icon_state = "pwig"
- else
- var/mutable_appearance/M = mutable_appearance(S.icon,S.icon_state)
+
+/obj/item/clothing/head/wig/update_overlays()
+ . = ..()
+ var/datum/sprite_accessory/S = GLOB.hair_styles_list[hair_style]
+ if(S)
+ var/mutable_appearance/M = mutable_appearance(S.icon, S.icon_state, color = hair_color)
M.appearance_flags |= RESET_COLOR
- M.color = hair_color
- add_overlay(M)
+ . += M
/obj/item/clothing/head/wig/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE)
. = list()
diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm
index ffb7771d2f..08f12deb1f 100644
--- a/code/modules/clothing/shoes/bananashoes.dm
+++ b/code/modules/clothing/shoes/bananashoes.dm
@@ -10,11 +10,15 @@
/obj/item/clothing/shoes/clown_shoes/banana_shoes/Initialize()
. = ..()
- AddComponent(/datum/component/material_container, list(/datum/material/bananium), 200000, TRUE, /obj/item/stack)
- AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 75)
if(always_noslip)
clothing_flags |= NOSLIP
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+ AddComponent(/datum/component/material_container, list(/datum/material/bananium), 200000, TRUE, /obj/item/stack)
+ AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 75)
+
/obj/item/clothing/shoes/clown_shoes/banana_shoes/step_action()
. = ..()
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
@@ -55,12 +59,5 @@
else
to_chat(user, "You need bananium to turn the prototype shoes on!")
-/obj/item/clothing/shoes/clown_shoes/banana_shoes/update_icon()
- if(on)
- icon_state = "clown_prototype_on"
- else
- icon_state = "clown_prototype_off"
- usr.update_inv_shoes()
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/update_icon_state()
+ icon_state = "clown_prototype_[on? "on" : "off"]"
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 001e18d5fb..ee77321fa5 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -275,7 +275,7 @@
visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR
visor_flags = STOPSPRESSUREDAMAGE
-/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon()
+/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon_state()
icon_state = "hardsuit[on]-[item_color]"
/obj/item/clothing/head/helmet/space/hardsuit/syndi/Initialize()
@@ -943,15 +943,9 @@
var/datum/action/A = X
A.UpdateButtonIcon()
-/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/update_icon()
- var/mutable_appearance/helm_overlay = mutable_appearance(icon, "knight_cydonia_overlay")
-
- if(energy_color)
- helm_overlay.color = energy_color
-
- cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
-
- add_overlay(helm_overlay)
+/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/update_overlays()
+ . = ..()
+ . += mutable_appearance(icon, "knight_cydonia_overlay", color = energy_color)
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE)
. = ..()
@@ -980,15 +974,9 @@
set_light(1)
update_icon()
-/obj/item/clothing/suit/space/hardsuit/lavaknight/update_icon()
- var/mutable_appearance/suit_overlay = mutable_appearance(icon, "knight_cydonia_overlay")
-
- if(energy_color)
- suit_overlay.color = energy_color
-
- cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
-
- add_overlay(suit_overlay)
+/obj/item/clothing/suit/space/hardsuit/lavaknight/update_overlays()
+ . = ..()
+ . += mutable_appearance(icon, "knight_cydonia_overlay", color = energy_color)
/obj/item/clothing/suit/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE)
. = ..()
diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm
index ab9ab96678..47cde0899b 100644
--- a/code/modules/events/pirates.dm
+++ b/code/modules/events/pirates.dm
@@ -157,7 +157,7 @@
active = FALSE
STOP_PROCESSING(SSobj,src)
-/obj/machinery/shuttle_scrambler/update_icon()
+/obj/machinery/shuttle_scrambler/update_icon_state()
if(active)
icon_state = "dominator-blue"
else
diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm
index 2a313361c4..bd20ad8d69 100644
--- a/code/modules/food_and_drinks/food/customizables.dm
+++ b/code/modules/food_and_drinks/food/customizables.dm
@@ -318,14 +318,17 @@
..()
update_icon()
-/obj/item/reagent_containers/glass/bowl/update_icon()
- cut_overlays()
+
+/obj/item/reagent_containers/glass/bowl/update_icon_state()
+ if(!reagents || !reagents.total_volume)
+ icon_state = "bowl"
+
+/obj/item/reagent_containers/glass/bowl/update_overlays()
+ . = ..()
if(reagents && reagents.total_volume)
var/mutable_appearance/filling = mutable_appearance('icons/obj/food/soupsalad.dmi', "fullbowl")
filling.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling)
- else
- icon_state = "bowl"
+ . += filling
#undef INGREDIENTS_FILL
#undef INGREDIENTS_SCATTER
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index 5bdac79e60..5117439049 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -38,18 +38,18 @@
if(M.rating >= 2)
. += "Gibber has been upgraded to process inorganic materials."
-/obj/machinery/gibber/update_icon()
- cut_overlays()
+/obj/machinery/gibber/update_overlays()
+ . = ..()
if (dirty)
- add_overlay("grbloody")
+ . += "grbloody"
if(stat & (NOPOWER|BROKEN))
return
if (!occupant)
- add_overlay("grjam")
+ . += "grjam"
else if (operating)
- add_overlay("gruse")
+ . += "gruse"
else
- add_overlay("gridle")
+ . += "gridle"
/obj/machinery/gibber/attack_paw(mob/user)
return attack_hand(user)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
index c52389cd56..547ed244c0 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
@@ -15,7 +15,7 @@
. = ..()
grill_loop = new(list(src), FALSE)
-/obj/machinery/grill/update_icon()
+/obj/machinery/grill/update_icon_state()
if(grilled_item)
icon_state = "grill"
else if(grill_fuel)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index 24dd99e5e0..2adff414e8 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -85,7 +85,7 @@
. += "- Capacity: [max_n_of_items] items."
. += "- Cook time reduced by [(efficiency - 1) * 25]%."
-/obj/machinery/microwave/update_icon()
+/obj/machinery/microwave/update_icon_state()
if(broken)
icon_state = "mwb"
else if(dirty_anim_playing)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index 7619f68448..67a636eb9c 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -42,7 +42,7 @@
..()
update_icon()
-/obj/machinery/smartfridge/update_icon()
+/obj/machinery/smartfridge/update_icon_state()
if(!stat)
if(visible_contents)
switch(contents.len)
@@ -289,13 +289,12 @@
..()
update_icon()
-/obj/machinery/smartfridge/drying_rack/update_icon()
- ..()
- cut_overlays()
+/obj/machinery/smartfridge/drying_rack/update_overlays()
+ . = ..()
if(drying)
- add_overlay("drying_rack_drying")
+ . += "drying_rack_drying"
if(contents.len)
- add_overlay("drying_rack_filled")
+ . += "drying_rack_filled"
/obj/machinery/smartfridge/drying_rack/process()
..()
diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm
index 4fbb931b32..77db8dbe3f 100644
--- a/code/modules/games/cas.dm
+++ b/code/modules/games/cas.dm
@@ -93,7 +93,7 @@
qdel(SC)
update_icon()
-/obj/item/toy/cards/deck/cas/update_icon()
+/obj/item/toy/cards/deck/cas/update_icon_state()
if(cards.len < 26)
icon_state = "deck_[deckstyle]_low"
@@ -136,7 +136,7 @@
Flip()
return TRUE
-/obj/item/toy/cards/singlecard/cas/update_icon()
+/obj/item/toy/cards/singlecard/cas/update_icon_state()
if(flipped)
icon_state = "[card_face]_flipped"
else
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index e6aed7a8ca..884769ebd4 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -196,7 +196,7 @@
if(numbuttons == numready)
begin_event()
-/obj/machinery/readybutton/update_icon()
+/obj/machinery/readybutton/update_icon_state()
if(ready)
icon_state = "auth_on"
else
diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm
index 5bb2936c1e..1a3e1bc1be 100644
--- a/code/modules/hydroponics/beekeeping/honeycomb.dm
+++ b/code/modules/hydroponics/beekeeping/honeycomb.dm
@@ -20,13 +20,13 @@
update_icon()
-/obj/item/reagent_containers/honeycomb/update_icon()
- cut_overlays()
+/obj/item/reagent_containers/honeycomb/update_overlays()
+ . = ..()
var/mutable_appearance/honey_overlay = mutable_appearance(icon, "honey")
if(honey_color)
honey_overlay.icon_state = "greyscale_honey"
honey_overlay.color = honey_color
- add_overlay(honey_overlay)
+ . += honey_overlay
/obj/item/reagent_containers/honeycomb/proc/set_reagent(reagent)
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index f7715e7320..6a3fd56208 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -61,7 +61,7 @@
/obj/machinery/biogenerator/on_reagent_change(changetype) //When the reagents change, change the icon as well.
update_icon()
-/obj/machinery/biogenerator/update_icon()
+/obj/machinery/biogenerator/update_icon_state()
if(panel_open)
icon_state = "biogen-empty-o"
else if(!src.beaker)
diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm
index ab6625b46d..1c31113332 100644
--- a/code/modules/hydroponics/fermenting_barrel.dm
+++ b/code/modules/hydroponics/fermenting_barrel.dm
@@ -64,7 +64,7 @@
to_chat(user, "You close [src], letting you draw from its tap.")
update_icon()
-/obj/structure/fermenting_barrel/update_icon()
+/obj/structure/fermenting_barrel/update_icon_state()
if(open)
icon_state = "barrel_open"
else
diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm
index fe6d13f69e..4e545c13ee 100644
--- a/code/modules/hydroponics/gene_modder.dm
+++ b/code/modules/hydroponics/gene_modder.dm
@@ -53,17 +53,18 @@
min_wchance = 0
min_wrate = 0
-/obj/machinery/plantgenes/update_icon()
- ..()
- cut_overlays()
+/obj/machinery/plantgenes/update_icon_state()
if((stat & (BROKEN|NOPOWER)))
icon_state = "dnamod-off"
else
icon_state = "dnamod"
+
+/obj/machinery/plantgenes/update_overlays()
+ . = ..()
if(seed)
- add_overlay("dnamod-dna")
+ . += "dnamod-dna"
if(panel_open)
- add_overlay("dnamod-open")
+ . += "dnamod-open"
/obj/machinery/plantgenes/attackby(obj/item/I, mob/user, params)
if(default_deconstruction_screwdriver(user, "dnamod", "dnamod", I))
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index 2a0cf8c334..9026c45f82 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -305,17 +305,17 @@
/obj/item/electronic_assembly/proc/can_move()
return FALSE
-/obj/item/electronic_assembly/update_icon()
+/obj/item/electronic_assembly/update_icon_state()
if(opened)
icon_state = initial(icon_state) + "-open"
else
icon_state = initial(icon_state)
- cut_overlays()
+
+/obj/item/electronic_assembly/update_overlays()
+ . = ..()
if(detail_color == COLOR_ASSEMBLY_BLACK) //Black colored overlay looks almost but not exactly like the base sprite, so just cut the overlay and avoid it looking kinda off.
return
- var/mutable_appearance/detail_overlay = mutable_appearance('icons/obj/assemblies/electronic_setups.dmi', "[icon_state]-color")
- detail_overlay.color = detail_color
- add_overlay(detail_overlay)
+ . += mutable_appearance('icons/obj/assemblies/electronic_setups.dmi', "[icon_state]-color", color = detail_color)
/obj/item/electronic_assembly/proc/return_total_complexity()
. = 0
diff --git a/code/modules/integrated_electronics/core/detailer.dm b/code/modules/integrated_electronics/core/detailer.dm
index 52739c7940..9720bccfe5 100644
--- a/code/modules/integrated_electronics/core/detailer.dm
+++ b/code/modules/integrated_electronics/core/detailer.dm
@@ -34,18 +34,17 @@
.=..()
update_icon()
-/obj/item/integrated_electronics/detailer/update_icon()
- cut_overlays()
- var/mutable_appearance/detail_overlay = mutable_appearance('icons/obj/assemblies/electronic_tools.dmi', "detailer-color")
- detail_overlay.color = detail_color
- add_overlay(detail_overlay)
+/obj/item/integrated_electronics/detailer/update_overlays()
+ . = ..()
+ . += mutable_appearance('icons/obj/assemblies/electronic_tools.dmi', "detailer-color", color = detail_color)
+
/obj/item/integrated_electronics/detailer/attack_self(mob/user)
var/color_choice = input(user, "Select color.", "Assembly Detailer") as null|anything in color_list
if(!color_list[color_choice])
return
if(!in_range(src, user))
- return
+ return
if(color_choice == "custom")
detail_color = input(user,"","Choose Color",detail_color) as color|null
else
diff --git a/code/modules/integrated_electronics/core/wirer.dm b/code/modules/integrated_electronics/core/wirer.dm
index 9550f9b4ae..95f46564cb 100644
--- a/code/modules/integrated_electronics/core/wirer.dm
+++ b/code/modules/integrated_electronics/core/wirer.dm
@@ -15,7 +15,7 @@
var/datum/integrated_io/selected_io = null
var/mode = WIRE
-/obj/item/integrated_electronics/wirer/update_icon()
+/obj/item/integrated_electronics/wirer/update_icon_state()
icon_state = "wirer-[mode]"
/obj/item/integrated_electronics/wirer/proc/wire(var/datum/integrated_io/io, mob/user)
@@ -27,7 +27,7 @@
selected_io = io
to_chat(user, "You attach a data wire to \the [selected_io.holder]'s [selected_io.name] data channel.")
mode = WIRING
- update_icon()
+ update_icon()
if(WIRING)
if(io == selected_io)
to_chat(user, "Wiring \the [selected_io.holder]'s [selected_io.name] into itself is rather pointless.")
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index bfd0ae03cb..89fa3ac6cf 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -147,11 +147,8 @@
qdel(src)
-/obj/structure/bookcase/update_icon()
- if(contents.len < 5)
- icon_state = "book-[contents.len]"
- else
- icon_state = "book-5"
+/obj/structure/bookcase/update_icon_state()
+ icon_state = "book-[min(length(contents), 5)]"
/obj/structure/bookcase/manuals/medical
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index 5165d95340..e83ac26153 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -110,12 +110,12 @@
AddComponent(/datum/component/spraycan_paintable)
update_icon()
-/obj/item/clothing/head/helmet/space/hostile_environment/update_icon()
- ..()
- cut_overlays()
+
+/obj/item/clothing/head/helmet/space/hostile_environment/update_overlays()
+ . = ..()
var/mutable_appearance/glass_overlay = mutable_appearance(icon, "hostile_env_glass")
glass_overlay.appearance_flags = RESET_COLOR
- add_overlay(glass_overlay)
+ . += glass_overlay
/obj/item/clothing/head/helmet/space/hostile_environment/worn_overlays(isinhands, icon_file, style_flags = NONE)
. = ..()
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index d4b86d5138..b515ebbc13 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -155,19 +155,16 @@
else
set_light(0)
-/obj/item/twohanded/kinetic_crusher/update_icon()
- ..()
- cut_overlays()
- if(!charged)
- add_overlay("[icon_state]_uncharged")
- if(light_on)
- add_overlay("[icon_state]_lit")
- spawn(1)
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
+/obj/item/twohanded/kinetic_crusher/update_icon_state()
item_state = "crusher[wielded]"
+/obj/item/twohanded/kinetic_crusher/update_overlays()
+ . = ..()
+ if(!charged)
+ . += "[icon_state]_uncharged"
+ if(light_on)
+ . += "[icon_state]_lit"
+
//destablizing force
/obj/item/projectile/destabilizer
name = "destabilizing force"
diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm
index 9d595664ff..8853a56911 100644
--- a/code/modules/mining/equipment/marker_beacons.dm
+++ b/code/modules/mining/equipment/marker_beacons.dm
@@ -40,7 +40,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list(
. += "Use in-hand to place a [singular_name]."
. += "Alt-click to select a color. Current color is [picked_color]."
-/obj/item/stack/marker_beacon/update_icon()
+/obj/item/stack/marker_beacon/update_icon_state()
icon_state = "[initial(icon_state)][lowertext(picked_color)]"
/obj/item/stack/marker_beacon/attack_self(mob/user)
diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm
index e8ba72e62f..ae451ba1a8 100644
--- a/code/modules/mining/equipment/regenerative_core.dm
+++ b/code/modules/mining/equipment/regenerative_core.dm
@@ -129,14 +129,13 @@
. = ..()
update_icon()
-/obj/item/organ/regenerative_core/update_icon()
+/obj/item/organ/regenerative_core/update_icon_state()
icon_state = inert ? "legion_soul_inert" : "legion_soul"
- cut_overlays()
+
+/obj/item/organ/regenerative_core/update_overlays()
+ . = ..()
if(!inert && !preserved)
- add_overlay("legion_soul_crackle")
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
+ . += "legion_soul_crackle"
/obj/item/organ/regenerative_core/legion/go_inert()
..()
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index 68e70dc882..b9f85a5c8f 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -139,11 +139,10 @@
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "sleeper"
-/obj/machinery/sleeper/survival_pod/update_icon()
- if(state_open)
- cut_overlays()
- else
- add_overlay("sleeper_cover")
+/obj/machinery/sleeper/survival_pod/update_overlays()
+ . = ..()
+ if(!state_open)
+ . += "sleeper_cover"
//Computer
/obj/item/gps/computer
@@ -190,8 +189,9 @@
flags_1 = NODECONSTRUCT_1
var/empty = FALSE
-/obj/machinery/smartfridge/survival_pod/update_icon()
- return
+/obj/machinery/stasis/survival_pod/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
/obj/machinery/smartfridge/survival_pod/Initialize(mapload)
. = ..()
diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm
index 43c8dec129..38830fd824 100644
--- a/code/modules/mining/lavaland/ash_flora.dm
+++ b/code/modules/mining/lavaland/ash_flora.dm
@@ -201,15 +201,15 @@
icon = 'icons/obj/lavaland/ash_flora.dmi'
icon_state = "mushroom_bowl"
-/obj/item/reagent_containers/glass/bowl/mushroom_bowl/update_icon()
- cut_overlays()
- if(reagents && reagents.total_volume)
- var/mutable_appearance/filling = mutable_appearance('icons/obj/lavaland/ash_flora.dmi', "fullbowl")
- filling.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling)
- else
+/obj/item/reagent_containers/glass/bowl/mushroom_bowl/update_icon_state()
+ if(!reagents || !reagents.total_volume)
icon_state = "mushroom_bowl"
+/obj/item/reagent_containers/glass/bowl/mushroom_bowl/update_overlays()
+ . = ..()
+ if(reagents && reagents.total_volume)
+ . += mutable_appearance('icons/obj/lavaland/ash_flora.dmi', "fullbowl", color = mix_color_from_reagents(reagents.reagent_list))
+
/obj/item/reagent_containers/glass/bowl/mushroom_bowl/attackby(obj/item/I,mob/user, params)
if(istype(I, /obj/item/reagent_containers/food/snacks))
var/obj/item/reagent_containers/food/snacks/S = I
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 343083456d..5faa465b8c 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -561,7 +561,7 @@
desc = "A flask with an almost-holy aura emitting from it. The label on the bottle says: 'erqo'hyy tvi'rf lbh jv'atf'."
list_reagents = list(/datum/reagent/flightpotion = 5)
-/obj/item/reagent_containers/glass/bottle/potion/update_icon()
+/obj/item/reagent_containers/glass/bottle/potion/update_icon_state()
if(reagents.total_volume)
icon_state = "potionflask"
else
@@ -1072,6 +1072,10 @@
var/teleporting = FALSE //if we ARE teleporting
var/friendly_fire_check = FALSE //if the blasts we make will consider our faction against the faction of hit targets
+/obj/item/hierophant_club/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
/obj/item/hierophant_club/examine(mob/user)
. = ..()
. += "The[beacon ? " beacon is not currently":"re is a beacon"] attached."
@@ -1134,13 +1138,8 @@
chaser_speed = max(chaser_speed + health_percent, 0.5) //one tenth of a second faster for each missing 10% of health
blast_range -= round(health_percent * 10) //one additional range for each missing 10% of health
-/obj/item/hierophant_club/update_icon()
- icon_state = "hierophant_club[timer <= world.time ? "_ready":""][(beacon && !QDELETED(beacon)) ? "":"_beacon"]"
- item_state = icon_state
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_hands()
- M.update_inv_back()
+/obj/item/hierophant_club/update_icon_state()
+ icon_state = item_state = "hierophant_club[timer <= world.time ? "_ready":""][(beacon && !QDELETED(beacon)) ? "":"_beacon"]"
/obj/item/hierophant_club/proc/prepare_icon_update()
update_icon()
diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm
index 0f0ca8bf0c..2f6e8a9b7c 100644
--- a/code/modules/mining/machine_redemption.dm
+++ b/code/modules/mining/machine_redemption.dm
@@ -341,9 +341,8 @@
..()
update_icon()
-/obj/machinery/mineral/ore_redemption/update_icon()
+/obj/machinery/mineral/ore_redemption/update_icon_state()
if(powered())
icon_state = initial(icon_state)
else
icon_state = "[initial(icon_state)]-off"
- return
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 78b1a665db..dd3b13d8dd 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -87,7 +87,7 @@
..()
update_icon()
-/obj/machinery/mineral/equipment_vendor/update_icon()
+/obj/machinery/mineral/equipment_vendor/update_icon_state()
if(powered())
icon_state = initial(icon_state)
else
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index 4f9bad2f0f..c7c34b0389 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -20,25 +20,24 @@
mats_per_stack = MINERAL_MATERIAL_AMOUNT
var/list/stack_overlays
-/obj/item/stack/ore/update_icon()
+/obj/item/stack/ore/update_overlays()
+ . = ..()
var/difference = min(ORESTACK_OVERLAYS_MAX, amount) - (LAZYLEN(stack_overlays)+1)
if(difference == 0)
return
else if(difference < 0 && LAZYLEN(stack_overlays)) //amount < stack_overlays, remove excess.
- cut_overlays()
if (LAZYLEN(stack_overlays)-difference <= 0)
- stack_overlays = null;
+ stack_overlays = null
else
stack_overlays.len += difference
else if(difference > 0) //amount > stack_overlays, add some.
- cut_overlays()
for(var/i in 1 to difference)
var/mutable_appearance/newore = mutable_appearance(icon, icon_state)
newore.pixel_x = rand(-8,8)
newore.pixel_y = rand(-8,8)
LAZYADD(stack_overlays, newore)
if (stack_overlays)
- add_overlay(stack_overlays)
+ . += stack_overlays
/obj/item/stack/ore/welder_act(mob/living/user, obj/item/I)
if(!refined_type)
diff --git a/code/modules/mining/point_bank.dm b/code/modules/mining/point_bank.dm
index 8d0bb4e1e4..11f23a5d7c 100644
--- a/code/modules/mining/point_bank.dm
+++ b/code/modules/mining/point_bank.dm
@@ -41,9 +41,8 @@
..()
update_icon()
-/obj/machinery/point_bank/update_icon()
+/obj/machinery/point_bank/update_icon_state()
if(powered())
icon_state = initial(icon_state)
else
icon_state = "[initial(icon_state)]-off"
- return
\ No newline at end of file
diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm
index 2a57506df6..77844a4788 100644
--- a/code/modules/mob/living/brain/MMI.dm
+++ b/code/modules/mob/living/brain/MMI.dm
@@ -14,20 +14,20 @@
var/force_replace_ai_name = FALSE
var/overrides_aicore_laws = FALSE // Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core.
-/obj/item/mmi/update_icon()
+/obj/item/mmi/update_icon_state()
if(!brain)
icon_state = "mmi_off"
- return
- if(istype(brain, /obj/item/organ/brain/alien))
+ else if(istype(brain, /obj/item/organ/brain/alien))
icon_state = "mmi_brain_alien"
- braintype = "Xenoborg" //HISS....Beep.
else
icon_state = "mmi_brain"
- braintype = "Cyborg"
+
+/obj/item/mmi/update_overlays()
+ . = ..()
if(brainmob && brainmob.stat != DEAD)
- add_overlay("mmi_alive")
+ . += "mmi_alive"
else
- add_overlay("mmi_dead")
+ . += "mmi_dead"
/obj/item/mmi/Initialize()
. = ..()
@@ -68,6 +68,10 @@
name = "Man-Machine Interface: [brainmob.real_name]"
update_icon()
+ if(istype(brain, /obj/item/organ/brain/alien))
+ braintype = "Xenoborg" //HISS....Beep.
+ else
+ braintype = "Cyborg"
SSblackbox.record_feedback("amount", "mmis_filled", 1)
@@ -85,7 +89,7 @@
to_chat(user, "You unlock and upend the MMI, spilling the brain onto the floor.")
eject_brain(user)
update_icon()
- name = "Man-Machine Interface"
+ name = initial(name)
/obj/item/mmi/proc/eject_brain(mob/user)
brainmob.container = null //Reset brainmob mmi var.
@@ -129,7 +133,10 @@
name = "Man-Machine Interface: [brainmob.real_name]"
update_icon()
- return
+ if(istype(brain, /obj/item/organ/brain/alien))
+ braintype = "Xenoborg" //HISS....Beep.
+ else
+ braintype = "Cyborg"
/obj/item/mmi/proc/replacement_ai_name()
return brainmob.name
diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm
index e2d6b095fe..224b5ad807 100644
--- a/code/modules/mob/living/brain/posibrain.dm
+++ b/code/modules/mob/living/brain/posibrain.dm
@@ -184,11 +184,10 @@ GLOBAL_VAR(posibrain_notify_cooldown)
return
-/obj/item/mmi/posibrain/update_icon()
+/obj/item/mmi/posibrain/update_icon_state()
if(searching)
icon_state = "[initial(icon_state)]-searching"
- return
- if(brainmob && brainmob.key)
+ else if(brainmob && brainmob.key)
icon_state = "[initial(icon_state)]-occupied"
else
icon_state = initial(icon_state)
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index 70abba5a01..e229860cf7 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -100,6 +100,9 @@
var/obj/item/light_eater/blade
decay_factor = 0
+/obj/item/organ/heart/nightmare/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
/obj/item/organ/heart/nightmare/attack(mob/M, mob/living/carbon/user, obj/target)
if(M != user)
@@ -130,9 +133,6 @@
/obj/item/organ/heart/nightmare/Stop()
return 0
-/obj/item/organ/heart/nightmare/update_icon()
- return //always beating visually
-
/obj/item/organ/heart/nightmare/on_death()
if(!owner)
return
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 9ad3cbd373..ff42512666 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -633,8 +633,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
"}
-/obj/item/paper/guides/antag/guardian/update_icon()
- return
+/obj/item/paper/guides/antag/guardian/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
/obj/item/paper/guides/antag/guardian/wizard
name = "Guardian Guide"
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index d544671d3e..52083721b7 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -244,8 +244,9 @@ Difficulty: Very Hard
var/list/stored_items = list()
var/list/blacklist = list()
-/obj/machinery/smartfridge/black_box/update_icon()
- return
+/obj/machinery/smartfridge/black_box/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
/obj/machinery/smartfridge/black_box/accept_check(obj/item/O)
if(!istype(O))
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index a83720dc23..d722197bd9 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -26,6 +26,7 @@
var/icon_state_unpowered = null // Icon state when the computer is turned off.
var/icon_state_powered = null // Icon state when the computer is turned on.
var/icon_state_menu = "menu" // Icon state overlay when the computer is turned on, but no program is loaded that would override the screen.
+ var/display_overlays = TRUE // If FALSE, don't draw overlays on this device at all
var/max_hardware_size = 0 // Maximal hardware w_class. Tablets/PDAs have 1, laptops 2, consoles 4.
var/steel_sheet_cost = 5 // Amount of steel sheets refunded when disassembling an empty frame of this computer.
@@ -208,20 +209,26 @@
else if(obj_integrity < max_integrity)
. += "It is damaged."
-/obj/item/modular_computer/update_icon()
- cut_overlays()
+/obj/item/modular_computer/update_icon_state()
if(!enabled)
icon_state = icon_state_unpowered
else
icon_state = icon_state_powered
+
+
+/obj/item/modular_computer/update_overlays()
+ . = ..()
+ if(!display_overlays)
+ return
+ if(enabled)
if(active_program)
- add_overlay(active_program.program_icon_state ? active_program.program_icon_state : icon_state_menu)
+ . += active_program.program_icon_state ? active_program.program_icon_state : icon_state_menu
else
- add_overlay(icon_state_menu)
+ . += icon_state_menu
if(obj_integrity <= integrity_failure * max_integrity)
- add_overlay("bsod")
- add_overlay("broken")
+ . += "bsod"
+ . += "broken"
// On-click handling. Turns on the computer if it's off and opens the GUI.
diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm
index 1f19cf64ff..a4d2e74657 100644
--- a/code/modules/modular_computers/computers/item/laptop.dm
+++ b/code/modules/modular_computers/computers/item/laptop.dm
@@ -18,6 +18,7 @@
screen_on = 0 // Starts closed
var/start_open = TRUE // unless this var is set to 1
var/icon_state_closed = "laptop-closed"
+ display_overlays = FALSE
var/w_class_open = WEIGHT_CLASS_BULKY
/obj/item/modular_computer/laptop/examine(mob/user)
@@ -31,12 +32,11 @@
if(start_open && !screen_on)
toggle_open()
-/obj/item/modular_computer/laptop/update_icon()
- if(screen_on)
- ..()
- else
- cut_overlays()
+/obj/item/modular_computer/laptop/update_icon_state()
+ if(!screen_on)
icon_state = icon_state_closed
+ else
+ . = ..()
/obj/item/modular_computer/laptop/attack_self(mob/user)
if(!screen_on)
@@ -97,6 +97,7 @@
w_class = w_class_open
screen_on = !screen_on
+ display_overlays = screen_on
update_icon()
diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm
index b86d4e5d0d..295ecc66c0 100644
--- a/code/modules/modular_computers/computers/item/processor.dm
+++ b/code/modules/modular_computers/computers/item/processor.dm
@@ -16,15 +16,15 @@
machinery_computer.cpu = null
machinery_computer = null
-/obj/item/modular_computer/processor/New(comp)
+/obj/item/modular_computer/processor/Initialize(mapload)
. = ..()
- if(!comp || !istype(comp, /obj/machinery/modular_computer))
+ if(!loc || !istype(loc, /obj/machinery/modular_computer))
CRASH("Inapropriate type passed to obj/item/modular_computer/processor/New()! Aborting.")
return
// Obtain reference to machinery computer
all_components = list()
idle_threads = list()
- machinery_computer = comp
+ machinery_computer = loc
machinery_computer.cpu = src
hardware_flag = machinery_computer.hardware_flag
max_hardware_size = machinery_computer.max_hardware_size
@@ -34,14 +34,11 @@
integrity_failure = machinery_computer.integrity_failure
base_active_power_usage = machinery_computer.base_active_power_usage
base_idle_power_usage = machinery_computer.base_idle_power_usage
+ machinery_computer.RegisterSignal(src, COMSIG_ATOM_UPDATED_ICON, /atom/proc/update_icon) //when we update_icon, also update the computer
/obj/item/modular_computer/processor/relay_qdel()
qdel(machinery_computer)
-/obj/item/modular_computer/processor/update_icon()
- if(machinery_computer)
- return machinery_computer.update_icon()
-
// This thing is not meant to be used on it's own, get topic data from our machinery owner.
//obj/item/modular_computer/processor/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE)
// if(!machinery_computer)
diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm
index 0818ce8034..bc9d62acbe 100644
--- a/code/modules/modular_computers/computers/item/tablet.dm
+++ b/code/modules/modular_computers/computers/item/tablet.dm
@@ -15,14 +15,11 @@
var/has_variants = TRUE
var/finish_color = null
-/obj/item/modular_computer/tablet/update_icon()
- ..()
+/obj/item/modular_computer/tablet/update_icon_state()
if(has_variants)
if(!finish_color)
finish_color = pick("red","blue","brown","green","black")
- icon_state = "tablet-[finish_color]"
- icon_state_unpowered = "tablet-[finish_color]"
- icon_state_powered = "tablet-[finish_color]"
+ icon_state = icon_state_powered = icon_state_unpowered = "tablet-[finish_color]"
/obj/item/modular_computer/tablet/syndicate_contract_uplink
name = "contractor tablet"
diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm
index a1f13878c1..89c6166a0d 100644
--- a/code/modules/modular_computers/computers/machinery/modular_computer.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm
@@ -48,26 +48,28 @@
if(cpu)
. |= cpu.emag_act(user)
-/obj/machinery/modular_computer/update_icon()
- cut_overlays()
- icon_state = icon_state_powered
+/obj/machinery/modular_computer/update_icon_state()
+ if(cpu?.enabled)
+ icon_state = icon_state_powered
+ else if(stat & NOPOWER || !(cpu?.use_power()))
+ icon_state = icon_state_unpowered
+/obj/machinery/modular_computer/update_overlays()
+ . = ..()
if(!cpu || !cpu.enabled)
if (!(stat & NOPOWER) && (cpu && cpu.use_power()))
- add_overlay(screen_icon_screensaver)
- else
- icon_state = icon_state_unpowered
+ . += screen_icon_screensaver
set_light(0)
else
set_light(light_strength)
if(cpu.active_program)
- add_overlay(cpu.active_program.program_icon_state ? cpu.active_program.program_icon_state : screen_icon_state_menu)
+ . += cpu.active_program.program_icon_state ? cpu.active_program.program_icon_state : screen_icon_state_menu
else
- add_overlay(screen_icon_state_menu)
+ . += screen_icon_state_menu
if(cpu && cpu.obj_integrity <= cpu.integrity_failure * cpu.max_integrity)
- add_overlay("bsod")
- add_overlay("broken")
+ . += "bsod"
+ . += "broken"
// Eject ID card from computer, if it has ID slot with card inside.
/obj/machinery/modular_computer/proc/eject_id()
diff --git a/code/modules/newscaster/newscaster_machine.dm b/code/modules/newscaster/newscaster_machine.dm
index 93d5dc3b31..95a24817a0 100644
--- a/code/modules/newscaster/newscaster_machine.dm
+++ b/code/modules/newscaster/newscaster_machine.dm
@@ -53,7 +53,7 @@ GLOBAL_LIST_EMPTY(allCasters)
picture = null
return ..()
-/obj/machinery/newscaster/update_icon()
+/obj/machinery/newscaster/update_icon_state()
if(stat & (NOPOWER|BROKEN))
icon_state = "newscaster_off"
else
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index f75569ef7a..1a93661c76 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -25,14 +25,14 @@
QDEL_NULL(toppaper) //let movable/Destroy handle the rest
return ..()
-/obj/item/clipboard/update_icon()
- cut_overlays()
+/obj/item/clipboard/update_overlays()
+ . = ..()
if(toppaper)
- add_overlay(toppaper.icon_state)
- copy_overlays(toppaper)
+ . += toppaper.icon_state
+ . += toppaper.overlays
if(haspen)
- add_overlay("clipboard_pen")
- add_overlay("clipboard_over")
+ . += "clipboard_pen"
+ . += "clipboard_over"
/obj/item/clipboard/attackby(obj/item/W, mob/user, params)
diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm
index 5f7db07190..2c02903d3e 100644
--- a/code/modules/paperwork/contract.dm
+++ b/code/modules/paperwork/contract.dm
@@ -7,13 +7,14 @@
var/datum/mind/target
item_flags = NOBLUDGEON
+/obj/item/paper/contract/ComponentInitialize()
+ return
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
+
/obj/item/paper/contract/proc/update_text()
return
-/obj/item/paper/contract/update_icon()
- return
-
-
/obj/item/paper/contract/employment
icon_state = "paper_words"
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 4cd44af5ab..a599ec9deb 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -28,11 +28,10 @@
icon_state = "folder_white"
-/obj/item/folder/update_icon()
- cut_overlays()
+/obj/item/folder/update_overlays()
+ . = ..()
if(contents.len)
- add_overlay("folder_paper")
-
+ . += "folder_paper"
/obj/item/folder/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo) || istype(W, /obj/item/documents))
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 20f4ab0c86..88b6230b7d 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -78,8 +78,7 @@
return get_dist(src, target) < 2
return ..()
-/obj/item/paper/update_icon()
-
+/obj/item/paper/update_icon_state()
if(resistance_flags & ON_FIRE)
icon_state = "paper_onfire"
return
@@ -379,8 +378,9 @@
icon_state = "scrap"
slot_flags = null
-/obj/item/paper/crumpled/update_icon()
- return
+/obj/item/paper/crumpled/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
/obj/item/paper/crumpled/bloody
icon_state = "scrap_bloodied"
diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm
index 0f57d53111..0a7bf011a7 100644
--- a/code/modules/paperwork/paper_cutter.dm
+++ b/code/modules/paperwork/paper_cutter.dm
@@ -34,13 +34,13 @@
return (BRUTELOSS)
-/obj/item/papercutter/update_icon()
- ..()
- cut_overlays()
+/obj/item/papercutter/update_icon_state()
icon_state = (storedcutter ? "[initial(icon_state)]-cutter" : "[initial(icon_state)]")
- if(storedpaper)
- add_overlay("paper")
+/obj/item/papercutter/update_overlays()
+ . = ..()
+ if(storedpaper)
+ . += "paper"
/obj/item/papercutter/attackby(obj/item/P, mob/user, params)
if(istype(P, /obj/item/paper) && !storedpaper)
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index 5648bc7af8..b8bcbedbbe 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -51,7 +51,7 @@
else if(istype(over_object, /obj/screen/inventory/hand))
var/obj/screen/inventory/hand/H = over_object
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
-
+
else
. = ..()
@@ -125,14 +125,16 @@
. += "It doesn't contain anything."
-/obj/item/paper_bin/update_icon()
+/obj/item/paper_bin/update_icon_state()
if(total_paper < 1)
icon_state = "paper_bin0"
else
icon_state = "[initial(icon_state)]"
- cut_overlays()
+
+/obj/item/paper_bin/update_overlays()
+ . = ..()
if(bin_pen)
- add_overlay(mutable_appearance(bin_pen.icon, bin_pen.icon_state))
+ . += mutable_appearance(bin_pen.icon, bin_pen.icon_state)
/obj/item/paper_bin/construction
name = "construction paper bin"
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
index 06c16810b7..a9baf60c0c 100644
--- a/code/modules/paperwork/paperplane.dm
+++ b/code/modules/paperwork/paperplane.dm
@@ -55,12 +55,12 @@
sleep(10)
return (BRUTELOSS)
-/obj/item/paperplane/update_icon()
- cut_overlays()
+/obj/item/paperplane/update_overlays()
+ . = ..()
var/list/stamped = internalPaper.stamped
if(stamped)
for(var/S in stamped)
- add_overlay("paperplane_[S]")
+ . += "paperplane_[S]"
/obj/item/paperplane/attack_self(mob/user)
to_chat(user, "You unfold [src].")
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index a98f057c4a..227e22d499 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -179,9 +179,10 @@
sharpness = IS_SHARP
var/on = FALSE
-/obj/item/pen/edagger/Initialize()
+/obj/item/pen/edagger/ComponentInitialize()
. = ..()
AddComponent(/datum/component/butchering, 60, 100, 0, 'sound/weapons/blade1.ogg')
+ AddElement(/datum/element/update_icon_updates_onmob)
/obj/item/pen/edagger/get_sharpness()
return on * sharpness
@@ -209,10 +210,9 @@
to_chat(user, "[src] is now active.")
update_icon()
-/obj/item/pen/edagger/update_icon()
+/obj/item/pen/edagger/update_icon_state()
if(on)
- icon_state = "edagger"
- item_state = "edagger"
+ icon_state = item_state = "edagger"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
else
diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm
index d20a71d1c6..67559c0381 100644
--- a/code/modules/photography/photos/frame.dm
+++ b/code/modules/photography/photos/frame.dm
@@ -43,10 +43,10 @@
return list()
return ..()
-/obj/item/wallframe/picture/update_icon()
- cut_overlays()
+/obj/item/wallframe/picture/update_overlays()
+ . = ..()
if(displayed)
- add_overlay(image(displayed))
+ . += image(displayed)
/obj/item/wallframe/picture/after_attach(obj/O)
..()
@@ -145,10 +145,10 @@
if(framed)
framed.show(user)
-/obj/structure/sign/picture_frame/update_icon()
- cut_overlays()
+/obj/structure/sign/picture_frame/update_overlays()
+ . = ..()
if(framed)
- add_overlay(image(framed))
+ . += image(framed)
/obj/structure/sign/picture_frame/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm
index d45a119553..2f827f7d51 100644
--- a/code/modules/photography/photos/photo.dm
+++ b/code/modules/photography/photos/photo.dm
@@ -32,7 +32,7 @@
if(setdesc && P.picture_desc)
desc = P.picture_desc
-/obj/item/photo/update_icon()
+/obj/item/photo/update_icon_state()
if(!istype(picture) || !picture.picture_image)
return
var/icon/I = picture.get_small_icon()
diff --git a/code/modules/pool/pool_controller.dm b/code/modules/pool/pool_controller.dm
index 6f28a7c8dd..c9bc6be3e5 100644
--- a/code/modules/pool/pool_controller.dm
+++ b/code/modules/pool/pool_controller.dm
@@ -297,8 +297,7 @@
mist_on()
update_icon()
-/obj/machinery/pool/controller/update_icon()
- . = ..()
+/obj/machinery/pool/controller/update_icon_state()
icon_state = "poolc_[temperature]"
/obj/machinery/pool/controller/proc/CanUpTemp(mob/user)
@@ -412,7 +411,7 @@
/obj/machinery/pool/controller/proc/mist_on() //Spawn /obj/effect/mist (from the shower) on all linked pool tiles
if(mist_state)
return
- mist_off() //make sure it cycles and deletes everything
+ mist_off() //make sure it cycles and deletes everything
mist_state = TRUE
for(var/X in linked_turfs)
var/turf/open/pool/W = X
diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm
index 1ff398bdd3..568ad893a2 100644
--- a/code/modules/power/antimatter/control.dm
+++ b/code/modules/power/antimatter/control.dm
@@ -151,10 +151,11 @@
return
-/obj/machinery/power/am_control_unit/update_icon()
+/obj/machinery/power/am_control_unit/update_icon_state()
if(active)
icon_state = "control_on"
- else icon_state = "control"
+ else
+ icon_state = "control"
//No other icons for it atm
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index 624c4c0316..766c4d4392 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -107,10 +107,9 @@
check_stability()
-/obj/machinery/am_shielding/update_icon()
+/obj/machinery/am_shielding/update_icon_state()
dirs = 0
coredirs = 0
- cut_overlays()
for(var/direction in GLOB.alldirs)
var/turf/T = get_step(loc, direction)
for(var/obj/machinery/machine in T)
@@ -137,8 +136,10 @@
icon_state = "[prefix]shield_[icondirs]"
+/obj/machinery/am_shielding/update_overlays()
+ . = ..()
if(core_check())
- add_overlay("core[control_unit && control_unit.active]")
+ . += "core[control_unit?.active]"
if(!processing)
setup_core()
else if(processing)
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index b9d4d1adf1..8d5de661ae 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -130,7 +130,7 @@ By design, d1 is the smallest direction and d2 is the highest
invisibility = i ? INVISIBILITY_MAXIMUM : 0
update_icon()
-/obj/structure/cable/update_icon()
+/obj/structure/cable/update_icon_state()
icon_state = "[d1]-[d2]"
color = null
add_atom_colour(cable_color, FIXED_COLOUR_PRIORITY)
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index a15580498c..93fe7e8fa6 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -58,16 +58,16 @@
else
return PROCESS_KILL
-/obj/item/stock_parts/cell/update_icon()
- cut_overlays()
+/obj/item/stock_parts/cell/update_overlays()
+ . = ..()
if(grown_battery)
- add_overlay(image('icons/obj/power.dmi',"grown_wires"))
+ . += image('icons/obj/power.dmi',"grown_wires")
if(charge < 0.01)
return
else if(charge/maxcharge >=0.995)
- add_overlay("cell-o2")
+ . += "cell-o2"
else
- add_overlay("cell-o1")
+ . += "cell-o1"
/obj/item/stock_parts/cell/proc/percent() // return % charge of cell
return 100*charge/maxcharge
@@ -281,8 +281,9 @@
maxcharge = 50000
ratingdesc = FALSE
-/obj/item/stock_parts/cell/infinite/abductor/update_icon()
- return
+/obj/item/stock_parts/cell/infinite/abductor/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
/obj/item/stock_parts/cell/potato
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index 011a2e4fd2..6d63a57c88 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -30,19 +30,15 @@
SSair.atmos_machinery -= src
return ..()
-/obj/machinery/power/generator/update_icon()
-
- if(stat & (NOPOWER|BROKEN))
- cut_overlays()
- else
- cut_overlays()
-
+/obj/machinery/power/generator/update_overlays()
+ . = ..()
+ if(!(stat & (NOPOWER|BROKEN)))
var/L = min(round(lastgenlev/100000),11)
if(L != 0)
- add_overlay(image('icons/obj/power.dmi', "teg-op[L]"))
+ . += image('icons/obj/power.dmi', "teg-op[L]")
if(hot_circ && cold_circ)
- add_overlay("teg-oc[lastcirc]")
+ . += "teg-oc[lastcirc]"
#define GENRATE 800 // generator output coefficient from Q
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index d0d1e2b475..582d72f6c0 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -44,8 +44,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
if(tesla_flags & TESLA_MACHINE_EXPLOSIVE)
qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over
-/obj/machinery/gravity_generator/update_icon()
- ..()
+/obj/machinery/gravity_generator/update_icon_state()
icon_state = "[get_status()]_[sprite_number]"
/obj/machinery/gravity_generator/proc/get_status()
@@ -156,6 +155,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
part.main_part = src
parts += part
part.update_icon()
+ part.RegisterSignal(src, COMSIG_ATOM_UPDATED_ICON, /atom/proc/update_icon)
/obj/machinery/gravity_generator/main/proc/connected_parts()
return parts.len == 8
@@ -235,7 +235,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
data["charging_state"] = charging_state
data["on"] = on
data["operational"] = (stat & BROKEN) ? FALSE : TRUE
-
+
return data
/obj/machinery/gravity_generator/main/ui_act(action, params)
@@ -259,11 +259,6 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
return "fix[min(broken_state, 3)]"
return on || charging_state != POWER_IDLE ? "on" : "off"
-/obj/machinery/gravity_generator/main/update_icon()
- ..()
- for(var/obj/O in parts)
- O.update_icon()
-
// Set the charging state based on power/breaker.
/obj/machinery/gravity_generator/main/proc/set_power()
var/new_state = FALSE
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 6cfcc5192a..8d041efb76 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -291,8 +291,7 @@
QDEL_NULL(cell)
return ..()
-/obj/machinery/light/update_icon()
- cut_overlays()
+/obj/machinery/light/update_icon_state()
switch(status) // set icon_states
if(LIGHT_OK)
var/area/A = get_base_area(src)
@@ -303,17 +302,20 @@
icon_state = "[base_state]_hijacked"
else
icon_state = "[base_state]"
- if(on)
- var/mutable_appearance/glowybit = mutable_appearance(overlayicon, base_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
- glowybit.alpha = CLAMP(light_power*250, 30, 200)
- add_overlay(glowybit)
if(LIGHT_EMPTY)
icon_state = "[base_state]-empty"
if(LIGHT_BURNED)
icon_state = "[base_state]-burned"
if(LIGHT_BROKEN)
icon_state = "[base_state]-broken"
- return
+
+/obj/machinery/light/update_overlays()
+ . = ..()
+ if(on && status == LIGHT_OK)
+ var/mutable_appearance/glowybit = mutable_appearance(overlayicon, base_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE)
+ glowybit.alpha = CLAMP(light_power*250, 30, 200)
+ . += glowybit
+
// update the icon_state and luminosity of the light depending on its state
/obj/machinery/light/proc/update(trigger = TRUE)
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 3a6a98d681..3c20f2f69c 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -39,7 +39,7 @@
/obj/machinery/power/port_gen/proc/handleInactive()
return
-/obj/machinery/power/port_gen/update_icon()
+/obj/machinery/power/port_gen/update_icon_state()
icon_state = "[base_icon]_[active]"
/obj/machinery/power/port_gen/process()
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index be8d456f20..2e6ec57f77 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -204,14 +204,14 @@
if(loaded_tank && active && pulse_strength > RAD_COLLECTOR_EFFICIENCY)
stored_power += (pulse_strength-RAD_COLLECTOR_EFFICIENCY)*RAD_COLLECTOR_COEFFICIENT
-/obj/machinery/power/rad_collector/update_icon()
- cut_overlays()
+/obj/machinery/power/rad_collector/update_overlays()
+ . = ..()
if(loaded_tank)
- add_overlay("ptank")
+ . += "ptank"
if(stat & (NOPOWER|BROKEN))
return
if(active)
- add_overlay("on")
+ . += "on"
/obj/machinery/power/rad_collector/proc/toggle_power()
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index e956742e92..d57f78e5b6 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -112,7 +112,7 @@
QDEL_NULL(sparks)
return ..()
-/obj/machinery/power/emitter/update_icon()
+/obj/machinery/power/emitter/update_icon_state()
if (active && powernet && avail(active_power_usage))
icon_state = icon_state_on
else
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 54aca32cf7..950e34098c 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -44,14 +44,14 @@ field_generator power level display
var/list/obj/machinery/field/generator/connected_gens
var/clean_up = 0
-/obj/machinery/field/generator/update_icon()
- cut_overlays()
+/obj/machinery/field/generator/update_overlays()
+ . = ..()
if(warming_up)
- add_overlay("+a[warming_up]")
+ . += "+a[warming_up]"
if(fields.len)
- add_overlay("+on")
+ . += "+on"
if(power_level)
- add_overlay("+p[power_level]")
+ . += "+p[power_level]"
/obj/machinery/field/generator/Initialize()
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index 09fb3ad4e9..59792b6539 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -124,7 +124,7 @@
investigate_log("was moved whilst active; it powered down.", INVESTIGATE_SINGULO)
-/obj/structure/particle_accelerator/update_icon()
+/obj/structure/particle_accelerator/update_icon_state()
switch(construction_state)
if(PA_CONSTRUCTION_UNSECURED,PA_CONSTRUCTION_UNWIRED)
icon_state="[reference]"
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index f583fc138d..af83f7ebca 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -60,7 +60,7 @@
active = 0
connected_parts.Cut()
-/obj/machinery/particle_accelerator/control_box/update_icon()
+/obj/machinery/particle_accelerator/control_box/update_icon_state()
if(active)
icon_state = "control_boxp1"
else
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 774f7ba14d..47de07cd71 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -199,29 +199,25 @@
stat |= BROKEN
-/obj/machinery/power/smes/update_icon()
- cut_overlays()
- if(stat & BROKEN)
- return
-
- if(panel_open)
+/obj/machinery/power/smes/update_overlays()
+ . = ..()
+ if((stat & BROKEN) || panel_open)
return
if(outputting)
- add_overlay("smes-op1")
+ . += "smes-op1"
else
- add_overlay("smes-op0")
+ . += "smes-op0"
if(inputting)
- add_overlay("smes-oc1")
+ . += "smes-oc1"
else
if(input_attempt)
- add_overlay("smes-oc0")
+ . += "smes-oc0"
var/clevel = chargedisplay()
if(clevel>0)
- add_overlay("smes-og[clevel]")
-
+ . += "smes-og[clevel]"
/obj/machinery/power/smes/proc/chargedisplay()
return CLAMP(round(5.5*charge/capacity),0,5)
diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm
index 28b70bf276..ee6a25d8e4 100644
--- a/code/modules/projectiles/ammunition/_ammunition.dm
+++ b/code/modules/projectiles/ammunition/_ammunition.dm
@@ -39,8 +39,7 @@
QDEL_NULL(BB)
return ..()
-/obj/item/ammo_casing/update_icon()
- ..()
+/obj/item/ammo_casing/update_icon_state()
icon_state = "[initial(icon_state)][BB ? "-live" : ""]"
desc = "[initial(desc)][BB ? "" : " This one is spent."]"
diff --git a/code/modules/projectiles/ammunition/caseless/_caseless.dm b/code/modules/projectiles/ammunition/caseless/_caseless.dm
index db1aa6562c..33d096007d 100644
--- a/code/modules/projectiles/ammunition/caseless/_caseless.dm
+++ b/code/modules/projectiles/ammunition/caseless/_caseless.dm
@@ -11,6 +11,5 @@
else
return FALSE
-/obj/item/ammo_casing/caseless/update_icon()
- ..()
+/obj/item/ammo_casing/caseless/update_icon_state()
icon_state = "[initial(icon_state)]"
diff --git a/code/modules/projectiles/ammunition/caseless/foam.dm b/code/modules/projectiles/ammunition/caseless/foam.dm
index 311f76797c..91ed69f7a5 100644
--- a/code/modules/projectiles/ammunition/caseless/foam.dm
+++ b/code/modules/projectiles/ammunition/caseless/foam.dm
@@ -9,8 +9,7 @@
harmful = FALSE
var/modified = FALSE
-/obj/item/ammo_casing/caseless/foam_dart/update_icon()
- ..()
+/obj/item/ammo_casing/caseless/foam_dart/update_icon_state()
if (modified)
icon_state = "foamdart_empty"
desc = "It's nerf or nothing! ... Although, this one doesn't look too safe."
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index 9ea50562dd..e45483569e 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -19,8 +19,7 @@
chamber_round()
update_icon()
-/obj/item/gun/ballistic/update_icon()
- ..()
+/obj/item/gun/ballistic/update_icon_state()
if(current_skin)
icon_state = "[unique_reskin[current_skin]][suppressed ? "-suppressed" : ""][sawn_off ? "-sawn" : ""]"
else
diff --git a/code/modules/projectiles/guns/ballistic/bow.dm b/code/modules/projectiles/guns/ballistic/bow.dm
index 0fc181f71c..c39afa03b7 100644
--- a/code/modules/projectiles/guns/ballistic/bow.dm
+++ b/code/modules/projectiles/guns/ballistic/bow.dm
@@ -44,7 +44,7 @@
to_chat(user, "You notch the arrow.")
update_icon()
-/obj/item/gun/ballistic/bow/update_icon()
+/obj/item/gun/ballistic/bow/update_icon_state()
icon_state = "[initial(icon_state)]_[get_ammo() ? (chambered ? "firing" : "loaded") : "unloaded"]"
/obj/item/gun/ballistic/bow/can_shoot()
diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm
index 82f6fa700b..366aa367b4 100644
--- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm
+++ b/code/modules/projectiles/guns/ballistic/laser_gatling.dm
@@ -73,7 +73,7 @@
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
-/obj/item/minigunpack/update_icon()
+/obj/item/minigunpack/update_icon_state()
if(armed)
icon_state = "notholstered"
else
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
index f724f982d0..ce87eddc67 100644
--- a/code/modules/projectiles/guns/magic.dm
+++ b/code/modules/projectiles/guns/magic.dm
@@ -73,9 +73,6 @@
recharge_newshot()
return 1
-/obj/item/gun/magic/update_icon()
- return
-
/obj/item/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj)
to_chat(user, "The [name] whizzles quietly.")
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index 4857369363..f48020aeb5 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -21,7 +21,7 @@
. = ..()
. += "Has [charges] charge\s remaining."
-/obj/item/gun/magic/wand/update_icon()
+/obj/item/gun/magic/wand/update_icon_state()
icon_state = "[initial(icon_state)][charges ? "" : "-drained"]"
/obj/item/gun/magic/wand/attack(atom/target, mob/living/user)
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index be15bb70cf..2d177318aa 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -144,14 +144,14 @@
..()
icon_state = "[(nopower_state && !powered()) ? nopower_state : initial(icon_state)]"
-/obj/machinery/chem_dispenser/update_icon()
- cut_overlays()
+/obj/machinery/chem_dispenser/update_overlays()
+ . = ..()
if(has_panel_overlay && panel_open)
- add_overlay(mutable_appearance(icon, "[initial(icon_state)]_panel-o"))
+ . += mutable_appearance(icon, "[initial(icon_state)]_panel-o")
if(beaker)
beaker_overlay = display_beaker()
- add_overlay(beaker_overlay)
+ . += beaker_overlay
/obj/machinery/chem_dispenser/emag_act(mob/user)
. = ..()
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index 4c4d0fdb6e..63e9d724a4 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -22,7 +22,7 @@
beaker = null
update_icon()
-/obj/machinery/chem_heater/update_icon()
+/obj/machinery/chem_heater/update_icon_state()
if(beaker)
icon_state = "mixer1b"
else
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index abfd00ed90..22ff88d793 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -67,15 +67,17 @@
bottle = null
update_icon()
-/obj/machinery/chem_master/update_icon()
- cut_overlays()
- if (stat & BROKEN)
- add_overlay("waitlight")
+/obj/machinery/chem_master/update_icon_state()
if(beaker)
icon_state = "mixer1"
else
icon_state = "mixer0"
+/obj/machinery/chem_master/update_overlays()
+ . = ..()
+ if (stat & BROKEN)
+ . += "waitlight"
+
/obj/machinery/chem_master/blob_act(obj/structure/blob/B)
if (prob(50))
qdel(src)
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index 7b25aa769d..25315f457d 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -109,16 +109,16 @@
update_icon()
playsound(loc, 'sound/machines/ping.ogg', 30, 1)
-/obj/machinery/computer/pandemic/update_icon()
+/obj/machinery/computer/pandemic/update_icon_state()
if(stat & BROKEN)
icon_state = (beaker ? "mixer1_b" : "mixer0_b")
- return
-
- icon_state = "mixer[(beaker) ? "1" : "0"][powered() ? "" : "_nopower"]"
- if(wait)
- add_overlay("waitlight")
else
- cut_overlays()
+ icon_state = "mixer[(beaker) ? "1" : "0"][powered() ? "" : "_nopower"]"
+
+/obj/machinery/computer/pandemic/update_overlays()
+ . = ..()
+ if(!(stat & BROKEN) && wait)
+ . += "waitlight"
/obj/machinery/computer/pandemic/ui_interact(mob/user, ui_key = "main", datum/tgui/ui, force_open = FALSE, datum/tgui/master_ui, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index 85cdc33e72..75848f89b9 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -66,7 +66,7 @@
AM.forceMove(drop_location())
holdingitems = list()
-/obj/machinery/reagentgrinder/update_icon()
+/obj/machinery/reagentgrinder/update_icon_state()
if(beaker)
icon_state = "juicer1"
else
diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
index 189f58fec3..0a08395c1b 100644
--- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm
+++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
@@ -34,7 +34,7 @@
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
reagents.maximum_volume += REAGENTS_BASE_VOLUME * B.rating
-/obj/machinery/smoke_machine/update_icon()
+/obj/machinery/smoke_machine/update_icon_state()
if((!is_operational()) || (!on) || (reagents.total_volume == 0))
if (panel_open)
icon_state = "smoke0-o"
@@ -42,7 +42,6 @@
icon_state = "smoke0"
else
icon_state = "smoke1"
- return ..()
/obj/machinery/smoke_machine/RefreshParts()
var/new_volume = REAGENTS_BASE_VOLUME
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index 3296586c94..6be2e658c1 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -34,15 +34,11 @@
else
name = "blood pack"
-/obj/item/reagent_containers/blood/update_icon()
- cut_overlays()
-
+/obj/item/reagent_containers/blood/update_overlays()
+ . = ..()
var/v = min(round(reagents.total_volume / volume * 10), 10)
if(v > 0)
- var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "bloodpack1")
- filling.icon_state = "bloodpack[v]"
- filling.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling)
+ . += mutable_appearance('icons/obj/reagentfillings.dmi', "bloodpack[v]", color = mix_color_from_reagents(reagents.reagent_list))
/obj/item/reagent_containers/blood/random
icon_state = "random_bloodpack"
@@ -120,7 +116,7 @@
else
if(!do_mob(user, C, 10))
return
-
+
to_chat(user, "You take a sip from the [src].")
user.visible_message("[user] puts the [src] up to their mouth.")
if(reagents.total_volume <= 0) // Safety: In case you spam clicked the blood bag on yourself, and it is now empty (below will divide by zero)
diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm
index e4741bb858..cc1cd21bac 100644
--- a/code/modules/reagents/reagent_containers/bottle.dm
+++ b/code/modules/reagents/reagent_containers/bottle.dm
@@ -18,26 +18,27 @@
/obj/item/reagent_containers/glass/bottle/on_reagent_change(changetype)
update_icon()
-/obj/item/reagent_containers/glass/bottle/update_icon()
- cut_overlays()
+/obj/item/reagent_containers/glass/bottle/update_overlays()
+ . = ..()
+ if(!cached_icon)
+ cached_icon = icon_state
if(reagents.total_volume)
- var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[icon_state]-10")
+ var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[cached_icon]-10", color = mix_color_from_reagents(reagents.reagent_list))
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9)
- filling.icon_state = "[icon_state]-10"
+ filling.icon_state = "[cached_icon]-10"
if(10 to 29)
- filling.icon_state = "[icon_state]25"
+ filling.icon_state = "[cached_icon]25"
if(30 to 49)
- filling.icon_state = "[icon_state]50"
+ filling.icon_state = "[cached_icon]50"
if(50 to 69)
- filling.icon_state = "[icon_state]75"
+ filling.icon_state = "[cached_icon]75"
if(70 to INFINITY)
- filling.icon_state = "[icon_state]100"
+ filling.icon_state = "[cached_icon]100"
- filling.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling)
+ . += filling
/obj/item/reagent_containers/glass/bottle/epinephrine
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 4e1de85fce..846637850b 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -86,12 +86,10 @@
update_icon()
-/obj/item/reagent_containers/dropper/update_icon()
- cut_overlays()
+/obj/item/reagent_containers/dropper/update_overlays()
+ . = ..()
if(reagents.total_volume)
- var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "dropper")
- filling.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling)
+ . += mutable_appearance('icons/obj/reagentfillings.dmi', "dropper", color = mix_color_from_reagents(reagents.reagent_list))
/obj/item/reagent_containers/dropper/get_belt_overlay()
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch")
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index bf888dc50a..74e99cc326 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -133,13 +133,13 @@
/obj/item/reagent_containers/glass/beaker/on_reagent_change(changetype)
update_icon()
-/obj/item/reagent_containers/glass/beaker/update_icon()
+/obj/item/reagent_containers/glass/beaker/update_overlays()
+ . = ..()
if(!cached_icon)
cached_icon = icon_state
- cut_overlays()
if(reagents.total_volume)
- var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[cached_icon]10")
+ var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[cached_icon]10", color = mix_color_from_reagents(reagents.reagent_list))
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
@@ -157,9 +157,7 @@
filling.icon_state = "[cached_icon]80"
if(91 to INFINITY)
filling.icon_state = "[cached_icon]100"
-
- filling.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling)
+ . += filling
/obj/item/reagent_containers/glass/beaker/jar
name = "honey jar"
@@ -215,11 +213,7 @@
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,20,25,30,40,50,60,120,180)
container_flags = TEMP_WEAK|APTFT_ALTCLICK|APTFT_VERB
-
-/obj/item/reagent_containers/glass/beaker/plastic/update_icon()
- icon_state = "beakerlarge" // hack to lets us reuse the large beaker reagent fill states
- ..()
- icon_state = "beakerwhite"
+ cached_icon = "beakerlarge"
/obj/item/reagent_containers/glass/beaker/meta
name = "metamaterial beaker"
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index f29b785c95..3c4be7969d 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -119,7 +119,7 @@
reagents.add_reagent_list(list_reagents)
update_icon()
-/obj/item/reagent_containers/hypospray/medipen/update_icon()
+/obj/item/reagent_containers/hypospray/medipen/update_icon_state()
if(reagents.total_volume > 0)
icon_state = initial(icon_state)
else
@@ -282,13 +282,12 @@
vial = new start_vial
update_icon()
-/obj/item/hypospray/mkii/update_icon()
- ..()
+/obj/item/hypospray/mkii/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
+/obj/item/hypospray/mkii/update_icon_state()
icon_state = "[initial(icon_state)][vial ? "" : "-e"]"
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_hands()
- return
/obj/item/hypospray/mkii/examine(mob/user)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/hypovial.dm b/code/modules/reagents/reagent_containers/hypovial.dm
index db2d73c697..8d99248d97 100644
--- a/code/modules/reagents/reagent_containers/hypovial.dm
+++ b/code/modules/reagents/reagent_containers/hypovial.dm
@@ -19,37 +19,15 @@
"pink hypovial" = "hypovial-pink"
)
always_reskinnable = TRUE
+ cached_icon = "hypovial"
/obj/item/reagent_containers/glass/bottle/vial/Initialize()
. = ..()
- if(!icon_state)
- icon_state = "hypovial"
update_icon()
/obj/item/reagent_containers/glass/bottle/vial/on_reagent_change()
update_icon()
-/obj/item/reagent_containers/glass/bottle/vial/update_icon()
- cut_overlays()
- if(reagents.total_volume)
- var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "hypovial10")
-
- var/percent = round((reagents.total_volume / volume) * 100)
- switch(percent)
- if(0 to 9)
- filling.icon_state = "hypovial10"
- if(10 to 29)
- filling.icon_state = "hypovial25"
- if(30 to 49)
- filling.icon_state = "hypovial50"
- if(50 to 85)
- filling.icon_state = "hypovial75"
- if(86 to INFINITY)
- filling.icon_state = "hypovial100"
-
- filling.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling)
-
/obj/item/reagent_containers/glass/bottle/vial/tiny
name = "small hypovial"
//Shouldn't be possible to get this without adminbuse
@@ -80,27 +58,7 @@
"large purple hypovial" = "hypoviallarge-p",
"large black hypovial" = "hypoviallarge-t"
)
-
-/obj/item/reagent_containers/glass/bottle/vial/large/update_icon()
- cut_overlays()
- if(reagents.total_volume)
- var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "hypoviallarge10")
-
- var/percent = round((reagents.total_volume / volume) * 100)
- switch(percent)
- if(0 to 9)
- filling.icon_state = "hypoviallarge10"
- if(10 to 29)
- filling.icon_state = "hypoviallarge25"
- if(30 to 49)
- filling.icon_state = "hypoviallarge50"
- if(50 to 85)
- filling.icon_state = "hypoviallarge75"
- if(86 to INFINITY)
- filling.icon_state = "hypoviallarge100"
-
- filling.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling)
+ cached_icon = "hypoviallarge"
/obj/item/reagent_containers/glass/bottle/vial/large/bluespace
possible_transfer_amounts = list(1,2,5,10,20)
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 45bf8591a8..b8957775b1 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -12,6 +12,7 @@
var/mode = SYRINGE_DRAW
var/busy = FALSE // needed for delayed drawing of blood
var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun
+ var/show_filling = TRUE
custom_materials = list(/datum/material/iron=10, /datum/material/glass=20)
reagent_flags = TRANSPARENT
@@ -21,6 +22,10 @@
mode = SYRINGE_INJECT
update_icon()
+/obj/item/reagent_containers/syringe/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
/obj/item/reagent_containers/syringe/on_reagent_change(changetype)
update_icon()
@@ -152,29 +157,32 @@
mode = SYRINGE_DRAW
update_icon()
-
-/obj/item/reagent_containers/syringe/update_icon()
- cut_overlays()
- var/rounded_vol
- if(reagents && reagents.total_volume)
- rounded_vol = CLAMP(round((reagents.total_volume / volume * 15),5), 1, 15)
- var/image/filling_overlay = mutable_appearance('icons/obj/reagentfillings.dmi', "syringe[rounded_vol]")
- filling_overlay.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling_overlay)
- else
- rounded_vol = 0
+/obj/item/reagent_containers/syringe/update_icon_state()
+ var/rounded_vol = get_rounded_vol()
icon_state = "[rounded_vol]"
item_state = "syringe_[rounded_vol]"
+
+/obj/item/reagent_containers/syringe/update_overlays()
+ . = ..()
+ if(show_filling)
+ var/rounded_vol = get_rounded_vol()
+ if(reagents && reagents.total_volume)
+ . += mutable_appearance('icons/obj/reagentfillings.dmi', "syringe[rounded_vol]", color = mix_color_from_reagents(reagents.reagent_list))
if(ismob(loc))
- var/mob/M = loc
var/injoverlay
switch(mode)
if (SYRINGE_DRAW)
injoverlay = "draw"
if (SYRINGE_INJECT)
injoverlay = "inject"
- add_overlay(injoverlay)
- M.update_inv_hands()
+ . += injoverlay
+
+///Used by update_icon() and update_overlays()
+/obj/item/reagent_containers/syringe/proc/get_rounded_vol()
+ if(reagents && reagents.total_volume)
+ return CLAMP(round((reagents.total_volume / volume * 15),5), 1, 15)
+ else
+ return 0
/obj/item/reagent_containers/syringe/epinephrine
name = "syringe (epinephrine)"
@@ -267,6 +275,7 @@
amount_per_transfer_from_this = 20
icon_state = "empty"
item_state = "syringe_empty"
+ show_filling = FALSE
var/emptrig = FALSE
/obj/item/reagent_containers/syringe/dart/afterattack(atom/target, mob/user , proximity)
@@ -317,28 +326,13 @@
/obj/item/reagent_containers/syringe/dart/attack_self(mob/user)
return
-/obj/item/reagent_containers/syringe/dart/update_icon()
- cut_overlays()
- var/rounded_vol
-
- rounded_vol = "empty"
- if(reagents && reagents.total_volume)
- if(volume/round(reagents.total_volume, 1) == 1)
- rounded_vol="full"
- mode = SYRINGE_INJECT
-
- icon_state = "[rounded_vol]"
- item_state = "syringe_[rounded_vol]"
- if(ismob(loc))
- var/mob/M = loc
- var/injoverlay
- switch(mode)
- if (SYRINGE_DRAW)
- injoverlay = "draw"
- if (SYRINGE_INJECT)
- injoverlay = "ready"
- add_overlay(injoverlay)
- M.update_inv_hands()
+/obj/item/reagent_containers/syringe/dart/update_icon_state()
+ var/empty_full = "empty"
+ if(round(reagents.total_volume, 1) == reagents.maximum_volume)
+ empty_full = "full"
+ mode = SYRINGE_INJECT
+ icon_state = "[empty_full]"
+ item_state = "syringe_[empty_full]"
/obj/item/reagent_containers/syringe/dart/emp_act(severity)
emptrig = TRUE
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index 11c80b14ee..425c94cd65 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -252,7 +252,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
// update the icon depending on the position
-/obj/machinery/conveyor_switch/update_icon()
+/obj/machinery/conveyor_switch/update_icon_state()
if(position<0)
if(invert_icon)
icon_state = "switch-fwd"
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index 78e18a01e2..65bfa1d98f 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -191,10 +191,6 @@
AM.pipe_eject(0)
update_icon()
-// update the icon & overlays to reflect mode & status
-/obj/machinery/disposal/update_icon()
- return
-
/obj/machinery/disposal/proc/flush()
flushing = TRUE
flushAnimation()
@@ -386,8 +382,8 @@
pressure_charging = TRUE
update_icon()
-/obj/machinery/disposal/bin/update_icon()
- cut_overlays()
+/obj/machinery/disposal/bin/update_overlays()
+ . = ..()
if(stat & BROKEN)
pressure_charging = FALSE
flush = FALSE
@@ -395,7 +391,7 @@
//flush handle
if(flush)
- add_overlay("dispover-handle")
+ . += "dispover-handle"
//only handle is shown if no power
if(stat & NOPOWER || panel_open)
@@ -403,13 +399,13 @@
//check for items in disposal - occupied light
if(contents.len > 0)
- add_overlay("dispover-full")
+ . += "dispover-full"
//charging and ready light
if(pressure_charging)
- add_overlay("dispover-charge")
+ . += "dispover-charge"
else if(full_pressure)
- add_overlay("dispover-ready")
+ . += "dispover-ready"
/obj/machinery/disposal/bin/proc/do_flush()
set waitfor = FALSE
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index 10566b7de2..42b8a4dcbb 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -51,7 +51,7 @@ Note: Must be placed within 3 tiles of the R&D Console
update_icon()
reset_busy()
-/obj/machinery/rnd/destructive_analyzer/update_icon()
+/obj/machinery/rnd/destructive_analyzer/update_icon_state()
if(loaded_item)
icon_state = "d_analyzer_l"
else
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index b43abf97b2..3d4bf2b4c9 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -514,7 +514,7 @@
update_icon()
recentlyExperimented = FALSE
-/obj/machinery/rnd/experimentor/update_icon()
+/obj/machinery/rnd/experimentor/update_icon_state()
icon_state = "h_lathe"
/obj/machinery/rnd/experimentor/proc/warn_admins(user, ReactionName)
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index 9919a6bf26..3e02ca4ee5 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -519,8 +519,9 @@
density = FALSE
clockwork = TRUE //it'd look weird
-/obj/machinery/computer/shuttle/pod/update_icon()
- return
+/obj/machinery/computer/shuttle/pod/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
/obj/machinery/computer/shuttle/pod/emag_act(mob/user)
. = SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT)
diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm
index dcfb0793b5..3ba2198b35 100644
--- a/code/modules/shuttle/manipulator.dm
+++ b/code/modules/shuttle/manipulator.dm
@@ -31,14 +31,14 @@
SSshuttle.manipulator = null
. = ..()
-/obj/machinery/shuttle_manipulator/update_icon()
- cut_overlays()
+/obj/machinery/shuttle_manipulator/update_overlays()
+ . = ..()
var/mutable_appearance/hologram_projection = mutable_appearance(icon, "hologram_on")
hologram_projection.pixel_y = 22
var/mutable_appearance/hologram_ship = mutable_appearance(icon, "hologram_whiteship")
hologram_ship.pixel_y = 27
- add_overlay(hologram_projection)
- add_overlay(hologram_ship)
+ . += hologram_projection
+ . += hologram_ship
/obj/machinery/shuttle_manipulator/can_interact(mob/user)
// Only admins can use this, but they can use it from anywhere
diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm
index f05adb9309..033187e353 100644
--- a/code/modules/shuttle/special.dm
+++ b/code/modules/shuttle/special.dm
@@ -21,7 +21,7 @@
desc = "Oh no, not again."
update_icon()
-/obj/machinery/power/emitter/energycannon/magical/update_icon()
+/obj/machinery/power/emitter/energycannon/magical/update_icon_state()
if(active)
icon_state = icon_state_on
else
diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm
index b09dee04c7..cf0d79c742 100644
--- a/code/modules/station_goals/shield.dm
+++ b/code/modules/station_goals/shield.dm
@@ -118,7 +118,7 @@
anchored = FALSE
update_icon()
-/obj/machinery/satellite/update_icon()
+/obj/machinery/satellite/update_icon_state()
icon_state = active ? "sat_active" : "sat_inactive"
/obj/machinery/satellite/attackby(obj/item/I, mob/user, params)
diff --git a/code/modules/surgery/organs/appendix.dm b/code/modules/surgery/organs/appendix.dm
index feace77018..9da20e4921 100644
--- a/code/modules/surgery/organs/appendix.dm
+++ b/code/modules/surgery/organs/appendix.dm
@@ -19,7 +19,7 @@
if(M)
M.adjustToxLoss(4, TRUE, TRUE) //forced to ensure people don't use it to gain tox as slime person
-/obj/item/organ/appendix/update_icon()
+/obj/item/organ/appendix/update_icon_state()
if(inflamed)
icon_state = "appendixinflamed"
name = "inflamed appendix"
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index 37ee253d4b..daf3324980 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -31,7 +31,7 @@
else
CRASH("Invalid zone for [type]")
-/obj/item/organ/cyberimp/arm/update_icon()
+/obj/item/organ/cyberimp/arm/update_icon_state()
if(zone == BODY_ZONE_R_ARM)
transform = null
else // Mirroring the icon
diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm
index 8426440bbb..47a452cc76 100644
--- a/code/modules/surgery/organs/augments_chest.dm
+++ b/code/modules/surgery/organs/augments_chest.dm
@@ -178,14 +178,11 @@
on = FALSE
update_icon()
-/obj/item/organ/cyberimp/chest/thrusters/update_icon()
+/obj/item/organ/cyberimp/chest/thrusters/update_icon_state()
if(on)
icon_state = "imp_jetpack-on"
else
icon_state = "imp_jetpack"
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
/obj/item/organ/cyberimp/chest/thrusters/proc/move_react()
allow_thrust(0.01)
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index 547ca38ead..ea98ecd32b 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -22,7 +22,7 @@
var/failed = FALSE //to prevent constantly running failing code
var/operated = FALSE //whether the heart's been operated on to fix some of its damages
-/obj/item/organ/heart/update_icon()
+/obj/item/organ/heart/update_icon_state()
if(beating)
icon_state = "[icon_base]-on"
else
diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm
index c398b528d8..ef374f5db0 100644
--- a/code/modules/vehicles/pimpin_ride.dm
+++ b/code/modules/vehicles/pimpin_ride.dm
@@ -55,12 +55,12 @@
else
return ..()
-/obj/vehicle/ridden/janicart/update_icon()
- cut_overlays()
+/obj/vehicle/ridden/janicart/update_overlays()
+ . = ..()
if(mybag)
- add_overlay("cart_garbage")
+ . += "cart_garbage"
if(floorbuffer)
- add_overlay("cart_buffer")
+ . += "cart_buffer"
/obj/vehicle/ridden/janicart/attack_hand(mob/user)
. = ..()
diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi
index eb3ca4b2f7..3d5a825f27 100644
Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ