SÚPER CIENCIA GAMER: La magia de la reprogramación

Cómo cambiar el mundo a tu alrededor... en un videojuego


Admítelo: has tenido el sueño de reprogramar lo que está a tu alrededor. Ser como Neo en la pelea final de Matrix o hacerle como el personaje King Candy en Wreck-it-Ralph y poder entrar y cambiar a voluntad el código de un juego en cualquier momento. Pero hay que conformarnos con la realidad: sólo es posible cambiar el código de un juego antes de su ejecución... ¿o no? No. Nunca hay que conformarse. Porque existe la magia del fenómeno llamado Ejecución de Código Arbitrario, una de las herramientas más increíbles que los speedrunners han inventado para acabar los juegos como por arte de magia.

¿Qué rayos es la Ejecución de Código Arbitrario? Bueno, los speedrunners, es decir, la gente que se dedica a acabar los juegos a alta velocidad, han buscado durante años la manera de acortar sus tiempos de compleción lo más posible. Usan todo tipo de trucos y glitches para lograrlo: atravesar paredes mediante errores de detección de colisiones, explotar la programación de enemigos y jefes, y muchas más. Sin embargo, la más radical involucra reprogramar el juego en funcionamiento para forzar la aparición de la pantalla final. ¿Qué? Sí, el procedimiento existe y tiene las formas más variadas dependiendo del juego, pero la meta es siempre la misma: alterar el código o ejecutar una pieza de código arbitrariamente inserta en él para obtener el fin deseado, en este caso, terminarlo, aunque también puede servir para otras cosas más extrañas...

No hay cuchara...
No hay cuchara...

Examinemos un ejemplo básico de reprogramación antes de entender el concepto de "Ejecución de Código Arbitrario". Nuestro primer ejemplo es un bug bastante visual que nos ayudará a entender la magia detrás de la reprogramación. El juego es Super Mario Land, el clásico portátil de plataformas para Game Boy. ¿Cómo hacer el truco? Necesitas entrar en una escena ya completada y entrar en una pipa cualquiera. Mientras estés en la pipa, presiona "Start" en el control y luego Select para regresar al Overworld. Ahora entra en cualquier escena y Mario caerá de la pantalla... el lugar en el que cae ha sido descrito como "un limbo de mala programación", pero en realidad es nada menos que... LA MEMORIA DEL JUEGO. Así es, como puedes ver en el minuto 2:24 del video, la memoria del juego entera está almacenada en esa zona bajo la forma de bloques, pipas y fragmentos de gráficas. Ahora bien, lo más absurdo es esto: puedes interactuar con la memoria del juego golpeando, tocando y alterando los bloques. EN SERIO. Si se toca o rompe el bloque correcto, es posible llegar al final del juego automáticamente.

Este extraño fenómeno ocurre porque el bug descrito anteriormente nos permite salir del espacio de juego y entrar en el mapa de memoria del juego entero. Ahora bien, ¿qué rayos es el mapa de memoria? Bueno, el mapa de memoria es la estructura que indica cómo se distribuyen los datos almacenados en un sistema. Es la estructura de las unidades informáticas o bytes que constituyen el juego. Sin embargo, estos bytes, que al final sólo son unidades de almacenamiento a las que el código puede llamar en cualquier momento, pueden tener distintas interpretaciones como gráficas, rutinas, etcétera. Pues bien, lo que ves en ese video es la memoria del juego entero reinterpretada como gráficos sin sentido. El bug utilizado para acceder a esta zona altera el llamado puntero, el objeto que relaciona las partes de la memoria mediante referencias. Al caer en este espacio vacío, interpretará el movimiento de Mario como caída hasta que encuentras datos, en este caso, el mapa de memoria del juego convertido en gráficos sin sentido. De ahí que puedas interactuar con la memoria del juego como si fuera una pipa, un caparazón o un bloque, y alterarlo a tu antojo, ¡incluso con el riesgo de arruinar el juego! Asombroso.

Pero hay más. Por el ejemplo anterior, ya estás familiarizado con la idea de reinterpretación: el mapa de memoria de Super Mario Land convertido en gráficos al azar. Pero es posible llevar este proceso al siguiente nivel. Algunos títulos tienen glitches que te permiten engañar al juego para ejecutar cosas que no son código, pero que son leídas como si fueran parte del código del juego. En serio. Es decir, bugs que permiten que puedas programar en el juego mediante inputs arbitrarios de tu control, que son ejecutados de 2 maneras: como movimientos y como código. Wow. A esto se llama "Ejecución arbitraria de código".

Bugs que permiten que puedas programar en el juego

Empecemos por el ejemplo más simple. El speedrunner SethBling impuso un récord mundial al reprogramar Super Mario World para saltarse directamente a la pantalla final. La manera de introducir el código arbitrario involucra un glitch llamado "item swap", es decir, cambio de ítems. El glitch consiste en esto. Como sabes, Mario puede obtener monedas al tocarlas o puede hacer que Yoshi coma las monedas para hacerlo. Ahora bien, si saltas de Yoshi en el instante en el que nuestro amigo comienza a comerse la moneda, ocurrirá que Mario obtiene la moneda al mismo tiempo que Yoshi la guarda en su boca. Sin embargo, el juego se confundirá, porque sabe que hay algo en la boca de Yoshi pero no sabe qué es, ya que la moneda fue recolectada. Este objeto es un sprite vacío, almacenado en el espacio de memoria sprite X.

Ahora bien, la locura empieza con el enemigo llamado Chargin' Chuck, el sujeto con casco de americano que te persigue. Por alguna razón, su sprite está marcado como power up o poder. Esto no importa en el juego normal porque Yoshi no puede comerlo y Mario no puede tocarlo sin perder vida o rebotar. Los programadores dejaron esa propiedad al sprite pensando que ese escenario era imposible, pero si haces el truco de la moneda mágica en una locación donde vaya a aparecer un Chargin' Chuck, el juego pensará que Yoshi tiene un Chuck en su boca. Y aquí empieza la locura. El Chargin' Chuck se convierte en un poder y el resultado es que el código no sabe qué hacer y te deja en un área de la memoria donde no hay instrucciones normales. En su lugar, la tabla de coordenadas del sprite X ya mencionado acaba siendo ejecutada como instrucciones de código. Listo, ahora puedes programar manipulando ese sprite. Un par de pases aquí y allá y puedes llegar al final del juego.

Ahora bien, esto puede ser llevado al extremo. ¿Qué tal programar un juego entero mediante este procedimiento? El primer juego en el que se implementó dicho procedimiento fue Pokémon Blue. Así como en Super Mario World la manera de ejecutar código arbitrario implica un glitch con la tabla de sprites, en Pokémon Blue el objeto utilizado para la reprogramación es la lista de ítems. El procedimiento involucra cualquier cantidad de un ítem determinado y 255 ítems del tipo X Special. El jugador debe deshacerse de su primer ítem, el cual cambiará a X Special. Después debes seguir tirando ítems hasta que el menú deje de responder. Ahora, tienes que ir a buscar algún evento que quite ítems de tu inventario (los guardias de Saffron, dar fósiles en Cinnabar Lab, etcétera). Después, debes ir a la esquina Este de Celadon City y arrojar 254 de tus X Speciales. Después, cambia X Special por Nugget (item 35 de tu lista). Finalmente, debes caminar por la parte derecha de Celadon City y con este proceso tan extraño es posible obtener un ítem glitcheado que no existe en el juego. Bueno, hay decenas de esos ítems, pero uno en especial es el que permite reprogramar el juego: 8F. Dicho ítem tiene un identificador que lo redirige al hexadecimal $D163, una parte del código que nos permite reescribir datos. Ahora bien, este ítem mágico permite escribir código sólo con tu lista de ítems, de la misma manera que en Super Mario World podías escribir código con tus sprites bugueados. La lista de ítems, con ayuda del movimiento de tu personaje se convierte en una especie de lenguaje de programación, con los bytes precisos en los que puedes grabar datos, en una especie de danza donde eliges la posición de memoria con tu bicicleta y escribes bytes con tu lista de ítems. Tras mucho trabajo duro, es posible crear PONG en Pokémon Blue y correrlo usando el item 8F:

¡Sin palabras! Volvamos a Super Mario World. Siguiendo un procedimiento similar, pero usando el glitch ya mencionado de la tabla de sprites, es posible reprogramar títulos como PONG y Snake en la memoria del juego y ejecutarlos:

En fin. Llegamos al final de esta galería de asombros. ¿Qué podemos aprender de todo esto? Bueno, que todo depende del cristal con que se mira. En serio. La Ejecución Arbitraria de Código consiste en engañar a un juego, haciéndolo ejecutar cosas que no son código de juego y hacer que las lea como si fueran código. Se trata de un cambio en la interpretación que el programa da a elementos del juego (sprites, tablas de ítems, inputs y demás). Mira, en el mundo de tu juego favorito todo es una ilusión: son bytes interpretados como gráficos, música, mecánicas de juego... El truco consiste en cambiar de perspectiva. Por ejemplo, mira esta imagen de M. C. Escher: ¿es cóncava o convexa? ¿Y qué tal la escalera que ponemos después? ¿Sube o baja?

En realidad, depende del intérprete, del observador... por lo general, los juegos interpretan los datos de la manera correcta, pero como hemos visto, hace falta un pequeño glitch para que entremos en un mundo donde nuestras acciones puedan ser leídas como parte del código del juego y ejecutadas como tales. Increíble, ¿no? Como ves, las computadoras pueden enseñarnos mucho sobre la manera en que funciona nuestro cerebro... ¿quién sabe? Tal vez tú seas el próximo en encontrar un nuevo glitch... En fin, esto fue SÚPER CIENCIA GAMER, trayéndote lo más asombroso del mundo científico en los videojuegos. No te pierdas nuestra siguiente entrega.

Comentarios

 
 
  • Mejores

  • Nuevos