Friday, November 21, 2014

Antidote: Encounters and Pokemon IDs

A short post today to talk about some tech I set up to make some information in memory more readable. I've got a few helper functions that I can call to interpret a memory address as a pokemon, item, attack, or map. Today I'm going to show off the pokemon ID function, coupled with a neat test: checking encounters.




Wild encounters are the combination of a pokemon and the level it is at, randomly selected when the encounter happens (more or less). Each area has 10 encounters: 4 common, 4 uncommon, and 2 rare. I can read in the memory address this stuff is stored at and convert it to something intelligible. 


One of the cooler tests of this is when performing the infamous Missingno glitch. As you can see, the encounter data has been skewed because the player's name is stored in those memory addresses. Normally this area is updated when transitioning to a new map with encounter data, but when the glitch is performed, this data is never updated.

I felt it was appropriate to name the RAM-reading api I'm scripting "Missingno". All of its functions have the prefix "MNO". 

Here's the code that converts a pokemon ID to something readable. 


function MNO_pkmna(hexinput)
PHID = memory.readbyte(tonumber(hexinput, 16))

if PHID == 0 then return "'M (Glitch)"
elseif PHID == 1 then return "Rhydon"
elseif PHID == 2 then return "Kangaskhan"
elseif PHID == 3 then return "NidoranM"
elseif PHID == 4 then return "Clefairy"
elseif PHID == 5 then return "Spearow"
elseif PHID == 6 then return "Voltorb"
elseif PHID == 7 then return "Nidoking"
elseif PHID == 8 then return "Slowbro"
elseif PHID == 9 then return "Ivysaur"
elseif PHID == 10 then return "Exeggutor"
elseif PHID == 11 then return "Lickitung"
elseif PHID == 12 then return "Exeggcute"
elseif PHID == 13 then return "Grimer"
elseif PHID == 14 then return "Gengar"
elseif PHID == 15 then return "NidoranF"
elseif PHID == 16 then return "Nidoqueen"
elseif PHID == 17 then return "Cubone"
elseif PHID == 18 then return "Rhyhorn"
elseif PHID == 19 then return "Lapras"
elseif PHID == 20 then return "Arcanine"
elseif PHID == 21 then return "Mew"
elseif PHID == 22 then return "Gyarados"
elseif PHID == 23 then return "Shellder"
elseif PHID == 24 then return "Tentacool"
elseif PHID == 25 then return "Gastly"
elseif PHID == 26 then return "Scyther"
elseif PHID == 27 then return "Staryu"
elseif PHID == 28 then return "Blastoise"
elseif PHID == 29 then return "Pinsir"
elseif PHID == 30 then return "Tangela"
elseif PHID == 31 then return "MissingNo."
elseif PHID == 32 then return "MissingNo."
elseif PHID == 33 then return "Growlithe"
elseif PHID == 34 then return "Onix"
elseif PHID == 35 then return "Fearow"
elseif PHID == 36 then return "Pidgey"
elseif PHID == 37 then return "Slowpoke"
elseif PHID == 38 then return "Kadabra"
elseif PHID == 39 then return "Graveler"
elseif PHID == 40 then return "Chansey"
elseif PHID == 41 then return "Machoke"
elseif PHID == 42 then return "Mr. Mime"
elseif PHID == 43 then return "Hitmonlee"
elseif PHID == 44 then return "Hitmonchan"
elseif PHID == 45 then return "Arbok"
elseif PHID == 46 then return "Parasect"
elseif PHID == 47 then return "Psyduck"
elseif PHID == 48 then return "Drowzee"
elseif PHID == 49 then return "Golem"
elseif PHID == 50 then return "MissingNo."
elseif PHID == 51 then return "Magmar"
elseif PHID == 52 then return "MissingNo."
elseif PHID == 53 then return "Electabuzz"
elseif PHID == 54 then return "Magneton"
elseif PHID == 55 then return "Koffing"
elseif PHID == 56 then return "MissingNo."
elseif PHID == 57 then return "Mankey"
elseif PHID == 58 then return "Seel"
elseif PHID == 59 then return "Diglett"
elseif PHID == 60 then return "Tauros"
elseif PHID == 61 then return "MissingNo."
elseif PHID == 62 then return "MissingNo."
elseif PHID == 63 then return "MissingNo."
elseif PHID == 64 then return "Farfetch'd"
elseif PHID == 65 then return "Venonat"
elseif PHID == 66 then return "Dragonite"
elseif PHID == 67 then return "MissingNo."
elseif PHID == 68 then return "MissingNo."
elseif PHID == 69 then return "MissingNo."
elseif PHID == 70 then return "Doduo"
elseif PHID == 71 then return "Poliwag"
elseif PHID == 72 then return "Jynx"
elseif PHID == 73 then return "Moltres"
elseif PHID == 74 then return "Articuno"
elseif PHID == 75 then return "Zapdos"
elseif PHID == 76 then return "Ditto"
elseif PHID == 77 then return "Meowth"
elseif PHID == 78 then return "Krabby"
elseif PHID == 79 then return "MissingNo."
elseif PHID == 80 then return "MissingNo."
elseif PHID == 81 then return "MissingNo."
elseif PHID == 82 then return "Vulpix"
elseif PHID == 83 then return "Ninetales"
elseif PHID == 84 then return "Pikachu"
elseif PHID == 85 then return "Raichu"
elseif PHID == 86 then return "MissingNo."
elseif PHID == 87 then return "MissingNo."
elseif PHID == 88 then return "Dratini"
elseif PHID == 89 then return "Dragonair"
elseif PHID == 90 then return "Kabuto"
elseif PHID == 91 then return "Kabutops"
elseif PHID == 92 then return "Horsea"
elseif PHID == 93 then return "Seadra"
elseif PHID == 94 then return "MissingNo."
elseif PHID == 95 then return "MissingNo."
elseif PHID == 96 then return "Sandshrew"
elseif PHID == 97 then return "Sandslash"
elseif PHID == 98 then return "Omanyte"
elseif PHID == 99 then return "Omastar"
elseif PHID == 100 then return "Jigglypuff"
elseif PHID == 101 then return "Wigglytuff"
elseif PHID == 102 then return "Eevee"
elseif PHID == 103 then return "Flareon"
elseif PHID == 104 then return "Jolteon"
elseif PHID == 105 then return "Vaporeon"
elseif PHID == 106 then return "Machop"
elseif PHID == 107 then return "Zubat"
elseif PHID == 108 then return "Ekans"
elseif PHID == 109 then return "Paras"
elseif PHID == 110 then return "Poliwhirl"
elseif PHID == 111 then return "Poliwrath"
elseif PHID == 112 then return "Weedle"
elseif PHID == 113 then return "Kakuna"
elseif PHID == 114 then return "Beedrill"
elseif PHID == 115 then return "MissingNo."
elseif PHID == 116 then return "Dodrio"
elseif PHID == 117 then return "Primeape"
elseif PHID == 118 then return "Dugtrio"
elseif PHID == 119 then return "Venomoth"
elseif PHID == 120 then return "Dewgong"
elseif PHID == 121 then return "MissingNo."
elseif PHID == 122 then return "MissingNo."
elseif PHID == 123 then return "Caterpie"
elseif PHID == 124 then return "Metapod"
elseif PHID == 125 then return "Butterfree"
elseif PHID == 126 then return "Machamp"
elseif PHID == 127 then return "MissingNo."
elseif PHID == 128 then return "Golduck"
elseif PHID == 129 then return "Hypno"
elseif PHID == 130 then return "Golbat"
elseif PHID == 131 then return "Mewtwo"
elseif PHID == 132 then return "Snorlax"
elseif PHID == 133 then return "Magikarp"
elseif PHID == 134 then return "MissingNo."
elseif PHID == 135 then return "MissingNo."
elseif PHID == 136 then return "Muk"
elseif PHID == 137 then return "MissingNo."
elseif PHID == 138 then return "Kingler"
elseif PHID == 139 then return "Cloyster"
elseif PHID == 140 then return "MissingNo."
elseif PHID == 141 then return "Electrode"
elseif PHID == 142 then return "Clefable"
elseif PHID == 143 then return "Weezing"
elseif PHID == 144 then return "Persian"
elseif PHID == 145 then return "Marowak"
elseif PHID == 146 then return "MissingNo."
elseif PHID == 147 then return "Haunter"
elseif PHID == 148 then return "Abra"
elseif PHID == 149 then return "Alakazam"
elseif PHID == 150 then return "Pidgeotto"
elseif PHID == 151 then return "Pidgeot"
elseif PHID == 152 then return "Starmie"
elseif PHID == 153 then return "Bulbasaur"
elseif PHID == 154 then return "Venusaur"
elseif PHID == 155 then return "Tentacruel"
elseif PHID == 156 then return "MissingNo."
elseif PHID == 157 then return "Goldeen"
elseif PHID == 158 then return "Seaking"
elseif PHID == 159 then return "MissingNo."
elseif PHID == 160 then return "MissingNo."
elseif PHID == 161 then return "MissingNo."
elseif PHID == 162 then return "MissingNo."
elseif PHID == 163 then return "Ponyta"
elseif PHID == 164 then return "Rapidash"
elseif PHID == 165 then return "Rattata"
elseif PHID == 166 then return "Raticate"
elseif PHID == 167 then return "Nidorino"
elseif PHID == 168 then return "Nidorina"
elseif PHID == 169 then return "Geodude"
elseif PHID == 170 then return "Porygon"
elseif PHID == 171 then return "Aerodactyl"
elseif PHID == 172 then return "MissingNo."
elseif PHID == 173 then return "Magnemite"
elseif PHID == 174 then return "MissingNo."
elseif PHID == 175 then return "MissingNo."
elseif PHID == 176 then return "Charmander"
elseif PHID == 177 then return "Squirtle"
elseif PHID == 178 then return "Charmeleon"
elseif PHID == 179 then return "Wartortle"
elseif PHID == 180 then return "Charizard"
elseif PHID == 181 then return "MissingNo."
elseif PHID == 182 then return "MissingNo. (Kabutops)"
elseif PHID == 183 then return "MissingNo. (Aerodactyl)"
elseif PHID == 184 then return "MissingNo. (Ghost)"
elseif PHID == 185 then return "Oddish"
elseif PHID == 186 then return "Gloom"
elseif PHID == 187 then return "Vileplume"
elseif PHID == 188 then return "Bellsprout"
elseif PHID == 189 then return "Weepinbell"
elseif PHID == 190 then return "Victreebel"
else     return "Misc. Glitch"
end
end



No comments:

Post a Comment