Revision as of 06:51, 9 May 2023
Sarc is a file archive format. Files are typically accessed by a binary sorted crc32 hash table. There does not appear to be an official version field, but this is fine as the format does not appear to have changed.
Offset
|
Size
|
Type
|
Description
|
0x0
|
0x4
|
u32
|
Magic ("SARC" in big endian)
|
0x4
|
0x2
|
u16
|
Size of header (0x14)
|
0x6
|
0x2
|
u16
|
Endianess (Always 0xfffe in big endian)
|
0x8
|
0x4
|
u32
|
Total file size
|
0xc
|
0x4
|
u32
|
File array offset
|
0x10
|
0x4
|
u32
|
Alignment
|
Sfat Section
The sfat section follows after the sarc header (header + size of header).
Offset
|
Size
|
Type
|
Description
|
0x0
|
0x4
|
u32
|
Magic ("SFAT" in big endian)
|
0x4
|
0x2
|
u16
|
Size of header (0x14)
|
0x6
|
0x2
|
u16
|
File count
|
0x8
|
0x4
|
u32
|
Hash seed
|
Sfat Entry Array
The sfat entry array follows the sfat header (header + size of header). Array is sized by the sfat header file count, and is sorted by the crc32 hash.
Offset
|
Size
|
Type
|
Description
|
0x0
|
0x4
|
u32
|
File name crc32 hash
|
0x4
|
0x3
|
u24
|
File name offset (may be invalid)
|
0x7
|
0x1
|
u8
|
Number of file hash collisions
|
0x8
|
0x4
|
u32
|
File array start offset
|
0xc
|
0x4
|
u32
|
File array end offset
|
Sfnt Section
Following the sfat section is the sfnt section, a header preceding an array of file path of null-terminated strings.
Offset
|
Size
|
Type
|
Description
|
0x0
|
0x4
|
u32
|
Magic ("SFAT" in big endian)
|
0x4
|
0x2
|
u16
|
Size of header (0x8)
|
0x6
|
0x2
|
u16
|
Reserved
|