anchor.diff:  			projectilesound = G.fire_sound
   
   			if(istype(G, /obj/item/weapon/gun/magic))
  -				var/obj/item/weapon/gun/magic/Zapstick = G
  -				var/obj/item/ammo_casing/magic/Zapshot = new Zapstick.ammo_type
  -				shotsleft = Zapstick.charges * 2
  +				Zapstick = G
  +				var/obj/item/ammo_casing/magic/Zapshot = new Zapstick.ammo_type //this is done because ammo_type.proj_type can't be directly checked
   				projectiletype = Zapshot.projectile_type
  -				qdel(Zapshot)
  +				qdel(Zapshot) //is this needed? i dare not risk piles of nullspace bullets
   
   			if(istype(G, /obj/item/weapon/gun/projectile))
  -				var/obj/item/weapon/gun/projectile/Pewgun = G
  -				var/obj/item/ammo_box/magazine/Pewmag = new Pewgun.mag_type
  +				Pewgun = G
  +				var/obj/item/ammo_box/magazine/Pewmag = new Pewgun.mag_type //same problem, mag_type.ammo_type.proj_type can't be checked directly
   				var/obj/item/ammo_casing/Pewshot = new Pewmag.ammo_type
  -				shotsleft = Pewgun.get_ammo(1) * 2
   				projectiletype = Pewshot.projectile_type
  -				qdel(Pewshot) //is this needed?
  +				casingtype = Pewmag.ammo_type
  +				qdel(Pewshot)
   				qdel(Pewmag)
   
   			if(istype(G, /obj/item/weapon/gun/energy))
  -				var/obj/item/weapon/gun/energy/Zapgun = G
  +				Zapgun = G
   				var/selectfiresetting = Zapgun.select
   				var/obj/item/ammo_casing/energy/Energyammotype = Zapgun.ammo_type[selectfiresetting]
   				projectiletype = Energyammotype.projectile_type
  -				if(is_type_in_list(Zapgun, autochargingguns)) //todo: make this work via OOP
  -					shotsleft = 9999 //basically infinite
  -				else
  -					shotsleft = (Zapgun.power_supply.charge / Energyammotype.e_cost) * 2
  -
  -			if(shotsleft <= 0)
  -				src.ranged = 0
  -				src.minimum_distance = 1
  -				src.retreat_distance = 0
  -			if(shotsleft >= 30) //maximum shooty
  -				if(prob(20))
  -					src.rapid = 1
   
   		maxHealth = health
   		if(creator)
  
positive.code: //animated blasters, wands, etc
  //
  
  mob/living/simple_animal/hostile/mimic/copy/ranged
  	name = "animated shooty gun"
  	desc = "there's something fishy here."
  	environment_smash = 0 //needed? seems weird for them to do so
  
negative.code: 	minimum_distance = 6
  	projectiletype = /obj/item/projectile/magic/
  	projectilesound = 'sound/items/bikehorn.ogg'
  	casingtype = null
  	Attackemote = "aims menacingly at"
  	var/obj/item/weapon/gun/magic/Zapstick = list()
  	var/obj/item/weapon/gun/projectile/Pewgun = list()
  	var/obj/item/weapon/gun/energy/Zapgun = list()
  
  /mob/living/simple_animal/hostile/mimic/copy/ranged/New(loc, var/obj/copy, var/mob/living/creator, var/destroy_original = 0)
  	..()
  
  
  /mob/living/simple_animal/hostile/mimic/copy/ranged/CopyObject(var/obj/O, var/mob/living/creator, var/destroy_original = 0)
  	if(destroy_original || CheckObject(O))
  