Super Mario Kart - Fullscreen EditionLo que empezó como una idea bastante sencilla —quitar el mapa inferior de la pantalla para tener una vista de carrera mucho más grande— acabó convirtiéndose en uno de esos
hacks en los que cada solución abre tres problemas nuevos.
Y todo esto se ha hecho en apenas unos días con ayuda de la IA. Eso sí:
echándole más horas que un reloj. 😅
La diferencia fundamental con otro
hack que circula por ahí es que aquí no se ha limitado a ocultar lo que había abajo.
La cámara de carrera se ha desplazado y recalculado para aprovechar las 224 líneas completas de la pantalla, acercando la acción y haciendo que el kart, el suelo, los rivales, las sombras, los objetos y las colisiones sigan siendo coherentes con esa nueva perspectiva.
No es simplemente «quitar el mapa de abajo». La cámara cambia de verdad, y todo lo que depende de ella tiene que acompañarla.
Y aquí llegó uno de los puntos de inflexión del proyecto. Al principio estábamos intentando solucionar uno por uno los miles de problemas que aparecían al quitar simplemente el mapa y bajar el personaje a la parte inferior de la pantalla.
Hasta que se me encendió la bombilla: ¿y si aprovechábamos la lógica que el juego ya utilizaba para el Player 2, que colocaba su kart aproximadamente en la posición que necesitábamos, y la reutilizábamos para el Player 1 cuando jugaba en solitario?Aquella idea permitió dejar de pelear contra una buena parte de los problemas desde cero y avanzar muchísimo más deprisa. No resolvía todo, ni mucho menos, pero
nos ahorró una cantidad enorme de trabajo y nos dio una base coherente sobre la que seguir construyendo el hack.
La parte que no se vePara conseguirlo hubo que meterse bastante más abajo de lo que parecía al principio. El juego utiliza el DSP-1 para buena parte de la proyección de la pista, así que no bastaba con mover el sprite de Mario: había que
hacer que la cámara, la posición real del kart y su representación en pantalla siguieran hablando el mismo idioma.
La cámara se acerca progresivamente al comenzar la carrera, en lugar de pegar un salto brusco, y la nueva posición se mantiene también en cosas como la sombra, los efectos, los objetos, los saltos y las colisiones.
Y ahí empezaron a aparecer los cadáveres.
Rivales que atravesaban a Mario, tuberías que parecían no existir, objetos que desaparecían al acercarse demasiado, sprites que al salir por arriba reaparecían por abajo, cabezas de Lakitu asomando donde no tocaba, monedas y efectos que seguían apareciendo 88 píxeles por encima del kart, humo que se había quedado en la posición antigua...
Cada uno de esos fallos obligó a localizar dónde los estaba generando el juego y corregirlo sin romper lo que ya funcionaba.
Incluso hubo que rehacer parte del orden de dibujado y estudiar cómo se construye la OAM para entender por qué determinados rivales podían solaparse mal. Se probaron soluciones que funcionaban aparentemente bien y luego resultaban demasiado costosas para el procesador.
En NTSC el margen de CPU es bastante menor que en PAL y el hack llegó a provocar ralentizaciones reales, así que también hubo que perfilar el código y eliminar trabajo innecesario hasta recuperar la velocidad normal.
Y por supuesto, tocar la pantalla completa significa que el HUD original ya no tiene mucho sentido.
Un HUD nuevo aprovechando el espacioEl contador de coches, las monedas y los dígitos de posición se han recolocado para aprovechar la nueva distribución. También se han adaptado las tablas de tiempos, los puestos finales, los menús de
Retry / End,
Ranked Out,
Game Over y otros elementos que originalmente estaban diseñados pensando en una pantalla partida.
Y aquí ocurrió otra cosa curiosa: algunos elementos que parecían sprites normales resultaron depender de HDMA, ventanas, tablas de color y otros sistemas de la SNES que no tienen absolutamente nada que ver con «mover una imagen unos píxeles».
En otras palabras:
cuanto más se tocaba, más cosas descubríamos que dependían indirectamente de aquel mapa inferior que ya no existía.
¿Y el 2P?Una de las condiciones del
hack era no destrozar el modo para dos jugadores. Después de todo el trabajo realizado sobre la lógica de 1P,
la rama 2P se deja ejecutar con el código original. El
hack utiliza puertas que detectan cuándo se está en 1P y dejan pasar la ROM vanilla en 2P.
Así que, en lugar de intentar rehacer también la pantalla partida, se conserva el funcionamiento original. Las pruebas en bsnes muestran el comportamiento 2P idéntico al de la ROM sin modificar en los escenarios comprobados.
¿Y el mapa y el retrovisor?Se llegó a investigar y prototipar también el conmutador de Select para recuperar esas vistas, y técnicamente se puede hacer. El problema es que el mapa y el retrovisor del juego original no son simplemente dos imágenes que puedas colocar en una esquina: utilizan Mode 7, HDMA y una serie de cálculos que estaban pensados para dividir la pantalla en dos.
Después de ver hasta dónde había que llevar el apaño para conservarlos, decidí que
esta versión debía apostar por una pantalla limpia y por una vista de carrera completa, en lugar de volver a llenar el espacio recuperado con elementos heredados de la distribución antigua.
Y, sinceramente, creo que queda bastante mejor así.
En resumenHa acabado siendo bastante más que un simple
hack para quitar un mapa. Ha habido ingeniería inversa, instrumentación de la CPU y del PPU, análisis de OAM y HDMA, pruebas en estados reproducibles, regresiones constantes, perfilado de rendimiento y un montón de problemas que no aparecían hasta después de arreglar el anterior.
Y sí, algunas de las cosas que parecía que iban a ser fáciles resultaron ser una puñetera trampa. 😅
El resultado es una versión de Super Mario Kart en 1P que utiliza las 224 líneas completas de la pantalla, con una cámara más cercana, el HUD recolocado y toda la lógica necesaria para que kart, pista, rivales, objetos, efectos y colisiones sigan funcionando con la nueva perspectiva.DESCARGASuper Mario Kart - Fullscreen Edition (v1.0) (by Psicopompo).zip
Enlaces de interés:
-
Ficha oficial en RomHacking.net-
Repositorio en GitHubDatos de la versión- Solo versión USA (224 líneas / 60 Hz).
- ROM limpia: CRC32 CD80DB86.
- MD5: 7f25ce5a283d902694c52fb1152fa61a
- SHA-1: 47e103d8398cf5b7cbb42b95df3a3c270691163b
- Parches IPS y BPS. Recomiendo BPS.
- Probado en bsnes y RetroArch.
- Hardware real, sin probar.
- En el título aparece una pequeña línea Fullscreen Edition · Psicopompo bajo el copyright.
ROM resultante- CRC32: 1fa9c82b
- MD5: fa18bde9a9184ae268e0419273f11f73
- SHA-1: a4d02ea162fae99c165aacdb1e6df0f2ffebac87
Si encontráis algún fallo que se me haya escapado, mandadme un save state y lo miro.