Game Glitch Analysis: MISSINGNO.

The M, The Glitch, The Legend

One reason (among many) I wanted to get into game development was because when I was younger, playing my SNES and Gameboy, I would run into various glitches in the games. Some would let you walk through walls, some would totally crash the game. I wanted to figure out why that happens; what in the game would make something so bizarre happen this way.  Now that I understand programming and game design, I’m going out to hunt down the cause of these glitches.

For my first Glitch Analysis, I thought I might do a very famous and familiar glitch: MISSINGNO. In this Glitch Analysis, I’ll go over why MISSINGNO. is created, how it glitches your game, and go over a few of its relatives, too.

Beware the OLD MAN

Everyone should still remember the method to finding MISSINGNO.:

  1. Go to Viridian City and talk to the OLD MAN.
  2. Wait for him to finish his tutorial.
  3. Fly to Cinnabar Island.
  4. Surf the cost by the Gym, making sure you never leave the coast.

It was a simple trick. So how could something so simple break the game so bad?

Well, in truth, its’ partially your fault and the OLD MAN’s fault.

Back in the day of the big GameBoy cartridges, memory was very limited. programmers had to squeeze every bit they could get out of those games, and with a game like PokéMon, every bit counted.

PokéMon used tables for storing which PokéMon were in the area based on walking, surfing, and fishing, storing a “key” variable for looking up the PokéMon in a hash table. When you would enter a new route, the data would be updated with new keys. However, cities in the Red and Blue versions of PokéMon didn’t have grass in them, so the data wouldn’t be updated when entered. If you flew from one city to another, that data didn’t update either, so whatever was in the area of the last route you were in would remain in memory for whatever city you entered. Normally this wouldn’t be a problem, however, the tiles used to repesent the shore of an island are treated as grass. So when you’re surfing the coast, you’re actually walking the coast.

So where do you and the OLD MAN step in? It’s all in the tutorial the OLD MAN did, where he caught a Weedle. When the OLD MAN comes onto the screen, it displays the OLD MANs’ name. In order to do this, the game needs to temporarily change your name to OLD MAN. Instead of placing your name in a temporary variable, which would have consumed precious memory, the game stores your name in the PokéMon walk encounter table. That’s where the fun begins.

The data is laid out as such: The player name is composed of 6 hexadecimal values, all one byte in length. The game uses 3 WORDS (or shorts (2 bytes)) for the PokéMon species key and level. PokéMon encountered along the coast are determined by the third, fifth, and seventh characters in the players name, while the levels are stored in the second, fourth and fifth characters. With this knowlage, someone could use a calculator (like this one at Glitch City Laboratories) to calculate almost any glitched PokéMon they wanted.

What’s In a Name?

Depending on what characters you have in your name will result in a different – but essentaially equal MISSINGNO. These Glitch PokéMon are called “Hybrids” by Glitch City Laboratories, as they hold similarities to the PokéMon they’re based off of (such as sprite).

The Rogue’s Gallery Of Glitch. From the Top-Left…
  • MISSINGNO. Normal – Also commonly refered to as “‘M,” MISSINGNO.s’ common form appears for people with a “G,” “H,” “J,” “M,” “S,” “T,” “:,” ” ],” “a,” “b,” “c,” “m,” “o,” “p,” “v” or NULL Terminator  as the third, fifth, or seventh character.
  • MISSINGNO. Ghost – Appears for people with a “y” as the third, fifth, or seventh character.
  • MISSINGNO. Aerodactyl – Appears for people with a “x” as the third, fifth, or seventh character.
  • MISSINGNO. Kabutops – Appears for people with a “w” as the third, fifth, or seventh character.
  • MISSINGNO. Yellow – Doesn’t appear in the Red or Blue versions of the game. Only appears in PokéMon Yellow when performing the Mew Glitch, and comes with its own unique glitches.

Based on any other letters occupying those positions in the players names can result in a magnitude of other PokéMon to appear.

Effects

MISSINGNO. is the easiest way to duplicate items, creating 128 of the item in the 6th item spot, and also glitches the Elite Four Hall Of Fame. Why does MISSINGNO. do this? In order to understand, think of MISSINGNO. as an unhandled array overflow. MISSINGNO.s’ data is owned by other parts of the game (if you notice ‘M’s random blocks in it’s name change based on your position in the world). The encounter flag for MISSINGNO. is the high bit of the 6th items’ quanitity. By encountering MISSINGNO. you’re reading and writing to not only player data, but graphical data as well.

Gotta Glitch ’em All

In total, between PokéMon Red, Blue and Yellow, there are 36 total glitch PokéMon. Some have some pretty devistating effects to player save data, while others may just freeze the game. Most of the glitch PokéMon were ment as placeholders or padding between PokéMon for when the game was in development. Now they’re nothing but bad pointers.

Thus concludes the how, what and why of MISSINGNO.; one of the most infamous glitches of videogame history, and one of the top glitches in PokéMon RBY alone, aside from Glitch City and the more-recently discovered Mew Glitch, which unveiled a pleathora of new glitch PokéMon and the ability to catch a non-glitched level 7 Mew.

So I hope you enjoyed this Glitch Analysis, uncovering the secrets behind some  game glitches. See you next time!

References:

https://bulbapedia.bulbagarden.net/wiki/MissingNo.

https://glitchcity.info/


18 thoughts on “Game Glitch Analysis: MISSINGNO.

  1. no single comment so far?? This has been here for a long work. Thanks for explaining this one legendary glitch. How did you find out what causes the glitch? Did it involve encrypting the game rom and reverse engineer the game mechanics?

  2. I somehow messed my 2nd sentence up. Of course what i wanted to say was for a long time, and that i really appreciate your work

  3. Well, this glitch was solved long before I entered game development. After I got my computer science degree, I reminisced about some of my favorite games as a kid and how they were developed, and I remembered MISSINGNO. So I did a bit of researching and found various places where they cracked the code. In school I did a bit of bare GBA development where most of the API was stripped away and I was talking to palette, video and sprite memory directly, and gained a key aspect of how memory was handled on those old systems.

    As far as the process of cracking the code, I would say it would be a mix of Post-mortem reports from the developers at GameFreak, and through GB and GBA emulators (Some have setting where you can view memory directly for the game. By finding out memory locations and what values represent, you can easily find out what data corresponds to what).

    I’m really glad you enjoyed my analysis. I found all the info in several places, so I wanted to centralize it and put it in a way so people could understand it, and so programmers could see more complex designs.

  4. Great stuff. I’m studying computer science myself today, played Pokemon as a little kid. I have a bigger brother who fed me with any Pokemon infos, but I never knew the “Why”. I did experiment with Missingno. too, but I never got to the idea that the name was important.
    And all those “OMG ITSA POKEGOD” always freaked me out. I didn’t need programming knowledge as a kid to realize this was no ‘secret’ and it was NOT intended to get in any way. I just wonder why it doesn’t say “IF YOU READ THIS PLEASE CALL STAFF” (like FF7 😉 )

    I understand why Missingno. looks weird. It reads a certain portion of data (which?) and interprets it as a graphic.

    But I still didn’t get why the game writes into parts of the game. Oh wait.. If you SEE Missingno. it will add 128 to your sixth slot. This is because it sets the 128-bit (which didn’t have to exist for items if they REALLY were in need for memory) to 1, adding 128 if there were less than 128 items. Is this something like ‘pkmn seen’ in Pokedex? Does it try to write in there, that you met this pkmn? Why the hell should it garble your whole Hall of Fame (well, I recall not having garbled the whole thing, but I may have played through Elite4 after breaking it)? This is more than just a few bytes.

    And if you catch it, why does it garble all pictures, turning them sideways? Is there a ‘mirrored’ flag on the displayed pictures? If you release the pokemon, it’s back to normal. But it’s not just mirrored, it’s garbage. I don’t get it.
    Also, when encountering Missingno, the screen stays black for a second. This is where the game saves. Why does it save? While starting a battle? The game should read only the pokemon, not write, or trigger some save flag. What does the game save anyway?

    I believe, after 11 years of silence, I need to get the game out again. May try the more recent Mew Glitch while I’m at it.

    Did you ever hack around in FF4? It’s overflowing with glitches if you change one byte anywhere. Funny.
    And sadly, programmers get better and better, also they learned to catch exceptions. No glitches like that anymore 😦

    1. The reason, I think, that the game just doesn’t go “CALL STAFF” is because they never tested this. They never thought that not making that ground viable pokemon data would effect anything – which is really the only thing we can hope for in new games. Nowadays everytone can just put in a simple try-catch block. *sigh* I miss the old days.

      The only reason I can see MISSINGNO. messing up the users’ saved game is because it’s overflowing the data (like the item in the 6th slot) and all the memory written after the items get shifted incorrectly. There’s probably some sort of set memory layout pattern for all the available slots in your backpack, and your backpack items are written in various locations.

      As for the graphical glitches, I would attribute that to MISSINGNO.s graphics themselves. If you ever looked at GB or GBA architecture, the sprites are stored in little broken up blocks. MISSINGNO.s graphics are always just a garbled mess, so somewhere in the sprite data, I would say, the flipped bit must be getting messed with (If you remember, a pokemons’ battle sprite is reversed in the pokedex).

      As for saving the data when a battle start, I imagine this is the game recording information like “Did I encounter this Pokemon before?” “If I die, what town will I restart in?” “What advantages/disadvantages do my pokemon have against this one? (I don’t know if this is calculated in battle-time or before the fight. Very well could be to save on time)”

      And for the last 2 comments – Yes I do want to try that Mew glitch too, but do I have the time/patience? And I haven’t gotten around to play FF4 yet. I eventually want to get to a point in my life where I can marathon almost all the Final Fantasies.

      Thanks for the comment dude!

  5. Hey Keith! I just wanted to say bravo on this excellent explanation! Being that I’m majoring in CS and also want to get into game development, this was just the perfect thing to read! Thanks for this!

  6. Hey Keith, I was just wondering if you could explain why MISSINGNO’s. name spells out as: M-I-S-S-I-N-G-N-O. Was it intentionally done (because it has no #), it conveniently spells out missingno?

    Does anyone know what was originally supposed to fill the space?

    Maybe they could use it in the series? Ash running away from something, and running into a Wall of MISSINGNO, and the entire series ends in a crash, lol.

    1. Well, the name MISSINGNO was stored in the system to represent a broken Pokémon. This was use in testing to make sure everything was working right, and when it wouldn’t, MISSINGNO would pop up.

      I doubt MISSINGNO would ever be canon, because you were never really meant to ever SEE this glitch.

  7. This was a really interesting post – thanks for writing and sharing it. I played Pokemon Red/Blue obsessively as a child. I’m a computer science student now and have been wondering for ages why such a glitch appeared. They don’t make glitches like they used to!

  8. My first encounter with “Missingno” was not via the Old Man glitch, but it was on the shore of an island on route 20 or 19. (Just before Cinnabar island) I know for certain I did not talk to the Old Man, as I had been playing through normally. When I found out about the glitch I tried it on Cinnabar and of course it worked, but the difference was that the Missingno (a normal/.flying that evolved into Kangaskhan) I found on the Route 20 island with no Old Man was level 80, while the normal glitch yielded a level 0 “M”. I wonder what prompted the other glitch location. You have to pass through a lot of water to get to that island, so it’s certainly not in a town without a wild pokemon identifier, you can’t just fly to it. I wonder if anyone’s documented that glitch.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.