Contenido
Introducción
Los tipos de archivos en SMG son variados. A veces hay estructuras que se repiten entre los archivos por lo que esta página va a exponer esas extructuras que me he conseguido.
Definiciones
- Archivo: Conjunto de datos que tienen algun sentido.
- Sección: Parte de un archivo que contiene datos que se relacionan entre sí.
- Encabezado: Los datos que se escriben al comienzo de un archivo/sección.
- Relleno: Una cadena de bytes que se usa para separar y alinear datos.
- Bit: Mínima unidad posible para almacenar datos. Se puede almacenar un 0 o un 1.
- Byte: Mínima unidad directamente accesible de almacenamiento de datos (8 bits de longitud).
- Entero: Variable que almacena un número entero (con signo/sin signo) de un número de bits de logitud (en general de 8, 16 y 32 bits).
Encabezado de archivo
Los encabezados de archivos, en general, tienen un tamaño de 32 bytes y contienen los siguientes datos, en orden:
Nombre | Tamaño | Descripción |
---|---|---|
Magia | 4 bytes | Cadena de bytes que indica el tipo general de un archivo. |
Tipo | 4 bytes | Cadena de bytes que indica el tipo específico de un archivo. |
Tamaño | 4 bytes | Entero que contiene el tamaño, en bytes, del archivo. Incluye el tamaño del encabezado del archivo. |
Número de secciones | 4 bytes | Entero que contiene el número de secciones del archivo. |
Desconocido 1 | 16 bytes | Cadena de bytes cuyo propósito se desconoce. Está mayormente lleno de 0xFF . |

Fig. 1: Encabezado de un archivo BDL visto en ImHex
.
Encabezado de sección
Los encabezados de las secciones tienen un tamaño de 8 bytes y contienen los siguientes datos, en orden:
Nombre | Tamaño | Descripción |
---|---|---|
Magia | 4 bytes | Cadena de bytes que indica identifica el tipo de la sección. |
Tamaño | 4 bytes | Entero que contiene el tamaño, en bytes, de la sección. Incluye el tamaño del encabezado de la sección. |

Fig. 2: Encabezado de una sección de un archivo BDL visto en ImHex
.
Tabla de nombres
Las tablas de nombres son de tamaño variable (depende de los nombres almacenados). Estas tablas almacenan varias cadenas de caracteres (codificadas en Shift-JIS) que pueden representar los nombres de huesos/texturas/materiales en un modelo 3D de SMG. Estas tablas contienen los siguientes datos, en orden:
Nombre | Tamaño | Descripción | ||||||
---|---|---|---|---|---|---|---|---|
Número de nombres | 2 bytes | Entero que contiene el número de nombres en la tabla de nombres. | ||||||
Desconocido 1 | 2 bytes | Siempre 0xFFFF ¿Puede ser la máscara de los hashes que vienen después? |
||||||
Inicio: Información de los nombres | (4 * Número de nombres) bytes | |||||||
|
||||||||
Final: Información de los nombres | ||||||||
Inicio: Nombres | Número de bytes de todas las cadenas de caracteres | |||||||
|
||||||||
Final: Información de los nombres |

Fig. 3: Tabla de nombres de una sección de un archivo BTP vista en ImHex
.
Rutina de calculo del hash de la tabla de nombres
HASH = [FIRST_BYTE_VALUE] * (3^(STRING_BYTE_LENGTH - 1)) + [SECOND_BYTE_VALUE] * (3^(STRING_BYTE_LENGTH - 2)) + [THIRD_BYTE_VALUE] * (3^(STRING_BYTE_LENGTH - 3)) + ... + [LAST_BYTE_VALUE] * (3^(0))
Los valores de los bytes tienen que interpretarse como un entero con signo de 8 bits y la longitud de la cadena de caracteres no debe incluir el caracter nulo.
Relleno
Hay un relleno genérico que se encuentra en los archivos de SMG que se puede leer. Es una cadena de caracteres que se usa para alinear los pedazos de datos siguientes a una dirección en la posición del byte multiplo de 4 o 32 respecto al inicio de una sección o al inicio del archivo. El máximo tamaño en el que se ha conseguido este relleno es de 31 bytes:
This is padding data to alignme

Fig. 4: Rellenos de diferente tamaño de un archivo BTP vistos en ImHex
.