anchor.diff:    if NodePos > NodeList.Count - 1 then
       raise ELocError.Create('WalkTo overrun', fUnit.Position);
   
  -  WalkX := NodeList[NodePos].X - fUnit.PositionF.X;
  -  WalkY := NodeList[NodePos].Y - fUnit.PositionF.Y;
  -  DX := Sign(WalkX); //-1,0,1
  -  DY := Sign(WalkY); //-1,0,1
  -
  -  if (DX <> 0) and (DY <> 0) then
  -    Distance := Distance / 1.41; {sqrt (2) = 1.41421 }
  -
  -  fUnit.PositionF := KMPointF(fUnit.PositionF.X + DX*min(Distance,abs(WalkX)),
  -                              fUnit.PositionF.Y + DY*min(Distance,abs(WalkY)));
  +  walkX := NodeList[NodePos].X - fUnit.PositionF.X;
  +  walkY := NodeList[NodePos].Y - fUnit.PositionF.Y;
  +  dx := Sign(walkX); //-1,0,1
  +  dy := Sign(walkY); //-1,0,1
  +
  +  if (dx <> 0) and (dy <> 0) then
  +    distance := distance / 1.41; {sqrt (2) = 1.41421 }
  +
  +  fUnit.PositionF := KMPointF(fUnit.PositionF.X + dx * Min(distance, Abs(walkX)),
  +                              fUnit.PositionF.Y + dy * Min(distance, Abs(walkY)));
   
     Inc(fUnit.AnimStep);
     StepDone := False; //We are not actually done because now we have just taken another step
  
positive.code:     if not fDoExchange and CheckWalkComplete then
      begin
        if (fDistance > 0) and ((fUnit.Task = nil) or (not fUnit.Task.WalkShouldAbandon))
          and not KMSamePoint(NodeList[NodePos], fWalkTo) then //Happens rarely when we asked to sidestep towards our not locked target (Warrior)
          fUnit.Direction := KMGetDirection(NodeList[NodePos], fWalkTo); //Face tile (e.g. worker)
        Result := arActDone;
        Exit;
      end;
  
      //Check if target unit (warrior) has died and if so abandon our walk and so delivery task can exit itself
      if CanAbandonInternal then
        if CheckTargetHasDied then
        begin
          Result := arActAborted;
          Exit;
        end;
  
      //This is sometimes caused by unit interaction changing the route so simply ignore it
      if KMSamePoint(NodeList[NodePos], NodeList[NodePos+1]) then
  
negative.code:       fPass := CanWalk;}
  
      //Save unit dir in case we will need to restore it
      oldDir := fUnit.Direction;
  
      //Update unit direction according to next Node
      fUnit.Direction := KMGetDirection(NodeList[NodePos], NodeList[NodePos+1]);
  