[Hack] Alex Kidd in Miracle World - Corrección de colisión del puñetazo y mapeo de botones

Imagen


Hola a todos,

Después de 40 años desde su lanzamiento (1986), Alex Kidd in Miracle World por fin cuenta con una solución para un problema de control que siempre me ha molestado bastante, acompañándolo de un reajuste en la disposición de los botones.

El problema

La colisión del puñetazo de Alex siempre ha presentado imprecisiones, provocando fallos en la rotura de bloques pese a existir superposición visual. Tras analizar el código del juego, la causa responde a dos factores:

1. La colisión contra bloques sólo se comprueba una vez, en el instante exacto de pulsar el botón, y contra un único punto (una celda de 8×8 píxeles).
2. Si en ese fotograma el puño aún no se encuentra en su posición final (durante un salto o golpeando en los márgenes), la comprobación no surte efecto aunque el sprite termine cubriendo el bloque.

Imagen

Esto dificultaba romper bloques en pleno ascenso o descenso de un salto, así como en las esquinas.

Qué hace el parche

1. Colisión continua y con la hitbox real del puño.
- La comprobación se realiza en cada frame mientras el puño permanece extendido, y no de forma aislada al pulsar.
- Se emplea la hitbox real del puño (la utilizada contra enemigos) aplicando +1 píxel de margen por cada lado.
- Contacto de 1 píxel = rompe. Sin contacto = no rompe.

2. Botones intercambiados.
- Original: botón 1 = salto, botón 2 = puño.
- Con el parche: botón 1 = puño, botón 2 = salto.

El parche modifica únicamente 121 bytes, ubicados en el espacio libre del final del banco fijo del cartucho. No altera el header, ni el checksum, ni código preexistente más allá de tres redirecciones.

Descarga

AlexKidd in Miracle World - Improved Punch Collision & Swapped Buttons v1.0 (by Psicopompo).zip


Enlaces de interés:
- Ficha oficial en RomHacking.net
- Repositorio en GitHub

Hashes

ROM original (sin modificar, requerida):
- Tamaño: 131 072 bytes (128 KB)
- CRC32: AED9AAC4
- MD5: f43e74ffec58ddf62f0b8667d31f22c0
- SHA-1: 6d052e0cca3f2712434efd856f733c03011be41c


Parche IPS:
- Tamaño: 159 bytes
- CRC32: E486EEBD
- MD5: f74569acf7d5651e8d8daff387c2bbfd
- SHA-1: 453d47cc4d9a4d96bb9f27dc728bceb0dbf8e4a5


ROM resultante (verificación):
- CRC32: DD4E9200
- MD5: a76f432b484aa5653a3f4256dc7537a0
- SHA-1: 025163f4e4ff8a251e2c72429f2c5543268e6de4


⚠️ El parche está diseñado exclusivamente para la Rev 1 del lanzamiento en EE.UU. y Europa. No es compatible con la Rev 0 ni con la versión japonesa debido a diferencias en el layout del código.

Verificación

El código inyectado se ha testado mediante un intérprete Z80 que procesa los bytes reales del parche:

- Detección de contacto (centro, borde, margen de 1 píxel, esquina): 8/8
- Ausencia de rotura sin contacto (espacio vacío, por encima/debajo):
- Prevención de doble rotura por accionamiento:
- Intercambio de botones (casos a nivel de bit y lectura completa del pad):
- Validación de Round-trip del IPS (aplicar y comparar byte a byte):

Cualquier reporte de errores, pruebas o comentarios técnicos es bienvenido.

¡Saludos!
psicopompo escribió:
Imagen


Hola a todos,

Después de 40 años desde su lanzamiento (1986), Alex Kidd in Miracle World por fin cuenta con una solución para un problema de control que siempre me ha molestado bastante, acompañándolo de un reajuste en la disposición de los botones.

El problema

La colisión del puñetazo de Alex siempre ha presentado imprecisiones, provocando fallos en la rotura de bloques pese a existir superposición visual. Tras analizar el código del juego, la causa responde a dos factores:

1. La colisión contra bloques sólo se comprueba una vez, en el instante exacto de pulsar el botón, y contra un único punto (una celda de 8×8 píxeles).
2. Si en ese fotograma el puño aún no se encuentra en su posición final (durante un salto o golpeando en los márgenes), la comprobación no surte efecto aunque el sprite termine cubriendo el bloque.

Imagen

Esto dificultaba romper bloques en pleno ascenso o descenso de un salto, así como en las esquinas.

Qué hace el parche

1. Colisión continua y con la hitbox real del puño.
- La comprobación se realiza en cada frame mientras el puño permanece extendido, y no de forma aislada al pulsar.
- Se emplea la hitbox real del puño (la utilizada contra enemigos) aplicando +1 píxel de margen por cada lado.
- Contacto de 1 píxel = rompe. Sin contacto = no rompe.

2. Botones intercambiados.
- Original: botón 1 = salto, botón 2 = puño.
- Con el parche: botón 1 = puño, botón 2 = salto.

El parche modifica únicamente 121 bytes, ubicados en el espacio libre del final del banco fijo del cartucho. No altera el header, ni el checksum, ni código preexistente más allá de tres redirecciones.

Descarga

AlexKidd in Miracle World - Improved Punch Collision & Swapped Buttons v1.0 (by Psicopompo).zip


Enlaces de interés:
- Ficha oficial en RomHacking.net
- Repositorio en GitHub

Hashes

ROM original (sin modificar, requerida):
- Tamaño: 131 072 bytes (128 KB)
- CRC32: AED9AAC4
- MD5: f43e74ffec58ddf62f0b8667d31f22c0
- SHA-1: 6d052e0cca3f2712434efd856f733c03011be41c


Parche IPS:
- Tamaño: 159 bytes
- CRC32: E486EEBD
- MD5: f74569acf7d5651e8d8daff387c2bbfd
- SHA-1: 453d47cc4d9a4d96bb9f27dc728bceb0dbf8e4a5


ROM resultante (verificación):
- CRC32: DD4E9200
- MD5: a76f432b484aa5653a3f4256dc7537a0
- SHA-1: 025163f4e4ff8a251e2c72429f2c5543268e6de4


⚠️ El parche está diseñado exclusivamente para la Rev 1 del lanzamiento en EE.UU. y Europa. No es compatible con la Rev 0 ni con la versión japonesa debido a diferencias en el layout del código.

Verificación

El código inyectado se ha testado mediante un intérprete Z80 que procesa los bytes reales del parche:

- Detección de contacto (centro, borde, margen de 1 píxel, esquina): 8/8
- Ausencia de rotura sin contacto (espacio vacío, por encima/debajo):
- Prevención de doble rotura por accionamiento:
- Intercambio de botones (casos a nivel de bit y lectura completa del pad):
- Validación de Round-trip del IPS (aplicar y comparar byte a byte):

Cualquier reporte de errores, pruebas o comentarios técnicos es bienvenido.

¡Saludos!


Habrá que probarlo sobre todo porque tengo tan machacado el juego que yo hace tiempo que jugaba con esos problemas en la memoria muscular de ciertas cosas.

¿Has aprovechado para arreglar la bolsa de dinero y la hamburguesa?

También estaría genial que el juego estuviera traducido.

Hay mas bugs que tiene el juego, en el castillo rojo lo puedes bloquear llendo a la izquierda agachado, en el castillo azul hay fallos de colisiones y puedes morir saltando, a veces la cápsula B no funciona, si pierdes el peticopter en la pantalla y no mueres tu partida acaba si no tienes la suerte de que te pase cerca del final y tienes el palo volador, puedes saltarte el último boss con el palo volador... es que son tantas cosas que incluso siempre he pensado que el juego no está completo, como que la ciudad de radaxian es cortisima. Y luego jamás consiguieron en enorme nivel del primero, todos los demás no me gustan y no siguen la misma jugabilidad...

Un Saludo.
@naxeras Pues sí que está cascado el juego... 😂

Verás, sobre la traducción, ya existen varias al castellano, como las de @wave y @jackic , entre otros, así que no he visto necesario el traducirlo. Tienes los parches aquí y aquí.

En cuanto a todo lo que mencionas, la verdad es que no estoy tan puesto en el juego, precisamente porque siempre me tiró para atrás el puñetazo. No obstante, todo se puede arreglar, es cuestión de ponerse a ello. Aunque acabo de terminar la traducción del Momotaro Katsugeki, al que le he echado más horas que un reloj, y no me apetece demasiado ponerme a pelear con un festival de bugs como el que acabas de mencionar. 😅 Pero lo anoto, en serio.
Gracias por el curro.
¿Los parches de traducción son compatibles con el tuyo?
Estaría genial tener un combo
psicopompo escribió:@naxeras Pues sí que está cascado el juego... 😂

Verás, sobre la traducción, ya existen varias al castellano, como las de @wave y @jackic , entre otros, así que no he visto necesario el traducirlo. Tienes los parches aquí y aquí.

En cuanto a todo lo que mencionas, la verdad es que no estoy tan puesto en el juego, precisamente porque siempre me tiró para atrás el puñetazo. No obstante, todo se puede arreglar, es cuestión de ponerse a ello. Aunque acabo de terminar la traducción del Momotaro Katsugeki, al que le he echado más horas que un reloj, y no me apetece demasiado ponerme a pelear con un festival de bugs como el que acabas de mencionar. 😅 Pero lo anoto, en serio.


Tranquilo sólo puse los bugs porque le he dado mucha caña al juego y por si alguna vez alguien se siente con ganas de arreglarlo claro, normal que no haya interés porque hay mucha mierdecilla en el juego.

¿Esos parches de traducción se pueden usar con tu fix?, los probaré a ver para hacerme la versión definitiva.

Hay gente que ni se dio cuenta del problema del puño, yo la verdad es que esa imagen que has puesto del puño atravesando una caja, roca o cabezas de boses la he visto infinidad de veces siempre supe que eso no estaba bien y que la colision no tenia nada que ver con la animación, si bien es cierto que al final te aprendes el timing del puño que no tiene lag nose bien como explicarlo.

Un Saludo.
GeneralPrukogui escribió:Gracias por el curro.
¿Los parches de traducción son compatibles con el tuyo?
Estaría genial tener un combo

De nada.

@naxeras @GeneralPrukogui Sí, lo acabo de probar con la versión 2.0 de @wave y funciona perfecto. Primero he aplicado el parche de traducción, y luego el mío, pero supongo que dará igual el orden.

naxeras escribió:Hay gente que ni se dio cuenta del problema del puño, yo la verdad es que esa imagen que has puesto del puño atravesando una caja, roca o cabezas de boses la he visto infinidad de veces siempre supe que eso no estaba bien y que la colision no tenia nada que ver con la animación, si bien es cierto que al final te aprendes el timing del puño que no tiene lag nose bien como explicarlo.

La verdad es que a mí siempre me ha chocado que nadie dijera nada, pero ahí ha estado siempre. Supongo que antes lo aceptábamos todo y nos adaptábamos a lo que fuera. En mi caso, no fue así porque al Alex Kidd no le di hasta los comienzos de la emulación, y ahí ya lo vi con otros ojos.
Si no recuerdo mal, si no fixeas el checksum no arrancará en una MS2 real.

En cuanto a mi tradu mejor el blog porque los de romhacking me tienen medio borrado xD
https://traduccioneswave.blogspot.com/2 ... de_11.html
Lamentablemente no será compatible con mi tradu porque usé ese espacio para la rutina de dibujado de acentos en el tile superior.
@wave Yo lo he probado y sí que funciona (en emulador).
psicopompo escribió:@wave Yo lo he probado y sí que funciona (en emulador).

Petará en el ending. Y puede que en la primera tienda.
wave escribió:
psicopompo escribió:@wave Yo lo he probado y sí que funciona (en emulador).

Petará en el ending. Y puede que en la primera tienda.

¿Te importa si le meto mano a tu parche?
psicopompo escribió:
wave escribió:
psicopompo escribió:@wave Yo lo he probado y sí que funciona (en emulador).

Petará en el ending. Y puede que en la primera tienda.

¿Te importa si le meto mano a tu parche?

Si quieres hacer una versión compatible, sin problema.
@wave Sí, es la idea. Luego le echo un vistazo. Gracias. 🤜🏻🤛🏻
Había una herramienta en sms power para generar otro cheksum y meterlo en la rom
12 respuestas