anchor.diff:  	var/init_dir = get_dir(src, target)
   
   	while(target && ((dist_travelled < range && loc != finalturf)  || !has_gravity(src))) //stop if we reached our destination (or max range) and aren't floating
  -
  +		var/slept = 0
   		if(!istype(loc, /turf))
   			hit = 1
   			break
  
positive.code: 			hit = 1
  			break
  		dist_travelled++
  		dist_since_sleep++
  
  		if(dist_travelled > 600) //safety to prevent infinite while loop.
  			break
  		if(dist_since_sleep >= speed)
  			dist_since_sleep = 0
  			sleep(1)
  
  		if(!dist_since_sleep && hitcheck()) //to catch sneaky things moving on our tile during our sleep(1)
  			hit = 1
  			break
  
  	//done throwing, either because it hit something or it finished moving
  	throwing = 0
  
negative.code: 		SpinAnimation(5, 1)
  
  	var/dist_travelled = 0
  	var/next_sleep = 0
  
  	var/dist_x = abs(target.x - src.x)
  	var/dist_y = abs(target.y - src.y)
  