Rsizetable

From EPD Wiki
Jump to navigation Jump to search

Ares implements a "resource size table" file format managed by ares::ResourceSizeTable. The earliest revision has no header, only containing the crc32b array, the size of array is implicitly calculated. The first revision adds a 0xc byte header and an optional array of fixed size file path + resource size pairs for file paths that produce a hash collision (default fixed size of that game's max path). The second and most common revision uses a 0x16 byte header, the 0x6 byte magic makes all subsequent u32 values unaligned.

File Structure

Header (revision 1)

Offset Size Type Description
0x0 0x4 u32 Magic ("RSTB" in big-endian)
0x4 0x4 u32 Crc32b resource size pair count
0x8 0x4 u32 Path resource size pair count

Header (revision 2)

Offset Size Type Description
0x0 0x6 u32 Magic ("RESTBL" in big-endian)
0x6 0x4 u32 Version
0xa 0x4 u32 Size of paths in collision table (0x80 and 0xa0 have been used)
0xe 0x4 u32 Crc32b resource size pair count
0x12 0x4 u32 Path resource size pair count

Crc32b Array

Array of hash + size pairs immediately following the header, if the header exists. Sorted by hash.

Offset Size Type Description
0x0 0x4 u32 Crc32b of file path
0x4 0x4 u32 Size required by file resource in ares

Path Array

Array of path + size pairs immediately following the Crc32b array, if the file path array exists. Sorted by path.

Offset Size Type Description
0x0 ares MaxPath char[ares MaxPath] Fixed size file path
ares MaxPath 0x4 u32 Size required by file resource in ares