anchor.diff:  end;
   
   procedure TTileMap.CacheAttainablePath(var StartPoint: TCPFStart; const FinishNode: PCPFNode);
  -begin
  +var
  +  Left, Right: PCPFNode;
  +  Node: PCPFNode;
  +begin
  +  // cache finish attainable
  +  if (FinishNode.SortValue < NATTANABLE_LENGTH_LIMIT) then
  +  begin
  +    Left := FinishNode.Prev;
  +    Right := FinishNode.Next;
  +    Left.Next := Right;
  +    Right.Prev := Left;
  +    FinishNode.nAttainableLength := not Cardinal(1);
  +    FinishNode.AttainableDistance := 0;
  +  end;
  +
     // todo
  +
  +
  +  Node := StartPoint.Node;
  +  StartPoint.Length := not Node.nAttainableLength;
  +  StartPoint.Distance := Node.AttainableDistance;
   end;
   
   procedure TTileMap.FillAttainablePath(const StartNode, FinishNode: PCPFNode);
  -begin
  -  // todo
  -
  -
  +var
  +  Node: PCPFNode;
  +  Cell: PCPFCell;
  +  Point: PPoint;
  +  CellOffsets: PCPFOffsets;
  +  N: NativeUInt;
  +
  +  {$ifdef LARGEINT}
  +    NodeBuffers: PCPFNodeBuffers;
  +  {$endif}
  +begin
  +  // parameters
  +  Node := StartNode;
  +  Cell := @FInfo.CellArray[NativeInt(Node.Coordinates.Y) * Width + Node.Coordinates.X];
  +  Point := FActualInfo.FoundPath.Buffer.Memory;
  +  CellOffsets := @FInfo.CellOffsets;
  +  {$ifdef LARGEINT}
  +  NodeBuffers := Pointer(@FInfo.NodeAllocator.Buffers);
  +  {$endif}
  +
  +  // each node loop
  +  repeat
  +    // coordinates
  +    {$ifdef CPUX86}
  +      Point.Y := Node.Coordinates.Y;
  +      Point.X := Node.Coordinates.X;
  +    {$else}
  +      N := Cardinal(Node.Coordinates);
  +      {$ifdef LARGEINT}
  +        PNativeUInt(Point)^ := (NativeUInt(Word(N)) shl 32) + (N shr 16);
  +      {$else}
  +        Point.Y := Word(N);
  +        Point.X := N shr 16;
  +      {$endif}
  +    {$endif}
  +    Inc(Point);
  +
  +    // known child cell
  +    Inc(NativeInt(Cell), CellOffsets[(Node.NodeInfo shr 3) and 7]);
  +
  +    // cell node
  +    {$ifdef LARGEINT}
  +      N := Cell.NodePtr;
  +      Node := Pointer(
  +        (NodeBuffers[N shr LARGE_NODEPTR_OFFSET]) +
  +        (N and NODEPTR_CLEAN_MASK) );
  +    {$else}
  +      Node := Pointer(Cell.NodePtr and NODEPTR_CLEAN_MASK);
  +    {$endif}
  +  until (Node = FinishNode);
  +
  +  // finish node coordinates
  +  N := Cardinal(Node.Coordinates);
  +  {$ifdef LARGEINT}
  +    PNativeUInt(Point)^ := (NativeUInt(Word(N)) shl 32) + (N shr 16);
  +  {$else}
  +    Point.Y := Word(N);
  +    Point.X := N shr 16;
  +  {$endif}
   end;
   
   procedure TTileMap.FillStandardPath(const StartNode, FinishNode: PCPFNode);
  
positive.code:     // coordinates
      Dec(Point);
      N := Cardinal(Node.Coordinates);
      Point.Y := Word(N);
      Point.X := N shr 16;
  
      // counters
      N := Node.NodeInfo;
  
negative.code:   Inc(NativeUInt(Point), {$ifdef CPUX86}Store.{$endif}Length{Size});
    Dec(Point);
    N := Cardinal(Node.Coordinates);
    {$ifdef LARGEINT}
      PNativeUInt(Point)^ := (NativeUInt(Word(N)) shl 32) + (N shr 16);
    {$else}
      Point.Y := Word(N);
      Point.X := N shr 16;
    {$endif}
    N := Node.NodeInfo;
    {$ifdef CPUX86}
      Inc(Buffer.Values[((N shr 23) and -2) + (N and 1)]);
  