lunes, 30 de noviembre de 2020

[Notas Romhacking] Robocop Vs The Terminator (USA) (Proto) (NES)

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.



[Notas Romhacking] 03-02-2025



1.- Mississippi Satsujin Jiken (NES)

Desarrolle la herramienta "HexString" para este juego, tiene la capacidad de comprimir por DTE/MTE, además formatear los punteros automaticamente, proximamente más avances.






2.- Compresión de Golomb de 4-bits:


He estado trabajando en la creación de herramientas para sacar adelante nuevas traducciones de ROM que por su complejidad aún no se disponen de traducción. En este caso la compresión de Golomb, permite al desarrollador crear un mapa de caracteres, que divide en distintos diccionarios, lo que permite seleccionar los caracteres que presentan más frecuencia y en este caso asignarlo con un valor de 4 bits (mitad de byte), de esta forma asignamos al primer diccionario los 16 valores con más repetición. Si se preguntan de donde sale el 16 (2^4 =16). Con esto podemos asignar a un byte 2 valores.


Ahora, esto es hipotético, si tenemos mucho mas que 16 caracteres, necesitaremos construir otros diccionarios, pero deberemos sacrificar indices, osea reduciremos la capacidad a 15. Y en 1 por cada diccionario extra. A estos índices por cierto, se les denomina "nybble".

Pero dejemos de tanta explicación técnica, he localizado una serie de juegos, de la desarrolladora Imagineering que ocupa esta compresión de texto. Entre algunos títulos:


Barbie (NES)
Home Alone 2 (NES)
Ren & Stimpy Show, The (NES)
Simpsons Bart vs Space Mutants (NES)
Simpsons Bart vs The World (NES)
Simpsons Bart Meet Radiactive Man (NES)
(Y otros más que no he revisado)


Algunas imágenes de textos dumpeados:


Simpsons Bart vs The World


Simpsons Bart vs Space Mutants






Y en el juego que comenzé a trabajar:


The Ren & Stimpy Show







3.- Robocop vs The Terminator (NES)


Mientras reivsaba que juego podia traducir me di cuenta de la existencia de este título, pero algo llamo mi atención, la desarroladora era Virgin, y recordé otro juego con compresión de la misma desarroladora, exacto "M.C KIDS", así que tome el decompresor sin modificar, solo depure algunas direcciones y la ROM, y grande fue mi sorpresa:




Pero, sin embargo, debo reconstruir la herramienta para manejar mejor los caracteres no ASCII, también debo agregar que ya se donde está su tabla de punteros, así que toca incluirlo y queda una mega herramienta. Quizás le haga un repaso a M.C kids.


4.- Star Fox 2 (SNES)


Bueno este a sido un dolor de cabeza, si bien el texto es facil de dumpear, es simple DTE. Los gráficos son otro cuento, el chip que incluye, el FX , que permite medio rendelizar en 3D (Algo bastante adelantado a su época). Sobra decir que está todo comprimido y no he podido dar con la tabla de las letras. Sin embargo he descomprimido bastante offset de gráficos, (y son bastantes), un proyectoq ue veo que me supera más que nada por la gran inversión de tiempo que se debe dedicar ( además no me considero artista gráfico), me gustaría delegar esto a alguien que tome el liderazgo del proyecto.



Texto Principal Dumpeado









Así que se vienen cositas...


Última actualización
03-02-2025