Kingpin Route files (.KPR) from Kraze Bot (version 0.05 Beta, released 7/11/99):

The file always starts with a 12-byte long header. Right after it, there's a nodeInfo[] list which defines every node within the map (the very first node is usually all 0x00s), a linkMatrix[] (the actual route: for each node, what other node can be used to reach the specified node), and an itemList[].

12    header_t    header        File header.
116x? node_t      nodeInfo[]    Read numNodes entries (the first node always NULL).
2x?   INT16       linkMatrix[]  Read numNodes * numNodes entries.
16x?  item_t      itemList[]    Read numItems entries.

header_t (12 bytes)
  {
  4   INT32       version       Version number, must be 3.
  4   INT32       numNodes      Number of nodes stored in the file.
  4   INT32       numItems      Number of items stored in the file.
  }

node_t (116 bytes per entry)
  {
  4   FLOAT       coordX        X coordinate (horizontal plane).
  4   FLOAT       coordY        Y coordinate (horizontal plane).
  4   FLOAT       coordZ        Z coordiante (vertical plane).
  4   INT32       nodeType      Node Type.
  4   INT32       nodeIndex     Index of this node, in the list.
  96  neighbor_t  neighbor[12]  Read 12 entries.
  }

neighbor_t (8 bytes per entry)
  {
  4   INT32       nodeIndex     Index of the neighbor node.
  4   FLOAT       distance      Distance between this node and its neighbor.
  }

item_t (16 bytes per entry)
  {
  4   INT32       itemIndex     Index of this item in itemlist[] - direct reference to the original code
  4   FLOAT       itemWeight    How important an item is for the bot, always set to 0? I'm not sure it's used.
  4   PTR         itemPtr       Points to the memory segment where the edict_t resides - direct reference to the original code at run-time.
  4   INT32       itemNode      Node this item is tied to
  }

Notes: when neighbor_t.nodeIndex is -1 (after the INT32 has been converted to INT16) or equal to node_t nodeIndex, the associated neighbor_t.distance is 0.

node_t.nodeType's numbers are likely identical to ACE Bots':
  0x00 move
  0x01 ladder
  0x02 platform
  0x03 teleporter
  0x04 item
  0x05 water
  0x06 grapple (CTF, if any)
  0x07 jump