Este juego de Virgin Games para NES, al igual que M.C KIDS (McDonaldLand) tiene el texto comprimido con un algoritmo LZ77, también ambos juegos presentan punteros de 2 bytes separados en 2 tablas, en un lado los bits menos siginificativo (LSB) y en otro los bits mas significativos (MSB).
El algoritmo funciona de la siguiente manera:
- 4 bits: tamaño del argumento "source" para las copias anteriores, en bits.
- 4 bits: tamaño del argumento "length" para las copias anteriores, en bits.
- Secuencia de bits comprimidos; lee cada byte de más significativo a menos significativo.
La secuencia de bits comprimidos consta de una serie de dos comandos:
1.- Pastcopy0 (source) (length)
- Copia los datos que ya se han descomprimido previamente.
- El número de bits utilizados por "source" y "length" se especifica en el primer byte de los datos comprimidos.
- El "source" es cuántos bytes atrás copiar, y un valor de 0 indica el final.
- El "length" es el número de bytes a copiar, menos tres (por lo que una longitud de 0 copia 3 bytes, 1 copia 4, etc.)
2.- Literal1 nnnnnnnn
- Genera un byte literal.
Tenia hecho hace tiempo un editor para esto, originalmente hecho por Alchemic, el cual agradezco, ya que puede tradcuir el M.C Kids con su ayuda, sin embargo la herramiento presentaba falencias a la hora de comprimir el texto,entre algunas, la compresión ocupan más espacio, no formatea punteros, no poder maneja caracteres no ASCII, como también no poder ocupar una tabla de caracteres externos.
Así que era hora de aportar con mi granito de arena a la comunidad de romhacking, y me di la tarea de hacer la herramienta desde 0, pero que además de mejorar el algorimo de compresión, ayudará a cubrir lo puntos anteriormente expuestos.
He aquí los resultados:
Texto original descompresión
Texto orignal(sin modificar) compresión
Algo que olvidé mencionar es que el juego posee tres bloques comprimidos de texto, divididos en script1,2,3... Utilizaremos como ejemplo el primero, el texto ocupa un total de 1782 bytes, sin embargo como muestra la imágen , al descomprimir tenemos 2641 bytes, un crecimiento del 48%. Ahora si lo comprimimos nuevamente podemos apreciar que nos quedan 72 bytes libres en ese bloque, por lo tanto, texto comprido original: 1782, compresión mía: 1710 bytes, una mejora de compresión de un 5% con respecto al original.
Se que no es mucho, pero si lo pensamos al traducir al español, solemos ocupar más palabras para decir lo mismo en inglés (con excepciones), así que esto ayuda muchísimo.
Bueno me despido, y nos vemos en otra nota de romhacking.