anchor.diff:  			if((dx != initial_dx) || (dy != initial_dy))
   				. = FALSE
   				break
  -			if(loc_changed && !drifting && !(do_after_flags & DO_AFTER_ALLOW_NONSPACEDRIFT_RELATIVITY))
  +			if(locchanged && !drifting && !(do_after_flags & DO_AFTER_ALLOW_NONSPACEDRIFT_RELATIVITY))
   				. = FALSE
   				break
   		if(!user.inertia_dir)
  
positive.code: 		dx = targetturf.x - userturf.x
  		dy = targetturf.y - userturf.y
  		if((dx != initial_dx) || (dy != initial_dy))
  			. = FALSE
  			break
  		if(loc_changed && !drifting && !(do_after_flags & DO_AFTER_ALLOW_NONSPACEDRIFT_RELATIVITY))
  			. = FALSE
  			break
  	if((do_after_flags & DO_AFTER_REQUIRES_USER_ON_TURF) && !isturf(user.loc))
  		return FALSE
  	held = living_user?.get_active_held_item()
  	if((do_after_flags & DO_AFTER_DISALLOW_ACTIVE_ITEM_CHANGE) && (held != (tool || initially_held_item)))
  		. = FALSE
  		break
  	if((do_after_flags & DO_AFTER_REQUIRE_FREE_HAND_OR_TOOL) && (!living_user?.is_holding(tool) && !length(living_user?.get_empty_held_indexes())))
  		. = FALSE
  		break
  
  /// Requires absolute stillness in the user
  #define DO_AFTER_DISALLOW_MOVING_ABSOLUTE_USER		(1<<0)
  
negative.code: 	var/stage = DO_AFTER_STARTING
  	var/startlocuser = user.loc
  	var/startloctarget = target.loc
  	var/turf/user_turf = get_turf(user)
  	var/turf/target_turf = get_turf(target)
  	if(!userturf || !targetturf)
  		return FALSE
  	if((do_after_flags & DO_AFTER_REQUIRES_USER_ON_TURF) && !isturf(user.loc))
  