The DIR file obviously contains just a directory of names:
There are 16 ints which contain the starting address of a cstring in the same file each (like "edge_ramp.png").
Like all cstrings they are zero-terminated. That's all.
The DAT file is the biggest of the three and obviously contains the data:
It immediately starts with an ASCII text file (containing 3D material or shader descriptions).
Additional files follow padded with zeros each. Some offsets:
0000h: cg shader / material description
1200h: "
1E00h: "
2C00h: PNG file
2800h: cg
3800h: PNG
4400h: ogg vorbis file
etc.
There are 16 distinct file names in the DIR and 16 file offsets in the DAT I could identify (3 ogg, 3 png, 4 cg, 1 anim, 4 material, 1 overlay).
Now for the brain, the TOC file. It is supposed to connect all files in a parsable way. Here's what I found out:
It starts with magic number "PACK". I couldn't make much sense of the following bytes.
Start from the end of the file:
Omit 4 bytes.
You now can read 12-bytes at once - 15 times (one for each file (*)).
The first two bytes contain the offset in the DAT file (for the last entry this is 00 1E --> 1E00h (some cg shader stuff (see above))).
There are two zero bytes following.
There are six bytes of random (**) stuff following.
There are two zero bytes again.
So now for my questions:
[A] Why can I find 15 entries of 12 bytes each only (see (*) above), while there are 16 files?!
The last one (beginning at the end) is supposed to contain the offset 0000h, but it is 1052h. The file immediately at the beginning of DAT is the one missing, and there is no file at offset 1052h (it's in the middle of some shader stuff).
The filenames in DIR and the data itself in DAT are NOT in the same order.
So there is supposed to be some connection between the entry with the data offset in the TOC and the filename in the DIR - I couldn't find any.
[C] I couldn't find out, how the length of each data entry in DAT is stored in TOC.
That's what (**) above is about: Of course the 6 bytes are NOT random, but contain important information. I couldn't find that out.
Additionally, the stuff after the 'PACK' is a mystery to me.
Is the connection made via a hash?! Is the length stored as a multiple of 256 or 512 bytes (remember there is padding at the end in DAT)?!
Thanks for helping me out, anybody.
I was just poking around in those files for the fun of it in the last 2.5 hours, now it's 4 am and I am going to get some sleep...


