diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm
index d890788c91..de46e18fde 100644
--- a/code/__HELPERS/icon_smoothing.dm
+++ b/code/__HELPERS/icon_smoothing.dm
@@ -1,7 +1,7 @@
//generic (by snowflake) tile smoothing code; smooth your icons with this!
/*
- Each tile is divided in 4 corners, each corner has an image associated to it; the tile is then overlayed by these 4 images
+ Each tile is divided in 4 corners, each corner has an appearance associated to it; the tile is then overlayed by these 4 appearances
To use this, just set your atom's 'smooth' var to 1. If your atom can be moved/unanchored, set its 'can_be_unanchored' var to 1.
If you don't want your atom's icon to smooth with anything but atoms of the same type, set the list 'canSmoothWith' to null;
Otherwise, put all types you want the atom icon to smooth with in 'canSmoothWith' INCLUDING THE TYPE OF THE ATOM ITSELF.
@@ -44,7 +44,6 @@
#define DEFAULT_UNDERLAY_ICON 'icons/turf/floors.dmi'
#define DEFAULT_UNDERLAY_ICON_STATE "plating"
-#define DEFAULT_UNDERLAY_IMAGE image(DEFAULT_UNDERLAY_ICON, DEFAULT_UNDERLAY_ICON_STATE)
/atom/var/smooth = SMOOTH_FALSE
/atom/var/top_left_corner
@@ -157,14 +156,16 @@
/turf/closed/wall/diagonal_smooth(adjacencies)
adjacencies = reverse_ndir(..())
if(adjacencies)
- var/list/U = list()
+ var/mutable_appearance/underlay_appearance = mutable_appearance(layer = TURF_LAYER)
+ var/list/U = list(underlay_appearance)
if(fixed_underlay)
if(fixed_underlay["space"])
- var/image/I = image('icons/turf/space.dmi', SPACE_ICON_STATE, layer=TURF_LAYER)
- I.plane = PLANE_SPACE
- U += I
+ underlay_appearance.icon = 'icons/turf/space.dmi'
+ underlay_appearance.icon_state = SPACE_ICON_STATE
+ underlay_appearance.plane = PLANE_SPACE
else
- U += image(fixed_underlay["icon"], fixed_underlay["icon_state"], layer=TURF_LAYER)
+ underlay_appearance.icon = fixed_underlay["icon"]
+ underlay_appearance.icon_state = fixed_underlay["icon_state"]
else
var/turf/T = get_step(src, turn(adjacencies, 180))
if(T && (T.density || T.smooth))
@@ -173,15 +174,18 @@
T = get_step(src, turn(adjacencies, 225))
if(isspaceturf(T) && !istype(T, /turf/open/space/transit))
- var/image/I = image('icons/turf/space.dmi', SPACE_ICON_STATE, layer=TURF_LAYER)
- I.plane = PLANE_SPACE
- U += I
+ underlay_appearance.icon = 'icons/turf/space.dmi'
+ underlay_appearance.icon_state = SPACE_ICON_STATE
+ underlay_appearance.plane = PLANE_SPACE
else if(T && !T.density && !T.smooth)
- U += T
+ underlay_appearance.icon = T.icon
+ underlay_appearance.icon_state = T.icon_state
else if(baseturf && !initial(baseturf.density) && !initial(baseturf.smooth))
- U += image(initial(baseturf.icon), initial(baseturf.icon_state), layer=TURF_LAYER)
+ underlay_appearance.icon = initial(baseturf.icon)
+ underlay_appearance.icon_state = initial(baseturf.icon_state)
else
- U += DEFAULT_UNDERLAY_IMAGE
+ underlay_appearance.icon = DEFAULT_UNDERLAY_ICON
+ underlay_appearance.icon_state = DEFAULT_UNDERLAY_ICON_STATE
underlays = U
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 35e66d5f4b..a7338a0c5d 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1138,13 +1138,13 @@ B --><-- A
if(location == src)
return 1
-/proc/flick_overlay_static(image/I, atom/A, duration)
+/proc/flick_overlay_static(O, atom/A, duration)
set waitfor = 0
- if(!A || !I)
+ if(!A || !O)
return
- A.add_overlay(I)
+ A.add_overlay(O)
sleep(duration)
- A.cut_overlay(I)
+ A.cut_overlay(O)
/proc/get_areas_in_z(zlevel)
. = list()
diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm
index 407137dfcf..96a07bad24 100644
--- a/code/_onclick/hud/action_button.dm
+++ b/code/_onclick/hud/action_button.dm
@@ -57,8 +57,7 @@
/obj/screen/movable/action_button/hide_toggle/proc/UpdateIcon()
cut_overlays()
- var/image/img = image(hide_icon, src, hidden ? show_state : hide_state)
- add_overlay(img)
+ add_overlay(mutable_appearance(hide_icon, hidden ? show_state : hide_state))
/obj/screen/movable/action_button/MouseEntered(location,control,params)
diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm
index df0894403c..4bf86f414b 100644
--- a/code/_onclick/hud/parallax.dm
+++ b/code/_onclick/hud/parallax.dm
@@ -261,9 +261,9 @@
for(var/y in -count to count)
if(x == 0 && y == 0)
continue
- var/image/I = image(icon, null, icon_state)
- I.transform = matrix(1, 0, x*480, 0, 1, y*480)
- new_overlays += I
+ var/mutable_appearance/texture_overlay = mutable_appearance(icon, icon_state)
+ texture_overlay.transform = matrix(1, 0, x*480, 0, 1, y*480)
+ new_overlays += texture_overlay
cut_overlays()
add_overlay(new_overlays)
view_sized = view
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index b9c791a168..a3a60b1f31 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -134,21 +134,16 @@
icon_state = icon_empty
/obj/screen/inventory/hand
- var/image/active_overlay
- var/image/handcuff_overlay
- var/image/blocked_overlay
+ var/mutable_appearance/handcuff_overlay
+ var/static/mutable_appearance/blocked_overlay = mutable_appearance('icons/mob/screen_gen.dmi', "blocked")
var/held_index = 0
/obj/screen/inventory/hand/update_icon()
..()
- if(!active_overlay)
- active_overlay = image("icon"=icon, "icon_state"="hand_active")
if(!handcuff_overlay)
var/state = (!(held_index % 2)) ? "markus" : "gabrielle"
- handcuff_overlay = image("icon"='icons/mob/screen_gen.dmi', "icon_state"=state)
- if(!blocked_overlay)
- blocked_overlay = image("icon"='icons/mob/screen_gen.dmi', "icon_state"="blocked")
+ handcuff_overlay = mutable_appearance('icons/mob/screen_gen.dmi', state)
cut_overlays()
@@ -163,7 +158,7 @@
add_overlay(blocked_overlay)
if(held_index == hud.mymob.active_hand_index)
- add_overlay(active_overlay)
+ add_overlay("hand_active")
/obj/screen/inventory/hand/Click(location, control, params)
@@ -445,7 +440,7 @@
/obj/screen/zone_sel/update_icon(mob/user)
cut_overlays()
- add_overlay(image('icons/mob/screen_gen.dmi', "[selecting]"))
+ add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[selecting]"))
user.zone_selected = selecting
/obj/screen/zone_sel/alien
@@ -453,7 +448,7 @@
/obj/screen/zone_sel/alien/update_icon(mob/user)
cut_overlays()
- add_overlay(image('icons/mob/screen_alien.dmi', "[selecting]"))
+ add_overlay(mutable_appearance('icons/mob/screen_alien.dmi', "[selecting]"))
user.zone_selected = selecting
/obj/screen/zone_sel/robot
diff --git a/code/controllers/subsystem/processing/overlays.dm b/code/controllers/subsystem/processing/overlays.dm
index 1a42944bb5..1aa76e6b3d 100644
--- a/code/controllers/subsystem/processing/overlays.dm
+++ b/code/controllers/subsystem/processing/overlays.dm
@@ -55,7 +55,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays)
/proc/iconstate2appearance(icon, iconstate)
var/static/image/stringbro = new()
- var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches
+ var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches
var/list/cached_icon = icon_states_cache[icon]
if (cached_icon)
var/cached_appearance = cached_icon["[iconstate]"]
@@ -91,7 +91,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays)
new_overlays[i] = iconstate2appearance(icon, cached_overlay)
else if(isicon(cached_overlay))
new_overlays[i] = icon2appearance(cached_overlay)
- else //image probable
+ else //image/mutable_appearance probable
appearance_bro.appearance = cached_overlay
if(!ispath(cached_overlay))
appearance_bro.dir = cached_overlay.dir
@@ -99,11 +99,11 @@ PROCESSING_SUBSYSTEM_DEF(overlays)
return new_overlays
#define NOT_QUEUED_ALREADY (!(flags & OVERLAY_QUEUED))
-#define QUEUE_FOR_COMPILE flags |= OVERLAY_QUEUED; SSoverlays.processing += src;
+#define QUEUE_FOR_COMPILE flags |= OVERLAY_QUEUED; SSoverlays.processing += src;
/atom/proc/cut_overlays(priority = FALSE)
var/list/cached_overlays = our_overlays
var/list/cached_priority = priority_overlays
-
+
var/need_compile = FALSE
if(LAZYLEN(cached_overlays)) //don't queue empty lists, don't cut priority overlays
@@ -165,7 +165,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays)
if(cut_old)
cut_overlays()
return
-
+
var/list/cached_other = other.our_overlays
if(cached_other)
if(cut_old || !LAZYLEN(our_overlays))
diff --git a/code/datums/action.dm b/code/datums/action.dm
index bd18d646e2..08239492f3 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -110,12 +110,8 @@
/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button)
if(icon_icon && button_icon_state && current_button.button_icon_state != button_icon_state)
- var/image/img
- img = image(icon_icon, current_button, button_icon_state)
- img.pixel_x = 0
- img.pixel_y = 0
current_button.cut_overlays(TRUE)
- current_button.add_overlay(img)
+ current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state))
current_button.button_icon_state = button_icon_state
diff --git a/code/datums/antagonists/datum_clockcult.dm b/code/datums/antagonists/datum_clockcult.dm
index 89be685f76..0c39b5a989 100644
--- a/code/datums/antagonists/datum_clockcult.dm
+++ b/code/datums/antagonists/datum_clockcult.dm
@@ -83,7 +83,7 @@
var/mob/living/silicon/ai/A = S
A.can_be_carded = FALSE
A.requires_power = POWER_REQ_CLOCKCULT
- var/list/AI_frame = list(image('icons/mob/clockwork_mobs.dmi', A, "aiframe")) //make the AI's cool frame
+ var/list/AI_frame = list(mutable_appearance('icons/mob/clockwork_mobs.dmi', "aiframe")) //make the AI's cool frame
for(var/d in GLOB.cardinal)
AI_frame += image('icons/mob/clockwork_mobs.dmi', A, "eye[rand(1, 10)]", dir = d) //the eyes are randomly fast or slow
A.add_overlay(AI_frame)
diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm
index 75c8379524..c798f35218 100644
--- a/code/datums/dog_fashion.dm
+++ b/code/datums/dog_fashion.dm
@@ -31,9 +31,9 @@
if(speak_emote)
D.speak_emote = speak_emote
-/datum/dog_fashion/proc/get_image(var/dir)
+/datum/dog_fashion/proc/get_overlay(var/dir)
if(icon_file && obj_icon_state)
- var/image/corgI = image(icon_file, icon_state = obj_icon_state, dir = dir)
+ var/image/corgI = image(icon_file, obj_icon_state, dir = dir)
corgI.alpha = obj_alpha
corgI.color = obj_color
return corgI
diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm
new file mode 100644
index 0000000000..1cb3a97d9f
--- /dev/null
+++ b/code/datums/mutable_appearance.dm
@@ -0,0 +1,18 @@
+// Mutable appearances are an inbuilt byond datastructure. Read the documentation on them by hitting F1 in DM.
+// Basically use them instead of images for overlays/underlays and when changing an object's appearance if you're doing so with any regularity.
+// Unless you need the overlay/underlay to have a different direction than the base object. Then you have to use an image due to a bug.
+
+// Mutable appearances are children of images, just so you know.
+
+/mutable_appearance/New()
+ ..()
+ plane = FLOAT_PLANE // No clue why this is 0 by default yet images are on FLOAT_PLANE
+ // And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var
+
+// Helper similar to image()
+/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER)
+ var/mutable_appearance/MA = new()
+ MA.icon = icon
+ MA.icon_state = icon_state
+ MA.layer = layer
+ return MA
\ No newline at end of file
diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm
index 55f2b03161..caab422e8b 100644
--- a/code/datums/mutations.dm
+++ b/code/datums/mutations.dm
@@ -15,7 +15,7 @@ GLOBAL_LIST_EMPTY(mutations_list)
var/lowest_value = 256 * 8
var/text_gain_indication = ""
var/text_lose_indication = ""
- var/list/visual_indicators = list()
+ var/list/mutable_appearance/visual_indicators = list()
var/layer_used = MUTATIONS_LAYER //which mutation layer to use
var/list/species_allowed = list() //to restrict mutation to only certain species
var/health_req //minimum health required to acquire the mutation
@@ -161,7 +161,7 @@ GLOBAL_LIST_EMPTY(mutations_list)
/datum/mutation/human/telekinesis/New()
..()
- visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead", "layer"=-MUTATIONS_LAYER)
+ visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER)
/datum/mutation/human/telekinesis/get_visual_indicator(mob/living/carbon/human/owner)
return visual_indicators[1]
@@ -180,7 +180,7 @@ GLOBAL_LIST_EMPTY(mutations_list)
/datum/mutation/human/cold_resistance/New()
..()
- visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="fire", "layer"=-MUTATIONS_LAYER)
+ visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "fire", -MUTATIONS_LAYER)
/datum/mutation/human/cold_resistance/get_visual_indicator(mob/living/carbon/human/owner)
return visual_indicators[1]
@@ -618,7 +618,7 @@ GLOBAL_LIST_EMPTY(mutations_list)
/datum/mutation/human/laser_eyes/New()
..()
- visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="lasereyes", "layer"=-FRONT_MUTATIONS_LAYER)
+ visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "lasereyes", -FRONT_MUTATIONS_LAYER)
/datum/mutation/human/laser_eyes/get_visual_indicator(mob/living/carbon/human/owner)
return visual_indicators[1]
@@ -640,11 +640,11 @@ GLOBAL_LIST_EMPTY(mutations_list)
var/list/mut_overlay = list()
if(overlays_standing[CM.layer_used])
mut_overlay = overlays_standing[CM.layer_used]
- var/image/V = CM.get_visual_indicator(src)
+ var/mutable_appearance/V = CM.get_visual_indicator(src)
if(!mut_overlay.Find(V)) //either we lack the visual indicator or we have the wrong one
remove_overlay(CM.layer_used)
- for(var/image/I in CM.visual_indicators)
- mut_overlay.Remove(I)
+ for(var/mutable_appearance/MA in CM.visual_indicators)
+ mut_overlay.Remove(MA)
mut_overlay |= V
overlays_standing[CM.layer_used] = mut_overlay
apply_overlay(CM.layer_used)
diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm
index 7a8bc7f517..46853995cb 100644
--- a/code/game/gamemodes/blob/blobs/blob_mobs.dm
+++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm
@@ -179,11 +179,11 @@
remove_atom_colour(FIXED_COLOUR_PRIORITY)
if(is_zombie)
copy_overlays(oldguy, TRUE)
- var/image/I = image('icons/mob/blob.dmi', icon_state = "blob_head")
+ var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head")
if(overmind)
- I.color = overmind.blob_reagent_datum.complementary_color
+ blob_head_overlay.color = overmind.blob_reagent_datum.complementary_color
color = initial(color)//looks better.
- add_overlay(I)
+ add_overlay(blob_head_overlay)
/mob/living/simple_animal/hostile/blob/blobspore/weak
name = "fragile blob spore"
diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm
index 7ae47f4c0e..6ee0a56cee 100644
--- a/code/game/gamemodes/blob/blobs/core.dm
+++ b/code/game/gamemodes/blob/blobs/core.dm
@@ -33,12 +33,11 @@
/obj/structure/blob/core/update_icon()
cut_overlays()
color = null
- var/image/I = new('icons/mob/blob.dmi', "blob")
+ var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob")
if(overmind)
- I.color = overmind.blob_reagent_datum.color
- add_overlay(I)
- var/image/C = new('icons/mob/blob.dmi', "blob_core_overlay")
- add_overlay(C)
+ blob_overlay.color = overmind.blob_reagent_datum.color
+ add_overlay(blob_overlay)
+ add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_core_overlay"))
/obj/structure/blob/core/Destroy()
GLOB.blob_cores -= src
diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm
index d778323ac2..ba92b7e03f 100644
--- a/code/game/gamemodes/blob/blobs/node.dm
+++ b/code/game/gamemodes/blob/blobs/node.dm
@@ -21,12 +21,11 @@
/obj/structure/blob/node/update_icon()
cut_overlays()
color = null
- var/image/I = new('icons/mob/blob.dmi', "blob")
+ var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob")
if(overmind)
- I.color = overmind.blob_reagent_datum.color
- add_overlay(I)
- var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay")
- add_overlay(C)
+ blob_overlay.color = overmind.blob_reagent_datum.color
+ add_overlay(blob_overlay)
+ add_overlay(mutable_appearance('icons/mob/blob.dmi', "blob_node_overlay"))
/obj/structure/blob/node/Destroy()
GLOB.blob_nodes -= src
diff --git a/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm b/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm
index 31b8801028..1203c7119a 100644
--- a/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm
+++ b/code/game/gamemodes/clock_cult/clock_structures/geis_binding.dm
@@ -42,8 +42,7 @@
icon_state = "geisbinding"
mob_layer = M.layer
layer = M.layer - 0.01
- var/image/GB = new('icons/effects/clockwork_effects.dmi', src, "geisbinding_top", M.layer + 0.01)
- add_overlay(GB)
+ add_overlay(mutable_appearance('icons/effects/clockwork_effects.dmi', "geisbinding_top", M.layer + 0.01))
for(var/obj/item/I in M.held_items)
M.dropItemToGround(I)
for(var/i in M.get_empty_held_indexes())
diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm
index ffc3d5e1a1..9b2d868730 100644
--- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm
+++ b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm
@@ -25,7 +25,7 @@
START_PROCESSING(SSobj, src)
send_to_playing_players("\"[text2ratvar("ONCE AGAIN MY LIGHT SHALL SHINE ACROSS THIS PATHETIC REALM")]!!\"")
send_to_playing_players('sound/effects/ratvar_reveal.ogg')
- var/image/alert_overlay = image('icons/effects/clockwork_effects.dmi', "ratvar_alert")
+ var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/clockwork_effects.dmi', "ratvar_alert")
var/area/A = get_area(src)
notify_ghosts("The Justiciar's light calls to you! Reach out to Ratvar in [A.name] to be granted a shell to spread his glory!", null, source = src, alert_overlay = alert_overlay)
INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency..proc/request, null, 0)
diff --git a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm
index 727f13fea4..22ea9e2ce5 100644
--- a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm
+++ b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm
@@ -14,8 +14,8 @@
debris = list(/obj/item/clockwork/alloy_shards/medium = 1, \
/obj/item/clockwork/alloy_shards/small = 6, \
/obj/item/clockwork/component/replicant_alloy/replication_plate = 1)
- var/image/daemon_glow
- var/image/component_glow
+ var/static/mutable_appearance/daemon_glow = mutable_appearance('icons/obj/clockwork_objects.dmi', "tinkerglow")
+ var/static/mutable_appearance/component_glow = mutable_appearance('icons/obj/clockwork_objects.dmi', "t_random_component")
var/component_id_to_produce
var/production_time = 0 //last time we produced a component
var/production_cooldown = 120
@@ -119,14 +119,9 @@
. = ..()
if(active)
var/component_color = get_component_color(component_id_to_produce)
- if(!daemon_glow)
- daemon_glow = new('icons/obj/clockwork_objects.dmi', "tinkerglow")
daemon_glow.color = component_color
add_overlay(daemon_glow)
- if(!component_glow)
- component_glow = new('icons/obj/clockwork_objects.dmi', "t_[component_id_to_produce ? component_id_to_produce :"random_component"]")
- else
- component_glow.icon_state = "t_[component_id_to_produce ? component_id_to_produce :"random_component"]"
+ component_glow.icon_state = "t_[component_id_to_produce ? component_id_to_produce :"random_component"]"
component_glow.color = component_color
add_overlay(component_glow)
production_time = world.time + production_cooldown //don't immediately produce when turned on after being off
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 8d87eeb4fc..a90aeb78bc 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -201,9 +201,9 @@
return 0
/obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands)
- . = list()
- if(!isinhands && current_charges)
- . += image(layer = MOB_LAYER+0.01, icon = 'icons/effects/effects.dmi', icon_state = "shield-cult")
+ . = list()
+ if(!isinhands && current_charges)
+ . += mutable_appearance('icons/effects/effects.dmi', "shield-cult", MOB_LAYER + 0.01)
/obj/item/clothing/suit/hooded/cultrobes/berserker
name = "flagellant's robes"
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 2e2ff9c46b..296b248938 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -775,11 +775,11 @@ structure_check() searches for nearby cultist structures required for the invoca
deltimer(density_timer)
air_update_turf(1)
if(density)
- var/image/I = image(layer = ABOVE_MOB_LAYER, icon = 'icons/effects/effects.dmi', icon_state = "barriershimmer")
- I.appearance_flags = RESET_COLOR
- I.alpha = 60
- I.color = "#701414"
- add_overlay(I)
+ var/mutable_appearance/shimmer = mutable_appearance('icons/effects/effects.dmi', "barriershimmer", ABOVE_MOB_LAYER)
+ shimmer.appearance_flags |= RESET_COLOR
+ shimmer.alpha = 60
+ shimmer.color = "#701414"
+ add_overlay(shimmer)
add_atom_colour("#FF0000", FIXED_COLOUR_PRIORITY)
else
cut_overlays()
diff --git a/code/game/gamemodes/devil/true_devil/inventory.dm b/code/game/gamemodes/devil/true_devil/inventory.dm
index c474eaf116..778c421616 100644
--- a/code/game/gamemodes/devil/true_devil/inventory.dm
+++ b/code/game/gamemodes/devil/true_devil/inventory.dm
@@ -5,7 +5,7 @@
return 0
/mob/living/carbon/true_devil/update_inv_hands()
- //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_image should use the down sprite when facing down, left, or right, and the up sprite when facing up.
+ //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_overlay should use the down sprite when facing down, left, or right, and the up sprite when facing up.
remove_overlay(DEVIL_HANDS_LAYER)
var/list/hands_overlays = list()
var/obj/item/l_hand = get_item_for_held_index(1) //hardcoded 2-hands only, for now.
@@ -17,9 +17,9 @@
if(!r_state)
r_state = r_hand.icon_state
- var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
+ var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
- hands_overlays += r_hand_image
+ hands_overlays += r_hand_overlay
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
r_hand.layer = ABOVE_HUD_LAYER
@@ -33,9 +33,9 @@
if(!l_state)
l_state = l_hand.icon_state
- var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
+ var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
- hands_overlays += l_hand_image
+ hands_overlays += l_hand_overlay
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
l_hand.layer = ABOVE_HUD_LAYER
@@ -54,6 +54,5 @@
/mob/living/carbon/true_devil/apply_overlay(cache_index)
- var/image/I = devil_overlays[cache_index]
- if(I)
- add_overlay(I)
+ if((. = devil_overlays[cache_index]))
+ add_overlay(.)
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 575db19f5c..1f01b38860 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -37,8 +37,8 @@
var/previous_level = ""
var/obj/item/nuke_core/core = null
var/deconstruction_state = NUKESTATE_INTACT
- var/image/lights = null
- var/image/interior = null
+ var/lights = ""
+ var/interior = ""
var/obj/effect/countdown/nuclearbomb/countdown
var/static/bomb_set
@@ -201,30 +201,32 @@
cut_overlay(interior)
switch(deconstruction_state)
if(NUKESTATE_UNSCREWED)
- interior = image(icon,"panel-unscrewed")
+ interior = "panel-unscrewed"
if(NUKESTATE_PANEL_REMOVED)
- interior = image(icon,"panel-removed")
+ interior = "panel-removed"
if(NUKESTATE_WELDED)
- interior = image(icon,"plate-welded")
+ interior = "plate-welded"
if(NUKESTATE_CORE_EXPOSED)
- interior = image(icon,"plate-removed")
+ interior = "plate-removed"
if(NUKESTATE_CORE_REMOVED)
- interior = image(icon,"core-removed")
+ interior = "core-removed"
if(NUKESTATE_INTACT)
- interior = null
+ return
add_overlay(interior)
/obj/machinery/nuclearbomb/proc/update_icon_lights()
- cut_overlay(lights)
+ if(lights)
+ cut_overlay(lights)
switch(get_nuke_state())
if(NUKE_OFF_LOCKED)
- lights = null
+ lights = ""
+ return
if(NUKE_OFF_UNLOCKED)
- lights = image(icon,"lights-safety")
+ lights = "lights-safety"
if(NUKE_ON_TIMING)
- lights = image(icon,"lights-timing")
+ lights = "lights-timing"
if(NUKE_ON_EXPLODING)
- lights = image(icon,"lights-exploding")
+ lights = "lights-exploding"
add_overlay(lights)
/obj/machinery/nuclearbomb/process()
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index 39bd31bdb7..753cd42a4f 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -96,7 +96,6 @@
return
if(!usr || !usr.canUseTopic(src) || usr.incapacitated() || stat || QDELETED(src))
return
- var/image/I = image(src) //For feedback message flavor
if(href_list["authenticate"])
var/obj/item/weapon/card/id/ID = usr.get_active_held_item()
if(!istype(ID))
@@ -117,24 +116,24 @@
authenticated = FALSE
auth_id = "\[NULL\]"
if(href_list["restore_logging"])
- to_chat(usr, "\icon[I] Logging functionality restored from backup data.")
+ to_chat(usr, "\icon[src] Logging functionality restored from backup data.")
emagged = FALSE
LAZYADD(logs, "-=- Logging restored to full functionality at this point -=-")
if(href_list["access_apc"])
playsound(src, "terminal_type", 50, 0)
var/obj/machinery/power/apc/APC = locate(href_list["access_apc"]) in GLOB.apcs_list
if(!APC || APC.aidisabled || APC.panel_open || QDELETED(APC))
- to_chat(usr, "\icon[I] APC does not return interface request. Remote access may be disabled.")
+ to_chat(usr, "\icon[src] APC does not return interface request. Remote access may be disabled.")
return
if(active_apc)
- to_chat(usr, "\icon[I] Disconnected from [active_apc].")
+ to_chat(usr, "\icon[src] Disconnected from [active_apc].")
active_apc.say("Remote access canceled. Interface locked.")
playsound(active_apc, 'sound/machines/BoltsDown.ogg', 25, 0)
playsound(active_apc, 'sound/machines/terminal_alert.ogg', 50, 0)
active_apc.locked = TRUE
active_apc.update_icon()
active_apc = null
- to_chat(usr, "\icon[I] Connected to APC in [get_area(APC)]. Interface request sent.")
+ to_chat(usr, "\icon[src] Connected to APC in [get_area(APC)]. Interface request sent.")
log_activity("remotely accessed APC in [get_area(APC)]")
APC.interact(usr, GLOB.not_incapacitated_state)
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm
index 0b61f19f0a..c97f487718 100644
--- a/code/game/machinery/computer/message.dm
+++ b/code/game/machinery/computer/message.dm
@@ -419,7 +419,7 @@
to_chat(H, "\icon[customrecepient] Message from [customsender] ([customjob]), \"[custommessage]\" (Reply)")
log_pda("[usr]/([usr.ckey]) (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]")
customrecepient.cut_overlays()
- customrecepient.add_overlay(image('icons/obj/pda.dmi', "pda-r"))
+ customrecepient.add_overlay(mutable_appearance('icons/obj/pda.dmi', "pda-r"))
//Sender is faking as someone who exists
else
src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]")
@@ -432,7 +432,7 @@
to_chat(H, "\icon[customrecepient] Message from [PDARec.owner] ([customjob]), \"[custommessage]\" (Reply)")
log_pda("[usr]/([usr.ckey]) (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]")
customrecepient.cut_overlays()
- customrecepient.add_overlay(image('icons/obj/pda.dmi', "pda-r"))
+ customrecepient.add_overlay(mutable_appearance('icons/obj/pda.dmi', "pda-r"))
//Finally..
ResetMessage()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index c8555e47ad..a9331cd142 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -366,13 +366,13 @@
set_airlock_overlays(state)
/obj/machinery/door/airlock/proc/set_airlock_overlays(state)
- var/image/frame_overlay
- var/image/filling_overlay
- var/image/lights_overlay
- var/image/panel_overlay
- var/image/weld_overlay
- var/image/damag_overlay
- var/image/sparks_overlay
+ var/mutable_appearance/frame_overlay
+ var/mutable_appearance/filling_overlay
+ var/mutable_appearance/lights_overlay
+ var/mutable_appearance/panel_overlay
+ var/mutable_appearance/weld_overlay
+ var/mutable_appearance/damag_overlay
+ var/mutable_appearance/sparks_overlay
switch(state)
if(AIRLOCK_CLOSED)
@@ -494,10 +494,8 @@
pass(A) //suppress unused warning
var/list/airlock_overlays = A.airlock_overlays
var/iconkey = "[icon_state][icon_file]"
- if(airlock_overlays[iconkey])
- return airlock_overlays[iconkey]
- airlock_overlays[iconkey] = image(icon_file, icon_state)
- return airlock_overlays[iconkey]
+ if((!(. = airlock_overlays[iconkey])))
+ . = airlock_overlays[iconkey] = mutable_appearance(icon_file, icon_state)
/obj/machinery/door/airlock/do_animate(animation)
switch(animation)
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index b37db06ac2..d9aafa1b5a 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -184,7 +184,7 @@
if(maptext)
maptext = ""
cut_overlays()
- add_overlay(image('icons/obj/status_display.dmi', icon_state=state))
+ add_overlay(mutable_appearance('icons/obj/status_display.dmi', state))
//Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index e4e1f7e75d..e6d8469943 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -36,27 +36,27 @@
else
add_overlay("beakeridle")
if(beaker.reagents.total_volume)
- var/image/filling = image('icons/obj/iv_drip.dmi', src, "reagent")
+ var/mutable_appearance/filling_overlay = mutable_appearance('icons/obj/iv_drip.dmi', "reagent")
var/percent = round((beaker.reagents.total_volume / beaker.volume) * 100)
switch(percent)
if(0 to 9)
- filling.icon_state = "reagent0"
+ filling_overlay.icon_state = "reagent0"
if(10 to 24)
- filling.icon_state = "reagent10"
+ filling_overlay.icon_state = "reagent10"
if(25 to 49)
- filling.icon_state = "reagent25"
+ filling_overlay.icon_state = "reagent25"
if(50 to 74)
- filling.icon_state = "reagent50"
+ filling_overlay.icon_state = "reagent50"
if(75 to 79)
- filling.icon_state = "reagent75"
+ filling_overlay.icon_state = "reagent75"
if(80 to 90)
- filling.icon_state = "reagent80"
+ filling_overlay.icon_state = "reagent80"
if(91 to INFINITY)
- filling.icon_state = "reagent100"
+ filling_overlay.icon_state = "reagent100"
- filling.icon += mix_color_from_reagents(beaker.reagents.reagent_list)
- add_overlay(filling)
+ filling_overlay.color = list("#0000", "#0000", "#0000", "#000f", mix_color_from_reagents(beaker.reagents.reagent_list))
+ add_overlay(filling_overlay)
/obj/machinery/iv_drip/MouseDrop(mob/living/target)
if(!ishuman(usr) || !usr.canUseTopic(src,BE_CLOSE) || !isliving(target))
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 60104fbc86..2b46183efe 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -146,7 +146,7 @@
/obj/machinery/status_display/proc/set_picture(state)
picture_state = state
remove_display()
- add_overlay(image('icons/obj/status_display.dmi', icon_state=picture_state))
+ add_overlay(picture_state)
/obj/machinery/status_display/proc/update_display(line1, line2)
var/new_text = {"
[line1]
[line2]
"}
@@ -278,7 +278,7 @@
/obj/machinery/ai_status_display/proc/set_picture(state)
picture_state = state
cut_overlays()
- add_overlay(image('icons/obj/status_display.dmi', icon_state=picture_state))
+ add_overlay(picture_state)
#undef CHARS_PER_LINE
#undef FOND_SIZE
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 3de0b85820..cbb4efd6b0 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -297,7 +297,7 @@
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
cut_overlays()
if(panel_open)
- add_overlay(image(icon, "[initial(icon_state)]-panel"))
+ add_overlay("[initial(icon_state)]-panel")
playsound(src.loc, W.usesound, 50, 1)
updateUsrDialog()
else
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index e2cccda880..1e36149ef9 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -186,7 +186,7 @@
var/full = contents.len ? 1 : 0
icon_state = "wm_[state_open]_[full]"
if(panel_open)
- add_overlay(image(icon, icon_state = "wm_panel"))
+ add_overlay("wm_panel")
/obj/machinery/washing_machine/attackby(obj/item/weapon/W, mob/user, params)
if(default_deconstruction_screwdriver(user, null, null, W))
diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm
index ae1f1d83ce..acc9a2a087 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -23,7 +23,7 @@
AI.apply_damage(150, BURN) //Give the AI a bit of damage from the "shock" of being suddenly shut down
AI.death() //The damage is not enough to kill the AI, but to be 'corrupted files' in need of repair.
AI.forceMove(src) //Put the dead AI inside the wreckage for recovery
- add_overlay(image('icons/obj/projectiles.dmi', icon_state = "green_laser")) //Overlay for the recovery beacon
+ add_overlay(mutable_appearance('icons/obj/projectiles.dmi', "green_laser")) //Overlay for the recovery beacon
AI.controlled_mech = null
AI.remote_control = null
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 28bb48fc05..aca6b7a778 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -48,9 +48,9 @@
if (hides)
cut_overlays()
if(hides < 3)
- add_overlay(image("icon" = "mecha.dmi", "icon_state" = occupant ? "ripley-g" : "ripley-g-open"))
+ add_overlay(occupant ? "ripley-g" : "ripley-g-open")
else
- add_overlay(image("icon" = "mecha.dmi", "icon_state" = occupant ? "ripley-g-full" : "ripley-g-full-open"))
+ add_overlay(occupant ? "ripley-g-full" : "ripley-g-full-open")
/obj/mecha/working/ripley/firefighter
diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm
index 0d4b578653..7727b4d9e9 100644
--- a/code/game/objects/effects/decals/cleanable/humans.dm
+++ b/code/game/objects/effects/decals/cleanable/humans.dm
@@ -161,23 +161,15 @@
for(var/Ddir in GLOB.cardinal)
if(entered_dirs & Ddir)
- var/image/I
- if(GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"])
- I = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"]
- else
- I = image(icon,"[blood_state]1",dir = Ddir)
- GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = I
- if(I)
- add_overlay(I)
+ var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"]
+ if(!bloodstep_overlay)
+ GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]1", dir = Ddir)
+ add_overlay(bloodstep_overlay)
if(exited_dirs & Ddir)
- var/image/I
- if(GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"])
- I = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"]
- else
- I = image(icon,"[blood_state]2",dir = Ddir)
- GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = I
- if(I)
- add_overlay(I)
+ var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"]
+ if(!bloodstep_overlay)
+ GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]2", dir = Ddir)
+ add_overlay(bloodstep_overlay)
alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index fa2dee2495..8dc9bd89b2 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -1,4 +1,4 @@
-GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/effects/fire.dmi', "icon_state" = "fire"))
+GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/effects/fire.dmi', "fire"))
GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
// if true, everyone item when created will have its name changed to be
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 098d337123..039237c63c 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -521,7 +521,7 @@
/obj/item/weapon/storage/crayons/update_icon()
cut_overlays()
for(var/obj/item/toy/crayon/crayon in contents)
- add_overlay(image('icons/obj/crayons.dmi',crayon.item_color))
+ add_overlay(mutable_appearance('icons/obj/crayons.dmi', crayon.item_color))
/obj/item/weapon/storage/crayons/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/toy/crayon))
@@ -667,10 +667,9 @@
icon_state = is_capped ? icon_capped : icon_uncapped
if(use_overlays)
cut_overlays()
- var/image/I = image('icons/obj/crayons.dmi',
- icon_state = "[is_capped ? "spraycan_cap_colors" : "spraycan_colors"]")
- I.color = paint_color
- add_overlay(I)
+ var/mutable_appearance/spray_overlay = mutable_appearance('icons/obj/crayons.dmi', "[is_capped ? "spraycan_cap_colors" : "spraycan_colors"]")
+ spray_overlay.color = paint_color
+ add_overlay(spray_overlay)
/obj/item/toy/crayon/spraycan/gang
//desc = "A modified container containing suspicious paint."
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 5e49db24a4..4a64cf5c0d 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -51,7 +51,7 @@ GLOBAL_LIST_EMPTY(PDAs)
var/obj/item/device/paicard/pai = null // A slot for a personal AI device
- var/image/photo = null //Scanned photo
+ var/icon/photo //Scanned photo
var/list/contained_item = list(/obj/item/weapon/pen, /obj/item/toy/crayon, /obj/item/weapon/lipstick, /obj/item/device/flashlight/pen, /obj/item/clothing/mask/cigarette)
var/obj/item/inserted_item //Used for pen, crayon, and lipstick insertion or removal. Same as above.
@@ -82,22 +82,24 @@ GLOBAL_LIST_EMPTY(PDAs)
/obj/item/device/pda/update_icon()
cut_overlays()
+ var/mutable_appearance/overlay = new()
+ overlay.pixel_x = overlays_x_offset
if(id)
- var/image/I = image(icon_state = "id_overlay", pixel_x = overlays_x_offset)
- add_overlay(I)
+ overlay.icon_state = "id_overlay"
+ add_overlay(new /mutable_appearance(overlay))
if(inserted_item)
- var/image/I = image(icon_state = "insert_overlay", pixel_x = overlays_x_offset)
- add_overlay(I)
+ overlay.icon_state = "insert_overlay"
+ add_overlay(new /mutable_appearance(overlay))
if(fon)
- var/image/I = image(icon_state = "light_overlay", pixel_x = overlays_x_offset)
- add_overlay(I)
+ overlay.icon_state = "light_overlay"
+ add_overlay(new /mutable_appearance(overlay))
if(pai)
if(pai.pai)
- var/image/I = image(icon_state = "pai_overlay", pixel_x = overlays_x_offset)
- add_overlay(I)
+ overlay.icon_state = "pai_overlay"
+ add_overlay(new /mutable_appearance(overlay))
else
- var/image/I = image(icon_state = "pai_off_overlay", pixel_x = overlays_x_offset)
- add_overlay(I)
+ overlay.icon_state = "pai_off_overlay"
+ add_overlay(new /mutable_appearance(overlay))
/obj/item/device/pda/MouseDrop(obj/over_object, src_location, over_location)
var/mob/M = usr
@@ -633,7 +635,7 @@ GLOBAL_LIST_EMPTY(PDAs)
to_chat(L, "\icon[src] Message from [source.owner] ([source.ownjob]), \"[msg.message]\"[msg.get_photo_ref()] (Reply)")
update_icon()
- add_overlay(image(icon, icon_alert))
+ add_overlay(icon_alert)
/obj/item/device/pda/proc/show_to_ghosts(mob/living/user, datum/data_pda_msg/msg,multiple = 0)
for(var/mob/M in GLOB.player_list)
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index d7cf9b0b9b..4f0d61c1b7 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -23,6 +23,7 @@
update_icon() //Whatever happened, update the card's state (icon, name) to match.
/obj/item/device/aicard/update_icon()
+ cut_overlays()
if(AI)
name = "[initial(name)]- [AI.name]"
if(AI.stat == DEAD)
@@ -30,12 +31,11 @@
else
icon_state = "aicard-full"
if(!AI.control_disabled)
- add_overlay(image('icons/obj/aicards.dmi', "aicard-on"))
+ add_overlay("aicard-on")
AI.cancel_camera()
else
name = initial(name)
icon_state = initial(icon_state)
- cut_overlays()
/obj/item/device/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index fa54e7787b..496702aa4d 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -344,8 +344,9 @@
cut_overlays()
set_light(0)
else if(on)
- var/image/I = image(icon,"glowstick-glow",color)
- add_overlay(I)
+ var/mutable_appearance/glowstick_overlay = mutable_appearance(icon, "glowstick-glow")
+ glowstick_overlay.color = color
+ add_overlay(glowstick_overlay)
item_state = "glowstick-on"
set_light(brightness_on)
else
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index c8c7cd1397..f38cad82f2 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -493,7 +493,7 @@
/obj/item/projectile/bullet/reusable/lollipop/New()
var/obj/item/weapon/reagent_containers/food/snacks/lollipop/S = new ammo_type(src)
color2 = S.headcolor
- var/image/head = image(icon = 'icons/obj/projectiles.dmi', icon_state = "lollipop_2")
+ var/mutable_appearance/head = mutable_appearance('icons/obj/projectiles.dmi', "lollipop_2")
head.color = color2
add_overlay(head)
diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm
index f1271b3cb9..3a7a92f701 100644
--- a/code/game/objects/items/shooting_range.dm
+++ b/code/game/objects/items/shooting_range.dm
@@ -73,18 +73,18 @@
if(hp <= 0)
visible_message("[src] breaks into tiny pieces and collapses!")
qdel(src)
- var/image/I = image("icon"='icons/effects/effects.dmi', "icon_state"="scorch", "layer"=OBJ_LAYER+0.5)
- I.pixel_x = p_x - 1 //offset correction
- I.pixel_y = p_y - 1
+ var/image/bullet_hole = image('icons/effects/effects.dmi', "scorch", OBJ_LAYER + 0.5)
+ bullet_hole.pixel_x = p_x - 1 //offset correction
+ bullet_hole.pixel_y = p_y - 1
if(decaltype == DECALTYPE_SCORCH)
- I.setDir(pick(NORTH,SOUTH,EAST,WEST))// random scorch design
+ bullet_hole.setDir(pick(NORTH,SOUTH,EAST,WEST))// random scorch design
if(P.damage >= 20 || istype(P, /obj/item/projectile/beam/practice))
- I.setDir(pick(NORTH,SOUTH,EAST,WEST))
+ bullet_hole.setDir(pick(NORTH,SOUTH,EAST,WEST))
else
- I.icon_state = "light_scorch"
+ bullet_hole.icon_state = "light_scorch"
else
- I.icon_state = "dent"
- add_overlay(I)
+ bullet_hole.icon_state = "dent"
+ add_overlay(bullet_hole)
return
return -1
diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm
index 5613891326..e32d365298 100644
--- a/code/game/objects/items/weapons/chrono_eraser.dm
+++ b/code/game/objects/items/weapons/chrono_eraser.dm
@@ -155,7 +155,7 @@
var/mob/living/captured = null
var/obj/item/weapon/gun/energy/chrono_gun/gun = null
var/tickstokill = 15
- var/image/mob_underlay = null
+ var/mutable_appearance/mob_underlay
var/preloaded = 0
var/RPpos = null
@@ -172,7 +172,7 @@
mob_icon.Blend(removing_frame, ICON_MULTIPLY)
cached_icon.Insert(mob_icon, "frame[i]")
- mob_underlay = new(cached_icon, "frame1")
+ mob_underlay = mutable_appearance(cached_icon, "frame1")
update_icon()
desc = initial(desc) + "
It appears to contain [target.name]."
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index d7ba81590e..3cf5305dcb 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -496,11 +496,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/weapon/lighter/greyscale/update_icon()
cut_overlays()
- var/image/I = image(icon,"[initial(icon_state)]_base")
- I.appearance_flags = RESET_COLOR //the edging doesn't change color
+ var/mutable_appearance/base_overlay = mutable_appearance(icon,"[initial(icon_state)]_base")
+ base_overlay.appearance_flags = RESET_COLOR //the edging doesn't change color
if(lit)
- I.icon_state = "[initial(icon_state)]_on"
- add_overlay(I)
+ base_overlay.icon_state = "[initial(icon_state)]_on"
+ add_overlay(base_overlay)
/obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user)
. = "After some fiddling, [user] manages to light [A] with [src]."
@@ -651,9 +651,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
screw = 1
to_chat(user, "You open the cap on the [src]")
if(super)
- add_overlay(image(icon, "vapeopen_med"))
+ add_overlay("vapeopen_med")
else
- add_overlay(image(icon, "vapeopen_low"))
+ add_overlay("vapeopen_low")
else
screw = 0
to_chat(user, "You close the cap on the [src]")
@@ -665,12 +665,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
cut_overlays()
super = 1
to_chat(user, "You increase the voltage in the [src]")
- add_overlay(image(icon, "vapeopen_med"))
+ add_overlay("vapeopen_med")
else
cut_overlays()
super = 0
to_chat(user, "You decrease the voltage in the [src]")
- add_overlay(image(icon, "vapeopen_low"))
+ add_overlay("vapeopen_low")
if(screw && emagged)
to_chat(user, "The [name] can't be modified!")
@@ -683,7 +683,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
emagged = 1
super = 0
to_chat(user, "You maximize the voltage in the [src]")
- add_overlay(image(icon, "vapeopen_high"))
+ add_overlay("vapeopen_high")
var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect
sp.set_up(5, 1, src)
sp.start()
diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm
index 785839ba2d..9d0ad5ab78 100644
--- a/code/game/objects/items/weapons/cosmetics.dm
+++ b/code/game/objects/items/weapons/cosmetics.dm
@@ -38,10 +38,10 @@
to_chat(user, "You twist \the [src] [open ? "closed" : "open"].")
open = !open
if(open)
- var/image/colored = image("icon"='icons/obj/items.dmi', "icon_state"="lipstick_uncap_color")
- colored.color = colour
+ var/mutable_appearance/colored_overlay = mutable_appearance(icon, "lipstick_uncap_color")
+ colored_overlay.color = colour
icon_state = "lipstick_uncap"
- add_overlay(colored)
+ add_overlay(colored_overlay)
else
icon_state = "lipstick"
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 5c637ba31c..756512dff1 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -16,7 +16,7 @@
/obj/item/weapon/c4/New()
wires = new /datum/wires/explosive/c4(src)
- image_overlay = image('icons/obj/grenade.dmi', "plastic-explosive2")
+ plastic_overlay = mutable_appearance(icon, "plastic-explosive2")
..()
/obj/item/weapon/c4/Destroy()
@@ -92,7 +92,7 @@
message_admins(message,0,1)
log_game("[key_name(user)] planted [name] on [target.name] at [COORD(target)] with [timer] second fuse")
- target.add_overlay(image_overlay, 1)
+ target.add_overlay(plastic_overlay, 1)
to_chat(user, "You plant the bomb. Timer counting down from [timer].")
addtimer(CALLBACK(src, .proc/explode), timer * 10)
@@ -103,7 +103,7 @@
if(target)
if(!QDELETED(target))
location = get_turf(target)
- target.cut_overlay(image_overlay, TRUE)
+ target.cut_overlay(plastic_overlay, TRUE)
else
location = get_turf(src)
if(location)
diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm
index 4c3e80ff6d..f4d573e3ba 100644
--- a/code/game/objects/items/weapons/grenades/ghettobomb.dm
+++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm
@@ -19,8 +19,8 @@
/obj/item/weapon/grenade/iedcasing/New(loc)
..()
- add_overlay(image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled"))
- add_overlay(image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_wired"))
+ add_overlay("improvised_grenade_filled")
+ add_overlay("improvised_grenade_wired")
times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value]
det_time = text2num(pickweight(times))
if(det_time < 0) //checking for 'duds'
@@ -33,13 +33,10 @@
..()
var/obj/item/weapon/reagent_containers/food/drinks/soda_cans/can = locate() in contents
if(can)
- var/muh_layer = can.layer
- var/muh_plane = can.plane
- can.layer = FLOAT_LAYER
- can.plane = FLOAT_PLANE
- underlays += can
- can.layer = muh_layer
- can.plane = muh_plane
+ var/mutable_appearance/can_underlay = new(can)
+ can_underlay.layer = FLOAT_LAYER
+ can_underlay.plane = FLOAT_PLANE
+ underlays += can_underlay
/obj/item/weapon/grenade/iedcasing/attack_self(mob/user) //
@@ -47,7 +44,7 @@
if(clown_check(user))
to_chat(user, "You light the [name]!")
active = 1
- cut_overlay(image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled"), TRUE) //this line make no sense
+ cut_overlay("improvised_grenade_filled")
icon_state = initial(icon_state) + "_active"
add_fingerprint(user)
var/turf/bombturf = get_turf(src)
diff --git a/code/game/objects/items/weapons/grenades/plastic.dm b/code/game/objects/items/weapons/grenades/plastic.dm
index 477a50330e..aedf0954c2 100644
--- a/code/game/objects/items/weapons/grenades/plastic.dm
+++ b/code/game/objects/items/weapons/grenades/plastic.dm
@@ -7,7 +7,7 @@
det_time = 10
display_timer = 0
var/atom/target = null
- var/image_overlay = null
+ var/mutable_appearance/plastic_overlay
var/obj/item/device/assembly_holder/nadeassembly = null
var/assemblyattacher
var/directional = FALSE
@@ -15,7 +15,7 @@
var/boom_sizes = list(0, 0, 3)
/obj/item/weapon/grenade/plastic/New()
- image_overlay = image('icons/obj/grenade.dmi', "[item_state]2")
+ plastic_overlay = mutable_appearance(icon, "[item_state]2")
..()
/obj/item/weapon/grenade/plastic/Destroy()
@@ -50,7 +50,7 @@
if(target)
if(!QDELETED(target))
location = get_turf(target)
- target.cut_overlay(image_overlay, TRUE)
+ target.cut_overlay(plastic_overlay, TRUE)
else
location = get_turf(src)
if(location)
@@ -111,7 +111,7 @@
message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [det_time] second fuse",0,1)
log_game("[key_name(user)] planted [name] on [target.name] at [COORD(src)] with [det_time] second fuse")
- target.add_overlay(image_overlay, 1)
+ target.add_overlay(plastic_overlay, 1)
if(!nadeassembly)
to_chat(user, "You plant the bomb. Timer counting down from [det_time].")
addtimer(CALLBACK(src, .proc/prime), det_time*10)
diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm
index d42e135aeb..571aece4c3 100644
--- a/code/game/objects/items/weapons/holy_weapons.dm
+++ b/code/game/objects/items/weapons/holy_weapons.dm
@@ -71,7 +71,7 @@
/obj/item/weapon/nullrod/staff/worn_overlays(isinhands)
. = list()
if(isinhands)
- . += image(layer = MOB_LAYER+0.01, icon = 'icons/effects/effects.dmi', icon_state = "[shield_icon]")
+ . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_LAYER + 0.01)
/obj/item/weapon/nullrod/staff/blue
name = "blue holy staff"
diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm
index c053b6ed47..61e68934b9 100644
--- a/code/game/objects/items/weapons/pneumaticCannon.dm
+++ b/code/game/objects/items/weapons/pneumaticCannon.dm
@@ -162,5 +162,5 @@
src.cut_overlays()
if(!tank)
return
- src.add_overlay(image('icons/obj/pneumaticCannon.dmi', "[tank.icon_state]"))
+ add_overlay(tank.icon_state)
src.update_icon()
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 9806dee20d..9b96571d6f 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -334,14 +334,14 @@
/obj/item/weapon/storage/bag/tray/proc/rebuild_overlays()
cut_overlays()
for(var/obj/item/I in contents)
- add_overlay(image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1))
+ add_overlay(mutable_appearance(I.icon, I.icon_state))
/obj/item/weapon/storage/bag/tray/remove_from_storage(obj/item/W as obj, atom/new_location)
..()
rebuild_overlays()
/obj/item/weapon/storage/bag/tray/handle_item_insertion(obj/item/I, prevent_warning = 0)
- add_overlay(image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1))
+ add_overlay(mutable_appearance(I.icon, I.icon_state))
. = ..()
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 9410b29ea0..646768cea8 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -38,7 +38,7 @@
. = ..()
if(illustration)
cut_overlays()
- add_overlay(image('icons/obj/storage.dmi', "[illustration]"))
+ add_overlay(illustration)
/obj/item/weapon/storage/box/attack_self(mob/user)
..()
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 3923bf9da9..0c63fa6dd8 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -141,12 +141,15 @@
add_overlay("[icon_state]_open")
var/i = contents.len
for(var/C in contents)
+ var/mutable_appearance/inserted_overlay = mutable_appearance(icon)
+ inserted_overlay.pixel_x = 1 * (i - 1)
if(istype(C, /obj/item/weapon/lighter/greyscale))
- add_overlay(image(icon = src.icon, icon_state = "lighter_in", pixel_x = 1 * (i -1)))
+ inserted_overlay.icon_state = "lighter_in"
else if(istype(C, /obj/item/weapon/lighter))
- add_overlay(image(icon = src.icon, icon_state = "zippo_in", pixel_x = 1 * (i -1)))
+ inserted_overlay.icon_state = "zippo_in"
else
- add_overlay(image(icon = src.icon, icon_state = "cigarette", pixel_x = 1 * (i -1)))
+ inserted_overlay.icon_state = "cigarette"
+ add_overlay(inserted_overlay)
i--
else
cut_overlays()
@@ -247,13 +250,14 @@
spawn_type = /obj/item/clothing/mask/cigarette/cigar
/obj/item/weapon/storage/fancy/cigarettes/cigars/update_icon()
+ cut_overlays()
if(fancy_open)
- cut_overlays()
add_overlay("[icon_state]_open")
+ var/mutable_appearance/cigar_overlay = mutable_appearance(icon, icon_type)
for(var/c = contents.len, c >= 1, c--)
- add_overlay(image(icon = src.icon, icon_state = icon_type, pixel_x = 4 * (c -1)))
+ cigar_overlay.pixel_x = 4 * (c - 1)
+ add_overlay(cigar_overlay)
else
- cut_overlays()
icon_state = "cigarcase"
/obj/item/weapon/storage/fancy/cigarettes/cigars/cohiba
diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm
index b628832aa7..f48a7150a7 100644
--- a/code/game/objects/items/weapons/storage/secure.dm
+++ b/code/game/objects/items/weapons/storage/secure.dm
@@ -94,7 +94,7 @@
else if ((src.code == src.l_code) && (src.l_set == 1))
src.locked = 0
cut_overlays()
- add_overlay(image('icons/obj/storage.dmi', icon_opened))
+ add_overlay(icon_opened)
src.code = null
else
src.code = "ERROR"
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index b72a197791..9740aa22a8 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -29,7 +29,7 @@
..()
cut_overlays()
if(has_latches)
- add_overlay(image('icons/obj/storage.dmi', "[latches]"))
+ add_overlay(latches)
/obj/item/weapon/storage/toolbox/suicide_act(mob/user)
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index ecca6aabfc..265e6bb2e5 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -370,7 +370,7 @@
cut_overlays()
if(reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi',icon_state = "backpack-10")
+ var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "backpack-10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
@@ -388,7 +388,7 @@
. = list()
//inhands + reagent_filling
if(!isinhands && reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi',icon_state = "backpackmob-10")
+ var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "backpackmob-10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm
index 45f082f72c..702e72842f 100644
--- a/code/game/objects/obj_defense.dm
+++ b/code/game/objects/obj_defense.dm
@@ -148,7 +148,7 @@
///// ACID
-GLOBAL_DATUM_INIT(acid_overlay, /image, image("icon" = 'icons/effects/effects.dmi', "icon_state" = "acid"))
+GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/effects/effects.dmi', "acid"))
//the obj's reaction when touched by acid
/obj/acid_act(acidpwr, acid_volume)
diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm
index f79e06e92d..ce3d0882ce 100644
--- a/code/game/objects/structures/beds_chairs/alien_nest.dm
+++ b/code/game/objects/structures/beds_chairs/alien_nest.dm
@@ -12,11 +12,7 @@
canSmoothWith = null
buildstacktype = null
flags = NODECONSTRUCT
- var/image/nest_overlay
-
-/obj/structure/bed/nest/New()
- nest_overlay = image('icons/mob/alien.dmi', "nestoverlay", layer=LYING_MOB_LAYER)
- return ..()
+ var/static/mutable_appearance/nest_overlay = mutable_appearance('icons/mob/alien.dmi', "nestoverlay", LYING_MOB_LAYER)
/obj/structure/bed/nest/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user)
if(has_buckled_mobs())
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index fdded787bd..87560f426f 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -145,11 +145,11 @@
obj_integrity = 70
max_integrity = 70
buildstackamount = 2
- var/image/armrest = null
+ var/mutable_appearance/armrest
item_chair = null
/obj/structure/chair/comfy/Initialize()
- armrest = image("icons/obj/chairs.dmi", "comfychair_armrest")
+ armrest = mutable_appearance('icons/obj/chairs.dmi', "comfychair_armrest")
armrest.layer = ABOVE_MOB_LAYER
return ..()
diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm
index 0183d3605f..aa590cfb29 100644
--- a/code/game/objects/structures/electricchair.dm
+++ b/code/game/objects/structures/electricchair.dm
@@ -8,7 +8,7 @@
/obj/structure/chair/e_chair/New()
..()
- add_overlay(image('icons/obj/chairs.dmi', src, "echair_over", MOB_LAYER + 1))
+ add_overlay(mutable_appearance('icons/obj/chairs.dmi', "echair_over", MOB_LAYER + 1))
/obj/structure/chair/e_chair/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench))
diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm
index 077e405616..be8c336c06 100644
--- a/code/game/objects/structures/guncase.dm
+++ b/code/game/objects/structures/guncase.dm
@@ -7,7 +7,7 @@
anchored = 0
density = 1
opacity = 0
- var/case_type = null
+ var/case_type = ""
var/gun_category = /obj/item/weapon/gun
var/open = 1
var/capacity = 4
@@ -25,8 +25,10 @@
/obj/structure/guncase/update_icon()
cut_overlays()
if(case_type && LAZYLEN(contents))
+ var/mutable_appearance/gun_overlay = mutable_appearance(icon, case_type)
for(var/i in 1 to contents.len)
- add_overlay(image(icon = src.icon, icon_state = "[case_type]", pixel_x = 3 * (i - 1) ))
+ gun_overlay.pixel_x = 3 * (i - 1)
+ add_overlay(gun_overlay)
if(open)
add_overlay("[icon_state]_open")
else
diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm
index eae2041a31..730b9e057c 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube.dm
@@ -143,21 +143,21 @@
/obj/structure/transit_tube/proc/create_tube_overlay(direction, shift_dir)
- var/image/I
+ var/image/tube_overlay = new(dir = direction)
if(shift_dir)
- I = image(loc = src, icon_state = "decorative_diag", dir = direction)
+ tube_overlay.icon_state = "decorative_diag"
switch(shift_dir)
if(NORTH)
- I.pixel_y = 32
+ tube_overlay.pixel_y = 32
if(SOUTH)
- I.pixel_y = -32
+ tube_overlay.pixel_y = -32
if(EAST)
- I.pixel_x = 32
+ tube_overlay.pixel_x = 32
if(WEST)
- I.pixel_x = -32
+ tube_overlay.pixel_x = -32
else
- I = image(loc = src, icon_state = "decorative", dir = direction)
- add_overlay(I)
+ tube_overlay.icon_state = "decorative"
+ add_overlay(tube_overlay)
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 56a8d0410c..3db570db83 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -239,7 +239,7 @@
qdel(mymist)
if(on)
- add_overlay(image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir))
+ add_overlay(mutable_appearance('icons/obj/watercloset.dmi', "water", MOB_LAYER + 1))
if(watertemp == "freezing")
return
if(!ismist)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index ac1748c694..0b2563a7b0 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -18,7 +18,7 @@
var/fulltile = 0
var/glass_type = /obj/item/stack/sheet/glass
var/glass_amount = 1
- var/image/crack_overlay
+ var/static/mutable_appearance/crack_overlay = mutable_appearance('icons/obj/structures.dmi')
var/list/debris = list()
can_be_unanchored = 1
resistance_flags = ACID_PROOF
@@ -377,10 +377,10 @@
if(smooth)
queue_smooth(src)
- cut_overlay(crack_overlay)
+ cut_overlays()
if(ratio > 75)
return
- crack_overlay = image('icons/obj/structures.dmi',"damage[ratio]",-(layer+0.1))
+ crack_overlay.icon_state = "damage[ratio]"
add_overlay(crack_overlay)
/obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm
index f8cb0d1be3..741d4f2958 100644
--- a/code/game/turfs/closed.dm
+++ b/code/game/turfs/closed.dm
@@ -71,10 +71,8 @@
/turf/closed/indestructible/fakeglass/Initialize()
..()
icon_state = null //set the icon state to null, so our base state isn't visible
- var/image/I = image('icons/obj/structures.dmi', loc = src, icon_state = "grille")
- underlays += I //add a grille underlay
- I = image('icons/turf/floors.dmi', loc = src, icon_state = "plating")
- underlays += I //add the plating underlay, below the grille
+ underlays += mutable_appearance('icons/obj/structures.dmi', "grille") //add a grille underlay
+ underlays += mutable_appearance('icons/turf/floors.dmi', "plating") //add the plating underlay, below the grille
/turf/closed/indestructible/fakedoor
name = "Centcom Access"
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index ee5527c0f5..7183d33ef9 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -3,7 +3,7 @@
var/wet = 0
var/wet_time = 0 // Time in seconds that this floor will be wet for.
- var/image/wet_overlay = null
+ var/mutable_appearance/wet_overlay
/turf/open/indestructible
name = "floor"
@@ -183,17 +183,22 @@
if(wet_setting != TURF_DRY)
if(wet_overlay)
cut_overlay(wet_overlay)
- wet_overlay = null
+ else
+ wet_overlay = mutable_appearance()
var/turf/open/floor/F = src
if(istype(F))
if(wet_setting == TURF_WET_PERMAFROST)
- wet_overlay = image('icons/effects/water.dmi', src, "ice_floor")
+ wet_overlay.icon = 'icons/effects/water.dmi'
+ wet_overlay.icon_state = "ice_floor"
else if(wet_setting == TURF_WET_ICE)
- wet_overlay = image('icons/turf/overlays.dmi', src, "snowfloor")
+ wet_overlay.icon = 'icons/turf/overlays.dmi'
+ wet_overlay.icon_state = "snowfloor"
else
- wet_overlay = image('icons/effects/water.dmi', src, "wet_floor_static")
+ wet_overlay.icon = 'icons/effects/water.dmi'
+ wet_overlay.icon_state = "wet_floor_static"
else
- wet_overlay = image('icons/effects/water.dmi', src, "wet_static")
+ wet_overlay.icon = 'icons/effects/water.dmi'
+ wet_overlay.icon_state = "wet_static"
add_overlay(wet_overlay)
HandleWet()
diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm
index d418c0a48a..5805d75e56 100644
--- a/code/game/turfs/simulated/minerals.dm
+++ b/code/game/turfs/simulated/minerals.dm
@@ -21,7 +21,7 @@
var/spread = 0 //will the seam spread?
var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles
var/last_act = 0
- var/scan_state = null //Holder for the image we display when we're pinged by a mining scanner
+ var/scan_state = "" //Holder for the image we display when we're pinged by a mining scanner
var/defer_change = 0
/turf/closed/mineral/Initialize()
@@ -380,7 +380,7 @@
var/stage = 0 //How far into the lifecycle of gibtonite we are, 0 is untouched, 1 is active and attempting to detonate, 2 is benign and ready for extraction
var/activated_ckey = null //These are to track who triggered the gibtonite deposit for logging purposes
var/activated_name = null
- var/activated_image = null
+ var/mutable_appearance/activated_overlay
/turf/closed/mineral/gibtonite/Initialize()
det_time = rand(8,10) //So you don't know exactly when the hot potato will explode
@@ -394,9 +394,8 @@
/turf/closed/mineral/gibtonite/proc/explosive_reaction(mob/user = null, triggered_by_explosion = 0)
if(stage == 0)
- var/image/I = image('icons/turf/smoothrocks.dmi', loc = src, icon_state = "rock_Gibtonite_active", layer = ON_EDGED_TURF_LAYER)
- add_overlay(I)
- activated_image = I
+ activated_overlay = mutable_appearance('icons/turf/smoothrocks.dmi', "rock_Gibtonite_active", ON_EDGED_TURF_LAYER)
+ add_overlay(activated_overlay)
name = "gibtonite deposit"
desc = "An active gibtonite reserve. Run!"
stage = 1
@@ -433,9 +432,9 @@
/turf/closed/mineral/gibtonite/proc/defuse()
if(stage == 1)
- cut_overlay(activated_image)
- var/image/I = image('icons/turf/smoothrocks.dmi', loc = src, icon_state = "rock_Gibtonite_inactive", layer = ON_EDGED_TURF_LAYER)
- add_overlay(I)
+ cut_overlay(activated_overlay)
+ activated_overlay.icon_state = "rock_Gibtonite_inactive"
+ add_overlay(activated_overlay)
desc = "An inactive gibtonite reserve. The ore can be extracted."
stage = 2
if(det_time < 0)
diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm
index 70d70c899a..39f31183a2 100644
--- a/code/modules/admin/verbs/pray.dm
+++ b/code/modules/admin/verbs/pray.dm
@@ -17,18 +17,18 @@
if(src.client.handle_spam_prevention(msg,MUTE_PRAY))
return
- var/image/cross = image('icons/obj/storage.dmi',"bible")
+ var/mutable_appearance/cross = mutable_appearance('icons/obj/storage.dmi', "bible")
var/font_color = "purple"
var/prayer_type = "PRAYER"
var/deity
if(usr.job == "Chaplain")
- cross = image('icons/obj/storage.dmi',"kingyellow")
+ cross.icon_state = "kingyellow"
font_color = "blue"
prayer_type = "CHAPLAIN PRAYER"
if(SSreligion.deity)
deity = SSreligion.deity
else if(iscultist(usr))
- cross = image('icons/obj/storage.dmi',"tome")
+ cross.icon_state = "tome"
font_color = "red"
prayer_type = "CULTIST PRAYER"
deity = "Nar-Sie"
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index 8b1e92743d..0b6f2db5b7 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -44,14 +44,11 @@
add_overlay("[O]_l")
if(a_right)
- var/list/images = list()
- images += image(icon, icon_state = "[a_right.icon_state]_left")
+ var/mutable_appearance/right = mutable_appearance(icon, "[a_right.icon_state]_left")
+ right.transform = matrix(-1, 0, 0, 0, 1, 0)
for(var/O in a_right.attached_overlays)
- images += image(icon, icon_state = "[O]_l")
- var/matrix = matrix(-1, 0, 0, 0, 1, 0)
- for(var/image/I in images)
- I.transform = matrix
- add_overlay(I)
+ right.add_overlay("[O]_l")
+ add_overlay(right)
if(master)
master.update_icon()
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index a838f53da7..cfe3719423 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -201,17 +201,10 @@ Pipelines + Other Objects -> Pipe network
//Generate a unique identifier for this image combination
var/identifier = iconsetids[iconset] + "_[iconstate]_[direction]_[col]"
- var/image/img
- if(pipeimages[identifier] == null)
- img = image(iconset, icon_state=iconstate, dir=direction)
- img.color = col
-
- pipeimages[identifier] = img
-
- else
- img = pipeimages[identifier]
-
- return img
+ if((!(. = pipeimages[identifier])))
+ var/image/pipe_overlay
+ pipe_overlay = . = pipeimages[identifier] = image(iconset, iconstate, dir = direction)
+ pipe_overlay.color = col
/obj/machinery/atmospherics/on_construction(pipe_type, obj_color)
if(can_unwrench)
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index 8b55ce14fc..d12204d8ad 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -98,12 +98,11 @@
/obj/machinery/atmospherics/miner/update_icon()
overlays.Cut()
if(broken)
- var/image/A = image(icon, "broken")
- add_overlay(A)
+ add_overlay("broken")
else if(active)
- var/image/A = image(icon, "on")
- A.color = overlay_color
- add_overlay(A)
+ var/mutable_appearance/on_overlay = mutable_appearance(icon, "on")
+ on_overlay.color = overlay_color
+ add_overlay(on_overlay)
/obj/machinery/atmospherics/miner/process()
update_power()
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 81eea35aba..3b5b93ce6f 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -250,9 +250,9 @@ BLIND // can't see anything
. = list()
if(!isinhands)
if(damaged_clothes)
- . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedgloves")
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves")
if(blood_DNA)
- . += image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands")
+ . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands")
/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE)
..()
@@ -278,9 +278,9 @@ BLIND // can't see anything
. = list()
if(!isinhands)
if(damaged_clothes)
- . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedhelmet")
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet")
if(blood_DNA)
- . += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood")
+ . += mutable_appearance('icons/effects/blood.dmi', "helmetblood")
/obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE)
..()
@@ -303,9 +303,9 @@ BLIND // can't see anything
if(!isinhands)
if(body_parts_covered & HEAD)
if(damaged_clothes)
- . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedmask")
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
if(blood_DNA)
- . += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood")
+ . += mutable_appearance('icons/effects/blood.dmi', "maskblood")
//Mask
@@ -325,9 +325,9 @@ BLIND // can't see anything
if(!isinhands)
if(body_parts_covered & HEAD)
if(damaged_clothes)
- . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedmask")
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
if(blood_DNA)
- . += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood")
+ . += mutable_appearance('icons/effects/blood.dmi', "maskblood")
/obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE)
..()
@@ -399,9 +399,9 @@ BLIND // can't see anything
bloody = bloody_shoes[BLOOD_STATE_HUMAN]
if(damaged_clothes)
- . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damagedshoe")
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe")
if(bloody)
- . += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood")
+ . += mutable_appearance('icons/effects/blood.dmi', "shoeblood")
/obj/item/clothing/shoes/equipped(mob/user, slot)
. = ..()
@@ -454,9 +454,9 @@ BLIND // can't see anything
. = list()
if(!isinhands)
if(damaged_clothes)
- . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damaged[blood_overlay_type]")
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]")
if(blood_DNA)
- . += image("icon"='icons/effects/blood.dmi', "icon_state"="[blood_overlay_type]blood")
+ . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood")
/obj/item/clothing/suit/update_clothes_damaged_state(damaging = TRUE)
..()
@@ -533,17 +533,17 @@ BLIND // can't see anything
if(!isinhands)
if(damaged_clothes)
- . += image("icon"='icons/effects/item_damage.dmi', "icon_state"="damageduniform")
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform")
if(blood_DNA)
- . += image("icon"='icons/effects/blood.dmi', "icon_state"="uniformblood")
+ . += mutable_appearance('icons/effects/blood.dmi', "uniformblood")
if(hastie)
var/tie_color = hastie.item_color
if(!tie_color)
tie_color = hastie.icon_state
- var/image/tI = image("icon"='icons/mob/ties.dmi', "icon_state"="[tie_color]")
- tI.alpha = hastie.alpha
- tI.color = hastie.color
- . += tI
+ var/mutable_appearance/tie = mutable_appearance('icons/mob/ties.dmi', "[tie_color]")
+ tie.alpha = hastie.alpha
+ tie.color = hastie.color
+ . += tie
/obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE)
..()
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index 15e4d3f885..10924c233a 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -30,7 +30,6 @@
var/list/hands_nodrop = list()
var/obj/item/clothing/head/helmet/space/chronos/helmet = null
var/obj/effect/chronos_cam/camera = null
- var/image/phase_underlay = null
var/datum/action/innate/chrono_teleport/teleport_now = new
var/activating = 0
var/activated = 0
@@ -97,10 +96,6 @@
for(var/obj/item/I in user.held_items)
if(I in hands_nodrop)
I.flags &= ~NODROP
- if(phase_underlay && !QDELETED(phase_underlay))
- user.underlays -= phase_underlay
- qdel(phase_underlay)
- phase_underlay = null
if(camera)
camera.remove_target_ui()
camera.loc = user
@@ -133,8 +128,6 @@
user.ExtinguishMob()
- phase_underlay = create_phase_underlay(user)
-
hands_nodrop = list()
for(var/obj/item/I in user.held_items)
if(!(I.flags & NODROP))
@@ -171,15 +164,6 @@
else
finish_chronowalk(user, to_turf)
-
-/obj/item/clothing/suit/space/chronos/proc/create_phase_underlay(var/mob/user)
- var/icon/user_icon = icon('icons/effects/alphacolors.dmi', "")
- user_icon.AddAlphaMask(getFlatIcon(user))
- var/image/phase = new(user_icon)
- phase.appearance_flags = RESET_COLOR|RESET_ALPHA
- user.underlays += phase
- return phase
-
/obj/item/clothing/suit/space/chronos/process()
if(activated)
var/mob/living/carbon/human/user = src.loc
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index d8a0c97f51..0c3d20892f 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -597,9 +597,9 @@
C.update_inv_wear_suit()
/obj/item/clothing/suit/space/hardsuit/shielded/worn_overlays(isinhands)
- . = list()
- if(!isinhands)
- . += image(layer = MOB_LAYER+0.01, icon = 'icons/effects/effects.dmi', icon_state = "[shield_state]")
+ . = list()
+ if(!isinhands)
+ . += mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER + 0.01)
/obj/item/clothing/head/helmet/space/hardsuit/shielded
resistance_flags = FIRE_PROOF | ACID_PROOF
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 8772f20212..66339b8c86 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -1,546 +1,545 @@
-/*
- * Contains:
- * Lasertag
- * Costume
- * Misc
- */
-
-/*
- * Lasertag
- */
-/obj/item/clothing/suit/bluetag
- name = "blue laser tag armor"
- desc = "A piece of plastic armor. It has sensors that react to red light." //Lasers are concentrated light
- icon_state = "bluetag"
- item_state = "bluetag"
- blood_overlay_type = "armor"
- body_parts_covered = CHEST
- allowed = list (/obj/item/weapon/gun/energy/laser/bluetag)
- resistance_flags = 0
-
-/obj/item/clothing/suit/redtag
- name = "red laser tag armor"
- desc = "A piece of plastic armor. It has sensors that react to blue light."
- icon_state = "redtag"
- item_state = "redtag"
- blood_overlay_type = "armor"
- body_parts_covered = CHEST
- allowed = list (/obj/item/weapon/gun/energy/laser/redtag)
- resistance_flags = 0
-
-/*
- * Costume
- */
-/obj/item/clothing/suit/pirate
- name = "pirate coat"
- desc = "Yarr."
- icon_state = "pirate"
- item_state = "pirate"
- allowed = list(/obj/item/weapon/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/weapon/reagent_containers/food/drinks/bottle/rum)
-
-/obj/item/clothing/suit/pirate/captain
- name = "pirate captain coat"
- desc = "Yarr."
- icon_state = "hgpirate"
- item_state = "hgpirate"
-
-
-/obj/item/clothing/suit/cyborg_suit
- name = "cyborg suit"
- desc = "Suit for a cyborg costume."
- icon_state = "death"
- item_state = "death"
- flags = CONDUCT
- fire_resist = T0C+5200
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/justice
- name = "justice suit"
- desc = "this pretty much looks ridiculous" //Needs no fixing
- icon_state = "justice"
- item_state = "justice"
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/judgerobe
- name = "judge's robe"
- desc = "This robe commands authority."
- icon_state = "judge"
- item_state = "judge"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- allowed = list(/obj/item/weapon/storage/fancy/cigarettes,/obj/item/stack/spacecash)
- flags_inv = HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/apron/overalls
- name = "coveralls"
- desc = "A set of denim overalls."
- icon_state = "overalls"
- item_state = "overalls"
- body_parts_covered = CHEST|GROIN|LEGS
-
-
-/obj/item/clothing/suit/syndicatefake
- name = "black and red space suit replica"
- icon_state = "syndicate-black-red"
- item_state = "syndicate-black-red"
- desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!"
- w_class = WEIGHT_CLASS_NORMAL
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy)
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- resistance_flags = 0
-
-/obj/item/clothing/suit/hastur
- name = "\improper Hastur's robe"
- desc = "Robes not meant to be worn by man."
- icon_state = "hastur"
- item_state = "hastur"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/imperium_monk
- name = "\improper Imperium monk suit"
- desc = "Have YOU killed a xeno today?"
- icon_state = "imperium_monk"
- item_state = "imperium_monk"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDESHOES|HIDEJUMPSUIT
- allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
-
-
-/obj/item/clothing/suit/chickensuit
- name = "chicken suit"
- desc = "A suit made long ago by the ancient empire KFC."
- icon_state = "chickensuit"
- item_state = "chickensuit"
- body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET
- flags_inv = HIDESHOES|HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/monkeysuit
- name = "monkey suit"
- desc = "A suit that looks like a primate."
- icon_state = "monkeysuit"
- item_state = "monkeysuit"
- body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET|HANDS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-/obj/item/clothing/suit/toggle/owlwings
- name = "owl cloak"
- desc = "A soft brown cloak made of synthetic feathers. Soft to the touch, stylish, and a 2 meter wing span that will drive the ladies mad."
- icon_state = "owl_wings"
- item_state = "owl_wings"
- togglename = "wings"
- body_parts_covered = ARMS|CHEST
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/ballistic,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
- actions_types = list(/datum/action/item_action/toggle_wings)
-
-/obj/item/clothing/suit/toggle/owlwings/griffinwings
- name = "griffon cloak"
- desc = "A plush white cloak made of synthetic feathers. Soft to the touch, stylish, and a 2 meter wing span that will drive your captives mad."
- icon_state = "griffin_wings"
- item_state = "griffin_wings"
-
-
-/obj/item/clothing/suit/holidaypriest
- name = "holiday priest"
- desc = "This is a nice holiday, my son."
- icon_state = "holidaypriest"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEJUMPSUIT
- allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
-
-/obj/item/clothing/suit/cardborg
- name = "cardborg suit"
- desc = "An ordinary cardboard box with holes cut in the sides."
- icon_state = "cardborg"
- item_state = "cardborg"
- body_parts_covered = CHEST|GROIN
- flags_inv = HIDEJUMPSUIT
- dog_fashion = /datum/dog_fashion/back
-
-/obj/item/clothing/suit/cardborg/equipped(mob/living/user, slot)
- ..()
- if(slot == slot_wear_suit)
- disguise(user)
-
-/obj/item/clothing/suit/cardborg/dropped(mob/living/user)
- ..()
- user.remove_alt_appearance("standard_borg_disguise")
-
-/obj/item/clothing/suit/cardborg/proc/disguise(mob/living/carbon/human/H, obj/item/clothing/head/cardborg/borghead)
- if(istype(H))
- if(!borghead)
- borghead = H.head
- if(istype(borghead, /obj/item/clothing/head/cardborg)) //why is this done this way? because equipped() is called BEFORE THE ITEM IS IN THE SLOT WHYYYY
- var/image/I = image(icon = 'icons/mob/robots.dmi' , icon_state = "robot", loc = H)
- I.override = 1
- I.add_overlay(image(icon = 'icons/mob/robots.dmi' , icon_state = "robot_e")) //gotta look realistic
+/*
+ * Contains:
+ * Lasertag
+ * Costume
+ * Misc
+ */
+
+/*
+ * Lasertag
+ */
+/obj/item/clothing/suit/bluetag
+ name = "blue laser tag armor"
+ desc = "A piece of plastic armor. It has sensors that react to red light." //Lasers are concentrated light
+ icon_state = "bluetag"
+ item_state = "bluetag"
+ blood_overlay_type = "armor"
+ body_parts_covered = CHEST
+ allowed = list (/obj/item/weapon/gun/energy/laser/bluetag)
+ resistance_flags = 0
+
+/obj/item/clothing/suit/redtag
+ name = "red laser tag armor"
+ desc = "A piece of plastic armor. It has sensors that react to blue light."
+ icon_state = "redtag"
+ item_state = "redtag"
+ blood_overlay_type = "armor"
+ body_parts_covered = CHEST
+ allowed = list (/obj/item/weapon/gun/energy/laser/redtag)
+ resistance_flags = 0
+
+/*
+ * Costume
+ */
+/obj/item/clothing/suit/pirate
+ name = "pirate coat"
+ desc = "Yarr."
+ icon_state = "pirate"
+ item_state = "pirate"
+ allowed = list(/obj/item/weapon/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/weapon/reagent_containers/food/drinks/bottle/rum)
+
+/obj/item/clothing/suit/pirate/captain
+ name = "pirate captain coat"
+ desc = "Yarr."
+ icon_state = "hgpirate"
+ item_state = "hgpirate"
+
+
+/obj/item/clothing/suit/cyborg_suit
+ name = "cyborg suit"
+ desc = "Suit for a cyborg costume."
+ icon_state = "death"
+ item_state = "death"
+ flags = CONDUCT
+ fire_resist = T0C+5200
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+
+
+/obj/item/clothing/suit/justice
+ name = "justice suit"
+ desc = "this pretty much looks ridiculous" //Needs no fixing
+ icon_state = "justice"
+ item_state = "justice"
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+
+
+/obj/item/clothing/suit/judgerobe
+ name = "judge's robe"
+ desc = "This robe commands authority."
+ icon_state = "judge"
+ item_state = "judge"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ allowed = list(/obj/item/weapon/storage/fancy/cigarettes,/obj/item/stack/spacecash)
+ flags_inv = HIDEJUMPSUIT
+
+
+/obj/item/clothing/suit/apron/overalls
+ name = "coveralls"
+ desc = "A set of denim overalls."
+ icon_state = "overalls"
+ item_state = "overalls"
+ body_parts_covered = CHEST|GROIN|LEGS
+
+
+/obj/item/clothing/suit/syndicatefake
+ name = "black and red space suit replica"
+ icon_state = "syndicate-black-red"
+ item_state = "syndicate-black-red"
+ desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!"
+ w_class = WEIGHT_CLASS_NORMAL
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy)
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+ resistance_flags = 0
+
+/obj/item/clothing/suit/hastur
+ name = "\improper Hastur's robe"
+ desc = "Robes not meant to be worn by man."
+ icon_state = "hastur"
+ item_state = "hastur"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+
+
+/obj/item/clothing/suit/imperium_monk
+ name = "\improper Imperium monk suit"
+ desc = "Have YOU killed a xeno today?"
+ icon_state = "imperium_monk"
+ item_state = "imperium_monk"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ flags_inv = HIDESHOES|HIDEJUMPSUIT
+ allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
+
+
+/obj/item/clothing/suit/chickensuit
+ name = "chicken suit"
+ desc = "A suit made long ago by the ancient empire KFC."
+ icon_state = "chickensuit"
+ item_state = "chickensuit"
+ body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET
+ flags_inv = HIDESHOES|HIDEJUMPSUIT
+
+
+/obj/item/clothing/suit/monkeysuit
+ name = "monkey suit"
+ desc = "A suit that looks like a primate."
+ icon_state = "monkeysuit"
+ item_state = "monkeysuit"
+ body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET|HANDS
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+
+/obj/item/clothing/suit/toggle/owlwings
+ name = "owl cloak"
+ desc = "A soft brown cloak made of synthetic feathers. Soft to the touch, stylish, and a 2 meter wing span that will drive the ladies mad."
+ icon_state = "owl_wings"
+ item_state = "owl_wings"
+ togglename = "wings"
+ body_parts_covered = ARMS|CHEST
+ allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/ballistic,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
+ actions_types = list(/datum/action/item_action/toggle_wings)
+
+/obj/item/clothing/suit/toggle/owlwings/griffinwings
+ name = "griffon cloak"
+ desc = "A plush white cloak made of synthetic feathers. Soft to the touch, stylish, and a 2 meter wing span that will drive your captives mad."
+ icon_state = "griffin_wings"
+ item_state = "griffin_wings"
+
+
+/obj/item/clothing/suit/holidaypriest
+ name = "holiday priest"
+ desc = "This is a nice holiday, my son."
+ icon_state = "holidaypriest"
+ item_state = "w_suit"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ flags_inv = HIDEJUMPSUIT
+ allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
+
+/obj/item/clothing/suit/cardborg
+ name = "cardborg suit"
+ desc = "An ordinary cardboard box with holes cut in the sides."
+ icon_state = "cardborg"
+ item_state = "cardborg"
+ body_parts_covered = CHEST|GROIN
+ flags_inv = HIDEJUMPSUIT
+ dog_fashion = /datum/dog_fashion/back
+
+/obj/item/clothing/suit/cardborg/equipped(mob/living/user, slot)
+ ..()
+ if(slot == slot_wear_suit)
+ disguise(user)
+
+/obj/item/clothing/suit/cardborg/dropped(mob/living/user)
+ ..()
+ user.remove_alt_appearance("standard_borg_disguise")
+
+/obj/item/clothing/suit/cardborg/proc/disguise(mob/living/carbon/human/H, obj/item/clothing/head/cardborg/borghead)
+ if(istype(H))
+ if(!borghead)
+ borghead = H.head
+ if(istype(borghead, /obj/item/clothing/head/cardborg)) //why is this done this way? because equipped() is called BEFORE THE ITEM IS IN THE SLOT WHYYYY
+ var/image/I = image(icon = 'icons/mob/robots.dmi' , icon_state = "robot", loc = H)
+ I.override = 1
+ I.add_overlay(mutable_appearance('icons/mob/robots.dmi', "robot_e")) //gotta look realistic
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "standard_borg_disguise", I) //you look like a robot to robots! (including yourself because you're totally a robot)
-
-
-/obj/item/clothing/suit/snowman
- name = "snowman outfit"
- desc = "Two white spheres covered in white glitter. 'Tis the season."
- icon_state = "snowman"
- item_state = "snowman"
- body_parts_covered = CHEST|GROIN
- flags_inv = HIDEJUMPSUIT
-
-/obj/item/clothing/suit/poncho
- name = "poncho"
- desc = "Your classic, non-racist poncho."
- icon_state = "classicponcho"
- item_state = "classicponcho"
-
-/obj/item/clothing/suit/poncho/green
- name = "green poncho"
- desc = "Your classic, non-racist poncho. This one is green."
- icon_state = "greenponcho"
- item_state = "greenponcho"
-
-/obj/item/clothing/suit/poncho/red
- name = "red poncho"
- desc = "Your classic, non-racist poncho. This one is red."
- icon_state = "redponcho"
- item_state = "redponcho"
-
-/obj/item/clothing/suit/poncho/ponchoshame
- name = "poncho of shame"
- desc = "Forced to live on your shameful acting as a fake Mexican, you and your poncho have grown inseperable. Literally."
- icon_state = "ponchoshame"
- item_state = "ponchoshame"
- flags = NODROP
-
-/obj/item/clothing/suit/whitedress
- name = "white dress"
- desc = "A fancy white dress."
- icon_state = "white_dress"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|LEGS|FEET
- flags_inv = HIDEJUMPSUIT|HIDESHOES
-
-/obj/item/clothing/suit/hooded/carp_costume
- name = "carp costume"
- desc = "A costume made from 'synthetic' carp scales, it smells."
- icon_state = "carp_casual"
- item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too
- allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen, /obj/item/weapon/gun/ballistic/automatic/speargun)
- hoodtype = /obj/item/clothing/head/hooded/carp_hood
-
-/obj/item/clothing/head/hooded/carp_hood
- name = "carp hood"
- desc = "A hood attached to a carp costume."
- icon_state = "carp_casual"
- body_parts_covered = HEAD
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- flags_inv = HIDEHAIR|HIDEEARS
-
-/obj/item/clothing/suit/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts?
- name = "corgi costume"
- desc = "A costume that looks like someone made a human-like corgi, it won't guarantee belly rubs."
- icon_state = "ian"
- item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
- //cold_protection = CHEST|GROIN|ARMS
- //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- allowed = list()
- hoodtype = /obj/item/clothing/head/hooded/ian_hood
- dog_fashion = /datum/dog_fashion/back
-
-/obj/item/clothing/head/hooded/ian_hood
- name = "corgi hood"
- desc = "A hood that looks just like a corgi's head, it won't guarantee dog biscuits."
- icon_state = "ian"
- body_parts_covered = HEAD
- //cold_protection = HEAD
- //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- flags_inv = HIDEHAIR|HIDEEARS
-
-/obj/item/clothing/suit/hooded/bee_costume // It's Hip!
- name = "bee costume"
- desc = "Bee the true Queen!"
- icon_state = "bee"
- item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
- flags = THICKMATERIAL
- hoodtype = /obj/item/clothing/head/hooded/bee_hood
-
-/obj/item/clothing/head/hooded/bee_hood
- name = "bee hood"
- desc = "A hood attached to a bee costume."
- icon_state = "bee"
- body_parts_covered = HEAD
- flags = THICKMATERIAL
- flags_inv = HIDEHAIR|HIDEEARS
-
-/obj/item/clothing/suit/hooded/bloated_human //OH MY GOD WHAT HAVE YOU DONE!?!?!?
- name = "bloated human suit"
- desc = "A horribly bloated suit made from human skins."
- icon_state = "lingspacesuit"
- item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
- allowed = list()
- actions_types = list(/datum/action/item_action/toggle_human_head)
- hoodtype = /obj/item/clothing/head/hooded/human_head
-
-
-/obj/item/clothing/head/hooded/human_head
- name = "bloated human head"
- desc = "A horribly bloated and mismatched human head."
- icon_state = "lingspacehelmet"
- body_parts_covered = HEAD
- flags_cover = HEADCOVERSEYES
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/suit/security/officer/russian
- name = "russian officer's jacket"
- desc = "This jacket is for those special occasions when a russian officer isn't required to wear their armor."
- icon_state = "officertanjacket"
- item_state = "officertanjacket"
- body_parts_covered = CHEST|ARMS
-
-/*
- * Misc
- */
-
-/obj/item/clothing/suit/straight_jacket
- name = "straight jacket"
- desc = "A suit that completely restrains the wearer. Manufactured by Antyphun Corp." //Straight jacket is antifun
- icon_state = "straight_jacket"
- item_state = "straight_jacket"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- strip_delay = 60
- breakouttime = 3000
-
-/obj/item/clothing/suit/ianshirt
- name = "worn shirt"
- desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it, but it's pretty close. Good for sleeping in."
- icon_state = "ianshirt"
- item_state = "ianshirt"
-
-/obj/item/clothing/suit/nerdshirt
- name = "gamer shirt"
- desc = "A baggy shirt with vintage game character Phanic the Weasel. Why would anyone wear this?"
- icon_state = "nerdshirt"
- item_state = "nerdshirt"
-
-/obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat.
- name = "Vape Naysh shirt"
- desc = "A cheap white T-shirt with a big tacky \"VN\" on the front, Why would you wear this unironicly?"
- icon_state = "vapeshirt"
- item_state = "vapeshirt"
-
-/obj/item/clothing/suit/jacket
- name = "bomber jacket"
- desc = "Aviators not included."
- icon_state = "bomberjacket"
- item_state = "brownjsuit"
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/radio)
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-
-/obj/item/clothing/suit/jacket/leather
- name = "leather jacket"
- desc = "Pompadour not included."
- icon_state = "leatherjacket"
- item_state = "hostrench"
- resistance_flags = 0
- max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/weapon/gun/ballistic/automatic/pistol,/obj/item/weapon/gun/ballistic/revolver,/obj/item/weapon/gun/ballistic/revolver/detective,/obj/item/device/radio)
-
-/obj/item/clothing/suit/jacket/leather/overcoat
- name = "leather overcoat"
- desc = "That's a damn fine coat."
- icon_state = "leathercoat"
- body_parts_covered = CHEST|GROIN|ARMS|LEGS
- cold_protection = CHEST|GROIN|ARMS|LEGS
-
-/obj/item/clothing/suit/jacket/puffer
- name = "puffer jacket"
- desc = "A thick jacket with a rubbery, water-resistant shell."
- icon_state = "pufferjacket"
- item_state = "hostrench"
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 0, acid = 0)
-
-/obj/item/clothing/suit/jacket/puffer/vest
- name = "puffer vest"
- desc = "A thick vest with a rubbery, water-resistant shell."
- icon_state = "puffervest"
- item_state = "armor"
- body_parts_covered = CHEST|GROIN
- cold_protection = CHEST|GROIN
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 30, rad = 0, fire = 0, acid = 0)
-
-/obj/item/clothing/suit/jacket/miljacket
- name = "military jacket"
- desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable."
- icon_state = "militaryjacket"
- item_state = "militaryjacket"
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/weapon/gun/ballistic/automatic/pistol,/obj/item/weapon/gun/ballistic/revolver,/obj/item/weapon/gun/ballistic/revolver/detective,/obj/item/device/radio)
-
-/obj/item/clothing/suit/jacket/letterman
- name = "letterman jacket"
- desc = "A classic brown letterman jacket. Looks pretty hot and heavy."
- icon_state = "letterman"
- item_state = "letterman"
-
-/obj/item/clothing/suit/jacket/letterman_red
- name = "red letterman jacket"
- desc = "A letterman jacket in a sick red color. Radical."
- icon_state = "letterman_red"
- item_state = "letterman_red"
-
-/obj/item/clothing/suit/jacket/letterman_syndie
- name = "blood-red letterman jacket"
- desc = "Oddly, this jacket seems to have a large S on the back..."
- icon_state = "letterman_s"
- item_state = "letterman_s"
-
-/obj/item/clothing/suit/jacket/letterman_nanotrasen
- name = "blue letterman jacket"
- desc = "A blue letterman jacket with a proud Nanotrasen N on the back. The tag says that it was made in Space China."
- icon_state = "letterman_n"
- item_state = "letterman_n"
-
-/obj/item/clothing/suit/xenos
- name = "xenos suit"
- desc = "A suit made out of chitinous alien hide."
- icon_state = "xenos"
- item_state = "xenos_helm"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- allowed = list(/obj/item/clothing/mask/facehugger/toy)
-
-
-// WINTER COATS
-
-/obj/item/clothing/suit/hooded/wintercoat
- name = "winter coat"
- desc = "A heavy jacket made from 'synthetic' animal furs."
- icon_state = "coatwinter"
- item_state = "coatwinter"
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0)
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
-
-/obj/item/clothing/head/hooded/winterhood
- name = "winter hood"
- desc = "A hood attached to a heavy winter jacket."
- icon_state = "winterhood"
- body_parts_covered = HEAD
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- flags_inv = HIDEHAIR|HIDEEARS
-
-/obj/item/clothing/suit/hooded/wintercoat/captain
- name = "captain's winter coat"
- icon_state = "coatcaptain"
- item_state = "coatcaptain"
- armor = list(melee = 25, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50)
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/ballistic,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/captain
-
-/obj/item/clothing/head/hooded/winterhood/captain
- icon_state = "winterhood_captain"
-
-/obj/item/clothing/suit/hooded/wintercoat/security
- name = "security winter coat"
- icon_state = "coatsecurity"
- item_state = "coatsecurity"
- armor = list(melee = 25, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 45)
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/ballistic,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/security
-
-/obj/item/clothing/head/hooded/winterhood/security
- icon_state = "winterhood_security"
-
-/obj/item/clothing/suit/hooded/wintercoat/medical
- name = "medical winter coat"
- icon_state = "coatmedical"
- item_state = "coatmedical"
- allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 0, acid = 45)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/medical
-
-/obj/item/clothing/head/hooded/winterhood/medical
- icon_state = "winterhood_medical"
-
-/obj/item/clothing/suit/hooded/wintercoat/science
- name = "science winter coat"
- icon_state = "coatscience"
- item_state = "coatscience"
- allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0, fire = 0, acid = 0)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/science
-
-/obj/item/clothing/head/hooded/winterhood/science
- icon_state = "winterhood_science"
-
-/obj/item/clothing/suit/hooded/wintercoat/engineering
- name = "engineering winter coat"
- icon_state = "coatengineer"
- item_state = "coatengineer"
- armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20, fire = 30, acid = 45)
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/construction/rcd, /obj/item/weapon/pipe_dispenser)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering
-
-/obj/item/clothing/head/hooded/winterhood/engineering
- icon_state = "winterhood_engineer"
-
-/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos
- name = "atmospherics winter coat"
- icon_state = "coatatmos"
- item_state = "coatatmos"
- hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering/atmos
-
-/obj/item/clothing/head/hooded/winterhood/engineering/atmos
- icon_state = "winterhood_atmos"
-
-/obj/item/clothing/suit/hooded/wintercoat/hydro
- name = "hydroponics winter coat"
- icon_state = "coathydro"
- item_state = "coathydro"
- allowed = list(/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/cultivator,/obj/item/weapon/reagent_containers/spray/pestspray,/obj/item/weapon/hatchet,/obj/item/weapon/storage/bag/plants)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro
-
-/obj/item/clothing/head/hooded/winterhood/hydro
- icon_state = "winterhood_hydro"
-
-/obj/item/clothing/suit/hooded/wintercoat/cargo
- name = "cargo winter coat"
- icon_state = "coatcargo"
- item_state = "coatcargo"
- hoodtype = /obj/item/clothing/head/hooded/winterhood/cargo
-
-/obj/item/clothing/head/hooded/winterhood/cargo
- icon_state = "winterhood_cargo"
-
-/obj/item/clothing/suit/hooded/wintercoat/miner
- name = "mining winter coat"
- icon_state = "coatminer"
- item_state = "coatminer"
- allowed = list(/obj/item/weapon/pickaxe,/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
- armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/miner
-
-/obj/item/clothing/head/hooded/winterhood/miner
- icon_state = "winterhood_miner"
-
-/obj/item/clothing/suit/spookyghost
- name = "spooky ghost"
- desc = "this is obviously just a bedsheet, but maybe try it on?"
- icon_state = "bedsheet"
- user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = 1, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150)
- alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire
+
+/obj/item/clothing/suit/snowman
+ name = "snowman outfit"
+ desc = "Two white spheres covered in white glitter. 'Tis the season."
+ icon_state = "snowman"
+ item_state = "snowman"
+ body_parts_covered = CHEST|GROIN
+ flags_inv = HIDEJUMPSUIT
+
+/obj/item/clothing/suit/poncho
+ name = "poncho"
+ desc = "Your classic, non-racist poncho."
+ icon_state = "classicponcho"
+ item_state = "classicponcho"
+
+/obj/item/clothing/suit/poncho/green
+ name = "green poncho"
+ desc = "Your classic, non-racist poncho. This one is green."
+ icon_state = "greenponcho"
+ item_state = "greenponcho"
+
+/obj/item/clothing/suit/poncho/red
+ name = "red poncho"
+ desc = "Your classic, non-racist poncho. This one is red."
+ icon_state = "redponcho"
+ item_state = "redponcho"
+
+/obj/item/clothing/suit/poncho/ponchoshame
+ name = "poncho of shame"
+ desc = "Forced to live on your shameful acting as a fake Mexican, you and your poncho have grown inseperable. Literally."
+ icon_state = "ponchoshame"
+ item_state = "ponchoshame"
+ flags = NODROP
+
+/obj/item/clothing/suit/whitedress
+ name = "white dress"
+ desc = "A fancy white dress."
+ icon_state = "white_dress"
+ item_state = "w_suit"
+ body_parts_covered = CHEST|GROIN|LEGS|FEET
+ flags_inv = HIDEJUMPSUIT|HIDESHOES
+
+/obj/item/clothing/suit/hooded/carp_costume
+ name = "carp costume"
+ desc = "A costume made from 'synthetic' carp scales, it smells."
+ icon_state = "carp_casual"
+ item_state = "labcoat"
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too
+ allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen, /obj/item/weapon/gun/ballistic/automatic/speargun)
+ hoodtype = /obj/item/clothing/head/hooded/carp_hood
+
+/obj/item/clothing/head/hooded/carp_hood
+ name = "carp hood"
+ desc = "A hood attached to a carp costume."
+ icon_state = "carp_casual"
+ body_parts_covered = HEAD
+ cold_protection = HEAD
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ flags_inv = HIDEHAIR|HIDEEARS
+
+/obj/item/clothing/suit/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts?
+ name = "corgi costume"
+ desc = "A costume that looks like someone made a human-like corgi, it won't guarantee belly rubs."
+ icon_state = "ian"
+ item_state = "labcoat"
+ body_parts_covered = CHEST|GROIN|ARMS
+ //cold_protection = CHEST|GROIN|ARMS
+ //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ allowed = list()
+ hoodtype = /obj/item/clothing/head/hooded/ian_hood
+ dog_fashion = /datum/dog_fashion/back
+
+/obj/item/clothing/head/hooded/ian_hood
+ name = "corgi hood"
+ desc = "A hood that looks just like a corgi's head, it won't guarantee dog biscuits."
+ icon_state = "ian"
+ body_parts_covered = HEAD
+ //cold_protection = HEAD
+ //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ flags_inv = HIDEHAIR|HIDEEARS
+
+/obj/item/clothing/suit/hooded/bee_costume // It's Hip!
+ name = "bee costume"
+ desc = "Bee the true Queen!"
+ icon_state = "bee"
+ item_state = "labcoat"
+ body_parts_covered = CHEST|GROIN|ARMS
+ flags = THICKMATERIAL
+ hoodtype = /obj/item/clothing/head/hooded/bee_hood
+
+/obj/item/clothing/head/hooded/bee_hood
+ name = "bee hood"
+ desc = "A hood attached to a bee costume."
+ icon_state = "bee"
+ body_parts_covered = HEAD
+ flags = THICKMATERIAL
+ flags_inv = HIDEHAIR|HIDEEARS
+
+/obj/item/clothing/suit/hooded/bloated_human //OH MY GOD WHAT HAVE YOU DONE!?!?!?
+ name = "bloated human suit"
+ desc = "A horribly bloated suit made from human skins."
+ icon_state = "lingspacesuit"
+ item_state = "labcoat"
+ body_parts_covered = CHEST|GROIN|ARMS
+ allowed = list()
+ actions_types = list(/datum/action/item_action/toggle_human_head)
+ hoodtype = /obj/item/clothing/head/hooded/human_head
+
+
+/obj/item/clothing/head/hooded/human_head
+ name = "bloated human head"
+ desc = "A horribly bloated and mismatched human head."
+ icon_state = "lingspacehelmet"
+ body_parts_covered = HEAD
+ flags_cover = HEADCOVERSEYES
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
+
+/obj/item/clothing/suit/security/officer/russian
+ name = "russian officer's jacket"
+ desc = "This jacket is for those special occasions when a russian officer isn't required to wear their armor."
+ icon_state = "officertanjacket"
+ item_state = "officertanjacket"
+ body_parts_covered = CHEST|ARMS
+
+/*
+ * Misc
+ */
+
+/obj/item/clothing/suit/straight_jacket
+ name = "straight jacket"
+ desc = "A suit that completely restrains the wearer. Manufactured by Antyphun Corp." //Straight jacket is antifun
+ icon_state = "straight_jacket"
+ item_state = "straight_jacket"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+ strip_delay = 60
+ breakouttime = 3000
+
+/obj/item/clothing/suit/ianshirt
+ name = "worn shirt"
+ desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it, but it's pretty close. Good for sleeping in."
+ icon_state = "ianshirt"
+ item_state = "ianshirt"
+
+/obj/item/clothing/suit/nerdshirt
+ name = "gamer shirt"
+ desc = "A baggy shirt with vintage game character Phanic the Weasel. Why would anyone wear this?"
+ icon_state = "nerdshirt"
+ item_state = "nerdshirt"
+
+/obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat.
+ name = "Vape Naysh shirt"
+ desc = "A cheap white T-shirt with a big tacky \"VN\" on the front, Why would you wear this unironicly?"
+ icon_state = "vapeshirt"
+ item_state = "vapeshirt"
+
+/obj/item/clothing/suit/jacket
+ name = "bomber jacket"
+ desc = "Aviators not included."
+ icon_state = "bomberjacket"
+ item_state = "brownjsuit"
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/radio)
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+
+/obj/item/clothing/suit/jacket/leather
+ name = "leather jacket"
+ desc = "Pompadour not included."
+ icon_state = "leatherjacket"
+ item_state = "hostrench"
+ resistance_flags = 0
+ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/weapon/gun/ballistic/automatic/pistol,/obj/item/weapon/gun/ballistic/revolver,/obj/item/weapon/gun/ballistic/revolver/detective,/obj/item/device/radio)
+
+/obj/item/clothing/suit/jacket/leather/overcoat
+ name = "leather overcoat"
+ desc = "That's a damn fine coat."
+ icon_state = "leathercoat"
+ body_parts_covered = CHEST|GROIN|ARMS|LEGS
+ cold_protection = CHEST|GROIN|ARMS|LEGS
+
+/obj/item/clothing/suit/jacket/puffer
+ name = "puffer jacket"
+ desc = "A thick jacket with a rubbery, water-resistant shell."
+ icon_state = "pufferjacket"
+ item_state = "hostrench"
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 0, acid = 0)
+
+/obj/item/clothing/suit/jacket/puffer/vest
+ name = "puffer vest"
+ desc = "A thick vest with a rubbery, water-resistant shell."
+ icon_state = "puffervest"
+ item_state = "armor"
+ body_parts_covered = CHEST|GROIN
+ cold_protection = CHEST|GROIN
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 30, rad = 0, fire = 0, acid = 0)
+
+/obj/item/clothing/suit/jacket/miljacket
+ name = "military jacket"
+ desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable."
+ icon_state = "militaryjacket"
+ item_state = "militaryjacket"
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/weapon/gun/ballistic/automatic/pistol,/obj/item/weapon/gun/ballistic/revolver,/obj/item/weapon/gun/ballistic/revolver/detective,/obj/item/device/radio)
+
+/obj/item/clothing/suit/jacket/letterman
+ name = "letterman jacket"
+ desc = "A classic brown letterman jacket. Looks pretty hot and heavy."
+ icon_state = "letterman"
+ item_state = "letterman"
+
+/obj/item/clothing/suit/jacket/letterman_red
+ name = "red letterman jacket"
+ desc = "A letterman jacket in a sick red color. Radical."
+ icon_state = "letterman_red"
+ item_state = "letterman_red"
+
+/obj/item/clothing/suit/jacket/letterman_syndie
+ name = "blood-red letterman jacket"
+ desc = "Oddly, this jacket seems to have a large S on the back..."
+ icon_state = "letterman_s"
+ item_state = "letterman_s"
+
+/obj/item/clothing/suit/jacket/letterman_nanotrasen
+ name = "blue letterman jacket"
+ desc = "A blue letterman jacket with a proud Nanotrasen N on the back. The tag says that it was made in Space China."
+ icon_state = "letterman_n"
+ item_state = "letterman_n"
+
+/obj/item/clothing/suit/xenos
+ name = "xenos suit"
+ desc = "A suit made out of chitinous alien hide."
+ icon_state = "xenos"
+ item_state = "xenos_helm"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+ allowed = list(/obj/item/clothing/mask/facehugger/toy)
+
+
+// WINTER COATS
+
+/obj/item/clothing/suit/hooded/wintercoat
+ name = "winter coat"
+ desc = "A heavy jacket made from 'synthetic' animal furs."
+ icon_state = "coatwinter"
+ item_state = "coatwinter"
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
+
+/obj/item/clothing/head/hooded/winterhood
+ name = "winter hood"
+ desc = "A hood attached to a heavy winter jacket."
+ icon_state = "winterhood"
+ body_parts_covered = HEAD
+ cold_protection = HEAD
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ flags_inv = HIDEHAIR|HIDEEARS
+
+/obj/item/clothing/suit/hooded/wintercoat/captain
+ name = "captain's winter coat"
+ icon_state = "coatcaptain"
+ item_state = "coatcaptain"
+ armor = list(melee = 25, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50)
+ allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/ballistic,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/captain
+
+/obj/item/clothing/head/hooded/winterhood/captain
+ icon_state = "winterhood_captain"
+
+/obj/item/clothing/suit/hooded/wintercoat/security
+ name = "security winter coat"
+ icon_state = "coatsecurity"
+ item_state = "coatsecurity"
+ armor = list(melee = 25, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 45)
+ allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/ballistic,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/security
+
+/obj/item/clothing/head/hooded/winterhood/security
+ icon_state = "winterhood_security"
+
+/obj/item/clothing/suit/hooded/wintercoat/medical
+ name = "medical winter coat"
+ icon_state = "coatmedical"
+ item_state = "coatmedical"
+ allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 0, acid = 45)
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/medical
+
+/obj/item/clothing/head/hooded/winterhood/medical
+ icon_state = "winterhood_medical"
+
+/obj/item/clothing/suit/hooded/wintercoat/science
+ name = "science winter coat"
+ icon_state = "coatscience"
+ item_state = "coatscience"
+ allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0, fire = 0, acid = 0)
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/science
+
+/obj/item/clothing/head/hooded/winterhood/science
+ icon_state = "winterhood_science"
+
+/obj/item/clothing/suit/hooded/wintercoat/engineering
+ name = "engineering winter coat"
+ icon_state = "coatengineer"
+ item_state = "coatengineer"
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20, fire = 30, acid = 45)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/construction/rcd, /obj/item/weapon/pipe_dispenser)
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering
+
+/obj/item/clothing/head/hooded/winterhood/engineering
+ icon_state = "winterhood_engineer"
+
+/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos
+ name = "atmospherics winter coat"
+ icon_state = "coatatmos"
+ item_state = "coatatmos"
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering/atmos
+
+/obj/item/clothing/head/hooded/winterhood/engineering/atmos
+ icon_state = "winterhood_atmos"
+
+/obj/item/clothing/suit/hooded/wintercoat/hydro
+ name = "hydroponics winter coat"
+ icon_state = "coathydro"
+ item_state = "coathydro"
+ allowed = list(/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/cultivator,/obj/item/weapon/reagent_containers/spray/pestspray,/obj/item/weapon/hatchet,/obj/item/weapon/storage/bag/plants)
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro
+
+/obj/item/clothing/head/hooded/winterhood/hydro
+ icon_state = "winterhood_hydro"
+
+/obj/item/clothing/suit/hooded/wintercoat/cargo
+ name = "cargo winter coat"
+ icon_state = "coatcargo"
+ item_state = "coatcargo"
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/cargo
+
+/obj/item/clothing/head/hooded/winterhood/cargo
+ icon_state = "winterhood_cargo"
+
+/obj/item/clothing/suit/hooded/wintercoat/miner
+ name = "mining winter coat"
+ icon_state = "coatminer"
+ item_state = "coatminer"
+ allowed = list(/obj/item/weapon/pickaxe,/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
+ armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/miner
+
+/obj/item/clothing/head/hooded/winterhood/miner
+ icon_state = "winterhood_miner"
+
+/obj/item/clothing/suit/spookyghost
+ name = "spooky ghost"
+ desc = "this is obviously just a bedsheet, but maybe try it on?"
+ icon_state = "bedsheet"
+ user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = 1, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150)
+ alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire
diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm
index 06110adb82..aa6368cfd6 100644
--- a/code/modules/detectivework/evidence.dm
+++ b/code/modules/detectivework/evidence.dm
@@ -47,15 +47,12 @@
icon_state = "evidence"
- var/xx = I.pixel_x //save the offset of the item
- var/yy = I.pixel_y
- I.pixel_x = 0 //then remove it so it'll stay within the evidence bag
- I.pixel_y = 0
- var/image/img = image("icon"=I, "layer"=FLOAT_LAYER) //take a snapshot. (necessary to stop the underlays appearing under our inventory-HUD slots ~Carn
- img.plane = FLOAT_PLANE
- I.pixel_x = xx //and then return it
- I.pixel_y = yy
- add_overlay(img)
+ var/mutable_appearance/in_evidence = new(I)
+ in_evidence.plane = FLOAT_PLANE
+ in_evidence.layer = FLOAT_LAYER
+ in_evidence.pixel_x = 0
+ in_evidence.pixel_y = 0
+ add_overlay(in_evidence)
add_overlay("evidence") //should look nicer for transparent stuff. not really that important, but hey.
desc = "An evidence bag containing [I]. [I.desc]"
diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm
index 8f95552a4b..888b87cc02 100644
--- a/code/modules/events/portal_storm.dm
+++ b/code/modules/events/portal_storm.dm
@@ -34,10 +34,10 @@
var/list/hostile_types = list()
var/number_of_hostiles
var/list/station_areas = list()
- var/image/storm
+ var/mutable_appearance/storm
/datum/round_event/portal_storm/setup()
- storm = image('icons/obj/tesla_engine/energy_ball.dmi', "energy_ball_fast", layer=FLY_LAYER)
+ storm = storm = mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "energy_ball_fast", FLY_LAYER)
storm.color = "#00FF00"
station_areas = get_areas_in_z(ZLEVEL_STATION)
diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
index 7e2deff368..1e2710afb6 100644
--- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
@@ -22,9 +22,9 @@
if(R.glass_icon_state)
icon_state = R.glass_icon_state
else
- var/image/I = image(icon, "glassoverlay")
- I.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(I)
+ var/mutable_appearance/reagent_overlay = mutable_appearance(icon, "glassoverlay")
+ reagent_overlay.color = mix_color_from_reagents(reagents.reagent_list)
+ add_overlay(reagent_overlay)
else
icon_state = "glass_empty"
name = "drinking glass"
@@ -64,9 +64,9 @@
icon_state = largest_reagent.shot_glass_icon_state
else
icon_state = "shotglassclear"
- var/image/I = image(icon, "shotglassoverlay")
- I.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(I)
+ var/mutable_appearance/shot_overlay = mutable_appearance(icon, "shotglassoverlay")
+ shot_overlay.color = mix_color_from_reagents(reagents.reagent_list)
+ add_overlay(shot_overlay)
else
diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm
index 705319f7c3..3a6c2d91f6 100644
--- a/code/modules/food_and_drinks/food/customizables.dm
+++ b/code/modules/food_and_drinks/food/customizables.dm
@@ -101,37 +101,36 @@
filling_color = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3], rgbcolor[4])
/obj/item/weapon/reagent_containers/food/snacks/customizable/update_overlays(obj/item/weapon/reagent_containers/food/snacks/S)
- var/image/I = new(icon, "[initial(icon_state)]_filling")
+ var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling")
if(S.filling_color == "#FFFFFF")
- I.color = pick("#FF0000","#0000FF","#008000","#FFFF00")
+ filling.color = pick("#FF0000","#0000FF","#008000","#FFFF00")
else
- I.color = S.filling_color
+ filling.color = S.filling_color
switch(ingredients_placement)
if(INGREDIENTS_SCATTER)
- I.pixel_x = rand(-1,1)
- I.pixel_y = rand(-1,1)
+ filling.pixel_x = rand(-1,1)
+ filling.pixel_y = rand(-1,1)
if(INGREDIENTS_STACK)
- I.pixel_x = rand(-1,1)
- I.pixel_y = 2 * ingredients.len - 1
+ filling.pixel_x = rand(-1,1)
+ filling.pixel_y = 2 * ingredients.len - 1
if(INGREDIENTS_STACKPLUSTOP)
- I.pixel_x = rand(-1,1)
- I.pixel_y = 2 * ingredients.len - 1
+ filling.pixel_x = rand(-1,1)
+ filling.pixel_y = 2 * ingredients.len - 1
if(our_overlays)
our_overlays.Cut(ingredients.len) //???, add overlay calls later in this proc will queue the compile if necessary
- var/image/TOP = new(icon, "[icon_state]_top")
+ var/mutable_appearance/TOP = mutable_appearance(icon, "[icon_state]_top")
TOP.pixel_y = 2 * ingredients.len + 3
- add_overlay(I)
+ add_overlay(filling)
add_overlay(TOP)
return
if(INGREDIENTS_FILL)
cut_overlays()
- I.color = filling_color
+ filling.color = filling_color
if(INGREDIENTS_LINE)
- I.pixel_y = rand(-8,3)
- I.pixel_x = I.pixel_y
+ filling.pixel_x = filling.pixel_y = rand(-8,3)
- add_overlay(I)
+ add_overlay(filling)
/obj/item/weapon/reagent_containers/food/snacks/customizable/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/slice, reagents_per_slice)
@@ -248,14 +247,14 @@
name = "[customname] sandwich"
BS.reagents.trans_to(src, BS.reagents.total_volume)
ingMax = ingredients.len //can't add more ingredients after that
- var/image/TOP = new(icon, "[BS.icon_state]")
+ var/mutable_appearance/TOP = mutable_appearance(icon, "[BS.icon_state]")
TOP.pixel_y = 2 * ingredients.len + 3
add_overlay(TOP)
if(istype(BS, /obj/item/weapon/reagent_containers/food/snacks/breadslice/custom))
- var/image/O = new(icon, "[initial(BS.icon_state)]_filling")
- O.color = BS.filling_color
- O.pixel_y = 2 * ingredients.len + 3
- add_overlay(O)
+ var/mutable_appearance/filling = new(icon, "[initial(BS.icon_state)]_filling")
+ filling.color = BS.filling_color
+ filling.pixel_y = 2 * ingredients.len + 3
+ add_overlay(filling)
qdel(BS)
return
else
@@ -313,7 +312,7 @@
/obj/item/weapon/reagent_containers/glass/bowl/update_icon()
cut_overlays()
if(reagents && reagents.total_volume)
- var/image/filling = image('icons/obj/food/soupsalad.dmi', "fullbowl")
+ 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
diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm
index 96b8826971..d50c80567a 100644
--- a/code/modules/food_and_drinks/food/snacks.dm
+++ b/code/modules/food_and_drinks/food/snacks.dm
@@ -234,13 +234,13 @@
/obj/item/weapon/reagent_containers/food/snacks/proc/update_overlays(obj/item/weapon/reagent_containers/food/snacks/S)
cut_overlays()
- var/image/I = new(src.icon, "[initial(icon_state)]_filling")
+ var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling")
if(S.filling_color == "#FFFFFF")
- I.color = pick("#FF0000","#0000FF","#008000","#FFFF00")
+ filling.color = pick("#FF0000","#0000FF","#008000","#FFFF00")
else
- I.color = S.filling_color
+ filling.color = S.filling_color
- add_overlay(I)
+ add_overlay(filling)
// initialize_cooked_food() is called when microwaving the food
/obj/item/weapon/reagent_containers/food/snacks/proc/initialize_cooked_food(obj/item/weapon/reagent_containers/food/snacks/S, cooking_efficiency = 1)
diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm
index 625a0bfd56..c1b5a55ac0 100644
--- a/code/modules/food_and_drinks/food/snacks/meat.dm
+++ b/code/modules/food_and_drinks/food/snacks/meat.dm
@@ -17,9 +17,9 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/slice, reagents_per_slice)
..()
- var/image/I = new(icon, "rawcutlet_coloration")
- I.color = filling_color
- slice.add_overlay(I)
+ var/mutable_appearance/filling = mutable_appearance(icon, "rawcutlet_coloration")
+ filling.color = filling_color
+ slice.add_overlay(filling)
slice.filling_color = filling_color
slice.name = "raw [name] cutlet"
slice.meat_type = name
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index 4a9001c68f..6ec7fd9a1e 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -383,13 +383,13 @@
icon = 'icons/obj/lollipop.dmi'
icon_state = "lollipop_stick"
list_reagents = list("nutriment" = 1, "vitamin" = 1, "iron" = 10, "sugar" = 5, "omnizine" = 2) //Honk
- var/image/head
+ var/mutable_appearance/head
var/headcolor = rgb(0, 0, 0)
tastes = list("candy" = 1)
/obj/item/weapon/reagent_containers/food/snacks/lollipop/New()
..()
- head = image(icon = 'icons/obj/lollipop.dmi', icon_state = "lollipop_head")
+ head = mutable_appearance('icons/obj/lollipop.dmi', "lollipop_head")
change_head_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255)))
/obj/item/weapon/reagent_containers/food/snacks/lollipop/proc/change_head_color(C)
diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm
index 68ccce9f2f..27016d0c20 100644
--- a/code/modules/food_and_drinks/food/snacks_pie.dm
+++ b/code/modules/food_and_drinks/food/snacks_pie.dm
@@ -33,7 +33,7 @@
if(ishuman(hit_atom))
var/mob/living/carbon/human/H = hit_atom
- var/image/creamoverlay = image('icons/effects/creampie.dmi')
+ var/mutable_appearance/creamoverlay = mutable_appearance('icons/effects/creampie.dmi')
if(H.dna.species.id == "lizard")
creamoverlay.icon_state = "creampie_lizard"
else
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index 13442c4032..a4d9a32d3d 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -47,7 +47,7 @@
/obj/machinery/gibber/New()
..()
- src.add_overlay(image('icons/obj/kitchen.dmi', "grjam"))
+ add_overlay("grjam")
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/gibber(null)
B.apply_default_parts(src)
@@ -72,15 +72,15 @@
/obj/machinery/gibber/update_icon()
cut_overlays()
if (dirty)
- src.add_overlay(image('icons/obj/kitchen.dmi', "grbloody"))
+ add_overlay("grbloody")
if(stat & (NOPOWER|BROKEN))
return
if (!occupant)
- src.add_overlay(image('icons/obj/kitchen.dmi', "grjam"))
+ add_overlay("grjam")
else if (operating)
- src.add_overlay(image('icons/obj/kitchen.dmi', "gruse"))
+ add_overlay("gruse")
else
- src.add_overlay(image('icons/obj/kitchen.dmi', "gridle"))
+ add_overlay("gridle")
/obj/machinery/gibber/attack_paw(mob/user)
return src.attack_hand(user)
diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm
index 1403fe02f0..d6f6c0f32e 100644
--- a/code/modules/food_and_drinks/pizzabox.dm
+++ b/code/modules/food_and_drinks/pizzabox.dm
@@ -59,21 +59,20 @@
icon_state = "pizzabox_open"
if(pizza)
icon_state = "pizzabox_messy"
- var/image/pizzaimg = image(pizza.icon, icon_state = pizza.icon_state)
- pizzaimg.pixel_y = -3
- add_overlay(pizzaimg)
+ var/mutable_appearance/pizza_overlay = mutable_appearance(pizza.icon, pizza.icon_state)
+ pizza_overlay.pixel_y = -3
+ add_overlay(pizza_overlay)
if(bomb)
bomb.icon_state = "pizzabomb_[bomb_active ? "active" : "inactive"]"
- var/image/bombimg = image(bomb.icon, icon_state = bomb.icon_state)
- bombimg.pixel_y = 5
- add_overlay(bombimg)
- else
+ var/mutable_appearance/bomb_overlay = mutable_appearance(bomb.icon, bomb.icon_state)
+ bomb_overlay.pixel_y = 5
+ add_overlay(bomb_overlay)
icon_state = "pizzabox[boxes.len + 1]"
var/obj/item/pizzabox/box = boxes.len ? boxes[boxes.len] : src
if(box.boxtag != "")
- var/image/tagimg = image(icon, icon_state = "pizzabox_tag")
- tagimg.pixel_y = boxes.len * 3
- add_overlay(tagimg)
+ var/mutable_appearance/tag_overlay = mutable_appearance(icon, "pizzabox_tag")
+ tag_overlay.pixel_y = boxes.len * 3
+ add_overlay(tag_overlay)
/obj/item/pizzabox/attack_self(mob/user)
if(boxes.len > 0)
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index ebc9f84ae9..4e6f4c734e 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -234,31 +234,30 @@
if (cards.len == 1)
var/datum/playingcard/P = cards[1]
- var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") )
+ var/mutable_appearance/card_overlay = mutable_appearance(icon, (concealed ? "card_back" : "[P.card_icon]") )
- I.pixel_x = I.pixel_x + (-5 + rand(10))
- I.pixel_y = I.pixel_y + (-5 + rand(10))
+ card_overlay.pixel_x = card_overlay.pixel_x + (-5 + rand(10))
+ card_overlay.pixel_y = card_overlay.pixel_y + (-5 + rand(10))
- add_overlay(I)
+ add_overlay(card_overlay)
else
- var/origin = -12
- var/offset = round(32 / cards.len)
+ var/origin = -12
+ var/offset = round(32 / cards.len)
- var/i = 0
- var/image/I
+ var/i = 0
+ var/mutable_appearance/card_overlay
for(var/datum/playingcard/P in cards)
- I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") )
- I.pixel_x = origin + (offset * i)
+ card_overlay = mutable_appearance(icon, (concealed ? "card_back" : P.card_icon))
+ card_overlay.pixel_x = origin + (offset * i)
- add_overlay(I)
+ add_overlay(card_overlay)
+ i = i + 1
- i = i + 1
-
- var/html = ""
+ var/html = ""
for(var/datum/playingcard/card in cards)
- html = html + ""
+ html = html + ""
src.hi.updateContent("hand", html)
diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm
index 067162be8c..d418b40b81 100644
--- a/code/modules/holiday/easter.dm
+++ b/code/modules/holiday/easter.dm
@@ -73,8 +73,8 @@
/obj/item/weapon/storage/bag/easterbasket/proc/countEggs()
cut_overlays()
- add_overlay(image("icon" = icon, "icon_state" = "basket-grass", "layer" = -1))
- add_overlay(image("icon" = icon, "icon_state" = "basket-egg[contents.len <= 5 ? contents.len : 5]", "layer" = -1))
+ add_overlay("basket-grass")
+ add_overlay("basket-egg[min(contents.len, 5)]")
/obj/item/weapon/storage/bag/easterbasket/remove_from_storage(obj/item/W as obj, atom/new_location)
..()
diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm
index 442dd84aaf..85d623d1e9 100644
--- a/code/modules/hydroponics/beekeeping/honeycomb.dm
+++ b/code/modules/hydroponics/beekeeping/honeycomb.dm
@@ -21,13 +21,11 @@
/obj/item/weapon/reagent_containers/honeycomb/update_icon()
cut_overlays()
- var/image/honey
+ var/mutable_appearance/honey_overlay = mutable_appearance(icon, "honey")
if(honey_color)
- honey = image(icon = 'icons/obj/hydroponics/harvest.dmi', icon_state = "greyscale_honey")
- honey.color = honey_color
- else
- honey = image(icon = 'icons/obj/hydroponics/harvest.dmi', icon_state = "honey")
- add_overlay(honey)
+ honey_overlay.icon_state = "greyscale_honey"
+ honey_overlay.color = honey_color
+ add_overlay(honey_overlay)
/obj/item/weapon/reagent_containers/honeycomb/proc/set_reagent(reagent)
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index 2c995695d1..6a1c877b97 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -116,8 +116,9 @@
can_buckle = 1
buckle_requires_restraints = 1
to_chat(user, "You add a rod to [src].")
- var/image/U = image(icon='icons/obj/hydroponics/equipment.dmi',icon_state="bonfire_rod",pixel_y=16)
- underlays += U
+ var/mutable_appearance/rod_underlay = mutable_appearance('icons/obj/hydroponics/equipment.dmi', "bonfire_rod")
+ rod_underlay.pixel_y = 16
+ underlays += rod_underlay
if(W.is_hot())
StartBurning()
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index a034612092..b26a911b3a 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -259,7 +259,7 @@
if(istype(src, /obj/machinery/hydroponics/soil))
add_atom_colour(rgb(255, 175, 0), FIXED_COLOUR_PRIORITY)
else
- add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "gaia_blessing"))
+ overlays += mutable_appearance('icons/obj/hydroponics/equipment.dmi', "gaia_blessing")
set_light(3)
update_icon_hoses()
@@ -287,31 +287,30 @@
icon_state = "hoses-[n]"
/obj/machinery/hydroponics/proc/update_icon_plant()
- var/image/I
+ var/mutable_appearance/plant_overlay = mutable_appearance(myseed.growing_icon, layer = OBJ_LAYER + 0.01)
if(dead)
- I = image(icon = myseed.growing_icon, icon_state = myseed.icon_dead)
+ plant_overlay.icon_state = myseed.icon_dead
else if(harvest)
if(!myseed.icon_harvest)
- I = image(icon = myseed.growing_icon, icon_state = "[myseed.icon_grow][myseed.growthstages]")
+ plant_overlay.icon_state = "[myseed.icon_grow][myseed.growthstages]"
else
- I = image(icon = myseed.growing_icon, icon_state = myseed.icon_harvest)
+ plant_overlay.icon_state = myseed.icon_harvest
else
var/t_growthstate = min(round((age / myseed.maturation) * myseed.growthstages), myseed.growthstages)
- I = image(icon = myseed.growing_icon, icon_state = "[myseed.icon_grow][t_growthstate]")
- I.layer = OBJ_LAYER + 0.01
- add_overlay(I)
+ plant_overlay.icon_state = "[myseed.icon_grow][t_growthstate]"
+ add_overlay(plant_overlay)
/obj/machinery/hydroponics/proc/update_icon_lights()
if(waterlevel <= 10)
- add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowwater3"))
+ add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lowwater3"))
if(nutrilevel <= 2)
- add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lownutri3"))
+ add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lownutri3"))
if(plant_health <= (myseed.endurance / 2))
- add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowhealth3"))
+ add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lowhealth3"))
if(weedlevel >= 5 || pestlevel >= 5 || toxic >= 40)
- add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_alert3"))
+ add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_alert3"))
if(harvest)
- add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_harvest3"))
+ add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_harvest3"))
/obj/machinery/hydroponics/examine(user)
diff --git a/code/modules/hydroponics/sample.dm b/code/modules/hydroponics/sample.dm
index a4ab2919be..52c2e1052f 100644
--- a/code/modules/hydroponics/sample.dm
+++ b/code/modules/hydroponics/sample.dm
@@ -8,9 +8,9 @@
/obj/item/seeds/sample/New()
..()
if(sample_color)
- var/image/I = image(icon, icon_state = "sample-filling")
- I.color = sample_color
- add_overlay(I)
+ var/mutable_appearance/filling = mutable_appearance(icon, "sample-filling")
+ filling.color = sample_color
+ add_overlay(filling)
/obj/item/seeds/sample/get_analyzer_text()
return " The DNA of this sample is damaged beyond recovery, it can't support life on its own.\n*---------*"
diff --git a/code/modules/mining/equipment.dm b/code/modules/mining/equipment.dm
index 02a752c2d7..36c3053143 100644
--- a/code/modules/mining/equipment.dm
+++ b/code/modules/mining/equipment.dm
@@ -513,7 +513,7 @@
var/charged = 1
var/charge_time = 16
var/atom/mark = null
- var/marked_image = null
+ var/mutable_appearance/marked_underlay
/obj/item/projectile/destabilizer
name = "destabilizing force"
@@ -530,15 +530,16 @@
if(hammer_synced.mark == target)
return ..()
if(isliving(target))
- if(hammer_synced.mark && hammer_synced.marked_image)
- hammer_synced.mark.underlays -= hammer_synced.marked_image
- hammer_synced.marked_image = null
+ if(hammer_synced.mark && hammer_synced.marked_underlay)
+ hammer_synced.mark.underlays -= hammer_synced.marked_underlay
+ hammer_synced.marked_underlay = null
var/mob/living/L = target
if(L.mob_size >= MOB_SIZE_LARGE)
hammer_synced.mark = L
- var/image/I = image('icons/effects/effects.dmi', loc = L, icon_state = "shield2",pixel_y = (-L.pixel_y),pixel_x = (-L.pixel_x))
- L.underlays += I
- hammer_synced.marked_image = I
+ hammer_synced.marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2")
+ hammer_synced.marked_underlay.pixel_x = -L.pixel_x
+ hammer_synced.marked_underlay.pixel_y = -L.pixel_y
+ L.underlays += hammer_synced.marked_underlay
var/target_turf = get_turf(target)
if(ismineralturf(target_turf))
var/turf/closed/mineral/M = target_turf
@@ -570,9 +571,8 @@
new /obj/effect/overlay/temp/kinetic_blast(get_turf(L))
mark = 0
if(L.mob_size >= MOB_SIZE_LARGE)
- L.underlays -= marked_image
- qdel(marked_image)
- marked_image = null
+ L.underlays -= marked_underlay
+ QDEL_NULL(marked_underlay)
var/backstab_dir = get_dir(user, L)
var/def_check = L.getarmor(type = "bomb")
if((user.dir & backstab_dir) && (L.dir & backstab_dir))
diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm
index 463ee524f9..b8b1bcc6b9 100644
--- a/code/modules/mining/fulton.dm
+++ b/code/modules/mining/fulton.dm
@@ -69,9 +69,9 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
if(uses_left <= 0)
user.drop_item(src)
loc = A
- var/image/balloon
- var/image/balloon2
- var/image/balloon3
+ var/mutable_appearance/balloon
+ var/mutable_appearance/balloon2
+ var/mutable_appearance/balloon3
if(isliving(A))
var/mob/living/M = A
M.Weaken(16) // Keep them from moving during the duration of the extraction
@@ -82,12 +82,12 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
var/obj/effect/extraction_holder/holder_obj = new(A.loc)
holder_obj.appearance = A.appearance
A.loc = holder_obj
- balloon2 = image('icons/obj/fulton_balloon.dmi',"fulton_expand")
+ balloon2 = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_expand")
balloon2.pixel_y = 10
balloon2.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM
holder_obj.add_overlay(balloon2)
sleep(4)
- balloon = image('icons/obj/fulton_balloon.dmi',"fulton_balloon")
+ balloon = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_balloon")
balloon.pixel_y = 10
balloon.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM
holder_obj.cut_overlay(balloon2)
@@ -121,7 +121,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
sleep(10)
animate(holder_obj, pixel_z = 10, time = 10)
sleep(10)
- balloon3 = image('icons/obj/fulton_balloon.dmi',"fulton_retract")
+ balloon3 = mutable_appearance('icons/obj/fulton_balloon.dmi', "fulton_retract")
balloon3.pixel_y = 10
balloon3.appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM
holder_obj.cut_overlay(balloon)
diff --git a/code/modules/mining/lavaland/ruins/gym.dm b/code/modules/mining/lavaland/ruins/gym.dm
index c390851b1b..13e3e56f66 100644
--- a/code/modules/mining/lavaland/ruins/gym.dm
+++ b/code/modules/mining/lavaland/ruins/gym.dm
@@ -68,9 +68,8 @@
user.setDir(SOUTH)
user.Stun(4)
user.loc = src.loc
- var/image/W = image('goon/icons/obj/fitness.dmi',"fitnessweight-w")
- W.layer = WALL_OBJ_LAYER
- add_overlay(W)
+ var/mutable_appearance/swole_overlay = mutable_appearance(icon, "fitnessweight-w", WALL_OBJ_LAYER)
+ add_overlay(swole_overlay)
var/bragmessage = pick("pushing it to the limit","going into overdrive","burning with determination","rising up to the challenge", "getting strong now","getting ripped")
user.visible_message("[user] is [bragmessage]!")
var/reps = 0
@@ -93,5 +92,5 @@
animate(user, pixel_y = 0, time = 3)
var/finishmessage = pick("You feel stronger!","You feel like you can take on the world!","You feel robust!","You feel indestructible!")
icon_state = "fitnessweight"
- cut_overlay(W)
+ cut_overlay(swole_overlay)
to_chat(user, "[finishmessage]")
\ No newline at end of file
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index 98a6c3d46d..1e7f01d7a3 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -392,7 +392,7 @@
return
if (CC.use(1))
- add_overlay(image('icons/obj/economy.dmi',"coin_string_overlay"))
+ add_overlay("coin_string_overlay")
string_attached = 1
to_chat(user, "You attach a string to the coin.")
else
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 7a77aab7cd..7946d67d10 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -37,10 +37,10 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
//These variables store hair data if the ghost originates from a species with head and/or facial hair.
var/hair_style
var/hair_color
- var/image/hair_image
+ var/mutable_appearance/hair_overlay
var/facial_hair_style
var/facial_hair_color
- var/image/facial_hair_image
+ var/mutable_appearance/facial_hair_overlay
var/updatedir = 1 //Do we have to update our dir as the ghost moves around?
var/lastsetting = null //Stores the last setting that ghost_others was set to, for a little more efficiency when we update ghost images. Null means no update is necessary
@@ -161,13 +161,13 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
ghost_accs = client.prefs.ghost_accs
ghost_others = client.prefs.ghost_others
- if(hair_image)
- cut_overlay(hair_image)
- hair_image = null
+ if(hair_overlay)
+ cut_overlay(hair_overlay)
+ hair_overlay = null
- if(facial_hair_image)
- cut_overlay(facial_hair_image)
- facial_hair_image = null
+ if(facial_hair_overlay)
+ cut_overlay(facial_hair_overlay)
+ facial_hair_overlay = null
if(new_form)
@@ -188,19 +188,19 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
if(facial_hair_style)
S = GLOB.facial_hair_styles_list[facial_hair_style]
if(S)
- facial_hair_image = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER)
+ facial_hair_overlay = mutable_appearance(S.icon, "[S.icon_state]", -HAIR_LAYER)
if(facial_hair_color)
- facial_hair_image.color = "#" + facial_hair_color
- facial_hair_image.alpha = 200
- add_overlay(facial_hair_image)
+ facial_hair_overlay.color = "#" + facial_hair_color
+ facial_hair_overlay.alpha = 200
+ add_overlay(facial_hair_overlay)
if(hair_style)
S = GLOB.hair_styles_list[hair_style]
if(S)
- hair_image = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER)
+ hair_overlay = mutable_appearance(S.icon, "[S.icon_state]", -HAIR_LAYER)
if(hair_color)
- hair_image.color = "#" + hair_color
- hair_image.alpha = 200
- add_overlay(hair_image)
+ hair_overlay.color = "#" + hair_color
+ hair_overlay.alpha = 200
+ add_overlay(hair_overlay)
/*
* Increase the brightness of a color by calculating the average distance between the R, G and B values,
diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
index 3512f6bcdc..8940220d3b 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
@@ -1,7 +1,7 @@
/mob/living/carbon/alien/humanoid/update_icons()
cut_overlays()
- for(var/image/I in overlays_standing)
+ for(var/I in overlays_standing)
add_overlay(I)
if(stat == DEAD)
@@ -66,7 +66,7 @@
dmi_file = 'icons/mob/alienqueen.dmi'
if(handcuffed)
- overlays_standing[HANDCUFF_LAYER] = image(dmi_file,icon_state= cuff_icon, layer =-HANDCUFF_LAYER)
+ overlays_standing[HANDCUFF_LAYER] = mutable_appearance(dmi_file, cuff_icon, -HANDCUFF_LAYER)
apply_overlay(HANDCUFF_LAYER)
//Royals have bigger sprites, so inhand things must be handled differently.
@@ -80,16 +80,14 @@
var/itm_state = l_hand.item_state
if(!itm_state)
itm_state = l_hand.icon_state
- var/image/I = image("icon" = alt_inhands_file , "icon_state"="[itm_state][caste]_l", "layer"=-HANDS_LAYER)
- hands += I
+ hands += mutable_appearance(alt_inhands_file, "[itm_state][caste]_l", -HANDS_LAYER)
var/obj/item/r_hand = get_item_for_held_index(2)
if(r_hand)
var/itm_state = r_hand.item_state
if(!itm_state)
itm_state = r_hand.icon_state
- var/image/I = image("icon" = alt_inhands_file , "icon_state"="[itm_state][caste]_r", "layer"=-HANDS_LAYER)
- hands += I
+ hands += mutable_appearance(alt_inhands_file, "[itm_state][caste]_r", -HANDS_LAYER)
overlays_standing[HANDS_LAYER] = hands
apply_overlay(HANDS_LAYER)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/screen.dm b/code/modules/mob/living/carbon/alien/screen.dm
index 700680486a..c3e0d88edd 100644
--- a/code/modules/mob/living/carbon/alien/screen.dm
+++ b/code/modules/mob/living/carbon/alien/screen.dm
@@ -18,7 +18,6 @@
return
var/Qdir = get_dir(src, Q)
var/Qdist = get_dist(src, Q)
- image(icon,loc,icon_state,layer,dir)
var/finder_icon = "finder_center" //Overlay showed when adjacent to or on top of the queen!
switch(Qdist)
if(2 to 7)
@@ -27,7 +26,7 @@
finder_icon = "finder_med"
if(21 to INFINITY)
finder_icon = "finder_far"
- var/image/finder_eye = image('icons/mob/screen_alien.dmi', icon_state = finder_icon, dir = Qdir)
+ var/image/finder_eye = image('icons/mob/screen_alien.dmi', finder_icon, dir = Qdir)
hud_used.alien_queen_finder.add_overlay(finder_eye)
/mob/living/carbon/alien/humanoid/royal/queen/findQueen()
diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
index 2823e56d00..68d94b4c04 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -81,7 +81,7 @@
var/mob/dead/observer/ghost = pick(candidates)
- var/overlay = image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_lie")
+ var/mutable_appearance/overlay = mutable_appearance('icons/mob/alien.dmi', "burst_lie")
owner.add_overlay(overlay)
var/atom/xeno_loc = get_turf(owner)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 29df56b669..97686940bd 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -751,7 +751,7 @@
..()
/mob/living/carbon/fakefire(var/fire_icon = "Generic_mob_burning")
- var/image/new_fire_overlay = image("icon"='icons/mob/OnFire.dmi', "icon_state"= fire_icon, "layer"=-FIRE_LAYER)
+ var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', fire_icon, -FIRE_LAYER)
new_fire_overlay.appearance_flags = RESET_COLOR
overlays_standing[FIRE_LAYER] = new_fire_overlay
apply_overlay(FIRE_LAYER)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index be95d2e3d1..8b9899d067 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -732,8 +732,8 @@
/mob/living/carbon/human/wash_cream()
//clean both to prevent a rare bug
- cut_overlay(image('icons/effects/creampie.dmi', "creampie_lizard"))
- cut_overlay(image('icons/effects/creampie.dmi', "creampie_human"))
+ cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_lizard"))
+ cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_human"))
//Turns a mob black, flashes a skeleton overlay
@@ -742,17 +742,19 @@
//Handle mutant parts if possible
if(dna && dna.species)
add_atom_colour("#000000", TEMPORARY_COLOUR_PRIORITY)
- var/static/image/electrocution_skeleton_anim = image(icon = icon, icon_state = "electrocuted_base")
- electrocution_skeleton_anim.appearance_flags = RESET_COLOR
+ var/static/mutable_appearance/electrocution_skeleton_anim
+ if(!electrocution_skeleton_anim)
+ electrocution_skeleton_anim = mutable_appearance(icon, "electrocuted_base")
+ electrocution_skeleton_anim.appearance_flags |= RESET_COLOR
add_overlay(electrocution_skeleton_anim)
addtimer(CALLBACK(src, .proc/end_electrocution_animation, electrocution_skeleton_anim), anim_duration)
else //or just do a generic animation
flick_overlay_view(image(icon,src,"electrocuted_generic",ABOVE_MOB_LAYER), src, anim_duration)
-/mob/living/carbon/human/proc/end_electrocution_animation(image/I)
+/mob/living/carbon/human/proc/end_electrocution_animation(mutable_appearance/MA)
remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#000000")
- cut_overlay(I)
+ cut_overlay(MA)
/mob/living/carbon/human/canUseTopic(atom/movable/M, be_close = 0)
if(incapacitated() || lying )
@@ -821,9 +823,9 @@
if(hal_screwyhud == SCREWYHUD_HEALTHY)
icon_num = 0
if(icon_num)
- hud_used.healthdoll.add_overlay(image('icons/mob/screen_gen.dmi',"[BP.body_zone][icon_num]"))
+ hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[BP.body_zone][icon_num]"))
for(var/t in get_missing_limbs()) //Missing limbs
- hud_used.healthdoll.add_overlay(image('icons/mob/screen_gen.dmi',"[t]6"))
+ hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[t]6"))
else
hud_used.healthdoll.icon_state = "healthdoll_DEAD"
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index ecca978880..71b607c928 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -229,22 +229,22 @@
fhair_state += dynamic_fhair_suffix
fhair_file = 'icons/mob/facialhair_extensions.dmi'
- var/image/img_facial = image("icon" = fhair_file, "icon_state" = fhair_state, "layer" = -HAIR_LAYER)
+ var/mutable_appearance/facial_overlay = mutable_appearance(fhair_file, fhair_state, -HAIR_LAYER)
if(!forced_colour)
if(hair_color)
if(hair_color == "mutcolor")
- img_facial.color = "#" + H.dna.features["mcolor"]
+ facial_overlay.color = "#" + H.dna.features["mcolor"]
else
- img_facial.color = "#" + hair_color
+ facial_overlay.color = "#" + hair_color
else
- img_facial.color = "#" + H.facial_hair_color
+ facial_overlay.color = "#" + H.facial_hair_color
else
- img_facial.color = forced_colour
+ facial_overlay.color = forced_colour
- img_facial.alpha = hair_alpha
+ facial_overlay.alpha = hair_alpha
- standing += img_facial
+ standing += facial_overlay
if(H.head)
var/obj/item/I = H.head
@@ -262,9 +262,11 @@
hair_hidden = TRUE
if(!hair_hidden || dynamic_hair_suffix)
+ var/mutable_appearance/hair_overlay = mutable_appearance(layer = -HAIR_LAYER)
if(!hair_hidden && !H.getorgan(/obj/item/organ/brain)) //Applies the debrained overlay if there is no brain
if(!(NOBLOOD in species_traits))
- standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER)
+ hair_overlay.icon = 'icons/mob/human_face.dmi'
+ hair_overlay.icon_state = "debrained"
else if(H.hair_style && (HAIR in species_traits))
S = GLOB.hair_styles_list[H.hair_style]
@@ -286,70 +288,70 @@
hair_state += dynamic_hair_suffix
hair_file = 'icons/mob/hair_extensions.dmi'
- var/image/img_hair = image("icon" = hair_file, "icon_state" = hair_state, "layer" = -HAIR_LAYER)
+ hair_overlay.icon = hair_file
+ hair_overlay.icon_state = hair_state
if(!forced_colour)
if(hair_color)
if(hair_color == "mutcolor")
- img_hair.color = "#" + H.dna.features["mcolor"]
+ hair_overlay.color = "#" + H.dna.features["mcolor"]
else
- img_hair.color = "#" + hair_color
+ hair_overlay.color = "#" + hair_color
else
- img_hair.color = "#" + H.hair_color
+ hair_overlay.color = "#" + H.hair_color
else
- img_hair.color = forced_colour
- img_hair.alpha = hair_alpha
-
- img_hair.pixel_y += hair_y_offset
- standing += img_hair
+ hair_overlay.color = forced_colour
+ hair_overlay.alpha = hair_alpha
+ hair_overlay.pixel_y += hair_y_offset
+ if(hair_overlay.icon)
+ standing += hair_overlay
if(standing.len)
- H.overlays_standing[HAIR_LAYER] = standing
+ H.overlays_standing[HAIR_LAYER] = standing
H.apply_overlay(HAIR_LAYER)
/datum/species/proc/handle_body(mob/living/carbon/human/H)
H.remove_overlay(BODY_LAYER)
- var/list/standing = list()
+ var/list/standing = list()
var/obj/item/bodypart/head/HD = H.get_bodypart("head")
if(!(H.disabilities & HUSK))
// lipstick
if(H.lip_style && (LIPS in species_traits) && HD)
- var/image/lips = image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[H.lip_style]", "layer" = -BODY_LAYER)
- lips.color = H.lip_color
- lips.pixel_y += face_y_offset
- standing += lips
+ var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[H.lip_style]", -BODY_LAYER)
+ lip_overlay.color = H.lip_color
+ lip_overlay.pixel_y += face_y_offset
+ standing += lip_overlay
// eyes
if((EYECOLOR in species_traits) && HD)
- var/image/img_eyes = image("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes", "layer" = -BODY_LAYER)
- img_eyes.color = "#" + H.eye_color
- img_eyes.pixel_y += face_y_offset
- standing += img_eyes
+ var/mutable_appearance/eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER)
+ eye_overlay.color = "#" + H.eye_color
+ eye_overlay.pixel_y += face_y_offset
+ standing += eye_overlay
//Underwear, Undershirts & Socks
- /*This will be refactored at a later date
if(H.underwear)
var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[H.underwear]
if(underwear)
- standing += image("icon"=underwear.icon, "icon_state"="[underwear.icon_state]", "layer"=-BODY_LAYER)
+ standing += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER)
if(H.undershirt)
var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[H.undershirt]
if(undershirt)
if(H.dna.species.sexes && H.gender == FEMALE)
- standing += wear_female_version("[undershirt.icon_state]", undershirt.icon, BODY_LAYER)
+ standing += wear_female_version(undershirt.icon_state, undershirt.icon, -BODY_LAYER)
else
- standing += image("icon"=undershirt.icon, "icon_state"="[undershirt.icon_state]", "layer"=-BODY_LAYER)
+ standing += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER)
if(H.socks && H.get_num_legs() >= 2 && !(DIGITIGRADE in species_traits))
var/datum/sprite_accessory/socks/socks = GLOB.socks_list[H.socks]
if(socks)
- standing += image("icon"=socks.icon, "icon_state"="[socks.icon_state]", "layer"=-BODY_LAYER)
- */
+ standing += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER)
+
if(standing.len)
H.overlays_standing[BODY_LAYER] = standing
@@ -486,8 +488,6 @@
var/g = (H.gender == FEMALE) ? "f" : "m"
- var/image/I
-
for(var/layer in relevant_layers)
var/layertext = mutant_bodyparts_layertext(layer)
@@ -552,7 +552,9 @@
S = /datum/sprite_accessory/slimecoon_snout*/
if(!S || S.icon_state == "none")
continue
-
+
+ var/mutable_appearance/accessory_overlay = mutable_appearance(S.icon, layer = -layer)
+
//A little rename so we don't have to use tail_lizard or tail_human when naming the sprites.
if(bodypart == "tail_lizard" || bodypart == "tail_human" || bodypart == "mam_tail" || bodypart == "slimecoontail" || bodypart == "xenotail")
bodypart = "tail"
@@ -563,134 +565,136 @@
if(bodypart == "xenohead")
bodypart = "xhead"
-
- var/icon_string
-
if(S.gender_specific)
- icon_string = "[g]_[bodypart]_[S.icon_state]_[layertext]"
+ accessory_overlay.icon_state = "[g]_[bodypart]_[S.icon_state]_[layertext]"
else
- icon_string = "m_[bodypart]_[S.icon_state]_[layertext]"
-
- I = image("icon" = S.icon, "icon_state" = icon_string, "layer" =- layer)
+ accessory_overlay.icon_state = "m_[bodypart]_[S.icon_state]_[layertext]"
if(S.center)
- I = center_image(I,S.dimension_x,S.dimension_y)
+ accessory_overlay = center_image(accessory_overlay, S.dimension_x, S.dimension_y)
if(!(H.disabilities & HUSK))
if(!forced_colour)
switch(S.color_src)
if(MUTCOLORS)
if(fixed_mut_color)
- I.color = "#[fixed_mut_color]"
+ accessory_overlay.color = "#[fixed_mut_color]"
else
- I.color = "#[H.dna.features["mcolor"]]"
+ accessory_overlay.color = "#[H.dna.features["mcolor"]]"
if(MUTCOLORS2)
if(fixed_mut_color2)
- I.color = "#[fixed_mut_color2]"
+ accessory_overlay.color = "#[fixed_mut_color2]"
else
- I.color = "#[H.dna.features["mcolor2"]]"
+ accessory_overlay.color = "#[H.dna.features["mcolor2"]]"
if(MUTCOLORS3)
if(fixed_mut_color3)
- I.color = "#[fixed_mut_color3]"
+ accessory_overlay.color = "#[fixed_mut_color3]"
else
- I.color = "#[H.dna.features["mcolor3"]]"
-
+ accessory_overlay.color = "#[H.dna.features["mcolor3"]]"
if(HAIR)
if(hair_color == "mutcolor")
- I.color = "#[H.dna.features["mcolor"]]"
+ accessory_overlay.color = "#[H.dna.features["mcolor"]]"
else
- I.color = "#[H.hair_color]"
+ accessory_overlay.color = "#[H.hair_color]"
if(FACEHAIR)
- I.color = "#[H.facial_hair_color]"
+ accessory_overlay.color = "#[H.facial_hair_color]"
if(EYECOLOR)
- I.color = "#[H.eye_color]"
+ accessory_overlay.color = "#[H.eye_color]"
else
- I.color = forced_colour
- standing += I
+ accessory_overlay.color = forced_colour
+ standing += accessory_overlay
if(S.hasinner)
+ var/mutable_appearance/inner_accessory_overlay = mutable_appearance(S.icon, layer = -layer)
if(S.gender_specific)
- icon_string = "[g]_[bodypart]inner_[S.icon_state]_[layertext]"
+ inner_accessory_overlay.icon_state = "[g]_[bodypart]inner_[S.icon_state]_[layertext]"
else
- icon_string = "m_[bodypart]inner_[S.icon_state]_[layertext]"
-
- I = image("icon" = S.icon, "icon_state" = icon_string, "layer" =- layer)
+ inner_accessory_overlay.icon_state = "m_[bodypart]inner_[S.icon_state]_[layertext]"
if(S.center)
- I = center_image(I,S.dimension_x,S.dimension_y)
+ inner_accessory_overlay = center_image(inner_accessory_overlay, S.dimension_x, S.dimension_y)
- standing += I
+ standing += inner_accessory_overlay
+
if(S.extra) //apply the extra overlay, if there is one
+ var/mutable_appearance/extra_accessory_overlay = mutable_appearance(S.icon, layer = -layer)
if(S.gender_specific)
- icon_string = "[g]_[bodypart]_extra_[S.icon_state]_[layertext]"
+ extra_accessory_overlay.icon_state = "[g]_[bodypart]_extra_[S.icon_state]_[layertext]"
else
- icon_string = "m_[bodypart]_extra_[S.icon_state]_[layertext]"
-
- I = image("icon" = S.icon, "icon_state" = icon_string, "layer" =- layer)
+ extra_accessory_overlay.icon_state = "m_[bodypart]_extra_[S.icon_state]_[layertext]"
if(S.center)
- I = center_image(I,S.dimension_x,S.dimension_y)
-
- switch(S.extra_color_src) //change the color of the extra overlay
- if(MUTCOLORS)
- if(fixed_mut_color)
- I.color = "#[fixed_mut_color]"
- else
- I.color = "#[H.dna.features["mcolor"]]"
- if(MUTCOLORS2)
- if(fixed_mut_color2)
- I.color = "#[fixed_mut_color2]"
- else
- I.color = "#[H.dna.features["mcolor2"]]"
- if(MUTCOLORS3)
- if(fixed_mut_color3)
- I.color = "#[fixed_mut_color3]"
- else
- I.color = "#[H.dna.features["mcolor3"]]"
- if(HAIR)
- if(hair_color == "mutcolor")
- I.color = "#[H.dna.features["mcolor"]]"
- else
- I.color = "#[H.hair_color]"
- if(FACEHAIR)
- I.color = "#[H.facial_hair_color]"
- if(EYECOLOR)
- I.color = "#[H.eye_color]"
- standing += I
+ extra_accessory_overlay.icon_state = center_image(extra_accessory_overlay, S.dimension_x, S.dimension_y)
+
+ if(!forced_colour)
+ switch(S.extra_color_src) //change the color of the extra overlay
+ if(MUTCOLORS)
+ if(fixed_mut_color)
+ extra_accessory_overlay.color = "#[fixed_mut_color]"
+ else
+ extra_accessory_overlay.color = "#[H.dna.features["mcolor"]]"
+ if(MUTCOLORS2)
+ if(fixed_mut_color2)
+ extra_accessory_overlay.color = "#[fixed_mut_color2]"
+ else
+ extra_accessory_overlay.color = "#[H.dna.features["mcolor2"]]"
+ if(MUTCOLORS3)
+ if(fixed_mut_color3)
+ extra_accessory_overlay.color = "#[fixed_mut_color3]"
+ else
+ extra_accessory_overlay.color = "#[H.dna.features["mcolor3"]]"
+ if(HAIR)
+ if(hair_color == "mutcolor")
+ extra_accessory_overlay.color = "#[H.dna.features["mcolor"]]"
+ else
+ extra_accessory_overlay.color = "#[H.hair_color]"
+ if(FACEHAIR)
+ extra_accessory_overlay.color = "#[H.facial_hair_color]"
+ if(EYECOLOR)
+ extra_accessory_overlay.color = "#[H.eye_color]"
+ else
+ extra_accessory_overlay.color = forced_colour
+ standing += extra_accessory_overlay
if(S.extra2) //apply the extra overlay, if there is one
+ var/mutable_appearance/extra2_accessory_overlay = mutable_appearance(S.icon, layer = -layer)
if(S.gender_specific)
- icon_string = "[g]_[bodypart]_extra2_[S.icon_state]_[layertext]"
+ extra2_accessory_overlay.icon_state = "[g]_[bodypart]_extra2_[S.icon_state]_[layertext]"
else
- icon_string = "m_[bodypart]_extra2_[S.icon_state]_[layertext]"
-
- I = image("icon" = S.icon, "icon_state" = icon_string, "layer" =- layer)
+ extra2_accessory_overlay.icon_state = "m_[bodypart]_extra2_[S.icon_state]_[layertext]"
if(S.center)
- I = center_image(I,S.dimension_x,S.dimension_y)
-
- switch(S.extra2_color_src) //change the color of the extra overlay
- if(MUTCOLORS)
- if(fixed_mut_color)
- I.color = "#[fixed_mut_color]"
- else
- I.color = "#[H.dna.features["mcolor"]]"
- if(MUTCOLORS2)
- if(fixed_mut_color2)
- I.color = "#[fixed_mut_color2]"
- else
- I.color = "#[H.dna.features["mcolor2"]]"
- if(MUTCOLORS3)
- if(fixed_mut_color3)
- I.color = "#[fixed_mut_color3]"
- else
- I.color = "#[H.dna.features["mcolor3"]]"
- if(HAIR)
- if(hair_color == "mutcolor")
- I.color = "#[H.dna.features["mcolor"]]"
- else
- I.color = "#[H.hair_color]"
- standing += I
+ extra2_accessory_overlay.icon_state = center_image(extra2_accessory_overlay, S.dimension_x, S.dimension_y)
+
+ if(!forced_colour)
+ switch(S.extra_color_src) //change the color of the extra overlay
+ if(MUTCOLORS)
+ if(fixed_mut_color)
+ extra2_accessory_overlay.color = "#[fixed_mut_color]"
+ else
+ extra2_accessory_overlay.color = "#[H.dna.features["mcolor"]]"
+ if(MUTCOLORS2)
+ if(fixed_mut_color2)
+ extra2_accessory_overlay.color = "#[fixed_mut_color2]"
+ else
+ extra2_accessory_overlay.color = "#[H.dna.features["mcolor2"]]"
+ if(MUTCOLORS3)
+ if(fixed_mut_color3)
+ extra2_accessory_overlay.color = "#[fixed_mut_color3]"
+ else
+ extra2_accessory_overlay.color = "#[H.dna.features["mcolor3"]]"
+ if(HAIR)
+ if(hair_color == "mutcolor")
+ extra2_accessory_overlay.color = "#[H.dna.features["mcolor"]]"
+ else
+ extra2_accessory_overlay.color = "#[H.hair_color]"
+ if(FACEHAIR)
+ extra2_accessory_overlay.color = "#[H.facial_hair_color]"
+ if(EYECOLOR)
+ extra2_accessory_overlay.color = "#[H.eye_color]"
+ else
+ extra2_accessory_overlay.color = forced_colour
+ standing += extra2_accessory_overlay
H.overlays_standing[layer] = standing.Copy()
standing = list()
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 307c0e685d..14cf9d2508 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -126,17 +126,17 @@ There are several things that need to be remembered:
else if(U.adjusted == DIGITIGRADE_STYLE)
t_color = "[t_color]_l"
- var/image/standing
+ var/mutable_appearance/uniform_overlay
if(dna && dna.species.sexes)
var/G = (gender == FEMALE) ? "f" : "m"
if(G == "f" && U.fitted != NO_FEMALE_UNIFORM)
- standing = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE, femaleuniform = U.fitted)
+ uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE, femaleuniform = U.fitted)
- if(!standing)
- standing = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE)
+ if(!uniform_overlay)
+ uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE)
- overlays_standing[UNIFORM_LAYER] = standing
+ overlays_standing[UNIFORM_LAYER] = uniform_overlay
else if(!(dna && dna.species.nojumpsuit) && invdrop)
// Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY
@@ -161,8 +161,7 @@ There are several things that need to be remembered:
update_observer_view(wear_id)
//TODO: add an icon file for ID slot stuff, so it's less snowflakey
- var/image/standing = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi')
- overlays_standing[ID_LAYER] = standing
+ overlays_standing[ID_LAYER] = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi')
apply_overlay(ID_LAYER)
@@ -170,20 +169,20 @@ There are several things that need to be remembered:
/mob/living/carbon/human/update_inv_gloves()
remove_overlay(GLOVES_LAYER)
- if(get_num_arms() <2)
- if(!gloves && blood_DNA)
- if(has_left_hand())
- overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands_left", "layer"=-GLOVES_LAYER)
- apply_overlay(GLOVES_LAYER)
- else if(has_right_hand())
- overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands_right", "layer"=-GLOVES_LAYER)
- apply_overlay(GLOVES_LAYER)
- return
-
if(client && hud_used && hud_used.inv_slots[slot_gloves])
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_gloves]
inv.update_icon()
+ if(!gloves && blood_DNA)
+ var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER)
+ if(get_num_arms() < 2)
+ if(has_left_hand())
+ bloody_overlay.icon_state = "bloodyhands_left"
+ else if(has_right_hand())
+ bloody_overlay.icon_state = "bloodyhands_right"
+
+ overlays_standing[GLOVES_LAYER] = bloody_overlay
+
if(gloves)
gloves.screen_loc = ui_gloves
if(client && hud_used && hud_used.hud_shown)
@@ -193,14 +192,7 @@ There are several things that need to be remembered:
var/t_state = gloves.item_state
if(!t_state)
t_state = gloves.icon_state
-
- var/image/standing = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/hands.dmi')
-
- overlays_standing[GLOVES_LAYER] = standing
-
- else
- if(blood_DNA)
- overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands", "layer"=-GLOVES_LAYER)
+ overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/hands.dmi')
apply_overlay(GLOVES_LAYER)
@@ -223,8 +215,7 @@ There are several things that need to be remembered:
update_observer_view(glasses,1)
if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES)))
- var/image/standing = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/eyes.dmi')
- overlays_standing[GLASSES_LAYER] = standing
+ overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/eyes.dmi')
apply_overlay(GLASSES_LAYER)
@@ -246,8 +237,7 @@ There are several things that need to be remembered:
client.screen += ears //add it to the client's screen
update_observer_view(ears,1)
- var/image/standing = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi')
- overlays_standing[EARS_LAYER] = standing
+ overlays_standing[EARS_LAYER] = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi')
apply_overlay(EARS_LAYER)
@@ -268,8 +258,7 @@ There are several things that need to be remembered:
if(hud_used.inventory_shown) //if the inventory is open
client.screen += shoes //add it to client's screen
update_observer_view(shoes,1)
- var/image/standing = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi')
- overlays_standing[SHOES_LAYER] = standing
+ overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi')
apply_overlay(SHOES_LAYER)
@@ -289,7 +278,7 @@ There are several things that need to be remembered:
var/t_state = s_store.item_state
if(!t_state)
t_state = s_store.icon_state
- overlays_standing[SUIT_STORE_LAYER] = image("icon"='icons/mob/belt_mirror.dmi', "icon_state"="[t_state]", "layer"=-SUIT_STORE_LAYER)
+ overlays_standing[SUIT_STORE_LAYER] = mutable_appearance('icons/mob/belt_mirror.dmi', t_state, -SUIT_STORE_LAYER)
apply_overlay(SUIT_STORE_LAYER)
@@ -315,8 +304,7 @@ There are several things that need to be remembered:
if(!t_state)
t_state = belt.icon_state
- var/image/standing = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = 'icons/mob/belt.dmi')
- overlays_standing[BELT_LAYER] = standing
+ overlays_standing[BELT_LAYER] = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = 'icons/mob/belt.dmi')
apply_overlay(BELT_LAYER)
@@ -337,8 +325,7 @@ There are several things that need to be remembered:
client.screen += wear_suit
update_observer_view(wear_suit,1)
- var/image/standing = wear_suit.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = 'icons/mob/suit.dmi')
- overlays_standing[SUIT_LAYER] = standing
+ overlays_standing[SUIT_LAYER] = wear_suit.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = 'icons/mob/suit.dmi')
if(wear_suit.breakouttime) //suit is restraining
drop_all_held_items()
@@ -381,7 +368,7 @@ There are several things that need to be remembered:
remove_overlay(LEGCUFF_LAYER)
clear_alert("legcuffed")
if(legcuffed)
- overlays_standing[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER)
+ overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER)
apply_overlay(LEGCUFF_LAYER)
throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = src.legcuffed)
@@ -390,8 +377,7 @@ There are several things that need to be remembered:
var/icon/female_clothing_icon = GLOB.female_clothing_icons[index]
if(!female_clothing_icon) //Create standing/laying icons if they don't exist
generate_female_clothing(index,t_color,icon,type)
- var/standing = image("icon"=GLOB.female_clothing_icons["[t_color]"], "layer"=-layer)
- return(standing)
+ return mutable_appearance(GLOB.female_clothing_icons[t_color], layer = -layer)
/mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers)
var/list/out = new
@@ -440,12 +426,12 @@ There are several things that need to be remembered:
/*
-Does everything in relation to building the /image used in the mob's overlays list
+Does everything in relation to building the /mutable_appearance used in the mob's overlays list
covers:
inhands and any other form of worn item
- centering large images
- layering images on custom layers
- building images from custom icon files
+ centering large appearances
+ layering appearances on custom layers
+ building appearances from custom icon files
By Remie Richards (yes I'm taking credit because this just removed 90% of the copypaste in update_icons())
@@ -480,13 +466,13 @@ generate/load female uniform sprites matching all previously decided variables
if(!layer2use)
layer2use = default_layer
- var/image/standing
+ var/mutable_appearance/standing
if(femaleuniform)
standing = wear_female_version(state,file2use,layer2use,femaleuniform)
if(!standing)
- standing = image("icon"=file2use, "icon_state"=state,"layer"=-layer2use)
+ standing = mutable_appearance(file2use, state, -layer2use)
- //Get the overlay images for this item when it's being worn
+ //Get the overlays for this item when it's being worn
//eg: ammo counters, primed grenade flashes, etc.
var/list/worn_overlays = worn_overlays(isinhands)
if(worn_overlays && worn_overlays.len)
diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm
index 581bedcc2b..5074f5083f 100644
--- a/code/modules/mob/living/carbon/monkey/update_icons.dm
+++ b/code/modules/mob/living/carbon/monkey/update_icons.dm
@@ -34,8 +34,7 @@
hair_hidden = 1
if(!hair_hidden)
if(!getorgan(/obj/item/organ/brain)) //Applies the debrained overlay if there is no brain
- var/image/I = image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER)
- overlays_standing[HAIR_LAYER] = I
+ overlays_standing[HAIR_LAYER] = mutable_appearance('icons/mob/human_face.dmi', "debrained", -HAIR_LAYER)
apply_overlay(HAIR_LAYER)
@@ -45,9 +44,9 @@
/mob/living/carbon/monkey/update_inv_legcuffed()
remove_overlay(LEGCUFF_LAYER)
if(legcuffed)
- var/image/standing = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER)
- standing.pixel_y = 8
- overlays_standing[LEGCUFF_LAYER] = standing
+ var/mutable_appearance/legcuff_overlay = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER)
+ legcuff_overlay.pixel_y = 8
+ overlays_standing[LEGCUFF_LAYER] = legcuff_overlay
apply_overlay(LEGCUFF_LAYER)
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index bd06c917a6..6cb0ef6f1b 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -30,9 +30,8 @@
var/list/overlays_standing[TOTAL_LAYERS]
/mob/living/carbon/proc/apply_overlay(cache_index)
- var/I = overlays_standing[cache_index]
- if(I)
- add_overlay(I)
+ if((. = overlays_standing[cache_index]))
+ add_overlay(.)
/mob/living/carbon/proc/remove_overlay(cache_index)
var/I = overlays_standing[cache_index]
@@ -79,8 +78,7 @@
if(get_held_index_of_item(I) % 2 == 0)
icon_file = I.righthand_file
- var/image/standing = I.build_worn_icon(state = t_state, default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE)
- hands += standing
+ hands += I.build_worn_icon(state = t_state, default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE)
overlays_standing[HANDS_LAYER] = hands
apply_overlay(HANDS_LAYER)
@@ -89,7 +87,7 @@
/mob/living/carbon/update_fire(var/fire_icon = "Generic_mob_burning")
remove_overlay(FIRE_LAYER)
if(on_fire)
- var/image/new_fire_overlay = image("icon"='icons/mob/OnFire.dmi', "icon_state"= fire_icon, "layer"=-FIRE_LAYER)
+ var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', fire_icon, -FIRE_LAYER)
new_fire_overlay.appearance_flags = RESET_COLOR
overlays_standing[FIRE_LAYER] = new_fire_overlay
@@ -100,16 +98,16 @@
/mob/living/carbon/update_damage_overlays()
remove_overlay(DAMAGE_LAYER)
- var/image/standing = image("icon"='icons/mob/dam_mob.dmi', "icon_state"="blank", "layer"=-DAMAGE_LAYER)
- overlays_standing[DAMAGE_LAYER] = standing
+ var/mutable_appearance/damage_overlay = mutable_appearance('icons/mob/dam_mob.dmi', "blank", -DAMAGE_LAYER)
+ overlays_standing[DAMAGE_LAYER] = damage_overlay
for(var/X in bodyparts)
var/obj/item/bodypart/BP = X
if(BP.dmg_overlay_type)
if(BP.brutestate)
- standing.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_[BP.brutestate]0") //we're adding icon_states of the base image as overlays
+ damage_overlay.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_[BP.brutestate]0") //we're adding icon_states of the base image as overlays
if(BP.burnstate)
- standing.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_0[BP.burnstate]")
+ damage_overlay.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_0[BP.burnstate]")
apply_overlay(DAMAGE_LAYER)
@@ -126,8 +124,7 @@
if(wear_mask)
if(!(head && (head.flags_inv & HIDEMASK)))
- var/image/standing = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi')
- overlays_standing[FACEMASK_LAYER] = standing
+ overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi')
update_hud_wear_mask(wear_mask)
apply_overlay(FACEMASK_LAYER)
@@ -141,8 +138,7 @@
if(wear_neck)
if(!(head && (head.flags_inv & HIDENECK)))
- var/image/standing = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi')
- overlays_standing[NECK_LAYER] = standing
+ overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi')
update_hud_neck(wear_neck)
apply_overlay(NECK_LAYER)
@@ -155,8 +151,7 @@
inv.update_icon()
if(back)
- var/image/standing = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi')
- overlays_standing[BACK_LAYER] = standing
+ overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi')
update_hud_back(back)
apply_overlay(BACK_LAYER)
@@ -171,8 +166,7 @@
inv.update_icon()
if(head)
- var/image/standing = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi')
- overlays_standing[HEAD_LAYER] = standing
+ overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi')
update_hud_head(head)
apply_overlay(HEAD_LAYER)
@@ -181,7 +175,7 @@
/mob/living/carbon/update_inv_handcuffed()
remove_overlay(HANDCUFF_LAYER)
if(handcuffed)
- overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER)
+ overlays_standing[HANDCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "handcuff1", -HANDCUFF_LAYER)
apply_overlay(HANDCUFF_LAYER)
@@ -250,9 +244,7 @@
var/list/new_limbs = list()
for(var/X in bodyparts)
var/obj/item/bodypart/BP = X
- var/image/temp = BP.get_limb_icon()
- if(temp)
- new_limbs += temp
+ new_limbs += BP.get_limb_icon()
if(new_limbs.len)
overlays_standing[BODYPARTS_LAYER] = new_limbs
limb_icon_cache[icon_render_key] = new_limbs
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 0b45792be5..8187dde9aa 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -491,7 +491,7 @@
for(var/obj/effect/decal/cleanable/trail_holder/TH in src.loc)
if((!(newdir in TH.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && TH.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled)
TH.existing_dirs += newdir
- TH.overlays.Add(image('icons/effects/blood.dmi',trail_type,dir = newdir))
+ TH.add_overlay(image('icons/effects/blood.dmi', trail_type, dir = newdir))
TH.transfer_mob_blood_dna(src)
/mob/living/carbon/human/makeTrail(turf/T)
@@ -930,4 +930,4 @@
/mob/living/ConveyorMove()
if((movement_type & FLYING) && !stat)
return
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 2a5823d91f..ba0b78e350 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -102,11 +102,11 @@
return
/mob/living/silicon/robot/update_fire()
- var/I = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Generic_mob_burning")
+ var/mutable_appearance/fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', "Generic_mob_burning")
if(on_fire)
- add_overlay(I)
+ add_overlay(fire_overlay)
else
- cut_overlay(I)
+ cut_overlay(fire_overlay)
/mob/living/silicon/robot/update_canmove()
if(stat || buckled || lockcharge)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 67813f2b32..14b854d2a2 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -38,7 +38,7 @@
var/obj/item/module_active = null
held_items = list(null, null, null) //we use held_items for the module holding, because that makes sense to do!
- var/image/eye_lights
+ var/mutable_appearance/eye_lights
var/mob/living/silicon/ai/connected_ai = null
var/obj/item/weapon/stock_parts/cell/cell = null
@@ -629,7 +629,7 @@
else
add_overlay("ov-opencover -c")
if(hat)
- var/image/head_overlay = hat.build_worn_icon(state = hat.icon_state, default_layer = 20, default_icon_file = 'icons/mob/head.dmi')
+ var/mutable_appearance/head_overlay = hat.build_worn_icon(state = hat.icon_state, default_layer = 20, default_icon_file = 'icons/mob/head.dmi')
head_overlay.pixel_y += hat_offset
add_overlay(head_overlay)
update_fire()
diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm
index 95e62a556d..25be049546 100644
--- a/code/modules/mob/living/simple_animal/bot/construction.dm
+++ b/code/modules/mob/living/simple_animal/bot/construction.dm
@@ -286,7 +286,7 @@
..()
spawn(5)
if(skin)
- add_overlay(image('icons/mob/aibots.dmi', "kit_skin_[skin]"))
+ add_overlay("kit_skin_[skin]")
/obj/item/weapon/storage/firstaid/attackby(obj/item/bodypart/S, mob/user, params)
@@ -333,7 +333,7 @@
build_step++
to_chat(user, "You add the health sensor to [src].")
name = "First aid/robot arm/health analyzer assembly"
- add_overlay(image('icons/mob/aibots.dmi', "na_scanner"))
+ add_overlay("na_scanner")
if(1)
if(isprox(W))
diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
index 59b66e652e..e11711f2bd 100644
--- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
@@ -358,7 +358,7 @@ Auto Patrol[]"},
var/obj/item/weapon/ed209_assembly/Sa = new /obj/item/weapon/ed209_assembly(Tsec)
Sa.build_step = 1
- Sa.add_overlay(image('icons/mob/aibots.dmi', "hs_hole"))
+ Sa.add_overlay("hs_hole")
Sa.created_name = name
new /obj/item/device/assembly/prox_sensor(Tsec)
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index 0a6633a54a..bcf4b86191 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -90,7 +90,7 @@
update_icon()
if(skin)
- add_overlay(image('icons/mob/aibots.dmi', "medskin_[skin]"))
+ add_overlay("medskin_[skin]")
var/datum/job/doctor/J = new /datum/job/doctor
access_card.access += J.get_access()
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index f09c0ba9ae..c6aa754b6e 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -407,7 +407,7 @@
cut_overlays()
if(inventory_head)
var/image/head_icon
- var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src)
+ var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src)
if(!DF.obj_icon_state)
DF.obj_icon_state = inventory_head.icon_state
@@ -417,17 +417,17 @@
DF.obj_color = inventory_head.color
if(health <= 0)
- head_icon = DF.get_image(dir = EAST)
+ head_icon = DF.get_overlay(dir = EAST)
head_icon.pixel_y = -8
head_icon.transform = turn(head_icon.transform, 180)
else
- head_icon = DF.get_image()
+ head_icon = DF.get_overlay()
add_overlay(head_icon)
if(inventory_back)
var/image/back_icon
- var/datum/dog_fashion.DF = new inventory_back.dog_fashion(src)
+ var/datum/dog_fashion/DF = new inventory_back.dog_fashion(src)
if(!DF.obj_icon_state)
DF.obj_icon_state = inventory_back.icon_state
@@ -437,18 +437,20 @@
DF.obj_color = inventory_back.color
if(health <= 0)
- back_icon = DF.get_image(dir = EAST)
+ back_icon = DF.get_overlay(dir = EAST)
back_icon.pixel_y = -11
back_icon.transform = turn(back_icon.transform, 180)
else
- back_icon = DF.get_image()
+ back_icon = DF.get_overlay()
add_overlay(back_icon)
if(facehugger)
+ var/mutable_appearance/facehugger_overlay = mutable_appearance('icons/mob/mask.dmi')
if(istype(src, /mob/living/simple_animal/pet/dog/corgi/puppy))
- add_overlay(image('icons/mob/mask.dmi',"facehugger_corgipuppy"))
+ facehugger_overlay.icon_state = "facehugger_corgipuppy"
else
- add_overlay(image('icons/mob/mask.dmi',"facehugger_corgi"))
+ facehugger_overlay.icon_state = "facehugger_corgi"
+ add_overlay(facehugger_overlay)
if(pcollar)
add_overlay(collar)
add_overlay(pettag)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
index 7fb7caf8e9..259ca4327d 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
@@ -7,9 +7,8 @@
/mob/living/simple_animal/drone/proc/apply_overlay(cache_index)
- var/I = drone_overlays[cache_index]
- if(I)
- add_overlay(I)
+ if((. = drone_overlays[cache_index]))
+ add_overlay(.)
/mob/living/simple_animal/drone/proc/remove_overlay(cache_index)
@@ -34,11 +33,11 @@
if(!r_state)
r_state = r_hand.icon_state
- var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
+ var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
if(y_shift)
- r_hand_image.pixel_y += y_shift
+ r_hand_overlay.pixel_y += y_shift
- hands_overlays += r_hand_image
+ hands_overlays += r_hand_overlay
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
r_hand.layer = ABOVE_HUD_LAYER
@@ -52,11 +51,11 @@
if(!l_state)
l_state = l_hand.icon_state
- var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
+ var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
if(y_shift)
- l_hand_image.pixel_y += y_shift
+ l_hand_overlay.pixel_y += y_shift
- hands_overlays += l_hand_image
+ hands_overlays += l_hand_overlay
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
l_hand.layer = ABOVE_HUD_LAYER
@@ -86,10 +85,10 @@
var/used_head_icon = 'icons/mob/head.dmi'
if(istype(head, /obj/item/clothing/mask))
used_head_icon = 'icons/mob/mask.dmi'
- var/image/head_overlay = head.build_worn_icon(state = head.icon_state, default_layer = DRONE_HEAD_LAYER, default_icon_file = used_head_icon)
+ var/mutable_appearance/head_overlay = head.build_worn_icon(state = head.icon_state, default_layer = DRONE_HEAD_LAYER, default_icon_file = used_head_icon)
head_overlay.pixel_y += -15
- drone_overlays[DRONE_HEAD_LAYER] = head_overlay
+ drone_overlays[DRONE_HEAD_LAYER] = head_overlay
apply_overlay(DRONE_HEAD_LAYER)
diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm
index cb62ccb070..717a6f4e2d 100644
--- a/code/modules/mob/living/simple_animal/friendly/pet.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pet.dm
@@ -2,8 +2,8 @@
icon = 'icons/mob/pets.dmi'
mob_size = MOB_SIZE_SMALL
var/obj/item/clothing/neck/petcollar/pcollar = null
- var/image/collar = null
- var/image/pettag = null
+ var/collar = ""
+ var/pettag = ""
blood_volume = BLOOD_VOLUME_NORMAL
devourable = TRUE
@@ -11,8 +11,8 @@
if(istype(O, /obj/item/clothing/neck/petcollar) && !pcollar)
var/obj/item/clothing/neck/petcollar/P = O
pcollar = P
- collar = image('icons/mob/pets.dmi', src, "[icon_state]collar")
- pettag = image('icons/mob/pets.dmi', src, "[icon_state]tag")
+ collar = "[icon_state]collar"
+ pettag = "[icon_state]tag"
regenerate_icons()
to_chat(user, "You put the [P] around [src]'s neck.")
if(P.tagname)
@@ -47,5 +47,7 @@
/mob/living/simple_animal/pet/regenerate_icons()
cut_overlays()
- add_overlay(collar)
- add_overlay(pettag)
+ if(collar)
+ add_overlay(collar)
+ if(pettag)
+ add_overlay(pettag)
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index e49e412047..be889a4183 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -260,9 +260,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
I.plane = ABOVE_HUD_PLANE
/mob/living/simple_animal/hostile/guardian/proc/apply_overlay(cache_index)
- var/I = guardian_overlays[cache_index]
- if(I)
- add_overlay(I)
+ if((. = guardian_overlays[cache_index]))
+ add_overlay(.)
/mob/living/simple_animal/hostile/guardian/proc/remove_overlay(cache_index)
var/I = guardian_overlays[cache_index]
@@ -281,9 +280,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
if(!r_state)
r_state = r_hand.icon_state
- var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
-
- hands_overlays += r_hand_image
+ hands_overlays += r_hand.build_worn_icon(state = r_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
r_hand.layer = ABOVE_HUD_LAYER
@@ -296,9 +293,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
if(!l_state)
l_state = l_hand.icon_state
- var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
-
- hands_overlays += l_hand_image
+ hands_overlays += l_hand.build_worn_icon(state = l_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
l_hand.layer = ABOVE_HUD_LAYER
diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm
index 8021200421..eacf58410b 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/protector.dm
@@ -40,10 +40,10 @@
to_chat(src, "You switch to combat mode.")
toggle = FALSE
else
- var/image/I = new('icons/effects/effects.dmi', "shield-grey")
+ var/mutable_appearance/shield_overlay = mutable_appearance('icons/effects/effects.dmi', "shield-grey")
if(namedatum)
- I.color = namedatum.colour
- add_overlay(I)
+ shield_overlay.color = namedatum.colour
+ add_overlay(shield_overlay)
melee_damage_lower = 2
melee_damage_upper = 2
speed = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index 462bad0df1..67b3d451b9 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -71,9 +71,7 @@
/mob/living/simple_animal/hostile/bear/update_icons()
..()
if(armored)
- var/image/B = image(icon = 'icons/mob/animal.dmi', icon_state = "armor_bear")
- if(B)
- add_overlay(B)
+ add_overlay("armor_bear")
/obj/item/bear_armor
name = "pile of bear armor"
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index fbbd2c20c8..e7ab6e1b56 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -49,7 +49,6 @@
var/idle = 0
var/isqueen = FALSE
var/icon_base = "bee"
- var/static/list/bee_icons = list()
/mob/living/simple_animal/hostile/poison/bees/Process_Spacemove(movement_dir = 0)
@@ -91,24 +90,15 @@
if(beegent && beegent.color)
col = beegent.color
- var/image/base
- if(!bee_icons["[icon_base]_base"])
- bee_icons["[icon_base]_base"] = image(icon = 'icons/mob/bees.dmi', icon_state = "[icon_base]_base")
- base = bee_icons["[icon_base]_base"]
- add_overlay(base)
+ add_overlay("[icon_base]_base")
- var/image/greyscale
- if(!bee_icons["[icon_base]_grey_[col]"])
- bee_icons["[icon_base]_grey_[col]"] = image(icon = 'icons/mob/bees.dmi', icon_state = "[icon_base]_grey")
- greyscale = bee_icons["[icon_base]_grey_[col]"]
- greyscale.color = col
- add_overlay(greyscale)
+ var/static/mutable_appearance/greyscale_overlay
+ greyscale_overlay = greyscale_overlay || mutable_appearance('icons/mob/bees.dmi')
+ greyscale_overlay.icon_state = "[icon_base]_grey"
+ greyscale_overlay.color = col
+ add_overlay(greyscale_overlay)
- var/image/wings
- if(!bee_icons["[icon_base]_wings"])
- bee_icons["[icon_base]_wings"] = image(icon = 'icons/mob/bees.dmi', icon_state = "[icon_base]_wings")
- wings = bee_icons["[icon_base]_wings"]
- add_overlay(wings)
+ add_overlay("[icon_base]_wings")
//We don't attack beekeepers/people dressed as bees//Todo: bee costume
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 111ce9b9da..16df9e4c7a 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
var/mob/living/creator = null // the creator
var/destroy_objects = 0
var/knockdown_people = 0
- var/image/googly_eyes = null
+ var/static/mutable_appearance/googly_eyes = mutable_appearance('icons/mob/mob.dmi', "googly_eyes")
gold_core_spawnable = 0
/mob/living/simple_animal/hostile/mimic/copy/Initialize(mapload, obj/copy, mob/living/creator, destroy_original = 0)
@@ -143,7 +143,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
icon_state = O.icon_state
icon_living = icon_state
copy_overlays(O)
- googly_eyes = image('icons/mob/mob.dmi',"googly_eyes")
add_overlay(googly_eyes)
if(istype(O, /obj/structure) || istype(O, /obj/machinery))
health = (anchored * 50) + 50
@@ -178,11 +177,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
C.visible_message("\The [src] knocks down \the [C]!", \
"\The [src] knocks you down!")
-/mob/living/simple_animal/hostile/mimic/copy/Aggro()
- ..()
- googly_eyes.setDir(get_dir(src,target))
-
-
/mob/living/simple_animal/hostile/mimic/copy/machine
speak = list("HUMANS ARE IMPERFECT!", "YOU SHALL BE ASSIMILATED!", "YOU ARE HARMING YOURSELF", "You have been deemed hazardous. Will you comply?", \
"My logic is undeniable.", "One of us.", "FLESH IS WEAK", "THIS ISN'T WAR, THIS IS EXTERMINATION!")
diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
index 3149502c2c..d82a332027 100644
--- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
@@ -29,12 +29,13 @@
unique_name = 1
speak_emote = list("squeaks")
deathmessage = "fainted."
+ var/cap_color = "#ffffff"
var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms
var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it
var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight
var/faint_ticker = 0 //If we hit three, another mushroom's gonna eat us
- var/image/cap_living = null //Where we store our cap icons so we dont generate them constantly to update our icon
- var/image/cap_dead = null
+ var/static/mutable_appearance/cap_living //Where we store our cap icons so we dont generate them constantly to update our icon
+ var/static/mutable_appearance/cap_dead
/mob/living/simple_animal/hostile/mushroom/examine(mob/user)
..()
@@ -53,11 +54,10 @@
melee_damage_upper += rand(10,20)
maxHealth += rand(40,60)
move_to_delay = rand(3,11)
- var/cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
- cap_living = image('icons/mob/animal.dmi',icon_state = "mushroom_cap")
- cap_dead = image('icons/mob/animal.dmi',icon_state = "mushroom_cap_dead")
- cap_living.color = cap_color
- cap_dead.color = cap_color
+ cap_living = cap_living || mutable_appearance(icon, "mushroom_cap")
+ cap_dead = cap_dead || mutable_appearance(icon, "mushroom_cap_dead")
+
+ cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
UpdateMushroomCap()
health = maxHealth
..()
@@ -101,6 +101,8 @@
/mob/living/simple_animal/hostile/mushroom/proc/UpdateMushroomCap()
cut_overlays()
+ cap_living.color = cap_color
+ cap_dead.color = cap_color
if(health == 0)
add_overlay(cap_dead)
else
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
index 9deb139497..f3b5866ec6 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
@@ -32,10 +32,10 @@
gold_core_spawnable = 0 //too spooky for science
var/ghost_hair_style
var/ghost_hair_color
- var/image/ghost_hair = null
+ var/mutable_appearance/ghost_hair
var/ghost_facial_hair_style
var/ghost_facial_hair_color
- var/image/ghost_facial_hair = null
+ var/mutable_appearance/ghost_facial_hair
var/random = TRUE //if you want random names for ghosts or not
/mob/living/simple_animal/hostile/retaliate/ghost/Initialize()
@@ -48,19 +48,16 @@
name = "ghost of [pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
if(1)
name = "ghost of [pick(GLOB.first_names_female)] [pick(GLOB.last_names)]"
- give_hair()
/mob/living/simple_animal/hostile/retaliate/ghost/proc/give_hair()
if(ghost_hair_style != null)
- ghost_hair = image('icons/mob/human_face.dmi', "hair_[ghost_hair_style]")
- ghost_hair.layer = -HAIR_LAYER
+ ghost_hair = mutable_appearance('icons/mob/human_face.dmi', "hair_[ghost_hair_style]", -HAIR_LAYER)
ghost_hair.alpha = 200
ghost_hair.color = ghost_hair_color
add_overlay(ghost_hair)
if(ghost_facial_hair_style != null)
- ghost_facial_hair = image('icons/mob/human_face.dmi', "facial_[ghost_facial_hair_style]")
- ghost_facial_hair.layer = -HAIR_LAYER
+ ghost_facial_hair = mutable_appearance('icons/mob/human_face.dmi', "facial_[ghost_facial_hair_style]", -HAIR_LAYER)
ghost_facial_hair.alpha = 200
ghost_facial_hair.color = ghost_facial_hair_color
add_overlay(ghost_facial_hair)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index d9c6ed54c7..8971d33b28 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -118,7 +118,7 @@
if(stat != DEAD)
icon_state = icon_text
if(mood && !stat)
- add_overlay(image('icons/mob/slimes.dmi', icon_state = "aslime-[mood]"))
+ add_overlay("aslime-[mood]")
else
icon_state = icon_dead
..()
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 1d0b069301..729e924261 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -377,7 +377,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
/mob/proc/reagent_check(datum/reagent/R) // utilized in the species code
return 1
-/proc/notify_ghosts(var/message, var/ghost_sound = null, var/enter_link = null, var/atom/source = null, var/image/alert_overlay = null, var/action = NOTIFY_JUMP, flashwindow = TRUE) //Easy notification of ghosts.
+/proc/notify_ghosts(var/message, var/ghost_sound = null, var/enter_link = null, var/atom/source = null, var/mutable_appearance/alert_overlay = null, var/action = NOTIFY_JUMP, flashwindow = TRUE) //Easy notification of ghosts.
if(SSatoms.initialized != INITIALIZATION_INNEW_REGULAR) //don't notify for objects created during a map load
return
for(var/mob/dead/observer/O in GLOB.player_list)
@@ -396,17 +396,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
A.action = action
A.target = source
if(!alert_overlay)
- var/old_layer = source.layer
- var/old_plane = source.plane
- source.layer = FLOAT_LAYER
- source.plane = FLOAT_PLANE
- A.add_overlay(source)
- source.layer = old_layer
- source.plane = old_plane
- else
- alert_overlay.layer = FLOAT_LAYER
- alert_overlay.plane = FLOAT_PLANE
- A.add_overlay(alert_overlay)
+ alert_overlay = new(src)
+ alert_overlay.layer = FLOAT_LAYER
+ alert_overlay.plane = FLOAT_PLANE
+ A.add_overlay(alert_overlay)
/proc/item_heal_robotic(mob/living/carbon/human/H, mob/user, brute_heal, burn_heal)
var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected))
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 72fe84de45..36e69828b2 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -336,12 +336,10 @@
return
stamps += "
"
- var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
+ var/mutable_appearance/stampoverlay = mutable_appearance('icons/obj/bureaucracy.dmi', "paper_[P.icon_state]")
stampoverlay.pixel_x = rand(-2, 2)
stampoverlay.pixel_y = rand(-3, 2)
- stampoverlay.icon_state = "paper_[P.icon_state]"
-
LAZYADD(stamped, P.icon_state)
add_overlay(stampoverlay)
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index 00eeb13e4c..cf7c28d2ba 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -135,7 +135,7 @@
icon_state = "[initial(icon_state)]"
cut_overlays()
if(bin_pen)
- add_overlay(image(icon=bin_pen.icon,icon_state=bin_pen.icon_state))
+ add_overlay(mutable_appearance(bin_pen.icon, bin_pen.icon_state))
/obj/item/weapon/paper_bin/construction
name = "construction paper bin"
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
index e7742b4bc8..2514784bcb 100644
--- a/code/modules/paperwork/paperplane.dm
+++ b/code/modules/paperwork/paperplane.dm
@@ -44,8 +44,7 @@
var/list/stamped = internalPaper.stamped
if(stamped)
for(var/S in stamped)
- var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[stamped]")
- add_overlay(stampoverlay)
+ add_overlay("paperplane_[S]")
/obj/item/weapon/paperplane/attack_self(mob/user)
to_chat(user, "You unfold [src].")
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 3c8cc46732..4633285488 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -93,12 +93,6 @@
var/force_update = 0
var/update_state = -1
var/update_overlay = -1
- var/global/status_overlays = 0
- var/global/list/status_overlays_lock
- var/global/list/status_overlays_charging
- var/global/list/status_overlays_equipment
- var/global/list/status_overlays_lighting
- var/global/list/status_overlays_environ
/obj/machinery/power/apc/connect_to_network()
@@ -218,35 +212,6 @@
// update the APC icon to show the three base states
// also add overlays for indicator lights
/obj/machinery/power/apc/update_icon()
- if (!status_overlays)
- status_overlays = 1
- status_overlays_lock = new(2)
- status_overlays_charging = new(3)
- status_overlays_equipment = new(4)
- status_overlays_lighting = new(4)
- status_overlays_environ = new(4)
-
- status_overlays_lock[1] = image(icon, "apcox-0") // 0=blue 1=red
- status_overlays_lock[2] = image(icon, "apcox-1")
-
- status_overlays_charging[1] = image(icon, "apco3-0")
- status_overlays_charging[2] = image(icon, "apco3-1")
- status_overlays_charging[3] = image(icon, "apco3-2")
-
- status_overlays_equipment[1] = image(icon, "apco0-0")
- status_overlays_equipment[2] = image(icon, "apco0-1")
- status_overlays_equipment[3] = image(icon, "apco0-2")
- status_overlays_equipment[4] = image(icon, "apco0-3")
-
- status_overlays_lighting[1] = image(icon, "apco1-0")
- status_overlays_lighting[2] = image(icon, "apco1-1")
- status_overlays_lighting[3] = image(icon, "apco1-2")
- status_overlays_lighting[4] = image(icon, "apco1-3")
-
- status_overlays_environ[1] = image(icon, "apco2-0")
- status_overlays_environ[2] = image(icon, "apco2-1")
- status_overlays_environ[3] = image(icon, "apco2-2")
- status_overlays_environ[4] = image(icon, "apco2-3")
var/update = check_updates() //returns 0 if no need to update icons.
// 1 if we need to update the icon_state
@@ -283,12 +248,12 @@
cut_overlays()
if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD)
var/list/O = list(
- status_overlays_lock[locked+1],
- status_overlays_charging[charging+1])
+ "apcox-[locked]",
+ "apco3-[charging]")
if(operating)
- O += status_overlays_equipment[equipment+1]
- O += status_overlays_lighting[lighting+1]
- O += status_overlays_environ[environ+1]
+ O += "apco0-[equipment]"
+ O += "apco1-[lighting]"
+ O += "apco2-[environ]"
add_overlay(O)
// And now, seperately for cleanness, the lighting changing
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 01ba72287d..0d92f21494 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -49,13 +49,13 @@
/obj/item/weapon/stock_parts/cell/proc/updateicon()
cut_overlays()
if(grown_battery)
- add_overlay(image('icons/obj/power.dmi', "grown_wires"))
+ add_overlay("grown_wires")
if(charge < 0.01)
return
else if(charge/maxcharge >=0.995)
- add_overlay(image('icons/obj/power.dmi', "cell-o2"))
+ add_overlay("cell-o2")
else
- add_overlay(image('icons/obj/power.dmi', "cell-o1"))
+ add_overlay("cell-o1")
/obj/item/weapon/stock_parts/cell/proc/percent() // return % charge of cell
return 100*charge/maxcharge
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index e9b351be49..dfbf3fe50b 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -64,9 +64,9 @@
cut_overlays()
if(lastgenlev != 0)
- add_overlay(image('icons/obj/power.dmi', "teg-op[lastgenlev]"))
+ add_overlay("teg-op[lastgenlev]")
- add_overlay(image('icons/obj/power.dmi', "teg-oc[lastcirc]"))
+ add_overlay("teg-oc[lastcirc]")
#define GENRATE 800 // generator output coefficient from Q
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index eb78c885aa..b75cf57acf 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -141,11 +141,11 @@ GLOBAL_LIST_EMPTY(rad_collectors)
/obj/machinery/power/rad_collector/proc/update_icons()
cut_overlays()
if(loaded_tank)
- add_overlay(image('icons/obj/singularity.dmi', "ptank"))
+ add_overlay("ptank")
if(stat & (NOPOWER|BROKEN))
return
if(active)
- add_overlay(image('icons/obj/singularity.dmi', "on"))
+ add_overlay("on")
/obj/machinery/power/rad_collector/proc/toggle_power()
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index dc54a3db4e..410181dede 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -33,7 +33,7 @@
var/area/A = get_area(src)
if(A)
- var/image/alert_overlay = image('icons/effects/effects.dmi', "ghostalertsie")
+ var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/effects.dmi', "ghostalertsie")
notify_ghosts("Nar-Sie has risen in \the [A.name]. Reach out to the Geometer to be given a new shell for your soul.", source = src, alert_overlay = alert_overlay, action=NOTIFY_ATTACK)
narsie_spawn_animation()
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index e03eaf944a..fdb4699ae5 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -38,9 +38,6 @@
var/obj/machinery/power/terminal/terminal = null
- var/static/list/smesImageCache
-
-
/obj/machinery/power/smes/examine(user)
..()
if(!terminal)
@@ -226,36 +223,20 @@
if(panel_open)
return
- if(!smesImageCache || !smesImageCache.len)
- smesImageCache = list()
- smesImageCache.len = 9
-
- smesImageCache[SMES_CLEVEL_1] = image('icons/obj/power.dmi',"smes-og1")
- smesImageCache[SMES_CLEVEL_2] = image('icons/obj/power.dmi',"smes-og2")
- smesImageCache[SMES_CLEVEL_3] = image('icons/obj/power.dmi',"smes-og3")
- smesImageCache[SMES_CLEVEL_4] = image('icons/obj/power.dmi',"smes-og4")
- smesImageCache[SMES_CLEVEL_5] = image('icons/obj/power.dmi',"smes-og5")
-
- smesImageCache[SMES_OUTPUTTING] = image('icons/obj/power.dmi', "smes-op1")
- smesImageCache[SMES_NOT_OUTPUTTING] = image('icons/obj/power.dmi',"smes-op0")
- smesImageCache[SMES_INPUTTING] = image('icons/obj/power.dmi', "smes-oc1")
- smesImageCache[SMES_INPUT_ATTEMPT] = image('icons/obj/power.dmi', "smes-oc0")
-
if(outputting)
- add_overlay(smesImageCache[SMES_OUTPUTTING])
+ add_overlay("smes-op1")
else
- add_overlay(smesImageCache[SMES_NOT_OUTPUTTING])
+ add_overlay("smes-op0")
if(inputting)
- add_overlay(smesImageCache[SMES_INPUTTING])
+ add_overlay("smes-oc1")
else
if(input_attempt)
- add_overlay(smesImageCache[SMES_INPUT_ATTEMPT])
+ add_overlay("smes-oc0")
var/clevel = chargedisplay()
if(clevel>0)
- add_overlay(smesImageCache[clevel])
- return
+ add_overlay("smes-og[clevel]")
/obj/machinery/power/smes/proc/chargedisplay()
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index e18e6781c2..47e04339d4 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -103,9 +103,9 @@
..()
cut_overlays()
if(stat & BROKEN)
- add_overlay(image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER))
+ add_overlay(mutable_appearance(icon, "solar_panel-b", FLY_LAYER))
else
- add_overlay(image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER))
+ add_overlay(mutable_appearance(icon, "solar_panel", FLY_LAYER))
src.setDir(angle2dir(adir))
//calculates the fraction of the sunlight that the panel recieves
@@ -345,7 +345,8 @@
else
add_overlay(icon_screen)
if(currentdir > -1)
- add_overlay(image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(currentdir)))
+ setDir(angle2dir(currentdir))
+ add_overlay(mutable_appearance(icon, "solcon-o", FLY_LAYER))
/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index 4f194129bd..120dd0b46c 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -170,13 +170,13 @@
if(rpm>50000)
- add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o4", FLY_LAYER))
+ add_overlay(mutable_appearance(icon, "comp-o4", FLY_LAYER))
else if(rpm>10000)
- add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o3", FLY_LAYER))
+ add_overlay(mutable_appearance(icon, "comp-o3", FLY_LAYER))
else if(rpm>2000)
- add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o2", FLY_LAYER))
+ add_overlay(mutable_appearance(icon, "comp-o2", FLY_LAYER))
else if(rpm>500)
- add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "comp-o1", FLY_LAYER))
+ add_overlay(mutable_appearance(icon, "comp-o1", FLY_LAYER))
//TODO: DEFERRED
// These are crucial to working of a turbine - the stats modify the power output. TurbGenQ modifies how much raw energy can you get from
@@ -255,7 +255,7 @@
// If it works, put an overlay that it works!
if(lastgen > 100)
- add_overlay(image('icons/obj/atmospherics/pipes/simple.dmi', "turb-o", FLY_LAYER))
+ add_overlay(mutable_appearance(icon, "turb-o", FLY_LAYER))
updateDialog()
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index c46a512c57..9e642b0cef 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -132,15 +132,20 @@
add_overlay("[icon_state]_empty")
else
if(!shaded_charge)
+ var/mutable_appearance/charge_overlay = mutable_appearance(icon, iconState)
for(var/i = ratio, i >= 1, i--)
- add_overlay(image(icon = icon, icon_state = iconState, pixel_x = ammo_x_offset * (i -1)))
+ charge_overlay.pixel_x = ammo_x_offset * (i - 1)
+ add_overlay(charge_overlay)
else
- add_overlay(image(icon = icon, icon_state = "[icon_state]_charge[ratio]"))
+ add_overlay("[icon_state]_charge[ratio]")
if(gun_light && can_flashlight)
var/iconF = "flight"
if(gun_light.on)
iconF = "flight_on"
- add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset))
+ var/mutable_appearance/flashlight_overlay = mutable_appearance(icon, iconF)
+ flashlight_overlay.pixel_x = flight_x_offset
+ flashlight_overlay.pixel_y = flight_y_offset
+ add_overlay(flashlight_overlay)
if(itemState)
itemState += "[ratio]"
item_state = itemState
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 07450fc9b5..6a5dab12bf 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -136,7 +136,10 @@
var/iconF = "flight"
if(gun_light.on)
iconF = "flight_on"
- add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset))
+ var/mutable_appearance/flashlight_overlay = mutable_appearance(icon, iconF)
+ flashlight_overlay.pixel_x = flight_x_offset
+ flashlight_overlay.pixel_y = flight_y_offset
+ add_overlay(flashlight_overlay)
//Casing
/obj/item/ammo_casing/energy/kinetic
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index b4166d8070..f8989a2304 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -14,7 +14,7 @@
var/amount = 30
var/recharged = 0
var/recharge_delay = 5
- var/image/icon_beaker = null
+ var/mutable_appearance/beaker_overlay
var/obj/item/weapon/reagent_containers/beaker = null
var/list/dispensable_reagents = list(
"hydrogen",
@@ -184,10 +184,9 @@
beaker.loc = src
to_chat(user, "You add \the [B] to the machine.")
- if(!icon_beaker)
- icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position.
- icon_beaker.pixel_x = rand(-10,5)
- add_overlay(icon_beaker)
+ beaker_overlay = beaker_overlay || mutable_appearance(icon, "disp_beaker")
+ beaker_overlay.pixel_x = rand(-10, 5)//randomize beaker overlay position.
+ add_overlay(beaker_overlay)
else if(user.a_intent != INTENT_HARM && !istype(I, /obj/item/weapon/card/emag))
to_chat(user, "You can't load \the [I] into the machine!")
else
diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
index cb06dc29ee..5eb034d604 100644
--- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
@@ -15,7 +15,7 @@
else
Wall.thermite = Wall.thermite+(reac_volume*10)
Wall.overlays = list()
- Wall.add_overlay(image('icons/effects/effects.dmi',"thermite"))
+ Wall.add_overlay(mutable_appearance('icons/effects/effects.dmi', "thermite"))
/datum/reagent/thermite/on_mob_life(mob/living/M)
M.adjustFireLoss(1, 0)
diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm
index 01f39db4d3..fc08ebdbe8 100644
--- a/code/modules/reagents/reagent_containers/bottle.dm
+++ b/code/modules/reagents/reagent_containers/bottle.dm
@@ -21,7 +21,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/update_icon()
cut_overlays()
if(reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]-10")
+ var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[icon_state]-10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 01b1d4dc28..05c58f5db8 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -91,6 +91,6 @@
/obj/item/weapon/reagent_containers/dropper/update_icon()
cut_overlays()
if(reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "dropper")
+ var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "dropper")
filling.color = mix_color_from_reagents(reagents.reagent_list)
add_overlay(filling)
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index d9f21b5c26..10b584cdfb 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -133,7 +133,7 @@
cut_overlays()
if(reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
+ var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "[icon_state]10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 77cbb10c8b..eea1fe7a2b 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -167,10 +167,9 @@
item_state = "syringe_[rounded_vol]"
if(reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "syringe10")
- filling.icon_state = "syringe[rounded_vol]"
- filling.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling)
+ 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)
/obj/item/weapon/reagent_containers/syringe/epinephrine
name = "syringe (epinephrine)"
diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm
index 7cc890c1f6..9b1d5e649f 100644
--- a/code/modules/recycling/disposal-unit.dm
+++ b/code/modules/recycling/disposal-unit.dm
@@ -364,7 +364,7 @@
//flush handle
if(flush)
- add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-handle"))
+ add_overlay("dispover-handle")
//only handle is shown if no power
if(stat & NOPOWER || panel_open)
@@ -372,13 +372,13 @@
//check for items in disposal - occupied light
if(contents.len > 0)
- add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-full"))
+ add_overlay("dispover-full")
//charging and ready light
if(pressure_charging)
- add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-charge"))
+ add_overlay("dispover-charge")
else if(full_pressure)
- add_overlay(image('icons/obj/atmospherics/pipes/disposal.dmi', "dispover-ready"))
+ add_overlay("dispover-ready")
//timed process
//charge the gas reservoir and perform flush if ready
diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm
index d4b19a77b1..f0d563b1ff 100644
--- a/code/modules/research/message_server.dm
+++ b/code/modules/research/message_server.dm
@@ -4,7 +4,7 @@ GLOBAL_LIST_INIT(message_servers, list())
var/recipient = "Unspecified" //name of the person
var/sender = "Unspecified" //name of the sender
var/message = "Blank" //transferred message
- var/image/photo = null //Attached photo
+ var/icon/photo //Attached photo
/datum/data_pda_msg/New(var/param_rec = "",var/param_sender = "",var/param_message = "",var/param_photo=null)
diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
index 6d18ce98f7..2938f9263c 100644
--- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
+++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
@@ -47,7 +47,7 @@
to_chat(M, "Discordant whispers flood your mind in a thousand voices. Each one speaks your name, over and over. Something horrible has come.")
M << 'sound/creatures/legion_spawn.ogg'
flash_color(M, flash_color = "#FF0000", flash_time = 50)
- var/image/door_overlay = image('icons/effects/effects.dmi', "legiondoor")
+ var/mutable_appearance/door_overlay = mutable_appearance('icons/effects/effects.dmi', "legiondoor")
notify_ghosts("Legion has been summoned in the [get_area(src)]!", source = src, alert_overlay = door_overlay, action = NOTIFY_JUMP)
is_anyone_home = FALSE
new/mob/living/simple_animal/hostile/megafauna/legion(get_step(src.loc, SOUTH))
diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm
index bb2f401cdb..594a6855da 100644
--- a/code/modules/shuttle/manipulator.dm
+++ b/code/modules/shuttle/manipulator.dm
@@ -26,9 +26,9 @@
/obj/machinery/shuttle_manipulator/update_icon()
cut_overlays()
- var/image/hologram_projection = image(icon, "hologram_on")
+ var/mutable_appearance/hologram_projection = mutable_appearance(icon, "hologram_on")
hologram_projection.pixel_y = 22
- var/image/hologram_ship = image(icon, "hologram_whiteship")
+ var/mutable_appearance/hologram_ship = mutable_appearance(icon, "hologram_whiteship")
hologram_ship.pixel_y = 27
add_overlay(hologram_projection)
add_overlay(hologram_ship)
diff --git a/code/modules/spells/spell_types/lightning.dm b/code/modules/spells/spell_types/lightning.dm
index 4f469b61b2..3a84f73ef9 100644
--- a/code/modules/spells/spell_types/lightning.dm
+++ b/code/modules/spells/spell_types/lightning.dm
@@ -11,7 +11,7 @@
selection_type = "view"
random_target = 1
var/ready = 0
- var/image/halo = null
+ var/static/mutable_appearance/halo
var/sound/Snd // so far only way i can think of to stop a sound, thank MSO for the idea.
action_icon_state = "lightning"
@@ -25,7 +25,7 @@
ready = 1
to_chat(user, "You start gathering the power.")
Snd = new/sound('sound/magic/lightning_chargeup.ogg',channel = 7)
- halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER)
+ halo = halo || mutable_appearance('icons/effects/effects.dmi', "electricity", EFFECTS_LAYER)
user.add_overlay(halo)
playsound(get_turf(user), Snd, 50, 0)
if(do_mob(user,user,100,1))
@@ -38,8 +38,7 @@
/obj/effect/proc_holder/spell/targeted/tesla/proc/Reset(mob/user = usr)
ready = 0
- if(halo)
- user.cut_overlay(halo)
+ user.cut_overlay(halo)
/obj/effect/proc_holder/spell/targeted/tesla/revert_cast(mob/user = usr, message = 1)
if(message)
diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm
index 0d4200d49e..53a7198302 100644
--- a/code/modules/station_goals/bsa.dm
+++ b/code/modules/station_goals/bsa.dm
@@ -127,7 +127,7 @@
icon = 'icons/obj/lavaland/cannon.dmi'
icon_state = "orbital_cannon1"
unsecuring_tool = null
- var/static/image/top_layer = null
+ var/static/mutable_appearance/top_layer
var/ex_power = 3
var/power_used_per_shot = 2000000 //enough to kil standard apc - todo : make this use wires instead and scale explosion power with it
var/ready
@@ -163,17 +163,16 @@
/obj/machinery/bsa/full/New(loc,cannon_direction = WEST)
..()
+ top_layer = top_layer || mutable_appearance(icon, layer = ABOVE_MOB_LAYER)
switch(cannon_direction)
if(WEST)
dir = WEST
pixel_x = -192
- top_layer = image("icons/obj/lavaland/orbital_cannon.dmi", "top_west")
- top_layer.layer = ABOVE_MOB_LAYER
+ top_layer.icon_state = "top_west"
icon_state = "cannon_west"
if(EAST)
dir = EAST
- top_layer = image("icons/obj/lavaland/orbital_cannon.dmi", "top_east")
- top_layer.layer = ABOVE_MOB_LAYER
+ top_layer.icon_state = "top_east"
icon_state = "cannon_east"
add_overlay(top_layer)
reload()
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index 56d35be23b..d93fc658dd 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -284,79 +284,66 @@
/obj/item/bodypart/proc/get_limb_icon(dropped)
icon_state = "" //to erase the default sprite, we're building the visual aspects of the bodypart through overlays alone.
- var/list/standing = list()
+ . = list()
- var/image_dir
+ var/image_dir = 0
if(dropped)
image_dir = SOUTH
if(dmg_overlay_type)
if(brutestate)
- standing += image("icon"='icons/mob/dam_mob.dmi', "icon_state"="[dmg_overlay_type]_[body_zone]_[brutestate]0", "layer"=-DAMAGE_LAYER, "dir"=image_dir)
+ . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_[brutestate]0", -DAMAGE_LAYER, image_dir)
if(burnstate)
- standing += image("icon"='icons/mob/dam_mob.dmi', "icon_state"="[dmg_overlay_type]_[body_zone]_0[burnstate]", "layer"=-DAMAGE_LAYER, "dir"=image_dir)
+ . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir)
+ var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir)
+ . += limb
if(animal_origin)
if(status == BODYPART_ORGANIC)
+ limb.icon = 'icons/mob/animal_parts.dmi'
if(species_id == "husk")
- standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state"="[animal_origin]_husk_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
+ limb.icon_state = "[animal_origin]_husk_[body_zone]"
else
- standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state"="[animal_origin]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
+ limb.icon_state = "[animal_origin]_[body_zone]"
else
- standing += image("icon"='icons/mob/augments.dmi', "icon_state"="[animal_origin]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
- return standing
+ limb.icon = 'icons/mob/augments.dmi'
+ limb.icon_state = "[animal_origin]_[body_zone]"
+ return
var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable
if((body_zone != "head" && body_zone != "chest"))
should_draw_gender = FALSE
- var/image/I
-
if(status == BODYPART_ORGANIC)
if(should_draw_greyscale)
+ limb.icon = 'icons/mob/human_parts_greyscale.dmi'
if(should_draw_gender)
- I = image("icon"='icons/mob/human_parts_greyscale.dmi', "icon_state"="[species_id]_[body_zone]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
+ limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
else if(use_digitigrade)
- I = image("icon"='icons/mob/human_parts_greyscale.dmi', "icon_state"="digitigrade_[use_digitigrade]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
+ limb.icon_state = "digitigrade_[use_digitigrade]_[body_zone]"
else
- I = image("icon"='icons/mob/human_parts_greyscale.dmi', "icon_state"="[species_id]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
+ limb.icon_state = "[species_id]_[body_zone]"
else
+ limb.icon = 'icons/mob/human_parts.dmi'
if(should_draw_gender)
- I = image("icon"='icons/mob/human_parts.dmi', "icon_state"="[species_id]_[body_zone]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
+ limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
else
- I = image("icon"='icons/mob/human_parts.dmi', "icon_state"="[species_id]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
+ limb.icon_state = "[species_id]_[body_zone]"
+
else
+ limb.icon = icon
if(should_draw_gender)
- I = image("icon"= icon, "icon_state"="[body_zone]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
+ limb.icon_state = "[body_zone]_[icon_gender]"
else
- I = image("icon"= icon, "icon_state"="[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
- standing += I
- return standing
-
-
- if(!should_draw_greyscale)
- standing += I
- return standing
-
- //Greyscale Colouring
- var/draw_color
-
- if(skin_tone) //Limb has skin color variable defined, use it
- draw_color = skintone2hex(skin_tone)
- if(species_color)
- draw_color = species_color
- if(mutation_color)
- draw_color = mutation_color
-
- if(draw_color)
- I.color = "#[draw_color]"
- //End Greyscale Colouring
- standing += I
-
- return standing
+ limb.icon_state = "[body_zone]"
+ return
+ if(should_draw_greyscale)
+ var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone))
+ if(draw_color)
+ limb.color = "#[draw_color]"
/obj/item/bodypart/deconstruct(disassembled = TRUE)
drop_organs()
diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm
index 6417ade819..909f83e4d7 100644
--- a/code/modules/surgery/bodyparts/head.dm
+++ b/code/modules/surgery/bodyparts/head.dm
@@ -119,7 +119,7 @@
/obj/item/bodypart/head/get_limb_icon(dropped)
cut_overlays()
- var/list/standing = ..()
+ . = ..()
if(dropped) //certain overlays only appear when the limb is being detached from its owner.
var/datum/sprite_accessory/S
@@ -128,45 +128,48 @@
if(facial_hair_style)
S = GLOB.facial_hair_styles_list[facial_hair_style]
if(S)
- var/image/img_facial = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER, "dir"=SOUTH)
- img_facial.color = "#" + facial_hair_color
- img_facial.alpha = hair_alpha
- standing += img_facial
+ var/image/facial_overlay = image(S.icon, "[S.icon_state]", -HAIR_LAYER, SOUTH)
+ facial_overlay.color = "#" + facial_hair_color
+ facial_overlay.alpha = hair_alpha
+ . += facial_overlay
+ var/image/hair_overlay = image(layer = -HAIR_LAYER, dir = SOUTH)
+ . += hair_overlay
//Applies the debrained overlay if there is no brain
if(!brain)
if(animal_origin == ALIEN_BODYPART)
- standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state" = "debrained_alien", "layer" = -HAIR_LAYER, "dir"=SOUTH)
+ hair_overlay.icon = 'icons/mob/animal_parts.dmi'
+ hair_overlay.icon_state = "debrained_alien"
else if(animal_origin == LARVA_BODYPART)
- standing += image("icon"='icons/mob/animal_parts.dmi', "icon_state" = "debrained_larva", "layer" = -HAIR_LAYER, "dir"=SOUTH)
+ hair_overlay.icon = 'icons/mob/animal_parts.dmi'
+ hair_overlay.icon_state = "debrained_larva"
else if(!(NOBLOOD in species_flags_list))
- standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER, "dir"=SOUTH)
+ hair_overlay.icon = 'icons/mob/human_face.dmi'
+ hair_overlay.icon_state = "debrained"
else
if(hair_style)
S = GLOB.hair_styles_list[hair_style]
if(S)
- var/image/img_hair = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER, "dir"=SOUTH)
- img_hair.color = "#" + hair_color
- img_hair.alpha = hair_alpha
- standing += img_hair
+ hair_overlay.icon = icon
+ hair_overlay.icon_state = "[S.icon_state]"
+ hair_overlay.color = "#" + hair_color
+ hair_overlay.alpha = hair_alpha
// lipstick
if(lip_style)
- var/image/lips = image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]", "layer" = -BODY_LAYER, "dir"=SOUTH)
- lips.color = lip_color
- standing += lips
+ var/image/lips_overlay = image('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER, SOUTH)
+ lips_overlay.color = lip_color
+ . += lips_overlay
// eyes
+ var/image/eyes_overlay = image('icons/mob/human_face.dmi', "eyes", -BODY_LAYER, SOUTH)
+ . += eyes_overlay
if(!eyes)
- standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "eyes_missing", "layer" = -BODY_LAYER, "dir"=SOUTH)
+ eyes_overlay.icon_state = "eyes_missing"
else if(eyes.eye_color)
- var/image/img_eyes = image("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes", "layer" = -BODY_LAYER, "dir"=SOUTH)
- img_eyes.color = "#" + eyes.eye_color
- standing += img_eyes
-
- return standing
+ eyes_overlay.color = "#" + eyes.eye_color
/obj/item/bodypart/head/monkey
icon = 'icons/mob/animal_parts.dmi'
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
index 85a98b09e6..7b4f98693c 100644
--- a/code/modules/surgery/organs/augments_internal.dm
+++ b/code/modules/surgery/organs/augments_internal.dm
@@ -11,7 +11,7 @@
if(iscarbon(M))
src.Insert(M)
if(implant_overlay)
- var/image/overlay = new /image(icon, implant_overlay)
+ var/mutable_appearance/overlay = mutable_appearance(icon, implant_overlay)
overlay.color = implant_color
add_overlay(overlay)
return ..()
diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm
index 6afd401b75..5f663b85f8 100644
--- a/code/modules/vehicles/atv.dm
+++ b/code/modules/vehicles/atv.dm
@@ -3,7 +3,7 @@
name = "all-terrain vehicle"
desc = "An all-terrain vehicle built for traversing rough terrain with ease. One of the few old-earth technologies that are still relevant on most planet-bound outposts."
icon_state = "atv"
- var/static/image/atvcover = null
+ var/static/mutable_appearance/atvcover
/obj/vehicle/atv/buckle_mob(mob/living/buckled_mob, force = 0, check_loc = 1)
. = ..()
@@ -11,9 +11,7 @@
/obj/vehicle/atv/New()
..()
- if(!atvcover)
- atvcover = image("icons/obj/vehicles.dmi", "atvcover")
- atvcover.layer = ABOVE_MOB_LAYER
+ atvcover = atvcover || mutable_appearance(icon, "atvcover", ABOVE_MOB_LAYER)
/obj/vehicle/atv/post_buckle_mob(mob/living/M)
diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm
index 3db99e736b..21d8cff1be 100644
--- a/code/modules/vehicles/speedbike.dm
+++ b/code/modules/vehicles/speedbike.dm
@@ -4,7 +4,7 @@
icon_state = "speedbike_blue"
layer = LYING_MOB_LAYER
var/overlay_state = "cover_blue"
- var/image/overlay = null
+ var/static/mutable_appearance/overlay
/obj/vehicle/space/speedbike/buckle_mob(mob/living/M, force = 0, check_loc = 1)
. = ..()
@@ -12,8 +12,7 @@
/obj/vehicle/space/speedbike/New()
. = ..()
- overlay = image("icons/obj/bike.dmi", overlay_state)
- overlay.layer = ABOVE_MOB_LAYER
+ overlay = overlay || mutable_appearance(icon, overlay_state, ABOVE_MOB_LAYER)
add_overlay(overlay)
/obj/effect/overlay/temp/speedbike_trail
diff --git a/tgstation.dme b/tgstation.dme
index df3e306d8c..4eba97eef4 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -247,6 +247,7 @@
#include "code\datums\martial.dm"
#include "code\datums\material_container.dm"
#include "code\datums\mind.dm"
+#include "code\datums\mutable_appearance.dm"
#include "code\datums\mutations.dm"
#include "code\datums\outfit.dm"
#include "code\datums\progressbar.dm"