[Hack] Super Mario Kart - Fullscreen Edition v3.1.1] SA-1, Minimapa, Nueva Cámara

1, 2, 3, 4, 5…7
Imagen


Super Mario Kart – Fullscreen Edition v3.1.1



Lo 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.

La diferencia fundamental con otros hacks que se limitan a ocultar el mapa es que aquí no se ha tapado simplemente 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.

La v2.0 llevó esa idea un paso más allá: incorporó una cámara de horizonte amplio, con una vista más alta y abierta, un horizonte propio y los decorados adaptados para aprovechar la nueva perspectiva. Posteriormente, la v3.0 añadió una segunda cámara con una perspectiva diferente, además de un minimapa flotante y la migración del proyecto al chip SA-1.

Ahora es posible alternar entre las dos cámaras durante la carrera utilizando SELECT o X.

Imagen Imagen


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.

Imagen Imagen


La parte que no se ve

Para conseguirlo hubo que meterse bastante más abajo de lo que parecía al principio.

Aquí hay un matiz importante sobre lo de «acercar la cámara». Al principio, después de ampliar la superficie de Mode 7 para llenar las 224 líneas, la parrilla de salida quedaba demasiado adelantada respecto a Mario: el kart estaba en la posición que queríamos, pero sus rivales y la marca pintada en el suelo se habían quedado lejos, como si Mario estuviera empezando la carrera varios metros por detrás.

La solución no era seguir desplazando al personaje, sino hacer lo contrario: acercar el escenario hacia él. Es el mismo efecto que se produce cuando aceleras en el juego: el kart permanece en su posición y es la pista la que avanza hacia él. Así conseguimos que la parrilla, los rivales y todo lo que rodea al kart vuelvan a ocupar la posición que les corresponde respecto a él, pero aprovechando la nueva pantalla completa.

A partir de ahí es cuando hubo que conseguir que esa nueva referencia de cámara fuese coherente con todo lo demás. 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 posición real del kart, el suelo, la sombra, los rivales, los objetos y las colisiones siguieran hablando el mismo idioma.

Imagen Imagen


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...

Imagen Imagen

Finales japoneses sin censura.

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, así que también hubo que perfilar el código y eliminar trabajo innecesario.

La v2.0 incluyó además una resincronización del attract mode y una reducción de ciclos de CPU que no alteraba el resultado visual. Las pruebas comparativas mostraron que el tartamudeo que aparece en determinados giros duros de Bowser Castle también se produce en la ROM original: no era una ralentización nueva introducida por aquella versión.

Con la v3.0 llegó otro cambio importante: el proyecto se migró al chip SA-1, incorporando una arquitectura mejorada para el procesamiento y un mayor margen de rendimiento.

Y, por supuesto, tocar la pantalla completa significa que el HUD original ya no tiene mucho sentido.

Imagen Imagen


Un HUD nuevo aprovechando el espacio

El contador de vidas, 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.

Imagen Imagen


¿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 original en 2P.

Así que, en lugar de intentar rehacer también la pantalla partida, se conserva el funcionamiento original. Las pruebas comparativas 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.

El mapa y el retrovisor originales siguen ocultos durante las carreras a pantalla completa, mientras que el mapa de resultados de Time Trial sí se muestra cuando corresponde.

La v3.0 incorporó una solución diferente: un minimapa flotante que muestra el trazado del circuito y las posiciones de los corredores, sin recuperar el mapa original ni ocupar la parte inferior de la pantalla.

Imagen Imagen


La cámara de horizonte amplio

La principal novedad de la v2.0 fue una segunda cámara que ofrecía una perspectiva más alta y abierta, con su propio horizonte. Se incorporó como vista predeterminada en los 20 circuitos y también se utilizó en los momentos de presentación y transición de la carrera, incluida la intro, el acercamiento a la parrilla y el giro de cámara al terminar.

No se trata únicamente de cambiar la posición vertical de la vista. Los fondos y los elementos del decorado también tienen que encajar con el nuevo encuadre.

Por eso se adaptaron los 20 circuitos: los cielos se extendieron para evitar bandas negras y saltos de color, las zonas añadidas continúan el tono de la franja de degradado adyacente, las nubes de Koopa Beach aparecen en las tres alturas desde la parrilla de salida y los pilares de Ghost Valley se recortaron para evitar que se dibujasen fuera de los límites previstos.

Imagen

Las dos perspectivas de carrera


La v3.0 añadió una segunda cámara con una perspectiva diferente, complementando la vista de pantalla completa existente.

Ahora se puede cambiar entre ambas durante la carrera utilizando SELECT o X. El botón Y sigue funcionando como freno. No hay que entrar en ningún menú ni reiniciar la carrera. Cada pulsación alterna entre las dos vistas; en los menús los botones de cámara no tienen efecto.

El minimapa flotante

Una de las novedades más importantes de la v3.0 es la incorporación de un minimapa durante las carreras a pantalla completa.

Era una de las características que más se habían solicitado. Al principio parecía una tarea bastante complicada, pero finalmente se decidió abordar el problema de otra manera: diseñar los mapas de los circuitos individualmente, desde cero, en lugar de intentar reutilizar directamente los gráficos originales.

Cada uno de los trazados se ha dibujado y adaptado manualmente, tomando como referencia mapas de GBA y otras fuentes. El resultado es un minimapa flotante que permite reconocer la forma del circuito y seguir las posiciones de los corredores sin recuperar el mapa inferior original.

Imagen Imagen


El trabajo de ajuste y corrección de los mapas ha sido una parte importante del desarrollo. No basta con que el trazado tenga una forma reconocible: también tiene que representar correctamente cada circuito y mostrar las posiciones de los participantes de forma coherente.

Glitches y correcciones gráficas

A lo largo de las distintas versiones se han corregido numerosos problemas visuales. Entre ellos:

  • Cara duplicada del jugador al ganar: desaparece el resto de cara que podía quedarse dibujado durante la cámara de meta.
  • Parpadeo de montañas durante la carga: corregido.
  • Ghost Valley: corrección de las líneas negras y azules intermitentes.
  • Mancha de aceite: la detección de contacto utiliza el umbral nativo del juego, evitando resbalones falsos.
  • Letrero ROUND: vuelve a estar centrado en la vista nueva.
  • Attract mode: las demos se han resincronizado para que los rivales aparezcan correctamente al arrancar en frío.
  • Fondos y cielos: correcciones de degradados, bandas negras y artefactos gráficos en diferentes circuitos.
  • Objetos y elementos del escenario: correcciones de problemas de representación y dibujado.

La v3.0 también incorporó correcciones específicas para los problemas gráficos detectados en flashcarts, incluidos los artefactos en el cielo y el parpadeo de las montañas.

Correcciones de Time Trial en la v3.1 y v3.1.1

Las versiones posteriores a la v3.0 han permitido corregir varios detalles que habían quedado pendientes, especialmente en Time Trial.

  • Menú CHANGE COURSE / RETRY: se ha corregido su posición cuando el jugador abandona una carrera.
  • Tamaño del kart después de cruzar la meta: cuando se termina una vuelta sin establecer un récord, el kart vuelve a alejarse con el tamaño correcto, como en el juego original. Anteriormente conservaba parámetros de la perspectiva a pantalla completa y aparecía demasiado pequeño.
  • Fantasma de Time Trial: se ha corregido su posición vertical para que coincida con la del kart del jugador. Ambos utilizan ahora la misma proyección, tanto con la cámara 1 como con la cámara 2.
  • Mapa inferior de resultados: se han corregido las líneas desplazadas que podían aparecer después de cruzar la meta, incluso al reiniciar mediante RETRY. También se limpian los datos residuales que podían conservarse de sesiones anteriores.
  • Tamaño del kart con la segunda cámara: la v3.1 había corregido el tamaño después de terminar una vuelta sin récord, pero el problema todavía persistía con la cámara 2. La v3.1.1 completa la corrección para ambas cámaras.

Se conserva de las versiones anteriores

Además de las novedades y correcciones descritas, se mantienen las mejoras incorporadas durante el desarrollo:

  • Resultados de Time Trial: se muestran correctamente todas las vueltas, sus resaltados, TOTAL y el mapa con BEST 5 / BEST LAP.
  • Tamaño de los rivales: progresión geométrica corregida, con un factor aproximado de 1,3703 en las franjas T1–T10 y los once dibujos originales intactos.
  • Parrilla de salida: corrección lateral desde el comienzo del acercamiento, conservando la intro, el zoom y la órbita.
  • Sombras de Lakitu: corregidas en pantalla completa y en las dos vistas del modo para dos jugadores.
  • Fondos de los circuitos: adaptación de los decorados a las diferentes perspectivas de cámara.
  • Attract mode: resincronización de las demostraciones y correcciones de su comportamiento.

Sobre las ralentizaciones

Durante el desarrollo aparecieron ralentizaciones que obligaron a perfilar y optimizar el código. Antes de empaquetar la v2.0, se comprobó también si el tartamudeo que se aprecia en ciertos giros duros a alta velocidad era consecuencia del hack o un comportamiento que ya existía en el juego original.

Las pruebas se realizaron en bsnes, con estados reproducibles y maniobras guionizadas.

En Bowser Castle 1, con una sesión de Time Trial arrancada en frío, la ROM original USA, la v1.5 y la v2.0 registraron exactamente los mismos tics de reloj: 11640 de 12000. Los tiempos parciales y finales y la trayectoria también coincidieron.

En Bowser Castle 3, utilizando un estado de carrera real, la v1.5 y la v2.0 registraron igualmente los mismos tics: 2993 de 3000, con idéntico tiempo final.

La conclusión de aquellas pruebas fue que las ralentizaciones observadas en esas maniobras eran un comportamiento nativo del juego, no una regresión introducida por la v2.0. Por ese motivo, no se modificaron la planificación de la IA ni las físicas para intentar ocultarlo.

La posterior migración al SA-1 de la v3.0 supuso una mejora adicional del rendimiento.

Pruebas y compatibilidad

El hack ha pasado por numerosas pruebas de regresión mediante emulación, principalmente en bsnes y RetroArch.

Entre las comprobaciones realizadas durante el desarrollo:

  • Comparación de 2950 fotogramas del attract mode arrancado en frío frente a la ROM original, con resultado idéntico salvo la firma del hack.
  • 27 estados de carrera reales, con 120 fotogramas comprobados por estado, sin diferencias de renderizado en las comparaciones realizadas.
  • OAM de las cámaras de meta idéntica a la de la versión aprobada.
  • Baterías de regresión de miles de fotogramas en los circuitos protegidos.
  • Comparaciones de rendimiento en Bowser Castle 1 y Bowser Castle 3 frente a las versiones anteriores y, cuando correspondía, frente a la ROM original.
  • Comprobaciones de ambas cámaras, menús, transiciones, Time Trial, modo para dos jugadores y demostraciones del attract mode.
  • Verificación de las correcciones de Time Trial de la v3.1 y v3.1.1 frente a la v3.1 y al juego original.

Compatibilidad con hardware:

La compatibilidad con FXPAK Pro y SD2SNES fue probada por jugadores durante la v3.0.

La corrección de la v3.1.1 se ha verificado mediante comparación con la v3.1 y la ROM original, utilizando ambas cámaras.

Si encontráis algún fallo, indicad el emulador y el core utilizados, el modo de juego y, si es posible, adjuntad un save state reproducible.

DESCARGA


El paquete contiene:

  • Parche BPS.
  • Parche IPS.
  • LÉEME.txt.
  • README.txt.
  • Registro de cambios en español.
  • Registro de cambios en inglés.

No incluye la ROM original.

Instalación y datos de la ROM

Aplicad uno solo de los dos parches, IPS o BPS, sobre una ROM USA original limpia y sin cabecera.

  • ROM de origen: Super Mario Kart (USA).
  • Tamaño original: 524.288 bytes.
  • CRC32 original: CD80DB86.
  • Parche recomendado: BPS, porque permite comprobar que la ROM de origen es la correcta antes de aplicar los cambios.

Resultado esperado después de aplicar el parche:

  • Tamaño: 4.194.304 bytes.
  • CRC32: EA313F1C.
  • SHA-1: 26A746D7177E948409576AA85BF716968F494F0E.
  • Checksum interno SNES: 64CB.
  • Complemento: 9B34.

Verificación de los parches:

  • BPS: verificado contra la ROM USA original limpia.
  • IPS: generado a partir de la misma ROM de origen y verificado byte a byte frente a la ROM final mediante un decodificador propio. La compatibilidad con herramientas IPS de terceros todavía no se ha probado de forma independiente.

Importante: los parches son acumulativos y deben aplicarse directamente sobre la ROM original. No deben aplicarse encima de versiones anteriores de Fullscreen Edition.

Las versiones PAL no están soportadas.

Datos de la versión

  • Título: Super Mario Kart – Fullscreen Edition.
  • Versión: 3.1.1.
  • Autor: Psicopompo.
  • Plataforma: Super Nintendo.
  • Región: USA / NTSC (60 Hz).
  • Categoría: Graphics / Gameplay.
  • Chip: SA-1.
  • Modo de un jugador: pantalla completa de 224 líneas.
  • Cámaras: dos perspectivas seleccionables durante la carrera.
  • Minimapa: flotante, con trazado y posiciones de los corredores.
  • Modo de dos jugadores: conserva la pantalla partida original.
  • Botones de cámara: SELECT y X.
  • Freno: Y.
  • Parches disponibles: BPS e IPS.
  • Flashcarts probados por jugadores: FXPAK Pro y SD2SNES.

Super Mario Kart © Nintendo. Proyecto fan no oficial, sin afiliación con Nintendo. No se incluye ni distribuye la ROM original.
Olé!
Lo has conseguido.
Enhorabuena. Habrá que probarlo.
Este debes de publicarlo en sitios importantes de romhacking, te aseguro que hay muchas personas en el mundo a quienes les interesará mucho este hack.
Guapísimo! Gracias por el currazo. A ver si alguien puede probarlo en una snes original [beer]
¡He estado jugándolo un rato y te ha quedado genial! la otra versión que había de hace unos años estaba bien pero el coche estaba muy arriba, ahora SI esta perfecto tío, que bien ha quedado!
@heinki Gracias. Me alegro de que lo disfrutes. El otro hack se limitaba a quitar el mapa, nada más, pero en su momento hizo su papel.
Mis aplausos, estoy impresionado. Has hecho lo que creo que Nintendo debería haber hecho en su día y que hasta el día de hoy ha sido imposible hacer. Más aplausos.
Que pasada de hack, ojalá lo hubiera tenido de crío XD. Muchas gracias [beer]

Edito para confirmar que funciona bien en una consola K36 [oki] .
se agradece todo este gran trabajo , hace años que buscaba esta modificacion de mario kart en pantalla completa pero nunca encontre esta modificacion asta oy , lo e probado en una super famicom con un everdrive chino version 3.0 que soporta el chip dsp y en un televisor crt triniton funciona bien , lo unico que e notado 2 pixeles blancos muy pequeños que salen en la carrera pero tampoco tiene inportacia .
tendre que jugar mas para saber si estos pixeles solo salen en la primera carrera o en todo el juego .

un juego que me gustaria ver algun dia seria Street Fighter 2 a pantalla completa sin las barras negras como en la recreativa original , estaria buenisimo verlo , gracias y un saludo .
@baque @Waldo64 @Xfactor Gracias a los tres. 🙂🙃

@baque Si puedes darme más detalles, lo miro. ¿Te sale en emulador? Yo he usado BSnes durante todo el proyecto, cambiando de vez en cuando a algún otro. Probaré con Mesen, que suele ser más puñetero.

EDITO: Nada, he probado con Mesen y con Snes9x, y en ambos también se correctamente. Si alguien más ve ese par de píxeles en Everdrive, ya sabe.
@psicopompo lo estaba probando con el FX pak pro no hubo ningún problema, lo único que vi fue ese par de pixeles en blanco , por lo demás perfecto 👍
@Snes Pues, ya te digo que no veo nada en ningún emulador, y no dudo que ese par de píxeles te aparezcan con el FX Pak Pro, pero si no logro reproducirlo, no puedo solucionarlo. Si puedes, la próxima vez que juegues, fíjate en dónde salen exactamente, si aparecen ya cargados en la carrera o si se ven un poco antes o después. Cualquier cosa puede ser útil, aunque parezca insignificante. Y una foto de la pantalla, también. 👍🏻
@psicopompo https://imgur.com/a/Rr4xFBm . Aquí tienes una foto esos dos puntos blancos que salen al lado derecho paralelos con el (Yes), siempre aparecen en las pistas en la carrera, no apárese en el menú, es a la hora de competir y aparecen en todas las pistas del primer circuito que fue el que pude probar.
Muchas gracias @psicopompo un gran trabajo Lo acabo de probar una snes usa con el sd2snes y va muy bien:

Equipos utilizados:

snes americana
sd2snes
tv sony trinitron

Al jugar varias vueltas, encuentro que lo que dice @Snes es verdad, el juego muestra un par de puntos que titilan continuamente.

Ojo, no afecta en nada y para darme cuenta lo tuve que buscar, pero si que estaba ahí, dejo capturas:



Imagen
Imagen


En la captura parece un solo pixel pero como titilan no pude fotografiar a los dos juntos.

Pero como digo no afecta a nada del juego y no fue hasta que snes lo mencionó que lo vi.
@ChepoXX @Snes Gracias a los dos. Voy a ver si lo cazo. 👍🏻
@psicopompo gracias a ti por este gran hack, excelente trabajo 👍
Actualizando el parche...
@ChepoXX en mi caso de momento solo lo he probado en snes9x, me queda pendiente de usar en hard original o bsnes/higan. A ti te falla el pillar los cuadros de objetos al hacer un salto para esquivar una barra de salto?

Me explico, en el circuito de la casa fantasma de la copa champiñón, al intentar pillar esos cuadros a los laterales que tienen las barras de salto, hay que usar L/R para evitarlas y poder pillar esos cuadros de objeto, en mi caso no ha sido posible al ir corriendo y en algún otro circuito me paso igual que al usar para derrape aún estando encima de los cuadros no los pilla y era por descartar si es del emulador en sí más que nada.

Lo poco que lo pude probar (me pasé las copas Champi en 50cc y 100cc)

Por cierto @psicopompo , mola mucho el hack, se hace un tanto extraño al principio para lo que estamos acostumbrados pero se termina uno haciendo bien al tema [beer]
@yuragalo Luego te lo miro. Ese tipo de cosas muy concretas es lo que esperaba que reportaran, porque siempre se te escapa algo. 👍🏻
@psicopompo gracias compa, si puedo probaré mañana también en bsnes/higan y/o consola con flashcart.

Pudiera ser del emulador, que probé un poco con el super zsnes y ahí ya el despiporre es curioso, pero eso seguro que es el emulador por eso lo descarté directamente.
@psicopompo perfecto problema resuelto
Nota: el último parche se tiene que aplicar encima de el primer parche, para arreglar el problema de los pixeles en blanco en el hadware real.
@Snes @yuragalo Gracias a los dos. El parche lo voy a borrar del mensaje anterior y subiré uno que se aplique directamente a lo rom USA. Pero antes voy a ver si doy con el problema de Yuragalo y lo soluciono también. Además quiero bajar un poco la tabla de resultados tras la carrera.
@psicopompo una partida rápida que he echado en bsnes, hace lo mismo, para poder pillar esos cuadros hay que saltar bastante antes sobre todo cuando vas con velocidad (hay que saltar lo antes posible y quedar a ras de entrada de la barra de salto pero sin tocarla), cosa que en vanilla no (en cuanto pisaras encima lo pillabas) en este caso tienes que haber tocado antes pista porque si caes encima tocando cuadro no lo pillas.

Mas cosas que he notado:

- Algunas ralentizaciones (sobre todo cuando estás en medio del pelotón pero cuando no hay tanto rival también alguna que otra) aunque supongo es normal y no es nada exagerado aunque se note algo.

- Lakitu no hace la animación completa cuando te recoge del vacío (la parte final que te cobra el par de monedas)

- Algunos choques contra diferentes muros de distintos circuitos como que se hace antes de llegar realmente (como un cuadro de distancia de los del borde del circuito fantasma aproximadamente), como si la posición del corredor no fuera la misma que en vanilla (no sabría como explicarlo bien)
Donde más lo noto es en el circuito fantasma 1 que es el que más he probado hasta ahora.

- Con las caídas al vacío he visto algo similar pero nuse si es la animación debido a la inercia del corredor que aunque frenes caes sí o sí y por ello se ve así la animación (como si cayeras antes de tiempo habiendo borde de pista aparentemente) o es como por la posición del mismo como intento explicar en el caso anterior.

También en castillo fantasma 1 por el momento esto de las caídas que comento por lo que he podido probar.

Mañana si eso sigo probando precisamente estos casos que me han surgido espontáneamente
PARCHE ACTUALIZADO A LA VERSIÓN 1.2

@yuragalo

Gracias por los reportes. Ya está disponible la versión 1.2, que corrige lo que comentabas:

  • Píxeles blancos: corregidos (ya lo estaban desde la 1.1; la corrección la confirmó @Snes en consola real). ✅
  • Lakitu: el rescate tras caer de la pista funciona otra vez en pantalla completa. Lakitu entra en pantalla, recoge el kart, lo devuelve a la pista y se va con las monedas, como en el juego original. ✅
    Causa: el script de Lakitu espera a que su coordenada Y alcance ciertos valores, pensados para el rango de pantalla original. Con la vista ampliada su trayectoria pasa por valores negativos y esas esperas (y la de la moneda) no se cumplían. Se han adaptado las comprobaciones sin cambiar su velocidad ni su secuencia.
  • Colisiones con muros: antes los choques con muros, bordes y vacíos saltaban demasiado pronto; ahora ocurren cuando el kart realmente los toca. ✅
    Causa: el punto del suelo que el juego usa como posición del kart caía unas 37 filas de pantalla por encima de sus pies (en el juego original, 6). Se ha realineado la proyección del suelo con la posición del kart en pantalla, y ahora el punto está justo bajo él.

Sobre las ralentizaciones: hemos perfilado el código ciclo a ciclo. En la escena más pesada (el rescate de Lakitu) la lógica llegaba a consumir más tiempo del que dura un fotograma (≈358k de los ≈357k ciclos de reloj disponibles), con un 18 % de fotogramas con lag. La causa principal era una comprobación (¿estamos en 1P a pantalla completa?) que se ejecutaba entre 40 y 55 veces por fotograma desde las rutinas de dibujo de sprites. Ahora su resultado se calcula una sola vez por fotograma y las rutinas más llamadas lo leen directamente. Resultado: el rescate de Lakitu baja a prácticamente 0 fotogramas con lag. En conducción normal, en la salida con los 8 karts juntos y en una carrera completa en Donut Plains no hemos medido lag, con entre un 17 % y un 22 % de CPU libre.

Cada cambio se ha comparado fotograma a fotograma con la versión anterior en más de veinte estados de partida.

Si ves algo raro en algún circuito, lo mejor es un save state justo antes del problema, para poder reproducirlo.
psicopompo escribió:PARCHE ACTUALIZADO A LA VERSIÓN 1.2

@yuragalo

Gracias por los reportes. Ya está disponible la versión 1.2, que corrige lo que comentabas:

  • Píxeles blancos: corregidos (ya lo estaban desde la 1.1; la corrección la confirmó @Snes en consola real). ✅
  • Lakitu: el rescate tras caer de la pista funciona otra vez en pantalla completa. Lakitu entra en pantalla, recoge el kart, lo devuelve a la pista y se va con las monedas, como en el juego original. ✅
    Causa: el script de Lakitu espera a que su coordenada Y alcance ciertos valores, pensados para el rango de pantalla original. Con la vista ampliada su trayectoria pasa por valores negativos y esas esperas (y la de la moneda) no se cumplían. Se han adaptado las comprobaciones sin cambiar su velocidad ni su secuencia.
  • Colisiones con muros: antes los choques con muros, bordes y vacíos saltaban demasiado pronto; ahora ocurren cuando el kart realmente los toca. ✅
    Causa: el punto del suelo que el juego usa como posición del kart caía unas 37 filas de pantalla por encima de sus pies (en el juego original, 6). Se ha realineado la proyección del suelo con la posición del kart en pantalla, y ahora el punto está justo bajo él.

Sobre las ralentizaciones: hemos perfilado el código ciclo a ciclo. En la escena más pesada (el rescate de Lakitu) la lógica llegaba a consumir más tiempo del que dura un fotograma (≈358k de los ≈357k ciclos de reloj disponibles), con un 18 % de fotogramas con lag. La causa principal era una comprobación (¿estamos en 1P a pantalla completa?) que se ejecutaba entre 40 y 55 veces por fotograma desde las rutinas de dibujo de sprites. Ahora su resultado se calcula una sola vez por fotograma y las rutinas más llamadas lo leen directamente. Resultado: el rescate de Lakitu baja a prácticamente 0 fotogramas con lag. En conducción normal, en la salida con los 8 karts juntos y en una carrera completa en Donut Plains no hemos medido lag, con entre un 17 % y un 22 % de CPU libre.

Cada cambio se ha comparado fotograma a fotograma con la versión anterior en más de veinte estados de partida.

Si ves algo raro en algún circuito, lo mejor es un save state justo antes del problema, para poder reproducirlo.



Muchas gracias por la nueva versión. Mas tarde probaré en la consola y solo una pregunta:

¿A que hora duermes? saludos
Muchas gracias por este trabajo. Tiene mucha importancia y desde luego esto lo va a disfrutar muchísima gente. Además es cojonudo leer las explicaciones de lo que pasa en esas entrañas de silicio. [tadoramo]
psicopompo escribió:@baque @Waldo64 @Xfactor Gracias a los tres. 🙂🙃

@baque Si puedes darme más detalles, lo miro. ¿Te sale en emulador? Yo he usado BSnes durante todo el proyecto, cambiando de vez en cuando a algún otro. Probaré con Mesen, que suele ser más puñetero.

EDITO: Nada, he probado con Mesen y con Snes9x, y en ambos también se correctamente. Si alguien más ve ese par de píxeles en Everdrive, ya sabe.


en Snes9x 1.63 parece funcionar ok , los pixeles blancos se me ven en
consola super famicom y everdrive chino gracias.
@psicopompo Y usar el codigo descompilado y compilado ?
https://recomp.fyi/game/super-mario-kart-snes

Esta herramienta descompila automaticamente el juego, no tardaran en salir miles de juegos descompilados
https://github.com/sp00nznet/snesrecomp

Gracias por tu trabajo.
Gracias por tu trabajo. Con qué velocidad nos has proporcionado la actualización, @psicopompo . Le seguiré dando caña al juego.
que guay no habia visto la actualizacion 1.2 la e probado pasando la primera copa tanto en emulador como en super famicom y funciona perfecto lo agradezco un monton y que rapido se a solucinado los pixeles blancos , asi lo tenian que haber echo los de Noentiendo en su dia .
un pasote ,enhorabuena porque ha quedado de lujo
psicopompo escribió:PARCHE ACTUALIZADO A LA VERSIÓN 1.2

@yuragalo

Gracias por los reportes. Ya está disponible la versión 1.2, que corrige lo que comentabas:

  • Píxeles blancos: corregidos (ya lo estaban desde la 1.1; la corrección la confirmó @Snes en consola real). ✅
  • Lakitu: el rescate tras caer de la pista funciona otra vez en pantalla completa. Lakitu entra en pantalla, recoge el kart, lo devuelve a la pista y se va con las monedas, como en el juego original. ✅
    Causa: el script de Lakitu espera a que su coordenada Y alcance ciertos valores, pensados para el rango de pantalla original. Con la vista ampliada su trayectoria pasa por valores negativos y esas esperas (y la de la moneda) no se cumplían. Se han adaptado las comprobaciones sin cambiar su velocidad ni su secuencia.
  • Colisiones con muros: antes los choques con muros, bordes y vacíos saltaban demasiado pronto; ahora ocurren cuando el kart realmente los toca. ✅
    Causa: el punto del suelo que el juego usa como posición del kart caía unas 37 filas de pantalla por encima de sus pies (en el juego original, 6). Se ha realineado la proyección del suelo con la posición del kart en pantalla, y ahora el punto está justo bajo él.

Sobre las ralentizaciones: hemos perfilado el código ciclo a ciclo. En la escena más pesada (el rescate de Lakitu) la lógica llegaba a consumir más tiempo del que dura un fotograma (≈358k de los ≈357k ciclos de reloj disponibles), con un 18 % de fotogramas con lag. La causa principal era una comprobación (¿estamos en 1P a pantalla completa?) que se ejecutaba entre 40 y 55 veces por fotograma desde las rutinas de dibujo de sprites. Ahora su resultado se calcula una sola vez por fotograma y las rutinas más llamadas lo leen directamente. Resultado: el rescate de Lakitu baja a prácticamente 0 fotogramas con lag. En conducción normal, en la salida con los 8 karts juntos y en una carrera completa en Donut Plains no hemos medido lag, con entre un 17 % y un 22 % de CPU libre.

Cada cambio se ha comparado fotograma a fotograma con la versión anterior en más de veinte estados de partida.

Si ves algo raro en algún circuito, lo mejor es un save state justo antes del problema, para poder reproducirlo.


Que buen trabajo, que GRAN aporte [beer]
Huy! Como mola esto!

Pedazo de curro, felicidades!
@psicopompo joer vaya curarda compa :O , luego pruebo un rato y hago de nuevo el cabra a ver si veo algo extraño [sonrisa]
Este hack se merece buen vicio [beer] Tomo nota con el guardado de estados para facilitar el tema ;)

PD: en principio lo que he probado respecto a la version 1.0, todo corregido y guay. Sigue habiendo algunas ralentizaciones pero eso ya no sé si será el emulador y que lo veo normal por el gran cambio de visión respecto a vanilla (sin embargo el emulador siempre marca 60 frames rocosos). Tengo que probar en consola con flashcart para asegurarme.

Lo único que he visto así un poco raro es que al remolcarte lakitu, sale por la parte de abajo de la pantalla un pelín durante apenas un segundo o menos antes de hacer la animación de siempre que te remuelca hasta la pista y te cobra las monedas. Por lo demás todo guay [beer]
@yuragalo ¿Dónde notas las ralentizaciones? Yo lo veo todo a 60 fps. Si me pasas un state, casi que mejor que decirme cómo reproducirlo, porque los criterios a veces difieren un poco. Igualmente, si me lo pasas lo miro.

Sobre la aparición de Lakitu por debajo lo he soluciona ya varias veces, pero Lakitu está hasta en la sopa, así que alguno de los últimos cambios puede que lo haya vuelto a llamar. 😂 Luego lo soluciono.

EDITO: He probado todos los escenarios con agua y magma del juego, todos, y en ninguno sucede lo de Lakitu. Supongo que te pasa en hardware real. Lo tendré que solucionar a ciegas, como lo de los píxeles blancos. Pero creo que sé por dónde van los tiros.
@psicopompo sobre todo cuando hay rivales de por medio, entre el pelotón y a veces cuando hay alguno que otro rondando entre adelantamientos. No es muy molesto ni afecta apenas pero en mi caso lo noto; esto lo digo a ojo pero voy a probar con la rom USA vanilla porque el que tenía trillado era el PAL que es con el que me crié, a ver si en vanilla también pasaba y estoy aquí comentando como un bocachancla [carcajad]

De momento estoy probando en bsnes, que lo mismo es del emulador aún marcando 60 frames

PD: pues en Vanilla también noto, quizá un un pelín menos en pelotón que en el hack, pero ahí están (aunque ya no se si describirlo como ralentización o "salto de cuadros" más bien...) En PAL no recuerdo eso y es cierto que de versiones de juegos PAL a NTSC se notan esas cosas así que debe ser eso compa, ni te rayes.
Me queda probar en consola ambas versiones a ver que tal.
@yuragalo ¿Cómo has probado el parche? Es que yo me he tirado de cabeza al agua y al magma en todos los escenarios, como te comentaba en el mensaje anterior, y no me sale Lakitu por abajo. He probado Bsnes, Bsnes HD, Snes9X y Mesen.

Respecto a las ralentizaciones, vaya ojo. Entre un pelín y un pelín más, yo no podría notar ninguna diferencia. Pero, oye, no dudo tú lo notes. 😆 Curiosamente, en Romhacking le han hecho una pequeña review al parche, y el usuario menciona que lo nota incluso más rápido que el original en la primera copa, pero cada cual lo ve de un modo. Lo que es seguro es que aunque ponga 60 fps, esto suele ser un problema de sincronización de vídeo del emulador.
@psicopompo tirandome o cayendome en ghost valley 1, en boswer castle 1 no he visto a lakitu haciendo eso. En agua no caigo ahora, probaré también.

Ahora estoy en snes9x noto solo cuando hay mucho elemento en pantalla en bowser castle 1 y derrapando en curvas también en peloton y con mucho elemento en pantalla, pero en general se nota que va bien y fluido, no como antes en el bsnes que estaba usando así que no me fio del ojo y sospecho de la emulación como dices, sincronización del video o lo que sea como bien dices. Corriendo normal va fluidísimo y fino filipino XD

PD: es la caída de los ghost valley, en agua y lava todo ok. Probando todos los circuitos en time trial para ahorrar tiempo, que suelo ser de Grand Prix [carcajad]

PD2: confirmado, son las caídas de los valles fantasma y el rainbow road que también tiene caída al vacío.
En agua y lava todo guay. Los topos no hacen nada extraño, las colisiones con los peces bien, las piedras te chocas y aplastan bien... Lo que me ha dado por probar así haciendo el tontaco [sonrisa]

Ahora ya sí solo me queda probar en consola porque no me fío de las supuestas "ralentizaciones" emulando...

Has hecho realidad un sueño húmedo de muchos de nosotros con este hack compa [beer]
@yuragalo Voy a probar a tirarme al vacío en esos escenarios, que se me había pasado. Y sobre las ralentizaciones, vamos a salir de dudas porque la IA ahora mismo está comparando la versión parcheada contra la versión USA vanilla en los inicios con todo el pelotón en varios escenarios.

EDITO: Tienes razón, sale Lakitu por abajo, pero sólo en Ghost Valley 1 (y supongo que en en todos los Ghost Valley). Ahora lo soluciono. 👍🏻
@psicopompo sí, es cierto que da mayor sensación de velocidad el juego (al estilo F-Zero) además también le da una segunda vida con el nuevo y mayor campo de visión, sobre todo al pillar curvas para derrapar y apurar aún más si cabe [sonrisa]

Para alguien que le gusta hacer el "cabra" rateando en los caminos y circuitos como hago en el F-Zero, me declaro super fan del hack sin duda [looco] Sobre todo con la pluma que se puede hacer muchas cositas y está muy infravalorada, que por cierto tengo que probar cuando me salga hacer saltos fuera del circuito a ver como se comporta XD
@yuragalo Gracias. Estáis siendo de mucha ayuda. 🤜🏻🤛🏻

El problema de Lakitu ya está solucionado, y de rebote, otro similar que ocurría en el modo de dos jugadores.

La velocidad respecto al original son prácticamente iguales en las pruebas que ha hecho la IA, aunque no a puesto a prueba todos los circuitos ni todas las situaciones. Las diferencias en dichas pruebas son mínimas. Igualmente voy a ver si se puede optimizar aún más, pero esto es ya por capricho.

Subiré el parche de aquí a un rato, cuando termine de comprobar algunas cosas. Pero ya no veo nada que haya que arreglar.

EDITO: Ya está actualizado el parche en el mensaje inicial. A ver si esta vez es el último. 😑

v1.3
  • Lakitu ya no asoma por la parte inferior de la pantalla. Primero hubo que corregir que su cabeza y su nube sobresalieran por abajo al desplazarse desde la parte superior o al volver a subir (por ejemplo, en Ghost Valley o durante las caídas al agua). Después aparecieron sus tres putos pelos, pequeñas piezas sobrantes que permanecían dibujadas tras abandonar la pantalla o después de un rescate, y que también han sido corregidas.
  • En 2P, la moneda de Lakitu y las monedas que pierde el jugador ahora se dibujan a la altura correcta, en lugar de aparecer 88 píxeles más abajo.
  • Se ha reducido la carga de CPU en 1P. En la salida de carrera más exigente de las probadas, el pico de uso baja del 95,7 % al 90,5 %, frente al 89 % de la versión original.
@psicopompo por lo que estoy probando en snes9x, todo guay [oki] Menuda gozada de hack [amor] [looco]

En consola ya probaré en ésta semana que entra [sonrisa]

PD: mil gracias por el romhack [beer]
Me pase las dos primeras copas en la consola todo perfecto 👌
Que alguno lo grabe y lo suba a youtube porfa, es mi juego favorito y no tengo tiempo ni ganas de ponerme a hacer todas las movidas necesarias para probarlo.

Gracias por el increible hack!!! @psicopompo
es compatible con widescreen en bsnes?
Jugado en Snes9x for 3DS, en una consola New 3DS, y debo decir que funciona de lujo y no note nada extraño, yo lo postularía como el HACKROMS del año XD.

@psicopompo Muchas gracias por hacerlo posible [beer].
@Freestate No, el juego se verá en el formato de pantalla original (4:3). Si utilizas un emulador con soporte para Widescreen en Modo 7 (como bsnes-hd), verás el panorama ampliado hacia los lados (más circuito real sin distorsión), pero los personajes y objetos aparecerán y desaparecerán "mágicamente" en cuanto entren o salgan del recuadro original de la consola.
Para que un juego funcione a la perfección en widescreen real hay que modificar expresamente toda su lógica interna y de renderizado para ese formato. Como en este hack ha habido que reorganizar el HUD, menús y mecánicas para que funcione a pantalla completa nativa sin el mapa inferior, si moviese el HUD a los extremos del widescreen se rompería o dejaría de verse bien en hardware real. Tendría que ser un proyecto aparte.

@doblete Gracias. Me alegro de que no hayas visto nada raro. Cuando terminas un hack y crees que todo está bien y por fin lo compartes, no paran de salir errores que no habías visto por mucho que lo hubieras probado. 😂
Probado nuevamente el juego y es mi firme candidato al hack del año, junto con el top gear si es que efectivamente sale.


Saludos
338 respuestas
1, 2, 3, 4, 5…7