anchor.diff:    {$endif}
     {$if Defined(DEBUG) and not Defined(CPFLIB)}
   
  +  // anti hint
     TTileMapPtr(nil).FlushHeuristedNodes(TCPFStart(nil^), TCPFNode(nil^));
  -
  -  // anti hint
     TTileMapPtr(nil).CalculateHeuristics(PPoint(nil)^, PPoint(nil)^);
     TTileMapPtr(nil).AddHeuristedNodes(nil, nil);
     {$ifend}
  
positive.code:   HeuristedPoolNode: PCPFNode;
    Node, AttainableNode, Buffer: PCPFNode;
  begin
    // mark up last list end
    FailureNode.Prev.Next := nil;
  
    // start point nodes
    Node := StartPoint.Node;
    AttainableNode := StartPoint.AttainableNode;
  
    // first node
    Node.Prev := @FNodes.HeuristedPool.First;
    HeuristedPoolNode := FNodes.HeuristedPool.First.Next;
    FNodes.HeuristedPool.First.Next := Node;
  
    // process each node
    if (AttainableNode.NodeInfo and FLAG_ATTAINABLE <> 0) then
    begin
      // retrieve parent mask (unlock)
      while (Node <> AttainableNode) do
      begin
        Node.ParentMask := $ff;
        Node := Node.Next;
      end;
  
    end else
    begin
      // retrieve parent mask (unlock)
      // markup as KnownPath Unattainable
      Buffer := Node;
      repeat
        Node := Buffer;
        Buffer := Buffer.Next;
        Node.NodeInfo := Node.NodeInfo or ($00ff0000{parent mask} or FLAG_KNOWN_PATH);
      until (Buffer = nil);
    end;
  
    // last node
    Node.Next := HeuristedPoolNode;
    HeuristedPoolNode.Prev := Node;
  end;
  
negative.code:     function GetTile(const X, Y: Word): Byte;
      procedure SetTile(const X, Y: Word; Value: Byte);
      procedure GrowNodeAllocator(var Buffer: TCPFInfo);
  //    procedure ClearMapCells(Node: PCPFNode; Count: NativeUInt); overload;
  //    procedure ClearMapCells(Node: PCPFNode{as list}); overload;
      function DoFindPathLoop(StartNode: PCPFNode): PCPFNode;
  