diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm new file mode 100644 index 00000000000..ac3f03eeda3 --- /dev/null +++ b/code/modules/projectiles/projectile/change.dm @@ -0,0 +1,152 @@ +/obj/item/projectile/change + name = "bolt of change" + icon_state = "ice_1" + damage = 0 + damage_type = BURN + nodamage = 1 + flag = "energy" + + on_hit(var/atom/change) + wabbajack(change) + + + /*Bump(atom/change) + if(istype(change, /mob/living)) + wabbajack(change) + else + del(src)*/ + + + +/obj/item/projectile/change/proc/wabbajack (mob/M as mob in world) + if(istype(M, /mob/living)) + for(var/obj/item/W in M) + M.drop_from_slot(W) + var/randomize = pick("monkey","robot","metroid","alien") + switch(randomize) + if("monkey") + if (M.monkeyizing) + return + 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 << "You are now a monkey." + del(M) + return O + if("robot") + if (M.monkeyizing) + return + 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" + O.lastKnownIP = M.client.address ? M.client.address : null + 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 + 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." + 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 << "You are now a baby Metroid." + del(M) + return new_metroid + if("alien") + if (M.monkeyizing) + return + 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 << "You are now an alien." + del(M) + return new_xeno + return +