I miss the details of the archive format. How is the TOC composed, what compression format is used, etc.
EDIT: From a quick glance that seems to be ZLIB default compression, because the magic header 78 9C is present. Is that correct?
EDITEDIT:
Looks like it works like this:
Byte-Offset|Bit-Length|Type|Description
0|16|String|"TX"
2|16|ushort|Version? 0x1const
4|32|uint|Node list start address 48const
8|32|uint|Another Version? 0x1const
12|32|uint|Archive start address
16|64|ulong|Archive length
24|32|uint|Node count
28|32|uint|Node index for level 1 (or 0xFFFF if gap)
32|32|uint|Node index for level 2 (or 0xFFFF if gap)
36|32|uint|Node index for level 3 (or 0xFFFF if gap)
40|32|uint|Node index for level 4 first root (or 0xFFFF if gap)
44|32|uint|Node index for level 4 second root (or 0xFFFF if gap)
48|32*8|block|Start of node list (k=index*32+48)
k+0|64|ulong|Start of node archive (address=archive_start+value)
k+8|32|uint|Uncompressed length
k+12|32|uint|Next node index quad tree quadrant 1
k+16|32|uint|Next node index quad tree quadrant 2
k+20|32|uint|Next node index quad tree quadrant 3
k+24|32|uint|Next node index quad tree quadrant 4
k+28|32|uint|reserved space filled with garbage?
P.S.: It seems like due to the nature of the quadtree, dummy nodes are produced if there is a gap between the various layers (e.g. base tiles). These nodes point to the same archive entry as the higher resolution tile that caused them, but with zero uncompressed length.