Since this would be reverted on the Wiki, I thought I'd just post this little tidbit here.
Firstly, I don't work for Nintendo (although I'd like to - i'm probably blacklisted, see virutalnes.com), and I don't have inside contacts. I was working on prototypes of vGBX, which was going to be a Java GB emulator, a project I'll probably give up on. I noticed these things as I was working on it [read: sidetracked], and since I've been a Pokemon junkie since the age of seven, having bought Diamond and Pearl (and manual!) on launch day, I just have to investigate these things. Some of the references here are psuedocode, to make understanding this easier.
Game Freak chose the wise path of letting the game continue under abnormal conditions. Basically, even if the code isn't doing what they intended, as long as the memory doesn't corrupt, like trying to walk into the pallet town grass border, [covered later] (you're working with a horribly limited 8K here) it will still run.
As far as Missingno. goes, the code seems to go between YES (wild-pokemon-data-defined) and NO (no-wild-pokemon-data-defined [think Cities]). Missingno. is a product of what happens when nothing is specified. Those strips of land that border land and ocean-water [Cinnabar] don't have a specification. Water is inherently indicative of wild pokemon, however, this is still in the bank for Cinnabar. This leads to a complete lack of specification.
When you talk to the old man, large sweeping variables in RAM are changed to make you the old man. It switches from {hero} to {OLD MAN}. Because the game would otherwise forget your name, as you've suddenly been turned into the old man, they use the leftover space from only defining Weedle/Caterpie as a wild pokemon to be caught. When the block identiftying your name ends, it adds the hex value of 50 (which cooresponds to 80 in decimal.) That explains why Missingno is sometimes level 80.
Keep in mind that Pokemon data is generated form a set of variables, for example, it's not:
In Route 1, catch Ratatta at Level 3.
But instead:
You can catch Ratatta.
You can catch at Level 3.
This data is overwritten with your name. Because Missingno. is Hex 00 (as well as a few others, the hex data isn't linear with Bulbasaur staring at 01 check how GameShark custom Pokemon codes work, you'll see what I mean), the letters in your name can cause (albeit rarely) different Pokemon to appear. (You're defining 151 pokemon in a space that can handle 256. This causes problems) For example, I used JAMIE as my name in my Blue version. Wild Pokemon data can draw from the third, fifth, and seventh letter of your name. Level Data corresponds to the second, fourth and sixth. So, the query is as follows:
You can catch 'M (Letter M in third place)
You can catch Snorlax (Letter E in fifth place)
You can catch at Level 128
You can catch at Level 136.
For uppercase letters, take the numerical A=1 B=2 and add 127. For lowercase, add 159. That data doesn't change, for example, if I inserted JIEAM, the following rule would still be correct. If you started using special characters (like the money symbol, or PK symbol) you'd end up battling trainers as Pokemon. After selecting the first move, the game would crash, as it has no data as to what the wild Pokemon of this trainer is. Alternately, it would crash upon realizing that it has stated a trainer as a Pokemon, in which case it may purge the savegame, assuming it is FUBAR or otherwise unstable.
Additionally, I don't think you can find where Missingno is in the ROM with a hex editor. If I remember correctly, that data is compressed. It might actually be referencing a portion of music code, decompressing it, then trying to run. I might be getting that confused with GS, so don't quote me on that.
When Game Freak found this out, they decided to change the way the memory management works for Yellow. In effect, this caused a situation where it is notably more difficult to perform this sort of exploit on the RAM, but achieving this situation can cause results that aren't nearly as predictable as Missingno.
If you use a combination of Sharking cheats to allow hopping in all conditions and walk-through walls, it is possible - but not a wise idea - to enter the grass that borders Pallet Town. More accurately, you'd have to be in Route 1 or 2, and be walking in grass before entering the void. This leaves parts of ram with the previous data of wild pokemon, but it changes others. Going too far north or south continues to modify ram until a wild pokemon encounter occurs. On an emulator, expect a crash from the guest processor. On a physical copy, it'll purge savegame, assuming that is is FUBAR.
A few other notes:
GSC has a checksum of some sort that accesses the data to see if the stats for a pokemon can happen under normal circumstances. It's not abnormal, it's on purpose.
Pokemon Stadium and Stadium 2 do a similar thing. Attempts at bypassing this (although not completely useless in Stadium 1) can cause that to purge the savegame. The N64 is a bit more self-aware than the GB.
Logically, there would be a way to convert GSC to RSE/FR/LG. Converting those data strings isn't difficult, but there's something to do with the way link cables work.
Lake of Rage was to have a Gym.
With enough time, all possible options will be exhausted.
There's a huge amount of unused things in GSC.
Americans always seem to get shafted when it comes to special features. Celebi is hiding in the Ilex forest, there isn't anything we can do. Then there was the Mew truck in RBY.
In differences between JP and US, US buildings have MART and JP buildings have SHOP. Nintendo changes things for no apparent reason, look at the JP/US versions of Ice Climber for the NES.
Or those Starfy games.
If anyone here has ever beaten Telefang, I think everybody's initial thought was "There's 12 hours of my life I'll never get back."
There's going to be a DS Telefang, I've heard. There is a GBA one as well.
Americans just don't understand Atlus RPGs.
I have no idea what the following note had to do with Pokemon.
It's going to be fun watching Solid Snake go apeshit on a Pikachu.
FUBAR means "F*cked up beyond all repair."
It's 10:29 and I'm still not asleep.
I own a Pokemon Mini.
I really hope we get a reissue of Gold and Silver. Those were the best since D/P.
If anyone has any more questions, just ask. I'll be back around here tomorrow.
Love,
Jamie Sanders
Firstly, I don't work for Nintendo (although I'd like to - i'm probably blacklisted, see virutalnes.com), and I don't have inside contacts. I was working on prototypes of vGBX, which was going to be a Java GB emulator, a project I'll probably give up on. I noticed these things as I was working on it [read: sidetracked], and since I've been a Pokemon junkie since the age of seven, having bought Diamond and Pearl (and manual!) on launch day, I just have to investigate these things. Some of the references here are psuedocode, to make understanding this easier.
Game Freak chose the wise path of letting the game continue under abnormal conditions. Basically, even if the code isn't doing what they intended, as long as the memory doesn't corrupt, like trying to walk into the pallet town grass border, [covered later] (you're working with a horribly limited 8K here) it will still run.
As far as Missingno. goes, the code seems to go between YES (wild-pokemon-data-defined) and NO (no-wild-pokemon-data-defined [think Cities]). Missingno. is a product of what happens when nothing is specified. Those strips of land that border land and ocean-water [Cinnabar] don't have a specification. Water is inherently indicative of wild pokemon, however, this is still in the bank for Cinnabar. This leads to a complete lack of specification.
When you talk to the old man, large sweeping variables in RAM are changed to make you the old man. It switches from {hero} to {OLD MAN}. Because the game would otherwise forget your name, as you've suddenly been turned into the old man, they use the leftover space from only defining Weedle/Caterpie as a wild pokemon to be caught. When the block identiftying your name ends, it adds the hex value of 50 (which cooresponds to 80 in decimal.) That explains why Missingno is sometimes level 80.
Keep in mind that Pokemon data is generated form a set of variables, for example, it's not:
In Route 1, catch Ratatta at Level 3.
But instead:
You can catch Ratatta.
You can catch at Level 3.
This data is overwritten with your name. Because Missingno. is Hex 00 (as well as a few others, the hex data isn't linear with Bulbasaur staring at 01 check how GameShark custom Pokemon codes work, you'll see what I mean), the letters in your name can cause (albeit rarely) different Pokemon to appear. (You're defining 151 pokemon in a space that can handle 256. This causes problems) For example, I used JAMIE as my name in my Blue version. Wild Pokemon data can draw from the third, fifth, and seventh letter of your name. Level Data corresponds to the second, fourth and sixth. So, the query is as follows:
You can catch 'M (Letter M in third place)
You can catch Snorlax (Letter E in fifth place)
You can catch at Level 128
You can catch at Level 136.
For uppercase letters, take the numerical A=1 B=2 and add 127. For lowercase, add 159. That data doesn't change, for example, if I inserted JIEAM, the following rule would still be correct. If you started using special characters (like the money symbol, or PK symbol) you'd end up battling trainers as Pokemon. After selecting the first move, the game would crash, as it has no data as to what the wild Pokemon of this trainer is. Alternately, it would crash upon realizing that it has stated a trainer as a Pokemon, in which case it may purge the savegame, assuming it is FUBAR or otherwise unstable.
Additionally, I don't think you can find where Missingno is in the ROM with a hex editor. If I remember correctly, that data is compressed. It might actually be referencing a portion of music code, decompressing it, then trying to run. I might be getting that confused with GS, so don't quote me on that.
When Game Freak found this out, they decided to change the way the memory management works for Yellow. In effect, this caused a situation where it is notably more difficult to perform this sort of exploit on the RAM, but achieving this situation can cause results that aren't nearly as predictable as Missingno.
If you use a combination of Sharking cheats to allow hopping in all conditions and walk-through walls, it is possible - but not a wise idea - to enter the grass that borders Pallet Town. More accurately, you'd have to be in Route 1 or 2, and be walking in grass before entering the void. This leaves parts of ram with the previous data of wild pokemon, but it changes others. Going too far north or south continues to modify ram until a wild pokemon encounter occurs. On an emulator, expect a crash from the guest processor. On a physical copy, it'll purge savegame, assuming that is is FUBAR.
A few other notes:
GSC has a checksum of some sort that accesses the data to see if the stats for a pokemon can happen under normal circumstances. It's not abnormal, it's on purpose.
Pokemon Stadium and Stadium 2 do a similar thing. Attempts at bypassing this (although not completely useless in Stadium 1) can cause that to purge the savegame. The N64 is a bit more self-aware than the GB.
Logically, there would be a way to convert GSC to RSE/FR/LG. Converting those data strings isn't difficult, but there's something to do with the way link cables work.
Lake of Rage was to have a Gym.
With enough time, all possible options will be exhausted.
There's a huge amount of unused things in GSC.
Americans always seem to get shafted when it comes to special features. Celebi is hiding in the Ilex forest, there isn't anything we can do. Then there was the Mew truck in RBY.
In differences between JP and US, US buildings have MART and JP buildings have SHOP. Nintendo changes things for no apparent reason, look at the JP/US versions of Ice Climber for the NES.
Or those Starfy games.
If anyone here has ever beaten Telefang, I think everybody's initial thought was "There's 12 hours of my life I'll never get back."
There's going to be a DS Telefang, I've heard. There is a GBA one as well.
Americans just don't understand Atlus RPGs.
I have no idea what the following note had to do with Pokemon.
It's going to be fun watching Solid Snake go apeshit on a Pikachu.
FUBAR means "F*cked up beyond all repair."
It's 10:29 and I'm still not asleep.
I own a Pokemon Mini.
I really hope we get a reissue of Gold and Silver. Those were the best since D/P.
If anyone has any more questions, just ask. I'll be back around here tomorrow.
Love,
Jamie Sanders