diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 3fb9c88fc58..c474f1247d1 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1081,6 +1081,17 @@ var/global/BSACooldown = 0
else
alert("You cannot perform this action. You must be of a higher administrative rank!")
return
+ if (href_list["makeanimal"])
+ if(src.level>=3)
+ var/mob/M = locate(href_list["makeanimal"])
+ if(!istype(M, /mob/new_player))
+ usr.client.cmd_admin_animalize(M)
+ else
+ alert("The mob must not be a new_player.")
+ return
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
+ return
/***************** BEFORE**************
if (href_list["l_players"])
@@ -2307,6 +2318,12 @@ var/global/BSACooldown = 0
body += "Make Alien | "
body += "Make Metroid "
+ //Simple Animals
+ if(isanimal(M))
+ body += "Re-Animalize | "
+ else
+ body += "Animalize | "
+
body += "
"
body += "Rudimentary transformation:
These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.
"
body += "Observer | "
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 4afcbd6e4a5..bdcc4b25afc 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -172,6 +172,27 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
else
alert("Invalid mob")
+/client/proc/cmd_admin_animalize(var/mob/M in mob_list)
+ set category = "Fun"
+ set name = "Make Simple Animal"
+
+ if(!ticker)
+ alert("Wait until the game starts")
+ return
+
+ if(!M)
+ alert("That mob doesn't seem to exist, close the panel and try again.")
+ return
+
+ if(istype(M, /mob/new_player))
+ alert("The mob must not be a new_player.")
+ return
+
+ log_admin("[key_name(src)] has animalized [M.key].")
+ spawn(10)
+ M.Animalize()
+
+
/client/proc/makepAI(var/turf/T in mob_list)
set category = "Fun"
set name = "Make pAI"
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index d6a0193f82b..3abdbb39ecf 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -269,4 +269,87 @@
new_corgi << "You are now a Corgi. Yap Yap!"
spawn(0)//To prevent the proc from returning null.
del(src)
- return
\ No newline at end of file
+ return
+
+/mob/living/carbon/human/Animalize()
+
+ var/list/mobtypes = typesof(/mob/living/simple_animal)
+ var/mobpath = input("Which type of mob should [src] turn into?", "Choose a type") in mobtypes
+
+ if(bad_animal(mobpath))
+ usr << "\red Sorry but this mob type is currently unavailable."
+ return
+
+ if(monkeyizing)
+ return
+ for(var/obj/item/W in src)
+ drop_from_inventory(W)
+
+ regenerate_icons()
+ monkeyizing = 1
+ canmove = 0
+ icon = null
+ invisibility = 101
+
+ for(var/t in organs)
+ del(t)
+
+ var/mob/new_mob = new mobpath(src.loc)
+
+ new_mob.key = key
+ new_mob.a_intent = "hurt"
+ new_mob.UI = UI
+
+
+ new_mob << "You suddenly feel more... animalistic."
+ spawn()
+ del(src)
+ return
+
+/mob/proc/Animalize()
+
+ var/list/mobtypes = typesof(/mob/living/simple_animal)
+ var/mobpath = input("Which type of mob should [src] turn into?", "Choose a type") in mobtypes
+
+ if(bad_animal(mobpath))
+ usr << "\red Sorry but this mob type is currently unavailable."
+ return
+
+ var/mob/new_mob = new mobpath(src.loc)
+
+ new_mob.key = key
+ new_mob.a_intent = "hurt"
+ new_mob.UI = UI
+ new_mob << "You feel more... animalistic"
+
+ del(src)
+
+//Certain mob types either do not work, or have major problems and should now be allowed to be controlled by players.
+/mob/proc/bad_animal(var/MP)
+
+ //Sanity, this should never happen.
+ if(!MP || !ispath(MP, /mob/living/simple_animal))
+ return 1
+
+ //It is impossible to pull up the player panel for mice
+ if(ispath(MP, /mob/living/simple_animal/mouse))
+ return 1
+
+ //Bears will auto-attack mobs, even if they're player controlled
+ if(ispath(MP, /mob/living/simple_animal/bear))
+ return 1
+
+ //Parrots are unfinished, they have no sprite, movement, ect...
+ else if(ispath(MP, /mob/living/simple_animal/parrot))
+ return 1
+
+ //Very buggy, they seem to just spawn additional space worms everywhere and eating your own tail results in new worms spawning.
+ else if(ispath(MP, /mob/living/simple_animal/space_worm))
+ return 1
+
+ //No problems found!
+ else
+ return 0
+
+
+
diff --git a/html/changelog.html b/html/changelog.html
index e20e30cb57d..39e538dd1a4 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -49,6 +49,11 @@ should be listed in the changelog upon commit tho. Thanks. -->