diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 1f0768ba9b0..3ea0507a50e 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -237,7 +237,9 @@
#define R_HAND_LAYER 31
#define TARGETED_LAYER 32 //BS12: Layer for the target overlay from weapon targeting system
#define FIRE_LAYER 33 //If you're on fire
-#define TOTAL_LAYERS 33
+#define MISC_LAYER 34
+#define FROZEN_LAYER 35
+#define TOTAL_LAYERS 35
///Access Region Codes///
#define REGION_ALL 0
diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm
index 8dc852e9221..de91530eabe 100644
--- a/code/modules/admin/verbs/freeze.dm
+++ b/code/modules/admin/verbs/freeze.dm
@@ -26,14 +26,15 @@ var/global/list/frozen_mob_list = list()
/mob/living/var/frozen = null //used for preventing attacks on admin-frozen mobs
/mob/living/var/admin_prev_sleeping = 0 //used for keeping track of previous sleeping value with admin freeze
-/mob/living/proc/admin_Freeze(var/client/admin)
+/mob/living/proc/admin_Freeze(var/client/admin, skip_overlays = FALSE)
if(istype(admin))
to_chat(src, "You have been frozen by [key_name(admin)]")
message_admins("[key_name_admin(admin)] froze [key_name_admin(src)]")
log_admin("[key_name(admin)] froze [key_name(src)]")
var/obj/effect/overlay/adminoverlay/AO = new
- src.overlays += AO
+ if(skip_overlays)
+ src.overlays += AO
anchored = 1
frozen = AO
@@ -42,14 +43,15 @@ var/global/list/frozen_mob_list = list()
if(!(src in frozen_mob_list))
frozen_mob_list += src
-/mob/living/proc/admin_unFreeze(var/client/admin)
+/mob/living/proc/admin_unFreeze(var/client/admin, skip_overlays = FALSE)
if(istype(admin))
to_chat(src, "You have been unfrozen by [key_name(admin)]")
message_admins("[key_name_admin(admin)] unfroze [key_name_admin(src)]")
log_admin("[key_name(admin)] unfroze [key_name(src)]")
anchored = 0
- overlays -= frozen
+ if(skip_overlays)
+ overlays -= frozen
frozen = null
SetSleeping(admin_prev_sleeping)
admin_prev_sleeping = null
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 0265723daed..a1d179bbf1a 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -105,7 +105,6 @@ Please contact me on #coderbus IRC. ~Carn x
/mob/living/carbon/human
var/list/overlays_standing[TOTAL_LAYERS]
- var/list/misc_effect_overlays = list() //Overlays that are applied at a custom layer (defined in each image's .layer property) outside of standard overlay application. Updated in update_misc_effects()
var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed
var/icon/skeleton
var/list/cached_standing_overlays = list() // List of everything currently in a human's actual overlays
@@ -189,6 +188,7 @@ var/global/list/damage_icon_parts = list()
else
icon_key += "#000000"
+ update_misc_effects()
for(var/organ_tag in dna.species.has_limbs)
var/obj/item/organ/external/part = bodyparts_by_name[organ_tag]
if(isnull(part))
@@ -296,6 +296,7 @@ var/global/list/damage_icon_parts = list()
lips.Blend(lip_color, ICON_ADD)
stand_icon.Blend(lips, ICON_OVERLAY)
+ icon = stand_icon
//tail
update_tail_layer(0)
//head accessory
@@ -1246,11 +1247,23 @@ var/global/list/damage_icon_parts = list()
apply_overlay(COLLAR_LAYER)
/mob/living/carbon/human/proc/update_misc_effects()
- misc_effect_overlays.Cut()
+ remove_overlay(MISC_LAYER)
//Begin appending miscellaneous effects.
if(eyes_shine())
- misc_effect_overlays += get_eye_shine() //Image layer is specified in get_eye_shine() proc as LIGHTING_LAYER + 1.
+ overlays_standing[MISC_LAYER] = get_eye_shine() //Image layer is specified in get_eye_shine() proc as LIGHTING_LAYER + 1.
+
+ apply_overlay(MISC_LAYER)
+
+/mob/living/carbon/human/admin_Freeze(client/admin, skip_overlays = TRUE)
+ . = ..()
+ overlays_standing[FROZEN_LAYER] = mutable_appearance(frozen, layer = FROZEN_LAYER)
+ apply_overlay(FROZEN_LAYER)
+
+/mob/living/carbon/human/admin_unFreeze(client/admin, skip_overlays = TRUE)
+ . = ..()
+ remove_overlay(FROZEN_LAYER)
+
/mob/living/carbon/human/proc/force_update_limbs()
for(var/obj/item/organ/external/O in bodyparts)