Sarc: Difference between revisions
Jump to navigation
Jump to search
(Added all of sarc.) |
mNo edit summary |
||
(5 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Sarc is a file archive format. Files are typically accessed by a binary sorted | Sarc is a file archive format. Files are typically accessed by a binary sorted by a hash value derived from a custom hash function. For a more detailed article, see: https://github.com/Kinnay/Nintendo-File-Formats/wiki/SARC-File-Format | ||
=== Header === | === Header === | ||
Line 22: | Line 22: | ||
|0x2 | |0x2 | ||
|u16 | |u16 | ||
|Endianess (Always | |Endianess (Always reads as 0xfeff in platform's native endian) | ||
|- | |- | ||
|0x8 | |0x8 | ||
Line 38: | Line 38: | ||
|u32 | |u32 | ||
|Alignment | |Alignment | ||
|- | |||
|0x14 | |||
|0x2 | |||
|u16 | |||
|Version | |||
|- | |||
|0x16 | |||
|0x2 | |||
|u16 | |||
|Reserved | |||
|} | |} | ||
Line 73: | Line 83: | ||
==== Sfat Entry Array ==== | ==== 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 | 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 a custom hash derived from the hash seed in the sfat header. | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
Line 84: | Line 94: | ||
|0x4 | |0x4 | ||
|u32 | |u32 | ||
|File name | |File name hash | ||
|- | |- | ||
|0x4 | |0x4 | ||
Line 130: | Line 140: | ||
|Reserved | |Reserved | ||
|} | |} | ||
[[Category:File formats]] |
Latest revision as of 20:25, 9 May 2023
Sarc is a file archive format. Files are typically accessed by a binary sorted by a hash value derived from a custom hash function. For a more detailed article, see: https://github.com/Kinnay/Nintendo-File-Formats/wiki/SARC-File-Format
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 reads as 0xfeff in platform's native endian) |
0x8 | 0x4 | u32 | Total file size |
0xc | 0x4 | u32 | File array offset |
0x10 | 0x4 | u32 | Alignment |
0x14 | 0x2 | u16 | Version |
0x16 | 0x2 | u16 | Reserved |
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 a custom hash derived from the hash seed in the sfat header.
Offset | Size | Type | Description |
---|---|---|---|
0x0 | 0x4 | u32 | File name 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 |