London Life - pleonex/AiroRom GitHub Wiki
London Life es un minijuego para la Nintendo DS (NDS). Fue desarrollado por Level-5 e incluído solo en la versión para Reino Unido de El profesor Layton y la llamada del espectro. Está solo disponible en inglés.
Estructura
Los archivos están dentro de la carpeta ll
, siendo dos de ellos los más importantes:
- ll/common/ll_common.darc: Contiene las fuentes, textos y audios.
- ll/kihira/kihira.archive: Contiene todas las imágenes y sprites.
Hace dos años terminé un plug-in para Tinke que permite descomprimir y extraer la mayoría de estos archivos. Para el caso del archivo de textos MSG hice un programa a parte que pronto estará disponible.
Contenedor DARC
Contiene archivos DENC
en su interior.
Offset | Tamaño | Descripción |
---|---|---|
0x00 | 0x04 | Cabecera DARC |
0x04 | 0x04 | Número de archivos |
0x08 | 0x04*i | Offset de cada archivo relativo a la posición actual |
Además sobre cada archivo, 4 bytes antes del mismo, está su tamaño.
Contenedor ARCHIVE
Contiene archivos comprimidos con las compresiones de la BIOS (LZSS, HUFFMAN y RLE).
Offset | Tamaño | Descripción |
---|---|---|
0x00 | 0x04 | Tamaño del FAT |
0x04 | [0x00] | FAT |
Por cada archivo hay 8 bytes de información:
- 4 bytes: Offset absoluto al archivo.
- 4 bytes: Tamaño del archivo.
Compresión DENC
Encapsula un archivo para determinar su algoritmo de compresión.
Offset | Tamaño | Descripción |
---|---|---|
0x00 | 0x04 | Cabecear DENC |
0x04 | 0x04 | Tamaño decodificado |
0x08 | 0x04 | Codificación, ver más abajo |
0x0C | 0x04 | Tamaño codificado |
Los valores posibles de codificación son:
NULL
: No está codificado.LZSS
: Codificado con variante de LZSS.
Variante LZSS
Se trata de una variante de LZSS muy sencilla que sigue el siguiente esquema. Una implementación en C# se puede encontrar aquí.
- Leer el token (1 byte).
- Comprobar el primer bit del token
- Si es '1' => está codificado, hay que repetir un byte X veces. 1. El nuevo token se compone de dos bytes, leer un byte y juntarlo con el token antiguo. 2. Los siguientes 11 bits del nuevo token indican cuantas posiciones hay que retroceder para encontrar el valor a repetir. 3. Los 4 bits restantes indican cuantas veces hay que repetir el byte.
- Si es '0' => no está codificado, copiar X bytes 1. El número de bytes a copiar serán los 7 bits restantes del token.
Formato textos MSG
Codificación usada en un único archivo para contener todos los textos.
Offset | Tamaño | Descripción |
---|---|---|
0x00 | 0x04 | Cabecera MGS |
0x04 | 0x04 | Número de punteros |
0x08 | 0x04*i | Puntero a la entrada de texto |
Caracteres de control:
Aquellos bytes comprendidos entre 0xF0 y 0xFF. En ese caso el formato es el siguiente (cada letra son 4-bits):
FF FF NN NN P...
F: Formato, ver a continuación.
N: Número de bytes como parámetros incluyendo este campo.
P: Parámetros.
Los valores posibles del formato son:
0xF0
: Salto de línea.0xF1
: Espera a que el usuario pulse A.0xF2
: Cambiar el color del texto.0xF3
: Espera el tiempo indicado.0xF4
: Se reemplaza por un nombre.0xF5
: Realiza una pregunta.0xF9
: Reemplazado por un texto.0xFA
: Desconocido0xFB
: Espera que un proceso termine (como guardar)0xFC
: Desconocido