Empezar

Este parche es un trabajo en curso y no está terminado. Se juega de principio a fin, pero mira Lo que falta antes de juzgarlo.

Lo primero que hace falta

Un volcado del cartucho. Aquí no se distribuye ninguno: ni el original ni el traducido. Lo que se publica es un fichero de diferencias, que por sí solo no arranca.

El volcado tiene que ser exactamente éste:

tamaño32.768 bytes
sha25624cb5bda5f55dcd5ab1343fb61ebac67e8c292f9714ee7a492431e33188b9b40

Otro volcado del mismo juego probablemente funcione, pero aquí no se ha comprobado nada contra él, y make para antes de hacer nada.

Lo rápido: aplicar el IPS

Coge parche/mahjong_en.ips y aplícalo a tu volcado con cualquier herramienta de IPS. Ya está. Sale una ROM de 32.768 bytes para emulador o flashcart, con sha256 5613f6b450c78113f3ae31079e54be2e26b31023522b3b14807eae6b99772e07.

Si tu ROM sale con otro hash, el volcado del que partías no era el de arriba.

Lo largo: construirlo tú

Merece la pena si quieres cambiar los textos, o simplemente para ver que el parche es lo que dice ser.

Hacen falta pasmo y Python 3. Para las capturas, además, openMSX y Pillow.

cp /donde/tengas/tu.rom mahjong.rom
make comprueba   # ¿es este el volcado bueno?
make             # listado, verify, sanity, el parche y los tests

make recorre la cadena entera y acaba en verde o no acaba:

  ensamblado : 32768 bytes  24cb5bda...188b9b40
  original   : 32768 bytes  24cb5bda...188b9b40
OK: reproducible byte a byte
...
ROM modificada: 12103 bytes cambiados dentro de 46 bloques, 0 fuera
OK: fuera de los bloques sustituidos, la ROM es identica a la original

Fíjate en la línea de en medio. 0 fuera quiere decir que la construcción no ha cambiado ni un byte fuera de los 46 bloques que declaró que iba a cambiar. Ésa es la garantía de que un parche de traducción no ha movido nada más por el camino.

Los demás objetivos

make parche      # sólo construir work/mahjong_en.rom y el IPS
make juega_en    # la ROM traducida en openMSX
make capturas    # rehace todas las capturas de esta web
make capturas_jp # lo mismo con el cartucho original, para comparar
make pantallas   # las dos, y comprueba que no se enciende ningún mueble
make test        # los tests

make pantallas es el que se gana el sueldo — mira el hallazgo por el que existe. Necesita openMSX porque necesita ver corriendo los dos cartuchos.

De dónde sale el listado

src/mahjong.asm está aquí porque parchea.py empalma en una copia suya los bloques traducidos. El desensamblado comentado del que sale —los 32.768 bytes explicados, ninguno sin identificar— es otro repositorio: KonamisMahjongDojo-disassembly. Si lo que quieres es entender el cartucho y no el parche, empieza por ahí.