diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 6e4f58c5ab2..d7e79934389 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -142,6 +142,11 @@ var/global/nologevent = 0
if(istype(M, /mob/dead/observer))
body += "Re-incarnate | "
+ if(ispAI(M))
+ body += "Is a pAI "
+ else
+ body += "Make pAI | "
+
// DNA2 - Admin Hax
if(M.dna && iscarbon(M))
body += "
"
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 7fb6806b5c0..090955de57a 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1142,6 +1142,28 @@
message_admins("\blue [key_name_admin(usr)] attempting to corgize [key_name_admin(H)]", 1)
H.corgize()
+ else if(href_list["makePAI"])
+ if(!check_rights(R_SPAWN)) return
+
+ var/mob/living/carbon/human/H = locate(href_list["makePAI"])
+ if(!istype(H))
+ to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
+ return
+
+ var/painame = "Default"
+ var/name = ""
+ if(alert(usr, "Do you want to set their name or let them choose their own name?", "Name Choice", "Set Name", "Let them choose") == "Set Name")
+ name = sanitize(copytext(input(usr, "Enter a name for the new pAI. Default name is [painame].", "pAI Name", painame),1,MAX_NAME_LEN))
+ else
+ name = sanitize(copytext(input(H, "An admin wants to make you into a pAI. Choose a name. Default is [painame].", "pAI Name", painame),1,MAX_NAME_LEN))
+
+ if(!name)
+ name = painame
+
+ log_admin("[key_name(usr)] attempting to pAIze [key_name(H)]")
+ message_admins("\blue [key_name_admin(usr)] attempting to pAIze [key_name_admin(H)]", 1)
+ H.paize(name)
+
else if(href_list["forcespeech"])
if(!check_rights(R_SERVER|R_EVENT)) return
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index ac3dd8af716..ea70bbe88ac 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -319,6 +319,35 @@
qdel(src)
+
+/mob/living/carbon/human/proc/paize(var/name)
+ if(notransform)
+ return
+ for(var/obj/item/W in src)
+ unEquip(W)
+ regenerate_icons()
+ notransform = 1
+ canmove = 0
+ icon = null
+ invisibility = 101
+ for(var/t in organs) //this really should not be necessary
+ qdel(t)
+
+ var/obj/item/device/paicard/card = new(loc)
+ var/mob/living/silicon/pai/pai = new(card)
+ pai.key = key
+ card.setPersonality(pai)
+
+ pai.name = name
+ pai.real_name = name
+ card.name = name
+
+ to_chat(pai, "You have become a pAI! Your name is [pai.name].")
+ pai.update_pipe_vision()
+ spawn(0)//To prevent the proc from returning null.
+ qdel(src)
+ return
+
/mob/proc/safe_respawn(var/MP)
if(!MP)
return 0