Introducción
Parece que ahora mucha gente se ha enganchado a la fiebre Pokemon través de Pokemon Go pero hubo vida antes de Pokemon Go y desde mi punto de vista fue mejor esa vida, me refiero a los juegos de GameBoy, GameBoy Color, GameBoy Advance, Nintendo DS y Nintendo 3DS.
En este artículo me gustaría hablar de los primeros juegos, los de la primera generación, pokemon rojo, pokemon azul y pokemon amarillo.
El primer juego al que jugué fue pokemon azul, en casa de un amigo, en aquél momento no me llamó mucho la atención, eso sería por el año 96/97, poco después empezaría la fiebre pokemon y recuerdo que yo (que no tenía aún la GameBoy) me compré primero el pokemon amarillo antes siquiera de tener la GameBoy, meses después conseguí que mis padres me compraran una GameBoy Color.
Aquellos años se vivió una especie de histeria colectiva hacia pokemon, la mayoría de niños jugaban a pokemon, en mi ámbito casi todos mis amigos jugaban a pokemon, hacíamos peleas y cambiábamos pokemons a través del gamelink.
Entre yo y mi hermana llegamos a tener todos los juegos de pokemon hasta la tercera generación, excepto uno, esto es, Pokemon Rojo, Pokemon Azul, Pokemon Amarillo, Pokemon Oro, Pokemon Plata, Pokemon Cristal, Pokemon Rubi y Pokemon Zafiro (el juego que faltó fue Pokemon Esmeralda, de la tercera generación).
Al igual que muchos de los que empezamos con los juegos considero que los mejores juegos de pokemon han sido Pokemon Oro/Plata/Cristal, con un total de 251 pokemons que capturar y 16 medallas que conseguir.
Pero este artículo no va a tratar sobre mi infancia y pokemon o sobre la historia de pokemon en mi ámbito cercano, este artículo es un artículo técnico sobre uno de los mayores misterios de pokemon.
A mi juicio una de las causas por las que la primera y segunda generación fueron las mejores fue el hecho de que no había nada escrito sobre ellas y todo era posible. Me explico, en aquella época no nos resultaba sencillo acceder a guías precisas sobre el juego e Internet aún estaba en pañales en España por lo que pokemon era un mundo inexplorado. Hoy en día en pokemon está todo controlado, accedes a cualquier guía sobre pokemon en Internet y te dicen la verdad.
En la primera y segunda generación había una serie de mitos y leyendas que eran difíciles de comprobar a no ser que comprobases tú mismo. Alguno de los mas conocidos:
- En la primera generación en el SS Anne hay un camión que si lo empujas con un Nidoking a nivel 100 al que le hayas enseñado Fuerza encontraras a Mew, el pokemon legendario 151.
- En la primera generación si entrenas un Chansey hasta nivel 99 y luego lo dejas en la guardería, al subir al nivel 100 se muere pero te deja un huevo que resulta ser togepi (pokemon de la segunda generación)
- En la primera generación se puede acceder a una especie de jardín que hay detrás del laboratorio de Bill, llamado el valle de togepi, donde se puede encontrar al pokemon legendario 151, Mew, y a togep (pokemon de la segunda generación)
- En la segunda generación si conseguías todos los pokemon (250) e ibas al altar del bosque, te aparecía el guardián del bosque, el pokemon legendario 251, Celebi.
- En primera (y creo que en segunda) generación si a mitad de un intercambio pokemon apagabas la consola, el pokemon intercambiado se clonaba.
- En la primera generación, si ibas a la zona safari, y hacías cierto ritual (no lo recuerdo muy bien, pero era algo así como guardar la partida, y apagar justo cuando estuviese guardando, intentar salir y darle a no al salir, volver a guardar la partida y apagar y salir de la zona safari) podías acceder a un lugar conocido como las islas fallo.
- En estas islas fallo se podía encontrar al pokemon legendario 151, Mew.
- En primera y segunda generación si hacías cierto ritual podías conseguir a un pokemon llamado Missigno que ocupaba el número 0 en la pokedex.
Habías bastantes más, pero corto aquí para no hacerlo más pesado. La mayoría de los mitos anteriores eran producto de la ficción colectiva o simples engaños (o al menos no se ha podido comprobar su veracidad). El mito de celebi por ejemplo es cierto, pero solo en la versión japonesa del juego.
El mito de las islas fallo y de MissingNo si que son ciertos, yo personalmente experimenté la entrada a las islas fallo en pleno auge de la fiebre pokemon. Aunque el mito de MissingNo no pude comprobarlo en aquella época, lo comprobé años después.
Da la casualidad que aquello eran ciertos son simples errores de programación por parte de Nintendo.
Esto que acabo de comentar, desde mi punto de vista le daba un halo de misterio a pokemon y la sensación de que todavía había cosas por descubrir. Hoy día con una simple búsqueda en Internet puedes decidir si merece la pena hacer el esfuerzo de subir un Nidoking a nivel 100 para conseguir a Mew o no.
MissingNo, El pokemon fallo
Como he dicho anteriormente esto es un artículo técnico y aunque ya he hablado sobre MissingNo en alguna que otra entrada de este blog esta vez me gustaría hablar sobre el asunto con un poco más de profundidad.
Para llevar acabo este artículo he usado el emulador VirtualBoy Advance para windows, la rom de Pokemon Rojo en inglés (el idioma debería ser indiferente) y un editor hexadecimal, en este caso HxD.
Antes de nada me gustaría mostrar el pokemon al que vamos a estudiar
Este pokemon es una casualidad de errores en cadena por parte de Nintendo. El simple hecho de ver a este pokemon hace que el objeto que lleves en 6 posición se incremente en su número. Lo primero que hay que saber es queMissingNo no es un pokemon, no está programador para salir en el juego, es simplemente un fallo.
Empecemos a explicar este fallo tan famoso, posiblemente el fallo más famoso de los videojuegos.
En la primera generación había 151 pokemons que capturar y se numeraban de 1 a 151, siendo 1 bulbasaur y 151 mew. Esta es la numeración que todo el mundo conoce, el orden que muestra la pokedex, pero lo cierto es que los pokemon internamente tienen otro índice distinto que va desde 1 a 190, dentro de estos 190 pokemon hay 39 MissingNo. Esta numeración parece que corresponde al orden en que se diseñaron los pokemon, esto pasa en todas las generaciones de pokemon (no solo en la primera).
¿A que corresponden estos 39 MissingNo? Pues corresponden a 39 pokemons que se diseñaron para salir en la primera generación pero que al final salieron en la segunda generación, un ejemplo es el legendario de la segunda generación Ho-oh que estaba programado para salir en la primera generación (de hecho en la serie anime sale en la primera generación) pero que se decidió dejar para la segunda generación.
En el offset de la ROM 0x41024 y hasta el offset 0x410E1 se puede observar una tabla donde mapea el índice interno con el número en la pokedex. Por ejemplo, el índice interno corresponde a al pokemon 0x70 (112) que es Rhydon, el siguiente, el índice interno 2 corresponde al pokemon 0x73 (115) que es Kangaskhan. En la siguiente imagen podemos observar esto.
Pero si nos damos cuenta en algunos offset observamos que apuntan al pokemon 0, esos huecos corresponden a pokemons que finalmente no salieron en la primera generación y los programadores rellenaron con 0.
Internamente el juego no maneja los números que nosotros vemos en la pokedex, maneja estos números, y esto lo veremos a continuación.
En pokemon rojo/azul hay 2 zonas en las que pueden salir pokemons, las zonas de hierba y las zonas de agua. El juego guarda en la ram, la probabilidad de batalla, y los pokemons, junto a sus niveles, que deben aparecer en cada zona del juego. Los datos en memoria están diseñados de la siguiente forma
- 1 byte indica la probabilidad de encuentro (0 para las ciudades, ya que no hay batallas en las ciudades)
- A continuación hay 2 bytes, 1 para el nivel del pokemon y otro para el pokemon en cuestión (este ultimo byte no contiene los pokemons en su numeración de pokedex sino mediante su numero interno). Esto se repite 10 veces, es decir, cada zona tiene hueco para 10 pokemons salvajes
Esto anterior se aplica a 2 zonas de memoria, la zona de memoria para pokemons de hierba que empieza en la dirección de memoria 0xD887 y tiene un tamaño de 21 bytes (1 byte para la frecuencia de los combates y 20 bytes para almacenar 10 pokemons y sus respectivos niveles) y la zona de memoria para pokemons de agua que empieza en la dirección de memoria 0xD8A4 y que igualmente tiene un tamaño de 21 bytes por lo explicado anteriormente.
Veamos un ejemplo, vamos a la primera ruta del juego donde se pueden encontrar pokemons:
Andamos un poco por la hierba y nos aparece lo siguiente:
Como estamos en hierba vamos a la dirección de memoria 0xD887 y vemos que la frecuencia de combate es 0x19 y vemos lo siguiente
Lo que está resaltado es el pokemon que nos ha salido, 0x02 es el nivel y 0xA5 es el pokemon referenciado mediante el número interno, 0xA5 es un rattata, por tanto ahí podemos observar que ha aparecido un rattata con nivel 2. Si nos metemos ahora a pueblo paleta
si miramos ahora la memoria veremos lo siguiente
Vemos que la frecuencia de combate ha cambiado a 0, es decir, no van a haber peleas, pero podemos observar algo también muy interesante, los datos de los pokemons no se han borrado, siguen ahí. El funcionamiento de todo esto es el siguiente, cuando entras en una zona de hierba o de agua (o de hierba y agua) se actualizan los datos de los pokemons que aparecen en la memoria RAM, y SOLO se vuelven a sobrescribir cuando se entra en otra zona de hierba, de agua (o de hierba y agua), cuando entras en una ciudad lo único que ocurre es que la frecuencia de combate se cambia a cero pero los datos de los pokemons siguen ahí.
Vale, ¿Pero que tiene que ver todo esto con MissingNo? De por si no tiene nada que ver, pero hay 2 errores de programación (o despistes) que hacen que esto sea una información muy valiosa.
El primer fallo tiene que ver con la actualización de la frecuencia de combate en las zonas de agua. La frecuencia de combate cambia cada vez que entramos en un nuevo mapa (tanto de hierba como de agua), pero hay una excepción, cuando en Isla Canela se utiliza surf, la frecuencia de combate de la zona de agua se actualiza, cuando esto ocurre al surfear por la orilla el juego detectará que no deben aparecer pokemons, pero la RAM contiene una frecuencia de combate distinta de 0, hay una contradicción entre lo que dice la RAM y lo que dice la ROM y por defecto aparecerán combates con los pokemons y los niveles que aparezcan en la zona de memoria de los combates de hierba, veamos un ejemplo. Nos vamos a ir a la primera ruta donde se puede combatir, donde nos ha salido el rattata nivel 2 (que habrá pokemons con niveles muy bajos), a continuación vamos a usar vuelo y volar a Isla Canela en este momento la RAM contendrá los datos de los pokemons de hierba de la ruta anterior, pero con una frecuencia de combate de 0, en cuanto hagamos surf, la frecuencia de la zona de agua se actualizará y empezaremos a tener combates con pokemons que aparecen en la ruta anteriormente mencionada, en vez de los pokemons típicos de esta ruta (que deberían tener un nivel bastante elevado, ya que Isla Canela es una de las últimas ciudades)
Ya estamos más cerca de llegar a MisingNo. ¿Que pasa si pudiésemos modificar los datos de los pokemons que aparecen en las zonas de hierba? Pues que podríamos tener cualquier pokemon que quisiésemos a cualquier nivel.
En un emulador es relativamente sencillo modificar la memoria RAM para modificar estos valores, pero MissingNo se podía ver y conseguir en los cartuchos originales de GameBoy y en estos cartuchos no es sencillo modificar la RAM (por no decir imposible, a no ser que tengas hardware específico).
Aquí es donde entra en juego el siguiente fallo o más bien despiste, hay un momento en el juego en el que se sobrescribe la zona de memoria de la RAM donde se guarda la información de los pokemons que aparecen en la zona de hierba. ¿Donde ocurre exactamente esto? Pues ocurre en Ciudad Verde. En ciudad verde hay un señor que nos enseña como capturar pokemons, en ese momento el juego necesita mostrar el nombre de este señor por tanto tiene que sobrescribir nuestro nombre, y para ello hace una copia de seguridad de nuestro nombre a otra zona de memoria. Esta zona de memoria da la casualidad que corresponde a la zona de memoria donde se encuentran los pokemons que deben aparecer en la zona de hierba.
El nombre de nuestro jugador está almacenado en la dirección de RAM 0xD158 en una codificación distinta a la ascii estándar, Esto se puede ver a continuación (El nombre de mi jugador es ASH)
En cuanto el señor de ciudad verde nos enseña a capturar pokemons podemos ver que estos datos (que corresponden a nuestro nombre) se han copiado a la dirección de RAM 0xD887, para posteriormente, cuando acabe este tutorial volver a copiar estos datos a la dirección RAM 0xD158.
En teoría esto debería ser seguro, en cuanto cambiemos de mapa estos datos serian actualizados con los pokemons que aparecen en ese mapa, pero esto se une a lo comentado anteriormente, si después del tutorial volamos directamente a Isla Canela veremos lo siguiente en esa dirección de memoria RAM
Podemos ver que al entrar a una zona sin combates se han puesto a 0 la frecuencia de combate de la zona de hierba y la zona de agua (esta última ya estaba a cero antes) pero como se ha dicho anteriormente los pokemons que aparecen no han sido modificados, solamente la frecuencia de combates, por tanto ahora en la zona de combates de hierba seguimos teniendo parte de nuestro nombre y seguramente equivale a pokemons que no existen y a niveles que no tienen sentido. Solo nos queda hacer surf en la orilla de Isla Canela para que se actualice la frecuencia de combate de la zona de agua y se produzcan combates con los datos de los pokemons de la zona de hierba, con el nombre ASH me han aparecido los siguientes pokemons
Si vemos la captura de memoria RAM que he puesto anteriormente vamos a intentar identificar cada una de las batallas con los bytes mostrados, la manera mas sencilla es fijarnos en los niveles.
Empezamos por Snorlax que está en nivel 141, si lo pasamos a hexadecimal tenemos tenemos 0x8D, justo en la segunda linea del dump de la RAM tenemos 8D 84 (8D es el nivel y 84 es el índice oculto que se usa para identificar a los pokemons).
Seguimos con el MissingNo nivel 80 que en hexadecimal es 0x50, en la primera línea del dump podemos ver 50 89 (50 es el nivel y 89 es el índice interno de este MissingNo).
El siguiente MissingNo está en nivel 138 que en hexadecimal es 0x8A, en la primera línea vemos también que aparece 8A 50 (8A es el nivel y 50 es el índice interno de este MissingNo).
El siguiente pokemon es un Golbat nivel 128 que en hexadecimal es 0x80, en la primera línea vemos también 80 82 (80 es el nivel y 82 es el índice interno de Golbat).
Por último tenemos otro MissingNo nivel 146 que en hexadecimal es 0x92 y si vemos en la primera línea nuevamente, justo después de la frecuencia de combate (señalada con un cuadro rojo) vemos 92 87 (92 es el nivel y 87 el índice de este MissingNo).
Como última curiosidad decir, aunque se intuía ya en la tabla de índices internos de pokemons, que hay varios MissingNo's y que no son el mismo MissingNo porque cada uno corresponde a un pokemon que en principio debería estar en la primera generación pero que finalmente no salió. Con el nombre de ASH han aparecido los siguientes MissingNo's (numero en hexadecimal)
- 89 que corresponde al pokemon de segunda generación Smeargle
- 50 que corresponde al pokemon de segunda generación Remoraid
- 87 que corresponde al pokemon de segunda generación Stantler
El artículo se ha hecho demasiado largo pero aún quedan bastantes cosas que explicar como la multiplicación del 6º objeto y otros pequeños detalles que dejaré para otro artículo, pero la mayoría de esos efectos secundarios son debidos a simples buffer overflows.
Conforme vas aprendiendo más cosas sobre el mundo, dejas de creer en la magia y empiezas a pensar que todo tiene explicación. Y MissingNo no es una excepción, todo halo de romanticismo al rededor de este supuesto pokemon ha sido ya despejado con esta explicación.