anchor.diff:    end;
   end;
   
  -(*function TTileMap.AllocateNode(const X, Y: NativeInt): PCPFNode;
  -var
  +function TTileMap.CalculateHeuristics(const Start, Finish: TPoint): NativeInt;
  +var
  +  dX, dY, X, Y: NativeInt;
  +  Mask: NativeInt;
  +begin
  +  dY := Start.Y - Finish.Y;
  +  dX := Start.X - Finish.X;
  +
  +  // Y := Abs(dY)
  +  Mask := -(dY shr HIGH_NATIVE_BIT);
  +  Y := (dY xor Mask) - Mask;
  +
  +  // X := Abs(dY)
  +  Mask := -(dX shr HIGH_NATIVE_BIT);
  +  X := (dX xor Mask) - Mask;
  +
  +  if (Self.FKind < mkHexagonal) then
  +  begin
  +    if (X <= Y) then
  +    begin
  +      Result := X * FInfo.HeuristicsDiagonal + (Y - X) * FInfo.HeuristicsLine;
  +    end else
  +    begin
  +      Result := Y * FInfo.HeuristicsDiagonal + (X - Y) * FInfo.HeuristicsLine;
  +    end;
  +  end else
  +  begin
  +    X := X - ((Mask xor Finish.Y) and Y and 1) - (Y shr 1);
  +    Result := Y + (X and ((X shr HIGH_NATIVE_BIT) - 1));
  +    Result := Result * FInfo.HeuristicsLine;
  +  end;
  +end;
  +
  +function TTileMap.AllocateHeuristedNode(const X, Y: NativeInt): PCPFNode;
  +begin
  +  Result := nil;
  +  // todo
  +end;
  +(*var
     Coordinates: NativeUInt;
     Cell: PCPFCell;
     ChildNode: PCPFNode;
  
positive.code:   Actual, R, ActualFinish, ActualStarts: Boolean;
    ResultPath: ^TTileMapPath;
  
    FoundPaths: NativeUInt;
    AttainableAlgorithm: Boolean;
    StartPoint: PCPFStart;
  
  begin
    // test start points coordinates
    MapWidth := Self.Width;
  
negative.code:     function GetTile(const X, Y: Word): Byte;
      procedure SetTile(const X, Y: Word; Value: Byte);
      procedure GrowNodeAllocator(var Buffer: TCPFInfo);
      function CalculateHeuristics(const Start, Finish: TPoint): NativeInt;
      function AllocateHeuristedNode(const X, Y: NativeInt): PCPFNode;
  //    procedure ClearMapCells(Node: PCPFNode; Count: NativeUInt); overload;
  //    procedure ClearMapCells(Node: PCPFNode{as list}); overload;
      function DoFindPathLoop(StartNode: PCPFNode): PCPFNode;
  