diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm
index 502060933ee..128ef87060b 100644
--- a/code/modules/admin/verbs/freeze.dm
+++ b/code/modules/admin/verbs/freeze.dm
@@ -5,88 +5,83 @@
//////Allows admin's to right click on any mob/mech and freeze them in place.///
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
-/client/proc/freeze(mob/living/M as mob in mob_list)
+var/global/list/frozen_mob_list = list()
+/client/proc/freeze(var/mob/living/M as mob in mob_list)
set category = "Special Verbs"
set name = "Freeze"
if(!holder)
- src << "Only administrators may use this command."
+ src << "Error: Freeze: Only administrators may use this command."
return
- if(!mob)
- return
- if(!istype(M))
- alert("Cannot freeze a ghost")
- return
- if(usr)
- if (usr.client)
- if(usr.client.holder)
- if (istype(M, /mob/living/carbon/slime))
- if(!M.paralysis)
- M.adjustToxLoss(2147483647)
- M.AdjustParalysis(2147483647)
- var/adminomaly = new/obj/effect/overlay/adminoverlay
- spawn(50)
- M.overlays += adminomaly
- M << "You have been frozen by [key]"
- message_admins("\blue [key_name_admin(usr)] froze [key_name(M)]")
- log_admin("[key_name(usr)] froze [key_name(M)]")
- else if (M.paralysis)
- M.AdjustParalysis(-2147483647)
- M.blinded = 0
- M.lying = 0
- M.stat = 0
- M << " You have been unfrozen by [key]"
- message_admins("\blue [key_name_admin(usr)] unfroze [key_name(M)]")
- log_admin("[key_name(usr)] unfroze [key_name(M)]")
- M.revive()
- else if (istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/FM = M
+ if(!istype(M)) return
+ if(!check_rights(R_ADMIN)) return
+ if(M in frozen_mob_list)
+ M.admin_unFreeze(src)
+ else
+ M.admin_Freeze(src)
- if(!FM.paralysis)
- FM.anchored = 1
- FM.frozen = 1
- FM.AdjustParalysis(2147483647)
- var/adminomaly = new/obj/effect/overlay/adminoverlay
- spawn(50)
- FM.overlays += adminomaly
- FM << "You have been frozen by [key]"
- message_admins("\blue [key_name_admin(usr)] froze [key_name(FM)]")
- log_admin("[key_name(usr)] froze [key_name(FM)]")
- else if (M.paralysis)
- FM.anchored = 0
- FM.frozen = 0
- FM.AdjustParalysis(-2147483647)
- FM.blinded = 0
- FM.lying = 0
- FM.stat = 0
+///mob freeze procs
- FM << " You have been unfrozen by [key]"
- message_admins("\blue [key_name_admin(usr)] unfroze [key_name(FM)]")
- log_admin("[key_name(usr)] unfroze [key_name(FM)]")
+/mob/living/var/frozen = 0 //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
- else
+/mob/living/proc/admin_Freeze(var/client/admin)
+ if(istype(admin))
+ src << "You have been frozen by [admin.key]"
+ message_admins("\blue [key_name_admin(admin)] froze [key_name(src)]")
+ log_admin("[key_name(admin)] froze [key_name(src)]")
- if(!M.paralysis)
- M.anchored = 1
- M.AdjustParalysis(2147483647)
- var/adminomaly = new/obj/effect/overlay/adminoverlay
- spawn(50)
- M.overlays += adminomaly
- M << "You have been frozen by [key]"
- message_admins("\blue [key_name_admin(usr)] froze [key_name(M)]")
- log_admin("[key_name(usr)] froze [key_name(M)]")
- else if (M.paralysis)
- M.anchored = 0
- M.AdjustParalysis(-2147483647)
- M.blinded = 0
- M.lying = 0
- M.stat = 0
+ var/obj/effect/overlay/adminoverlay/AO = new
+ src.overlays += AO
- M << " You have been unfrozen by [key]"
- message_admins("\blue [key_name_admin(usr)] unfroze [key_name(M)]")
- log_admin("[key_name(usr)] unfroze [key_name(M)]")
+ anchored = 1
+ frozen = 1
+ admin_prev_sleeping = sleeping
+ sleeping += 20000
+ if(!(src in frozen_mob_list))
+ frozen_mob_list += src
+
+/mob/living/proc/admin_unFreeze(var/client/admin)
+ if(istype(admin))
+ src << "You have been unfrozen by [key]"
+ message_admins("\blue [key_name_admin(admin)] unfroze [key_name(src)]")
+ log_admin("[key_name(admin)] unfroze [key_name(src)]")
+
+ update_icons()
+
+ anchored = 0
+ frozen = 0
+ sleeping = admin_prev_sleeping
+ admin_prev_sleeping = null
+ if(src in frozen_mob_list)
+ frozen_mob_list -= src
-/client/proc/freezemecha(obj/mecha/O as obj in mechas_list)
+/mob/living/carbon/slime/admin_Freeze(admin)
+ ..(admin)
+ adjustToxLoss(1010101010) //arbitrary large value
+
+/mob/living/carbon/slime/admin_unFreeze(admin)
+ ..(admin)
+ adjustToxLoss(-1010101010)
+ stat = 0
+ revive()
+
+
+/mob/living/simple_animal/var/admin_prev_health = null
+
+/mob/living/simple_animal/admin_Freeze(admin)
+ ..(admin)
+ admin_prev_health = health
+ health = 0
+
+/mob/living/simple_animal/admin_unFreeze(admin)
+ ..(admin)
+ revive()
+ overlays.Cut()
+
+//////////////////////////Freeze Mech
+
+/client/proc/freezemecha(var/obj/mecha/O as obj in mechas_list)
set category = "Special Verbs"
set name = "Freeze Mech"
if(!holder)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index f8aa4a64ac9..39e0f052f2b 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -80,7 +80,5 @@
var/lastFart = 0 // Toxic fart cooldown.
- var/frozen = 0 //used for preventing attacks on admin-frozen people
-
var/fire_dmi = 'icons/mob/OnFire.dmi'
var/fire_sprite = "Standing"
\ No newline at end of file