anchor.diff:  
     function KMPointRound(P:TKMPointf): TKMPoint;
     function KMSamePoint(P1,P2:TKMPoint): boolean;
  -  function KMSamePointF(P1,P2:TKMPointF): boolean;
  +  function KMSamePointF(P1,P2:TKMPointF): boolean; overload;
  +  function KMSamePointF(P1,P2:TKMPointF; Epsilon:single): boolean; overload;
     function KMSamePointDir(P1,P2:TKMPointDir): boolean;
   
     function KMGetDirection(X,Y: integer): TKMDirection; overload;
  
positive.code:     PlaceX := (aI-1) mod aUnitPerRow - aUnitPerRow div 2;
      PlaceY := (aI-1) div aUnitPerRow;
    end;
    //If it is < 1 (off map) then set it to 0 (invalid) and GetClosestTile will correct it when walk action is created.
    //GetClosestTile needs to know if the position is not the actual position in the formation
    Result.X := max(OriginX + round( PlaceX*DirRatio[aDir]*cos(DirAngle[aDir]/180*pi) - PlaceY*DirRatio[aDir]*sin(DirAngle[aDir]/180*pi) ),0);
    Result.Y := max(OriginY + round( PlaceX*DirRatio[aDir]*sin(DirAngle[aDir]/180*pi) + PlaceY*DirRatio[aDir]*cos(DirAngle[aDir]/180*pi) ),0);
  end;
  
  
  
negative.code: begin
    Result := ( P1.X = P2.X ) and ( P1.Y = P2.Y );
  end;
  
  function KMSamePointF(P1,P2:TKMPointF; Epsilon:single): boolean;
  begin
    Result := (abs(P1.X - P2.X) < Epsilon) and (abs(P1.Y - P2.Y) < Epsilon);
  end;
  
  
  function KMSamePointDir(P1,P2:TKMPointDir): boolean;
  begin
  