diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm
index 4d60fb72bee..7b53ed26570 100644
--- a/code/modules/admin/verbs/freeze.dm
+++ b/code/modules/admin/verbs/freeze.dm
@@ -26,7 +26,7 @@ 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, skip_overlays = FALSE)
+/mob/living/proc/admin_Freeze(client/admin, skip_overlays = FALSE)
if(istype(admin))
to_chat(src, "You have been frozen by [admin]")
message_admins("[key_name_admin(admin)] froze [key_name_admin(src)]")
@@ -34,24 +34,25 @@ var/global/list/frozen_mob_list = list()
var/obj/effect/overlay/adminoverlay/AO = new
if(skip_overlays)
- src.overlays += AO
+ overlays += AO
- anchored = 1
- frozen = AO
+ canmove = FALSE
admin_prev_sleeping = sleeping
AdjustSleeping(20000)
+ frozen = AO
if(!(src in frozen_mob_list))
frozen_mob_list += src
-/mob/living/proc/admin_unFreeze(var/client/admin, skip_overlays = FALSE)
+/mob/living/proc/admin_unFreeze(client/admin, skip_overlays = FALSE)
if(istype(admin))
to_chat(src, "You have been unfrozen by [admin]")
message_admins("[key_name_admin(admin)] unfroze [key_name_admin(src)]")
log_admin("[key_name(admin)] unfroze [key_name(src)]")
- anchored = 0
if(skip_overlays)
overlays -= frozen
+
+ canmove = TRUE
frozen = null
SetSleeping(admin_prev_sleeping)
admin_prev_sleeping = null
diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm
index 0e1a19da662..28cdc17afeb 100644
--- a/code/modules/mob/living/status_procs.dm
+++ b/code/modules/mob/living/status_procs.dm
@@ -344,6 +344,8 @@
return SetSleeping(max(sleeping, amount), updating, no_alert)
/mob/living/SetSleeping(amount, updating = 1, no_alert = FALSE)
+ if(frozen) // If the mob has been admin frozen, sleeping should not be changable
+ return FALSE
. = STATUS_UPDATE_STAT
if((!!amount) == (!!sleeping)) // We're not changing from + to 0 or vice versa
updating = FALSE