Almost all files in FF9 has structure, which starts from 2 bytes DB (hex numbers). This record points, that after we'll have pointer list, which points to different data sections in the file (data can be sounds, TIMs, models, etc).
|Pointers count||1 byte|
|00 00||2 bytes|
|Pointer1, Pointer2,...||4 bytes * Pointers count|
Pointer is a number, which represent how many bytes from current position there is target data. Current position in this case is first byte of this pointer.
|Data Type||1 byte|
Data, where points this pointer begins with 2 bytes, first byte indicates, what data type we have, and second is count of objects of selected type.
Data Data structure:
|1 byte||Data type|
|1 byte||Number of object`s in this scope|
|2 bytes||00 00 (for 4 bytes align)|
After this goes object identifiers for selecting in scripts.
One identifier are 2 bytes, and size of all identifiers must be aligned to 4 bytes (by add 0000 identifier).
Identifiers count = Number of object`s in Data Structure.
Pointers to objects
Count of pointers = Number of object`s in Data Structure.
Size of all pointers are 4 bytes.
Pointers are from current position (offset of current pointer + pointer value)
End`s pointer for objects
After Pointers to objects goes 4 bytes.
It`s pointer from first pointer offset to end of last object (offset of first pointer + end`s pointer)