anchor.diff:  	message_admins("Blast wave fired from [ADMIN_VERBOSEJMP(starting)] at [ADMIN_VERBOSEJMP(targturf)] ([target.name]) by [ADMIN_LOOKUPFLW(user)] with power [heavy]/[medium]/[light].")
   	log_game("Blast wave fired from [AREACOORD(starting)] at [AREACOORD(targturf)] ([target.name]) by [key_name(user)] with power [heavy]/[medium]/[light].")
   	var/obj/projectile/blastwave/BW = new(loc, heavy, medium, light)
  -	BW.hugbox = hugbox
   	BW.preparePixelProjectile(target, get_turf(src), params, 0)
   	BW.fire()
   	name = initial(name)
   	desc = initial(desc)
   
  +/// The projectile used by the blastcannon
   /obj/projectile/blastwave
   	name = "blast wave"
   	icon_state = "blastwave"
  
positive.code: 		pin = new
  
  /obj/item/gun/blastcannon/Destroy()
  	QDEL_NULL(bomb)
  	return ..()
  
  /obj/item/gun/blastcannon/attack_self(mob/user)
  
negative.code: 	nodamage = FALSE
  	movement_type = FLYING
  	projectile_phasing = ALL		// just blows up the turfs lmao
  	/// The maximum distance this will inflict [EXPLODE_DEVASTATE]
  	var/heavyr = 0
  	/// The maximum distance this will inflict [EXPLODE_HEAVY]
  	var/mediumr = 0
  	/// The maximum distance this will inflict [EXPLODE_LIGHT]
  	var/lightr = 0
  
  /obj/projectile/blastwave/Initialize(mapload, _heavy, _medium, _light)
  	range = max(_heavy, _medium, _light, 0)
  	heavyr = _heavy
  	mediumr = _medium
  	lightr = _light
  	return ..()
  
  /obj/projectile/blastwave/Range()
  	. = ..()
  	if(QDELETED(src))
  		return
  
  	heavyr = max(heavyr - 1, 0)
  	mediumr = max(mediumr - 1, 0)
  	lightr = max(lightr - 1, 0)
  
  	if(heavyr)
  		SSexplosions.highturf += loc
  	else if(mediumr)
  		SSexplosions.medturf += loc
  	else if(lightr)
  		SSexplosions.lowturf += loc
  	else
  		qdel(src)
  		return
  
  /obj/projectile/blastwave/ex_act()
  	return
  