diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm
index 26a5ca1f42d..676aaac977b 100644
--- a/code/modules/projectiles/projectile/change.dm
+++ b/code/modules/projectiles/projectile/change.dm
@@ -29,25 +29,162 @@
if("monkey")
if (M.monkeyizing)
return
- if(istype(M,/mob/living/carbon/human))
- M:monkeyize()
+ M.update_clothing()
+ M.monkeyizing = 1
+ M.canmove = 0
+ M.icon = null
+ M.invisibility = 101
+ var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( M.loc )
+ O.name = "monkey"
+ if (M.client)
+ M.client.mob = O
+ if(M.mind)
+ M.mind.transfer_to(O)
+ O.a_intent = "hurt"
+ O.universal_speak = 1
+ O << "You are now a monkey."
+ del(M)
+ return O
if("robot")
if (M.monkeyizing)
return
- if(istype(M,/mob/living/carbon/human))
- M:Robotize()
+ M.update_clothing()
+ M.monkeyizing = 1
+ M.canmove = 0
+ M.icon = null
+ M.invisibility = 101
+ if(M.client)
+ M.client.screen -= M.hud_used.contents
+ M.client.screen -= M.hud_used.adding
+ M.client.screen -= M.hud_used.mon_blo
+ M.client.screen -= list( M.oxygen, M.throw_icon, M.i_select, M.m_select, M.toxin, M.internals, M.fire, M.hands, M.healths, M.pullin, M.blind, M.flash, M.rest, M.sleep, M.mach )
+ M.client.screen -= list( M.zone_sel, M.oxygen, M.throw_icon, M.i_select, M.m_select, M.toxin, M.internals, M.fire, M.hands, M.healths, M.pullin, M.blind, M.flash, M.rest, M.sleep, M.mach )
+
+ var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( M.loc )
+ O.cell = new(O)
+ O.cell.maxcharge = 7500
+ O.cell.charge = 7500
+ O.gender = M.gender
+ O.invisibility = 0
+ O.name = "Cyborg"
+ O.real_name = "Cyborg"
+ if (M.mind)
+ M.mind.transfer_to(O)
+ if (M.mind.assigned_role == "Cyborg")
+ M.mind.original = O
+ else if (M.mind.special_role) O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite")
+ else
+ M.mind = new /datum/mind( )
+ M.mind.key = M.key
+ M.mind.current = O
+ M.mind.original = O
+ M.mind.transfer_to(O)
+
+ if(!(O.mind in ticker.minds))
+ ticker.minds += O.mind//Adds them to regular mind list.
+
+ O.loc = loc
+ O << "You are playing a Robot. A Robot can interact with most electronic objects in its view point."
+ O << "You must follow the laws that the AI has. You are the AI's assistant to the station basically."
+ O << "To use something, simply double-click it."
+ O << {"Use say ":s to speak to fellow cyborgs and the AI through binary."}
+
+ O.job = "Cyborg"
+
+ O.mmi = new /obj/item/device/mmi(O)
+ O.mmi.transfer_identity(M)//Does not transfer key/client.
+ del(M)
+ return O
if("metroid")
if (M.monkeyizing)
return
- if(istype(M,/mob/living/carbon/human))
- M:Metroidize()
+ M.update_clothing()
+ M.monkeyizing = 1
+ M.canmove = 0
+ M.icon = null
+ M.invisibility = 101
+ if(prob(50))
+ var/mob/living/carbon/metroid/adult/new_metroid = new /mob/living/carbon/metroid/adult (M.loc)
+ if (M.client)
+ M.client.mob = new_metroid
+ if(M.mind)
+ M.mind.transfer_to(new_metroid)
+
+ new_metroid.a_intent = "hurt"
+ new_metroid << "You are now an adult Metroid."
+ new_metroid.universal_speak = 1
+ del(M)
+ return new_metroid
+ else
+ var/mob/living/carbon/metroid/new_metroid = new /mob/living/carbon/metroid (M.loc)
+ if (M.client)
+ M.client.mob = new_metroid
+ if(M.mind)
+ M.mind.transfer_to(new_metroid)
+ new_metroid.a_intent = "hurt"
+ new_metroid.universal_speak = 1
+ new_metroid << "You are now a baby Metroid."
+ del(M)
+ return new_metroid
if("alien")
if (M.monkeyizing)
return
- if(istype(M,/mob/living/carbon/human))
- M:Alienize()
+ M.update_clothing()
+ M.monkeyizing = 1
+ M.canmove = 0
+ M.icon = null
+ M.invisibility = 101
+ var/alien_caste = pick("Hunter","Sentinel","Drone")
+ var/mob/living/carbon/alien/humanoid/new_xeno
+ switch(alien_caste)
+ if("Hunter")
+ new_xeno = new /mob/living/carbon/alien/humanoid/hunter (M.loc)
+ if("Sentinel")
+ new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (M.loc)
+ if("Drone")
+ new_xeno = new /mob/living/carbon/alien/humanoid/drone (M.loc)
+ if (M.client)
+ M.client.mob = new_xeno
+ if(M.mind)
+ M.mind.transfer_to(new_xeno)
+ new_xeno.a_intent = "hurt"
+ new_xeno.universal_speak = 1
+ new_xeno << "You are now an alien."
+ del(M)
+ return new_xeno
if("human")
if (M.monkeyizing)
- return
+ return
+ M.update_clothing()
+ M.monkeyizing = 1
+ M.canmove = 0
+ M.icon = null
+ M.invisibility = 101
+ var/mob/living/carbon/human/O = new /mob/living/carbon/human( M.loc )
+
+ var/first = pick(first_names_male)
+ var/last = pick(last_names)
+ O.name = "[first] [last]"
+ O.real_name = "[first] [last]"
+ var/race = pick("lizard","golem","metroid","plant","normal")
+ switch(race)
+ if("lizard")
+ O.mutantrace = "lizard"
+ if("golem")
+ O.mutantrace = "golem"
+ if("metroid")
+ O.mutantrace = "metroid"
+ if("plant")
+ O.mutantrace = "plant"
+ if("normal")
+ O.mutantrace = ""
+ if (M.client)
+ M.client.mob = O
+ if(M.mind)
+ M.mind.transfer_to(O)
+ O.a_intent = "hurt"
+ O << "You are now a human."
+ del(M)
+ return O
return