Summon Magic / Charge / Wands&Staffs / One time spellbooks / New Apprentice

---

Summon Magic:

This new wizard spell works much like summon guns except it instead brings the crew magical tools and weapons. There are preexisting artifacts (minus some that would cause huge confusion/balance issues) as well as new spellbooks, wands, and a staff. The chance of survivor antag is the same as summon guns.

---

Charge:

This new spell allows for the recharging of otherwise unrefillable wands, but there's a heavy chance that the total number of charges will decrease with each casting until eventually they're impossible to keep recharging. As a bonus the charge spell can also be used to charge batteries and things that run on batteries (such as energy weapons). This carries the same max charge weardown penalties however. Lastly this spell allows a wizard to charge other wizards with a grab, reseting their spell cooldown. They cannot use it to charge themselves. It has a 60 second cooldown.

The wizard cannot buy this spell himself, it only comes randomly to the crew during Summon Magic and with the new apprentice loadout.

---

Wands&Staffs:

Magic weapons have been overhauled into their own catagory so there won't be any more weirdness with batteries in staves or apparent magic resistance on things that reflect energy weapons.

Wands have been added, these wands come precharged with a number of shots that can be fired off at their leasure but cannot be recharged once emptied (unless the charge spell is used). They come in a varity of exciting flavors:

*Death: Slays instantly but has very few shots (1 to 3)
*Resurrection: Revives and/or heals instantly but has very few shots (1 to 3)
*Polymorph: Same function as the staff of change
*Teleport: Weaponized blink spell that doesn't respect space tiles and can also warp away machinery or items (but not turf)
*Door Creation: Puts easy access wooden doors in walls
*Fireball: Same function (but slightly lower damage) as the fireball spell
*Nothing: Lame and useless

Wands can also be used on the user (unlike staves) by clicking on them. Warning messages have been added to a few wands so people don't accidentally zap themselves with the wand of death unless they really want to.

Wands cannot be aquired by the wizard directly, and are only spawned during castings of summon magic.

There is also a new staff, the staff of healing, which works as a recharging version of the wand of resurrection. The new apprentice starts with one of these, and they can also be found during summon magic. The wizard cannot purchase it directly, and as a stave he could not use it on himself anyways.

---

One time spellbooks:

Found exclusively in summon magic are one time use spellbooks that can teach any player a robeless spell. Once read the book vanishes.

Books come in the following flavors:
*fireball
*smoke
*blind
*mindswap
*forcewall
*knock
*curse of the horsemen
*charge (described above)

---

New apprentice:

A fourth loadout for apprentice wizards has been added. This wizard is intended as a support role and comes with forcewall (for cover) and charge (used to keep him and the wizard well stocked in laser weaponry or to restore the wizard's cooldowns). It also comes equiped with a free Staff of Healing for keeping the wizard alive. Shoot the medic first folks.
This commit is contained in:
Incoming
2013-12-04 21:00:36 -05:00
parent 9d4a084b35
commit 4ac8a4164c
12 changed files with 828 additions and 146 deletions
@@ -26,55 +26,6 @@
charge_cost = 100
projectile_type = "/obj/item/projectile/energy/declone"
obj/item/weapon/gun/energy/staff
name = "staff of change"
desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
icon = 'icons/obj/gun.dmi'
icon_state = "staffofchange"
item_state = "staffofchange"
fire_sound = 'sound/weapons/emitter.ogg'
flags = FPRINT | TABLEPASS | CONDUCT
slot_flags = SLOT_BACK
w_class = 5
charge_cost = 200
projectile_type = "/obj/item/projectile/change"
origin_tech = null
clumsy_check = 0
var/charge_tick = 0
New()
..()
processing_objects.Add(src)
Del()
processing_objects.Remove(src)
..()
process()
charge_tick++
if(charge_tick < 4) return 0
charge_tick = 0
if(!power_supply) return 0
power_supply.give(200)
return 1
update_icon()
return
shoot_with_empty_chamber(mob/living/user as mob|obj)
user << "<span class='warning'>The [name] whizzles quietly.<span>"
return
/obj/item/weapon/gun/energy/staff/animate
name = "staff of animation"
desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines."
projectile_type = "/obj/item/projectile/animate"
icon_state = "staffofanimation"
item_state = "staffofanimation"
/obj/item/weapon/gun/energy/floragun
name = "floral somatoray"
desc = "A tool that discharges controlled radiation which induces mutation in plant cells."
+56
View File
@@ -0,0 +1,56 @@
/obj/item/weapon/gun/magic
name = "staff of nothing"
desc = "This staff is boring to watch because even though it came first you've seen everything it can do in other staves for years."
icon = 'icons/obj/gun.dmi'
icon_state = "staffofchange"
item_state = "staffofchange"
fire_sound = 'sound/weapons/emitter.ogg'
flags = FPRINT | TABLEPASS | CONDUCT
w_class = 5
var/projectile_type = "/obj/item/projectile/magic"
var/max_charges = 6
var/charges = 0
var/recharge_rate = 4
var/charge_tick = 0
var/can_charge = 1
origin_tech = null
clumsy_check = 0
/obj/item/weapon/gun/magic/emp_act(severity)
return
/obj/item/weapon/gun/magic/process_chambered()
if(in_chamber) return 1
if(!charges) return 0
if(!projectile_type) return 0
in_chamber = new projectile_type(src)
return 1
/obj/item/weapon/gun/magic/afterattack()
..()
if(charges ) charges--
/obj/item/weapon/gun/magic/New()
..()
charges = max_charges
if(can_charge) processing_objects.Add(src)
/obj/item/weapon/gun/magic/Del()
if(can_charge) processing_objects.Remove(src)
..()
/obj/item/weapon/gun/magic/process()
charge_tick++
if(charge_tick < recharge_rate || charges >= max_charges) return 0
charge_tick = 0
charges++
return 1
/obj/item/weapon/gun/magic/update_icon()
return
/obj/item/weapon/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj)
user << "<span class='warning'>The [name] whizzles quietly.<span>"
return
@@ -0,0 +1,23 @@
obj/item/weapon/gun/magic/staff/change
name = "staff of change"
desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
projectile_type = "/obj/item/projectile/magic/change"
icon_state = "staffofchange"
item_state = "staffofchange"
slot_flags = SLOT_BACK
obj/item/weapon/gun/magic/staff/animate
name = "staff of animation"
desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines."
projectile_type = "/obj/item/projectile/magic/animate"
icon_state = "staffofanimation"
item_state = "staffofanimation"
slot_flags = SLOT_BACK
obj/item/weapon/gun/magic/staff/healing
name = "staff of healing"
desc = "An artefact that spits bolts of restoring magic which can remove ailments of all kinds and even raise the dead."
projectile_type = "/obj/item/projectile/magic/resurrection"
icon_state = "staffofanimation"
item_state = "staffofanimation"
slot_flags = SLOT_BACK
+227
View File
@@ -0,0 +1,227 @@
/obj/item/weapon/gun/magic/wand/
name = "wand of nothing"
desc = "It's not just a stick, it's a MAGIC stick!"
projectile_type = "/obj/item/projectile/magic"
icon_state = "staffofanimation"
item_state = "staffofanimation"
w_class = 2
can_charge = 0
max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths)
w_class = 2
/obj/item/weapon/gun/magic/wand/New()
if(prob(75)) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges
if(prob(33))
max_charges = Ceiling(max_charges / 3)
else
max_charges = Ceiling(max_charges / 2)
..()
/obj/item/weapon/gun/magic/wand/examine()
..()
usr << "Has [charges] charge\s remaining."
return
/obj/item/weapon/gun/magic/wand/attack_self(mob/living/user as mob)
if(charges)
zap_self(user)
else
user << "<span class='warning'>The [name] whizzles quietly.<span>"
..()
/obj/item/weapon/gun/magic/wand/proc/zap_self(mob/living/user as mob)
user.visible_message("\blue [user] zaps \himself with [src]!")
/obj/item/weapon/gun/magic/wand/death
name = "wand of death"
desc = "This deadly wand overwhelms the victim's body with pure energy, slaying them without fail."
projectile_type = "/obj/item/projectile/magic/death"
icon_state = "staffofanimation"
item_state = "staffofanimation"
max_charges = 3 //3, 2, 2, 1
/obj/item/weapon/gun/magic/wand/death/zap_self(mob/living/user as mob)
if(alert(user, "You really want to zap yourself with the wand of death?",, "Yes", "No") == "Yes" && charges && user.get_active_hand() == src && isliving(user))
var/message ="\red You irradiate yourself with pure energy! "
message += pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")
user << message
user.adjustOxyLoss(500)
charges--
..()
/obj/item/weapon/gun/magic/wand/resurrection
name = "wand of resurrection"
desc = "This wand uses healing magics to heal and revive. They are rarely utilized within the Wizard Federation for some reason."
projectile_type = "/obj/item/projectile/magic/resurrection"
icon_state = "staffofanimation"
item_state = "staffofanimation"
max_charges = 3 //3, 2, 2, 1
/obj/item/weapon/gun/magic/wand/resurrection/zap_self(mob/living/user as mob)
user.setToxLoss(0)
user.setOxyLoss(0)
user.setCloneLoss(0)
user.SetParalysis(0)
user.SetStunned(0)
user.SetWeakened(0)
user.radiation = 0
user.heal_overall_damage(user.getBruteLoss(), user.getFireLoss())
user.reagents.clear_reagents()
user << "<span class='notice'>You feel great!</span>"
charges--
..()
/obj/item/weapon/gun/magic/wand/polymorph
name = "wand of polymorph"
desc = "This wand inflicts is attuned to chaos and will radically alter the victim's form."
projectile_type = "/obj/item/projectile/magic/change"
icon_state = "staffofanimation"
item_state = "staffofanimation"
max_charges = 10 //10, 5, 5, 4
/obj/item/weapon/gun/magic/wand/polymorph/zap_self(mob/living/user as mob)
if(alert(user, "Your new form might not have arms to zap with... Continue?",, "Yes", "No") == "Yes" && charges && user.get_active_hand() == src && isliving(user))
if(user.monkeyizing) return
user.monkeyizing = 1
user.canmove = 0
user.icon = null
user.overlays.Cut()
user.invisibility = 101
for(var/obj/item/W in user)
if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
del(W)
continue
W.layer = initial(W.layer)
W.loc = user.loc
W.dropped(user)
var/mob/living/new_mob
var/randomize = pick("monkey","robot","slime","xeno","human","animal")
switch(randomize)
if("monkey")
new_mob = new /mob/living/carbon/monkey(user.loc)
new_mob.universal_speak = 1
if("robot")
new_mob = new /mob/living/silicon/robot(user.loc)
new_mob.gender = user.gender
new_mob.invisibility = 0
new_mob.job = "Cyborg"
var/mob/living/silicon/robot/Robot = new_mob
Robot.mmi = new /obj/item/device/mmi(new_mob)
Robot.mmi.transfer_identity(user) //Does not transfer key/client.
if("slime")
if(prob(50)) new_mob = new /mob/living/carbon/slime/adult(user.loc)
else new_mob = new /mob/living/carbon/slime(user.loc)
new_mob.universal_speak = 1
if("xeno")
if(prob(50))
new_mob = new /mob/living/carbon/alien/humanoid/hunter(user.loc)
else
new_mob = new /mob/living/carbon/alien/humanoid/sentinel(user.loc)
new_mob.universal_speak = 1
if("animal")
var/animal = pick("parrot","corgi","crab","pug","cat","carp","bear","mushroom","tomato","mouse","chicken","cow","lizard","chick")
switch(animal)
if("parrot") new_mob = new /mob/living/simple_animal/parrot(user.loc)
if("corgi") new_mob = new /mob/living/simple_animal/corgi(user.loc)
if("crab") new_mob = new /mob/living/simple_animal/crab(user.loc)
if("pug") new_mob = new /mob/living/simple_animal/pug(user.loc)
if("cat") new_mob = new /mob/living/simple_animal/cat(user.loc)
if("carp") new_mob = new /mob/living/simple_animal/hostile/carp(user.loc)
if("bear") new_mob = new /mob/living/simple_animal/hostile/bear(user.loc)
if("mushroom") new_mob = new /mob/living/simple_animal/mushroom(user.loc)
if("tomato") new_mob = new /mob/living/simple_animal/tomato(user.loc)
if("mouse") new_mob = new /mob/living/simple_animal/mouse(user.loc)
if("chicken") new_mob = new /mob/living/simple_animal/chicken(user.loc)
if("cow") new_mob = new /mob/living/simple_animal/cow(user.loc)
if("lizard") new_mob = new /mob/living/simple_animal/lizard(user.loc)
else new_mob = new /mob/living/simple_animal/chick(user.loc)
new_mob.universal_speak = 1
if("human")
new_mob = new /mob/living/carbon/human(user.loc)
var/datum/preferences/A = new() //Randomize appearance for the human
A.copy_to(new_mob)
var/mob/living/carbon/human/H = new_mob
ready_dna(H)
if(H.dna)
H.dna.mutantrace = pick("lizard","golem","slime","plant","fly","shadow","adamantine","skeleton",8;"")
H.update_body()
else
return
for (var/obj/effect/proc_holder/spell/S in user.spell_list)
new_mob.spell_list += new S.type
new_mob.a_intent = "harm"
if(user.mind)
user.mind.transfer_to(new_mob)
else
new_mob.key = user.key
new_mob << "<B>Your form morphs into that of a [randomize].</B>"
del(user)
return new_mob
charges--
..()
/obj/item/weapon/gun/magic/wand/teleport
name = "wand of teleportation"
desc = "This wand will wrench targets through space and time to move them somewhere else."
projectile_type = "/obj/item/projectile/magic/teleport"
icon_state = "staffofanimation"
item_state = "staffofanimation"
max_charges = 10 //10, 5, 5, 4
/obj/item/weapon/gun/magic/wand/teleport/zap_self(mob/living/user as mob)
var/list/turfs = new/list()
var/inner_tele_radius = 0
var/outer_tele_radius = 6
for(var/turf/T in range(user,outer_tele_radius))
if(T in range(user,inner_tele_radius)) continue
if(T.x>world.maxx-outer_tele_radius || T.x<outer_tele_radius) continue
if(T.y>world.maxy-outer_tele_radius || T.y<outer_tele_radius) continue
turfs += T
if(!turfs.len)
var/list/turfs_to_pick_from = list()
for(var/turf/T in orange(user,outer_tele_radius))
if(!(T in orange(user,inner_tele_radius)))
turfs_to_pick_from += T
turfs += pick(/turf in turfs_to_pick_from)
var/turf/picked = pick(turfs)
if(!picked || !isturf(picked))
return
user.loc = picked
charges--
..()
/obj/item/weapon/gun/magic/wand/door
name = "wand of door creation"
desc = "This particular wand can create doors in any wall for the unscrupulous wizard who shuns teleportation magics."
projectile_type = "/obj/item/projectile/magic/door"
icon_state = "staffofanimation"
item_state = "staffofanimation"
max_charges = 20 //20, 10, 10, 7
/obj/item/weapon/gun/magic/wand/door/zap_self()
return
/obj/item/weapon/gun/magic/wand/fireball
name = "wand of fireball"
desc = "This wand shoots scorching balls of fire that explode into destructive flames."
projectile_type = "/obj/item/projectile/magic/fireball"
icon_state = "staffofanimation"
item_state = "staffofanimation"
max_charges = 8 //8, 4, 4, 3
/obj/item/weapon/gun/magic/wand/fireball/zap_self(mob/living/user as mob)
if(alert(user, "Zapping yourself with a wand of fireball is probably a bad idea, do it anyway?",, "Yes", "No") == "Yes" && charges && user.get_active_hand() == src && isliving(user))
explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
charges--
..()
@@ -0,0 +1,249 @@
/obj/item/projectile/magic
name = "bolt of nothing"
icon_state = "energy"
damage = 0
damage_type = OXY
nodamage = 1
flag = "magic"
/obj/item/projectile/magic/death
name = "bolt of death"
icon_state = "pulse1_bl"
damage = 9001
damage_type = OXY
nodamage = 0
flag = "magic"
/obj/item/projectile/magic/fireball
name = "bolt of fireball"
icon_state = "fireball"
damage = 25 //The spell fireball additionally does 20 burn, so the wand fireball is marginally less painful
damage_type = BRUTE
nodamage = 0
flag = "magic"
/obj/item/projectile/magic/fireball/on_hit(var/target)
var/turf/T = get_turf(target)
explosion(T, -1, 0, 2, 3, 0, flame_range = 2)
/obj/item/projectile/magic/resurrection
name = "bolt of resurrection"
icon_state = "ion"
damage = 0
damage_type = OXY
nodamage = 1
flag = "magic"
/obj/item/projectile/magic/resurrection/on_hit(var/mob/living/carbon/target)
if(istype(target,/mob))
var/old_stat = target.stat
if(target.stat == DEAD)
dead_mob_list -= target
living_mob_list += target
target.stat = CONSCIOUS
target.tod = null
target.setToxLoss(0)
target.setOxyLoss(0)
target.setCloneLoss(0)
target.SetParalysis(0)
target.SetStunned(0)
target.SetWeakened(0)
target.radiation = 0
target.heal_overall_damage(target.getBruteLoss(), target.getFireLoss())
target.reagents.clear_reagents()
target.suiciding = 0
if(!target.ckey)
for(var/mob/dead/observer/ghost in player_list)
if(target.real_name == ghost.real_name)
ghost.reenter_corpse()
break
if(old_stat != DEAD)
target << "<span class='notice'>You feel great!</span>"
else
target << "<span class='notice'>You rise with a start, you're alive!!!</span>"
/obj/item/projectile/magic/teleport
name = "bolt of teleportation"
icon_state = "bluespace"
damage = 0
damage_type = OXY
nodamage = 1
flag = "magic"
var/inner_tele_radius = 0
var/outer_tele_radius = 6
/obj/item/projectile/magic/teleport/on_hit(var/mob/target)
if(isturf(target))
return
var/list/turfs = new/list()
for(var/turf/T in range(target,outer_tele_radius))
if(T in range(target,inner_tele_radius)) continue
if(T.x>world.maxx-outer_tele_radius || T.x<outer_tele_radius) continue
if(T.y>world.maxy-outer_tele_radius || T.y<outer_tele_radius) continue
turfs += T
if(!turfs.len)
var/list/turfs_to_pick_from = list()
for(var/turf/T in orange(target,outer_tele_radius))
if(!(T in orange(target,inner_tele_radius)))
turfs_to_pick_from += T
turfs += pick(/turf in turfs_to_pick_from)
var/turf/picked = pick(turfs)
if(!picked || !isturf(picked))
return
target.loc = picked
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
smoke.set_up(10, 0, picked)
smoke.start()
/obj/item/projectile/magic/door
name = "bolt of door creation"
icon_state = "energy"
damage = 0
damage_type = OXY
nodamage = 1
flag = "magic"
/obj/item/projectile/magic/door/on_hit(var/atom/target)
var/atom/T = target.loc
if(isturf(target))
if(target.density)
new /obj/structure/mineral_door/wood(target)
target:ChangeTurf(/turf/simulated/floor/plating)
else if (isturf(T))
if(T.density)
new /obj/structure/mineral_door/wood(T)
T:ChangeTurf(/turf/simulated/floor/plating)
/obj/item/projectile/magic/change
name = "bolt of change"
icon_state = "ice_1"
damage = 0
damage_type = BURN
nodamage = 1
flag = "magic"
/obj/item/projectile/magic/change/on_hit(var/atom/change)
wabbajack(change)
/obj/item/projectile/magic/change/proc/wabbajack (mob/M as mob in living_mob_list)
if(istype(M, /mob/living) && M.stat != DEAD)
if(M.monkeyizing) return
M.monkeyizing = 1
M.canmove = 0
M.icon = null
M.overlays.Cut()
M.invisibility = 101
if(istype(M, /mob/living/silicon/robot))
var/mob/living/silicon/robot/Robot = M
if(Robot.mmi) del(Robot.mmi)
else
for(var/obj/item/W in M)
if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
del(W)
continue
W.layer = initial(W.layer)
W.loc = M.loc
W.dropped(M)
var/mob/living/new_mob
var/randomize = pick("monkey","robot","slime","xeno","human","animal")
switch(randomize)
if("monkey")
new_mob = new /mob/living/carbon/monkey(M.loc)
new_mob.universal_speak = 1
if("robot")
new_mob = new /mob/living/silicon/robot(M.loc)
new_mob.gender = M.gender
new_mob.invisibility = 0
new_mob.job = "Cyborg"
var/mob/living/silicon/robot/Robot = new_mob
Robot.mmi = new /obj/item/device/mmi(new_mob)
Robot.mmi.transfer_identity(M) //Does not transfer key/client.
if("slime")
if(prob(50)) new_mob = new /mob/living/carbon/slime/adult(M.loc)
else new_mob = new /mob/living/carbon/slime(M.loc)
new_mob.universal_speak = 1
if("xeno")
if(prob(50))
new_mob = new /mob/living/carbon/alien/humanoid/hunter(M.loc)
else
new_mob = new /mob/living/carbon/alien/humanoid/sentinel(M.loc)
new_mob.universal_speak = 1
/*var/alien_caste = pick("Hunter","Sentinel","Drone","Larva")
switch(alien_caste)
if("Hunter") new_mob = new /mob/living/carbon/alien/humanoid/hunter(M.loc)
if("Sentinel") new_mob = new /mob/living/carbon/alien/humanoid/sentinel(M.loc)
if("Drone") new_mob = new /mob/living/carbon/alien/humanoid/drone(M.loc)
else new_mob = new /mob/living/carbon/alien/larva(M.loc)
new_mob.universal_speak = 1*/
if("animal")
var/animal = pick("parrot","corgi","crab","pug","cat","carp","bear","mushroom","tomato","mouse","chicken","cow","lizard","chick")
switch(animal)
if("parrot") new_mob = new /mob/living/simple_animal/parrot(M.loc)
if("corgi") new_mob = new /mob/living/simple_animal/corgi(M.loc)
if("crab") new_mob = new /mob/living/simple_animal/crab(M.loc)
if("pug") new_mob = new /mob/living/simple_animal/pug(M.loc)
if("cat") new_mob = new /mob/living/simple_animal/cat(M.loc)
if("carp") new_mob = new /mob/living/simple_animal/hostile/carp(M.loc)
if("bear") new_mob = new /mob/living/simple_animal/hostile/bear(M.loc)
if("mushroom") new_mob = new /mob/living/simple_animal/mushroom(M.loc)
if("tomato") new_mob = new /mob/living/simple_animal/tomato(M.loc)
if("mouse") new_mob = new /mob/living/simple_animal/mouse(M.loc)
if("chicken") new_mob = new /mob/living/simple_animal/chicken(M.loc)
if("cow") new_mob = new /mob/living/simple_animal/cow(M.loc)
if("lizard") new_mob = new /mob/living/simple_animal/lizard(M.loc)
else new_mob = new /mob/living/simple_animal/chick(M.loc)
new_mob.universal_speak = 1
if("human")
new_mob = new /mob/living/carbon/human(M.loc)
var/datum/preferences/A = new() //Randomize appearance for the human
A.copy_to(new_mob)
var/mob/living/carbon/human/H = new_mob
ready_dna(H)
if(H.dna)
H.dna.mutantrace = pick("lizard","golem","slime","plant","fly","shadow","adamantine","skeleton",8;"")
H.update_body()
else
return
for (var/obj/effect/proc_holder/spell/S in M.spell_list)
new_mob.spell_list += new S.type
new_mob.a_intent = "harm"
if(M.mind)
M.mind.transfer_to(new_mob)
else
new_mob.key = M.key
new_mob << "<B>Your form morphs into that of a [randomize].</B>"
del(M)
return new_mob
/obj/item/projectile/magic/animate
name = "bolt of animation"
icon_state = "red_1"
damage = 0
damage_type = BURN
nodamage = 1
flag = "magic"
/obj/item/projectile/magic/animate/Bump(var/atom/change)
. = ..()
if(istype(change, /obj/item) || istype(change, /obj/structure) && !is_type_in_list(change, protected_objects))
var/obj/O = change
new /mob/living/simple_animal/hostile/mimic/copy(O.loc, O, firer)
else if(istype(change, /mob/living/simple_animal/hostile/mimic/copy))
// Change our allegiance!
var/mob/living/simple_animal/hostile/mimic/copy/C = change
C.ChangeOwner(firer)