anchor.diff:  		else
   			RangedAttack(A,params)
   
  -/mob/proc/CanReach(atom/target,obj/item/tool,view_only = FALSE)
  +/atom/movable/proc/CanReach(atom/target,obj/item/tool,view_only = FALSE)
   	if(isturf(target) || isturf(target.loc) || DirectAccess(target)) //Directly accessible atoms
  -		if(Adjacent(target) || (tool && CheckReach(src, target, tool.reach))) //Adjacent or reaching attacks
  +		if(Adjacent(target) || (tool && CheckToolReach(src, target, tool.reach))) //Adjacent or reaching attacks
   			return TRUE
   	else
   		//Things inside storage insde another storage
  
positive.code: 			return TRUE
  	return FALSE
  
  /mob/proc/DirectAccess(atom/target)
  	if(target == src)
  		return TRUE
  	if(target == loc)
  		return TRUE
  	if(target in contents) //This could probably use moving down and restricting to inventory only
  		return TRUE
  
negative.code: /turf/AllowClick()
  	return TRUE
  
  /proc/CheckToolReach(atom/movable/here, atom/movable/there, reach)
  	if(!here || !there)
  		return
  	switch(reach)
  		if(0)
  			return FALSE
  		if(1)
  			return FALSE //here.Adjacent(there)
  		if(2 to INFINITY)
  			var/obj/dummy = new(get_turf(here))
  			dummy.pass_flags |= PASSTABLE
  			dummy.invisibility = INVISIBILITY_ABSTRACT
  			for(var/i in 1 to reach) //Limit it to that many tries
  				var/turf/T = get_step(dummy, get_dir(dummy, there))
  				if(dummy.CanReach(there))
  					qdel(dummy)
  					return TRUE
  				if(!dummy.Move(T)) //we're blocked!
  					qdel(dummy)
  					return
  