anchor.diff:  
   /obj/item/projectile/blastwave/Range()
   	..()
  +	var/amount_destruction = EXPLODE_NONE
   	if(heavyr)
  -		loc.ex_act(EXPLODE_DEVASTATE)
  +		amount_destruction = EXPLODE_DEVASTATE
   	else if(mediumr)
  -		loc.ex_act(EXPLODE_HEAVY)
  +		amount_destruction = EXPLODE_HEAVY
   	else if(lightr)
  -		loc.ex_act(EXPLODE_LIGHT)
  +		amount_destruction = EXPLODE_LIGHT
  +	if(amount_destruction)
  +		loc.ex_act(amount_destruction)
   	else
   		qdel(src)
  -	heavyr--
  -	mediumr--
  -	lightr--
  +
  +	heavyr = max(heavyr - 1, 0)
  +	mediumr = max(mediumr - 1, 0)
  +	lightr = max(lightr - 1, 0)
   
   /obj/item/projectile/blastwave/ex_act()
  -	return
  +	return
positive.code: 		if(!T.tank_one || !T.tank_two)
  			to_chat(user, "<span class='warning'>What good would an incomplete bomb do?</span>")
  			return FALSE
  		if(!user.transferItemToLoc(O, src))
  			to_chat(user, "<span class='warning'>[O] seems to be stuck to your hand!</span>")
  			return FALSE
  		user.visible_message("<span class='warning'>[user] attaches [O] to [src]!</span>")
  		bomb = O
  		update_icon()
  		return TRUE
  	return ..()
  
  /obj/item/gun/blastcannon/proc/calculate_bomb()
  	if(!istype(bomb)||!istype(bomb.tank_one)||!istype(bomb.tank_two))
  		return 0
  	var/datum/gas_mixture/temp = new(60)	//directional buff.
  	temp.merge(bomb.tank_one.air_contents.remove_ratio(1))
  
negative.code: 		pin = new
  
  /obj/item/gun/blastcannon/Destroy()
  	QDEL_NULL(bomb)
  	return ..()
  
  /obj/item/gun/blastcannon/attack_self(mob/user)
  