anchor.diff:    ChildList: PWord;
     Child: NativeUInt;
     Cell: PCPFCell;
  +  ParentBits: NativeUInt;
     ChildNodeInfo: NativeUInt;
     ChildNode: PCPFNode;
     TileWeights: PCardinalList;
  
positive.code:             Cell.NodePtr := NativeUInt(ChildNode) + NODEPTR_FLAGS;
            {$endif}
            ChildNode.Path := Path;
            ChildNode.NodeInfo := ChildNodeInfo;
  
            // child coordinates
            OffsetXY := Cardinal(POINT_OFFSETS_INVERT[ChildNodeInfo and 7]);
            NodeXY := Cardinal(Store.Current.Coordinates);
            ChildXY := NodeXY + OffsetXY;
            OffsetXY := OffsetXY and $ffff0000;
  
negative.code:           // already node allocated and coordinates filled
            // need to fill path/parent and heuristics/way data
            {$ifdef LARGEINT}
              NodeAllocatorBuffers := Pointer(@Store.Info.NodeAllocator.Items);
              ChildNode := Pointer(
                (NodeAllocatorBuffers[ChildNodeInfo) shr LARGE_NODEPTR_OFFSET]) +
                (ChildNodeInfo and NODEPTR_CLEAN_MASK) );
            {$else}
              ChildNode := Pointer(ChildNodeInfo and NODEPTR_CLEAN_MASK);
            {$endif}
  
            // (parent:3, mask, parentmask, tile) + test
            ParentBits := ParentBits or (ChildNode.NodeInfo and Integer($ff00ff00));
            if (ParentBits and (ParentBits shl 8) = 0) then
              goto nextchild_continue;
  
            // path
            TileWeights := Store.Info.TileWeights[ParentBits and 1];
            Path := TileWeights[NodeInfo shr 24] + TileWeights[ParentBits shr 24];
            if (Path > PATHLESS_TILE_WEIGHT) then
              goto nextchild_continue;
            Path := Store.Current.Path + (Path shr 1);
  
            {$ifdef CPUX86}
            // todo optimize
  //          ChildNodeInfo := //Cell.NodePtr;
            ChildNode := Pointer(Cell.NodePtr and NODEPTR_CLEAN_MASK);
            Cell.NodePtr := Cell.NodePtr or NODEPTR_FLAG_HEURISTED;
            {$else}
            Cell.NodePtr := ChildNodeInfo or NODEPTR_FLAG_HEURISTED;
            {$endif}
            ChildNode.Path := Path;
            ChildNode.NodeInfo := ParentBits;
  
          heuristics_data:
            // (dX, dY) = ChildNode.Coordinates - Store.Info.FinishPoint;
            (*dX := Cardinal(ChildNode.Coordinates);
            dY := Word(dX);
            dX := dX shr 16;
            Mask := Cardinal(Store.Info.FinishPoint);
            dY := dY - Word(Mask);
            dX := dX - (Mask shr 16);*)
            dX := 0;
            dY := 0;
  
            // Way
            Mask := 2*Byte(dY > 0);
  