psicopompo escribió: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 problemaLa 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.

Esto dificultaba romper bloques en pleno ascenso o descenso de un salto, así como en las esquinas.
Qué hace el parche1. 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.
DescargaAlexKidd in Miracle World - Improved Punch Collision & Swapped Buttons v1.0 (by Psicopompo).zip
Enlaces de interés:
-
Ficha oficial en RomHacking.net-
Repositorio en GitHubHashesROM 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ónEl 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!