Estructura RARC

Contenido

  1. Introducción
  2. Funcionamiento
  3. Definiciones
  4. Estructura
  5. Notas
  6. Referencias

Introducción

En SMG la mayoria de los archivos de interés del juego se encuentran dentro de archivos RARC. Ellos actuan de la misma forma que un archivo ZIP (sin compresión) conteniendo una estructura de carpetas y archivos dentro. Realmente, RARC es un sistema de archivos guardado en un archivo que a su vez está guardado en otro sistema de archivos.


Image could not be loaded.

Archivo MarioAnime.arc en Blender 2.79.7 (Blenxy)

Funcionamiento

Como se mencionó arriba, los archivos RARC son sistemas de archivos. Lo que se necesita para entenderlos son los conceptos de archivo, carpeta y entrada. Históricamente los primeros 2 términos mencionados vienen del pasado. Los archivadores/archivos son contenedores de carpetas que pueden guardar documentos de forma organizada. En la siguiente figura se puede ver uno de ellos.

Image could not be loaded.

Archivador con carpetas y documentos.

En la jerga de programación/computación, un archivo puede referirse a una carpeta o a un documento, sin embargo esta definición es ambigua y puede generar confusión. En los siguientes enlaces se puede ver esta confusión: 1 - 2 - 3. Con esto, y con las definiciones de sistemas de archivos, lo que me parece más fácil es asumir la confusión de un archivo como un documento, de una carpeta como algo que contiene archivos y de una entrada (entry en inglés) como algo que puede referirse a un archivo y una carpeta a la vez. Por lo tanto las definiciones quedan de la siguiente forma:


Como puede verse, los términos mencionados aquí se refieren o tienen que ver con estructuras de árboles binarios, jerarquía, etc. que tienen poco que ver con el juego y más con el mundo de la programación/organización. Esto hace al formato un poco aburrido de aprender.


Definiciones

Estructura

La estructura del archivo descrita aquí es la estructura que se ha conseguido en los archivos originales de SMG. Esta información no significa que la estructura tenga que ser exactamente como se describe en la página.


Encabezado -- 0x20 bytes

Nombre Tamaño Descripción
Magia 4 bytes RARC en big endian CRAR en little endian.
Tamaño del archivo 4 bytes Tamaño en bytes.
Posición de la información del sistema de archivos 4 bytes Respecto al inicio del archivo, en bytes.
Posición de la piscina de datos de archivos 4 bytes Respecto al inicio de la información del sistema de archivos, en bytes.
Tamaño de la piscina de datos de archivos 4 bytes Tamaño en bytes.
Tamaño de la piscina de datos de archivos asignada a la RAM principal 4 bytes Tamaño en bytes.
Tamaño de la piscina de datos de archivos asignada a la RAM auxiliar 4 bytes Tamaño en bytes. Aplica a la GameCube.
Tamaño de la piscina de datos de archivos a ser leida directamente del DVD 4 bytes Tamaño en bytes.
Image could not be loaded.

Encabezado de ObjectData/MarioAnime.arc.

Información del sistema de archivos -- 0x20 bytes

Nombre Tamaño Descripción
Número de carpetas 4 bytes Número de carpetas en el sistema de archivos.
Posición de la información de las carpetas 4 bytes Respecto al inicio de esta sección, en bytes.
Número de entradas 4 bytes Número de entradas en el sistema de archivos.
Posición de la información de las entradas 4 bytes Respecto al inicio de esta sección, en bytes.
Tamaño de la piscina de cadenas de caracteres 4 bytes Tamaño en bytes.
Posición de la piscina de cadenas de caracteres 4 bytes Respecto al inicio de esta sección, en bytes.
Número de archivos 2 bytes Número de archivos en el sistema de archivos. Cuenta a las carpetas en algunos casos. Ver las notas para más información.
El identificador de la entrada es su índice en la lista de entradas 1 byte Este dato no lo puedo verificar, viene de las referencias. Parece indicar que cada archivo o entrada tiene un identificador único y cuando este dato vale 1 el índice del archivo o entrada es el valor del indentificador. De otra forma, el archivo es ubicado por el juego a través de su nombre.
Desconocido 1 5 bytes Parece ser siempre 5 bytes todos en 0x00.
Image could not be loaded.

Información del sistema de archivos de ObjectData/MarioAnime.arc.

Lista de información de las carpetas -- 0x10 * Número de carpetas bytes

Nombre Tamaño Descripción
Magia de la carpeta 4 bytes Se usan los 4 primeros caracteres del nombre de la carpeta en mayúsculas. Si el nombre de la carpeta es menor que 4 caracteres entonces lo que falta se rellena con caracteres de espacio. Es afectado por el ordenamiento de los bytes. La carpeta principal (carpeta raíz) tiene magia igual a ROOT (big endian) o TOOR (little endian).
Posición del nombre de la carpeta 4 bytes Respecto al inicio de la piscina de cadenas de caracteres.
Hash del nombre de la carpeta 2 bytes Este hash se calcula de la misma forma que el hash que se usa en la tabla de nombres.
Número de entradas en la carpeta 2 bytes Número de entradas hijas que están contenidas en la carpeta.
Índice de la primera entrada en la carpeta 4 bytes Índice de la primera entrada contenida en la carpeta en la lista de información de las entradas.
Image could not be loaded.

Información de las carpetas de ObjectData/MarioAnime.arc.

En la imagen mostrada se puede ver la ultima fila marcada con rosado. Esta fila se marca porque en los archivos RARC originales las diferentes secciones estan alineadas con posiciones múltiplo de 32 bytes. En las notas se puede leer más al respecto.


Lista de información de las entradas -- 0x14 * Número de entradas bytes

Nombre Tamaño Descripción
Índice de archivo 2 bytes No es lo mismo que el índice de entrada, se contabiliza con el número de archivos. Si esta entrada es una carpeta, este índice vale 0xFFFF. Uno de los pocos ejemplos en donde este índice se usa es para ubicar los sonidos en el archivo AudioRes/Seqs/JaiSeq.arc.
Hash del nombre de la entrada 2 bytes Este hash se calcula de la misma forma que el hash que se usa en la tabla de nombres.
Atributos + Posición del nombre de la entrada 4 bytes El byte más significativo especifica las propiedades asignadas a esta entrada. Ver definiciones para más información. Los otros 3 especifican la posición del nombre de la entrada en la piscina de cadenas de caracteres.
Posición de los datos del archivo o índice de la carpeta 4 bytes
  • Si esta entrada es un archivo, este número indica la posición de los datos del archivo en la piscina de datos de archivos.
  • Si esta entrada es una carpeta, este número indica el índice de la carpeta asociada en la lista de información de las carpetas.
Tamaño de los datos del archivo o tamaño de la carpeta 4 bytes
  • Si esta entrada es un archivo, este número indica la longitud en bytes de los datos del archivo asociado en la piscina de datos de archivos.
  • Si esta entrada es una carpeta, este número indica el tamaño de la información de la carpeta en la lista de información de las carpetas. Siempre vale 0x10.
Desconocido 1 4 bytes Parece ser siempre 4 bytes todos en 0x00
Image could not be loaded.

Información de las entradas de ObjectData/MarioAnime.arc. Este archivo RARC tiene muchas entradas, sólo salen marcadas las primeras 3.

Piscina de cadenas de caracteres

Image could not be loaded.

Inicio de la piscina de cadena de caracteres de ObjectData/MarioAnime.arc.

Piscina de datos de archivos

Image could not be loaded.

Inicio de la piscina de datos de archivos de ObjectData/MarioAnime.arc.

Notas

Referencias