anchor.diff:  		var/y0 = epicenter.y
   		var/z0 = epicenter.z
   
  -		for(var/turf/T in trange(max_range, epicenter))
  +		var/list/affected_turfs = trange(max_range, epicenter)
  +
  +		if(config.reactionary_explosions)
  +			for(var/turf/T in affected_turfs) // we cache the explosion block rating of every turf in the explosion area
  +				cached_exp_block[T] = 0
  +				if(T.density && T.explosion_block)
  +					cached_exp_block[T] += T.explosion_block
  +
  +				for(var/obj/machinery/door/D in T)
  +					if(D.density && D.explosion_block)
  +						cached_exp_block[T] += D.explosion_block
  +
  +				for(var/obj/structure/window/W in T)
  +					if(W.reinf && W.fulltile)
  +						cached_exp_block[T] += W.explosion_block
  +
  +		for(var/turf/T in affected_turfs)
   
   			var/dist = cheap_hypotenuse(T.x, T.y, x0, y0)
   
  
positive.code: 		if(!epicenter) return
  
  		var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
  
  		if(adminlog)
  			message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
  
negative.code: 				var/turf/Trajectory = T
  				while(Trajectory != epicenter)
  					Trajectory = get_step_towards(Trajectory, epicenter)
  					dist += cached_exp_block[Trajectory]
  
  			var/flame_dist = 0
  			var/throw_dist = dist
  