Sarc: Difference between revisions

From EPD Wiki
Jump to navigation Jump to search
(Add category.)
mNo edit summary
 
(4 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 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.
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 0xfffe in big endian)
|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 crc32 hash.
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 crc32 hash
|File name hash
|-
|-
|0x4
|0x4

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