Sarc

Revision as of 06:51, 9 May 2023 by Watertoon (talk | contribs) (Added all of sarc.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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.

Header

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).

Sfat 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