RARC (File Format): Difference between revisions
Super Hackio (talk | contribs) m (Super Hackio moved page RARC to RARC (File Format) without leaving a redirect: Title format change) |
Master Luma (talk | contribs) (Changed the full-length definition for "RARC" from the misinterpreted "Revolution Archive" to the actual "Resource Archive" as referenced officially in the game files.) |
||
Line 1: | Line 1: | ||
[[Category:File formats]] | [[Category:File formats]] | ||
'''RARC''' stands for '''R''' | '''RARC''' stands for '''R'''esource '''ARC'''hive. These files make up a majority of the files that you see on the game's disc, under the extension ''.arc''. '''RARC''' files are archives, containing multiple files and folders inside. This format was also used on the Nintendo GameCube. | ||
The ''Resource'' in the file name here breaks the common convention they used in naming most similar formats intending it to signify ''Revolution'' instead, the codename for the Nintendo Wii. Proof of this is known and can be seen in the various references in the game files to the Official tool Nintendo used for creating and managing this file format, ''Resarc''. | |||
= Format Specifications = | = Format Specifications = |
Latest revision as of 23:51, 11 April 2025
RARC stands for Resource ARChive. These files make up a majority of the files that you see on the game's disc, under the extension .arc. RARC files are archives, containing multiple files and folders inside. This format was also used on the Nintendo GameCube.
The Resource in the file name here breaks the common convention they used in naming most similar formats intending it to signify Revolution instead, the codename for the Nintendo Wii. Proof of this is known and can be seen in the various references in the game files to the Official tool Nintendo used for creating and managing this file format, Resarc.
Format Specifications
Below you'll find helpful tables on how the file is structured
Header
Each RARC starts with a header
Offset | Type | Description |
---|---|---|
0x00 | String | "RARC" in ASCII |
0x04 | UInt32 | Size of the entire file |
0x08 | UInt32 | Data Header Offset (Always 0x20) |
0x0C | UInt32 | Offset to the File Data section minus 0x20 |
0x10 | UInt32 | Length of the File Data section |
0x14 | UInt32 | Size of all the MRAM Files in the File Data section |
0x18 | UInt32 | Size of all the ARAM Files in the File Data section |
0x1C | UInt32 | Size of all the DVD Files in the File Data section |
Data Header
This section has information on the entire archive
Offset | Type | Description |
---|---|---|
0x00 | UInt32 | The number of Directory Nodes |
0x04 | UInt32 | Offset to the Directory Nodes section minus 0x20 (always 0x20) |
0x08 | UInt32 | The number of File Nodes |
0x0C | UInt32 | Offset to the File Nodes section minus 0x20 |
0x10 | UInt32 | Size of the String Table |
0x14 | UInt32 | String Table offset minus 0x20 |
0x18 | UInt16 | The next available File Index |
0x1A | bool | Keeps the File ID's Synced (Always 0x01, or TRUE in SMG) |
0x1B | UInt8[5] | Padding, All 0x00's |
Directory Node section
This section is a list of information for each folder (or, subdirectory) in the archive.
Each list entry looks like this:
Offset | Type | Description |
---|---|---|
0x00 | String | The first 4 characters in the Directory's name in all caps. Example: "RootFolder" = "ROOT", and "Tmp" = "TMP " (Names less than 4 characters are padded to 4 characters with spaces) |
0x04 | UInt32 | Offset to the Directory's name in the String Table |
0x08 | UInt16 | Hash of the Directory's name |
0x0A | UInt16 | The number of File Nodes in this directory |
0x0C | UInt32 | Offset to the first File Node in the File Nodes section |
File Node section
This section is a list of information for each file in the archive. It also contains entries for directories so we can know which directory belongs where.
Each list entry looks like this:
Offset | Type | Description |
---|---|---|
0x00 | UInt16 | Node Index (0xFFFF if this entry represents a subdirectory) |
0x02 | UInt16 | Hash of the Node's name |
0x04 | UInt8 Bitfield | Defines certain Node Attributes. See the Node Attributes table below. |
0x05 | UInt8[1] | Padding. 0x00 |
0x06 | UInt16 | Offset to the Node's name in the String Table |
0x08 | UInt32 | If this node represents a file: Offset to the File's Data in the File Data section. If this node represents a directory: Directory Node section index to use |
0x0C | UInt32 | If this node represents a file: Size of the File's Data. If this node represents a directory: The size of the Directory Node (always 0x10) |
Node Attributes
Mask | Name | Description |
---|---|---|
0x01 | FILE | This node is a File |
0x02 | DIRECTORY | This node is a Directory |
0x04 | COMPRESSED | This node's file is compressed |
0x10 | PRELOAD_TO_MRAM | Set the file to be loaded into Main RAM |
0x20 | PRELOAD_TO_ARAM | Set the file to be loaded into Auxiliary RAM (GameCube only) |
0x40 | LOAD_FROM_DVD | Set the file to be loaded right off the DVD when needed |
0x80 | YAZ0_COMPRESSED | This node's file is specifically YAZ0 compressed. Enable the COMPRESSED flag as well when using this |
Among the File Nodes are nodes for a ".." and "." directory. The "." entry points to the current directory, and the ".." directory points to the parent directory (or 0xFFFFFFFF if the current directory is the topmost directory).
String Table
This section is composed of NULL-terminated ASCII strings. The above information references these strings.
File Data section
This section is a chunk of all the data that files in the archive contain. Files are sorted in a specific order, and are padded to the nearest 32 byte boundary.
The sorting order is MRAM Files then ARAM Files then DVD Files.