Game.Bin, Script.Bin and Frontend.Bin use Names.Bin as a library.
All Names.Bin offsets do not count 20 byte header
[1] Byte - 00 (Indicates to use Names.Bin as Library)
[4] Bytes - File Indicator
[4] Bytes - Platform Indicator (Xbox / PC)
[4] Bytes - Number of Entries
Each Row is 12 Bytes long. Loop until Number of Entries is met.
[4] Bytes - Definition Name Offset in Names.Bin
[4] Bytes - »PC File Name offset in Names.Bin »Xbox Enumerator for specific file.
[4] Bytes - Counter Based on Definition Used
*Exceptions For File Name or Enumerator Bytes:
PC If the entry Equals (FF FF FF FF) Name is Defined outside of Names.Bin and does not require parsing.
Xbox If the enumeration equals (00 00 00 00) Then Enumerator is Defined in Names.Bin
[4] Bytes - Number of Compressed Chunks (Actual Compressed Chunks is always one less)
[4] Bytes - Null
Each Row is 8 Bytes long, loop until number of compressed chunks is met.
[4] Bytes - Offset to Compressed Chunk
[4] Bytes - Last File Number Contained in Chunk (Running Counter)
*Each Offset is based after the second table ends. (Equals (Number of Entries * 12 + 13 byte header) + (Number of Compressed Chunks * 8 + 8 byte header))
Each Compressed Chunk is Zlib Compressed
[2] Bytes - Offset
*If you divide initial Offset by 2 it equals number of files
Each File uses indicator bytes that are defined in the NullDefs (Based on Definition From First Table)
*Additional Notes: PC .Bin Files require Names.Bin to be parsed into each file offset. Files are listed in order in the First Table.
more as we get time…