Abnormal Pokémon: $FE trade corruption for fun and profit
Posted by: Háčky
Date: 2014-07-03 01:00:45
What makes a Pokémon abnormal, anyway? The function at $FB57E in Crystal checks three things for Pokémon traded from Generation I:
1. The Pokémon must not be a hybrid, unless its an Egg. (Theres no way for a Generation I Pokémon to be seen as an Egg in Generation II, because $FD does not appear in the conversion table.)
2. The Pokémons level (offset $21 in the Generation I Pokémon data structure; offset $03 is ignored) must not be over 100.
3. The Pokémons types must be correct, unless its a Magnemite or Magneton (because they gained the Steel type in Generation II).
When $FE shifts the Generation I data structure, the least significant byte of the Pokémons remaining HP will become its species, its Type 2 will become its Type 1, its catch rate/held item will become its Type 2, and the least significant byte of its maximum HP will become its level. There are at least three ways to engineer things so that all these values will look okay after the corruption:
1. Get a Magneton with 54 HP remaining out of a total HP of 256 or higher.
2. Get any single-typed Pokémon in Generation II (except Normal or Bug type), with the same remaining HP as its index number in Generation I, and a total HP either less than 100 or between 256 and 356 (for example, a Krabby with 78/78 HP can be used, and you might be able to catch one of those by fishing in Whirl Islands 1F with a Super Rod). Give it the item with the same index number as its type: FightingMaster Ball, PoisionBrightPowder, GroundGreat Ball, RockPoké Ball, GhostMoon Stone, FireRepel, WaterMax Elixer, GrassFire Stone, ElectricThunderStone, PsychicWater Stone, DragonHP Up, DarkProtein. Then send it to Generation I normally (using the Johto guard glitch if necessary) before trading it back to Generation II with $FE corruption.
3. Get any Pokémon in Generation II with HP that corresponds to the Generation I index number of any single-typed Pokémon (except Normal or Bug type) which is the same as its own second type. Give it the item with the same index number as that Pokémons type. Send it to Generation I normally (using the Johto guard glitch if necessary), hybridize it with that Pokémon, and then trade it back to Generation II with $FE corruption.
(Normal is index $00, which corresponds with an item named ?, and Bug is $07, which corresponds with a Teru-sama. There are no pure Flying, Steel, or Ice-types in Generation II.)
When a corrupted Pokémon is received, its name and OT will be missing the first letter, its current HP will be its original level 256, it may have multiple status conditions based on its type, it will be holding an item based on the index number of its first move, and its fourth move will be based on the least significant byte of the OT ID number and have PP based on its original level. Its stats, experience points, IVs, and EVs will probably be greatly increased, except for Special Attack and Special Defense which have to be recalculated.
Another thing Ive noticed is that, if you put two $FE Pokémon in your party, everything will be shifted by two bytes, three $FEs will shift everything by three bytes, and so on. A three-byte shift would turn a Pokémons level into its species, its first two moves into its two types, and the least significant byte of its Attack stat into its level.
This might be the easiest method: get a level 54 Magneton, which should have less than 100 Attack unless its EV is too high, and corrupt it with three $FEs in the party. You can teach it TM33 Reflect as its third move so that it will be holding a GS Ball, or TM44 Rest so it will hold a Sacred Ash. (Unfortunately, Magnemite and Magneton dont learn any moves with indices under 100 that correspond to key items, so this method wont provide everything needed to corrupt the Balls pocket.)
It should be even easier to mess around with this in a trade between two Generation II games, if theres a convenient way to obtain ????? ($FE). Obviously it can be done with arbitrary code execution, but I dont know how much setup that would require.