En enero de 2021, el speedrunner de Paper Mario Morpheus se topó con un misterioso cuelgue del juego en plena retransmisión en directo. La comunidad lo rastreó hasta la «matriz de efectos», una estructura de datos que almacena detalles de efectos visuales como el humo del martillo: mediante un fallo de menú que almacena de forma permanente efectos normalmente temporales, un jugador puede desbordar la matriz hacia memoria no relacionada, que la consola ejecuta como código máquina basura.
Convertir ese cuelgue en código útil exigía posicionar a Mario con tal precisión que sus coordenadas 3D cayeran en desplazamientos exactos dentro de la matriz; algo brutal, porque la gravedad limita su posición vertical. A mediados de febrero, el runner Fray había hecho los cálculos posicionales y demostrado la ejecución de código con herramientas de emulación; días después, Rain publicó una speedrun asistida por herramientas completa que saltaba a los créditos más rápido que cualquier run con glitches anterior. Pero el posicionamiento estaba fuera del alcance humano, y ahí es donde entró Ocarina of Time.
El streamer JCog explicó la clave: el desbordamiento resulta que salta la ejecución cerca de los flags del jugador y de un temporizador de inactividad. «Si dejamos que ese temporizador de inactividad llegue a cualquier valor entre 0x810 y 0x81f, que son 69 segundos, antes de liberar los efectos almacenados, entonces la ejecución salta a la memoria del expansion pak, que Paper Mario no usa». El truco: usar un método ACE ya existente de Ocarina of Time —de la misma familia que el famoso glitch de inserción del Arwing, repetido dos veces con nombres de archivo cuidadosamente construidos— para cargar primero una instrucción de ensamblador elegida en esa memoria del expansion pak.
El ingrediente final es una peculiaridad del hardware: las primeras N64 mantienen viva la RAM del expansion pak durante unos segundos tras apagar la consola, la misma idiosincrasia que hay detrás del abandonado sistema de desbloqueo entre cartuchos «Stop n' Swop» de Rare. Juega a Ocarina, planta la instrucción, apaga la consola, intercambia en caliente a Paper Mario, y su desbordamiento salta a una memoria que ahora contiene tu código. Ninguno de los dos juegos usa oficialmente el expansion pak; juntos lo convirtieron en un canal de ejecución.
Dos juegos pueden cooperar en un ataque: un juego planta código máquina en la RAM del expansion pak, y un intercambio en caliente de cartucho cede la ejecución a ese código en otro juego.
Combina tres fallos independientes —un desbordamiento de la matriz de efectos, una escritura ACE de un segundo juego y la persistencia de la RAM tras el apagado— en un ataque entre cartuchos contra el que nadie diseñó defensas.
El truco del temporizador de inactividad convierte un requisito de precisión humanamente imposible en un temporizador de espera, lo que hace que el exploit sea conceptualmente ejecutable en hardware real.
Resucita Stop n' Swop —una función cancelada de los años noventa— como primitiva ofensiva, dos décadas después.
El descubrimiento fue secuencial dentro de la comunidad: el cuelgue accidental de un runner, los cálculos de otro, el TAS de un tercero y la explicación del mapa de memoria de un streamer.
Las superficies de ataque se componen: un fallo en un juego, una primitiva de escritura en otro y un estado de hardware no limpiado entre ambos pueden sumar una ejecución de código arbitrario que ningún componente expone por sí solo.
La run asistida por herramientas de Rain saltó Paper Mario directamente a los créditos más rápido que las rutas con glitches más rápidas viables para humanos. El artículo de Ars Technica enmarcó el método como un récord para TAS; una ejecución humana en tiempo real sigue estando fuera de alcance debido a la precisión posicional requerida.
CONSULTA LAS PRUEBAS
Las fuentes
- How to beat Paper Mario really fast by... playing Ocarina of Time? Ars Technica · arstechnica.com ·