Silent Pokémon Evolutions Tutorial - haven1433/HexManiacAdvance GitHub Wiki

Information

  • Scripted by Mechanical / Ben for FireRed
  • NOTE: This can even be used with my [Call Scripts from Items] Tutorial here on GitHub.
  • One upside to this method is that this can be easier modified than FBI's ASM Routine through simple scripting.

This tutorial is allowing the user to force a silent evolution of a Pokemon. This is done completely different than by using FBI's ASM routine. What we did here was inserting an ASM routine that allows for a Pokémon's deletion. To get that to work, you need to insert this routine somewhere:

C source:

#include 

void delete_pokemon()
{
    u8 slot = var_8004; // get slot id from variable
    if (slot != 5) {
        memcpy(&party_player[slot], &party_player[slot + 1], 100 * (5 - slot));
    }
    memset(&party_player[5], 0x0, 100);
    return;
}

Pre-Compiled version:

0C 4B 1B 78 10 B5 05 2B 0C D0 64 24 05 22 59 1C 
D2 1A 61 43 63 43 08 48 62 43 09 18 18 18 07 4B 
00 F0 12 F8 64 22 00 21 05 48 06 4B 00 F0 0C F8 
10 BD C0 46 C0 70 03 02 84 42 02 02 79 5E 1E 08 
78 44 02 02 D9 5E 1E 08 18 47 C0 46

After you've done that, you need to write down the Offset of the routine.

Below is the Script that allows to force an Evolution of a Pokémon. Every Possible solution is hardcoded. This script can be customized, but I still haven't found an easy way to store a Pokémon's Level, Abilities, or Moves. This script has been written for my Pokémon Stadium Advance ROM hack and will need further routines to set the evolved Pokémon's Level, Abilities, or Moves. As for now, the script returns evolved Pokémon, but they are Level 1; this can be further modified with scripting.

Copy this Script, and insert it into a Notepad, then look for the lines that say [callasm <0xXXXXXX>] under the sections evo.do and evo.do.special Insert your Offset of the Routine +1 in both of the sections, then Paste the Script inside an Event Script and run it whenever you like.

NOTE: This can even be used with my [Call Scripts from Items] Tutorial here on GitHub. To do so, you need to follow that tutorial and insert this script's offset in the Item's Field_effect tab in HMA.

#special ChoosePartyMon                  - stores a partys Slot number indexed by 0 at 0x8004
#special2 0x8001 GetPartyMonSpecies      - takes the partys slot number from 0x8004, checks its species number and returns its value to 0x8001.
#VAR 0x8002                              - is used to store the desired Species Number to evolve into.

The way we're gonna do this now is to have the player choose a Party Mon, check its species value, and checklist the Value if its able to evolve, then we need to get the next Evolution's Species Value and have it stored somewhere. Now we delete the chosen Pokémon and give the one with the new species value.

To prevent us from having to do too much code in the checklist, we minimize the number of lines needed by ckecking if the Pokémon cannot evolve and then checking if the Pokémon is one of the few special exeptions where the index of the Evolution is not right after the first one.

Prior to writing this Script, I have created some Multichoice Boxes on Index Numbers 65 and 66.

  • 65 says [Option1] [Option2] [Option3],
  • 66 says [Option1] [Option2], These are being used below to let the player choose an Evolution if the Pokemons Evolution Path splits up.

NOTE: TRADE EVOLUTIONS ARE ALLOWED IN THIS SCRIPT. THIS CAN BE MODIFIED.

evolve:                                                     # This is the Start of the Script
 lock
  msgbox.yesno <auto>
  {
Do you want to evolve a Pokémon?  
  }
  if.yes.goto <evo.get>
  release
  end

evo.get:                                                    # This section Opens the party Menu and Stores the Slot Number and Species Value
special ChoosePartyMon
waitstate
if.compare.goto 0x8004 >= 6 <evo.exit>
special2 0x8001 GetPartyMonSpecies
call <evo.checklist>

evo.confirm:                                                # This Window lets you confirm your Choice.
bufferPokemon 0 0x8001
bufferPokemon 1 0x8002
msgbox.yesno <auto>
{
Are you sure you want to evolve your\n
[buffer1] into [buffer2]?    
}
if.yes.goto <evo.ret>
goto <evo.exit>

evo.ret:
return

evo.exit:                                                   # This Window exits the Script
msgbox.npc <auto>
{
Okay then maybe another time!    
}
goto <Menu>

evo.not_possible:                                           # This Window tells you that the Pokemon you have Chosen 
msgbox.npc <auto>                                           # is not able to evolve and asks if you want to choose something else.
{
Sorry, but your Pokémon cannot \nEvolve this way. 
}
msgbox.yesno <auto>
{
Do you want to choose another\nPokémon?    
}
if.yes.goto <evo.get>
goto <evo.exit>                                                 

evo.checklist:                                              # This is a very long checklist that checks if your chosen pokemon is able to evolve without a stone.
if.compare.goto 0x8001 = 3 <evo.not_possible>    #Venusaur
if.compare.goto 0x8001 = 6 <evo.not_possible>    #Charizard
if.compare.goto 0x8001 = 9 <evo.not_possible>    #Blastoise
if.compare.goto 0x8001 = 12 <evo.not_possible>   #Butterfree
if.compare.goto 0x8001 = 15 <evo.not_possible>   #Beedrill
if.compare.goto 0x8001 = 18 <evo.not_possible>   #Pidgeot
if.compare.goto 0x8001 = 20 <evo.not_possible>   #Raticate
if.compare.goto 0x8001 = 22 <evo.not_possible>   #Fearow
if.compare.goto 0x8001 = 24 <evo.not_possible>   #Arbok
if.compare.goto 0x8001 = 25 <evo.not_possible>   #Pikachu
if.compare.goto 0x8001 = 26 <evo.not_possible>   #Raichu
if.compare.goto 0x8001 = 28 <evo.not_possible>   #Sandslash
if.compare.goto 0x8001 = 31 <evo.not_possible>   #Nidoqueen
if.compare.goto 0x8001 = 34 <evo.not_possible>   #Nidoking
if.compare.goto 0x8001 = 35 <evo.not_possible>   #Clefairy
if.compare.goto 0x8001 = 36 <evo.not_possible>   #Clefable
if.compare.goto 0x8001 = 37 <evo.not_possible>   #Vulpix
if.compare.goto 0x8001 = 38 <evo.not_possible>   #Ninetales
if.compare.goto 0x8001 = 39 <evo.not_possible>   #Jigglypuff
if.compare.goto 0x8001 = 40 <evo.not_possible>   #Wigglytuff
if.compare.goto 0x8001 = 44 <evo.not_possible>   #Gloom
if.compare.goto 0x8001 = 45 <evo.not_possible>   #Vileplume
if.compare.goto 0x8001 = 47 <evo.not_possible>   #Parasect
if.compare.goto 0x8001 = 49 <evo.not_possible>   #Venomoth
if.compare.goto 0x8001 = 51 <evo.not_possible>   #Dugtrio
if.compare.goto 0x8001 = 53 <evo.not_possible>   #Persian
if.compare.goto 0x8001 = 55 <evo.not_possible>   #Golduck
if.compare.goto 0x8001 = 57 <evo.not_possible>   #Primeape
if.compare.goto 0x8001 = 58 <evo.not_possible>   #Growlithe
if.compare.goto 0x8001 = 59 <evo.not_possible>   #Arcanine
if.compare.goto 0x8001 = 62 <evo.not_possible>   #Poliwrath
if.compare.goto 0x8001 = 70 <evo.not_possible>   #Weepinbell
if.compare.goto 0x8001 = 71 <evo.not_possible>   #Victreebell
if.compare.goto 0x8001 = 73 <evo.not_possible>   #Tentacruel
if.compare.goto 0x8001 = 76 <evo.not_possible>   #Golem
if.compare.goto 0x8001 = 78 <evo.not_possible>   #Rapidash
if.compare.goto 0x8001 = 80 <evo.not_possible>   #Slowbro
if.compare.goto 0x8001 = 82 <evo.not_possible>   #Magneton
if.compare.goto 0x8001 = 83 <evo.not_possible>   #Farfetch´d
if.compare.goto 0x8001 = 85 <evo.not_possible>   #Dodrio
if.compare.goto 0x8001 = 87 <evo.not_possible>   #Dewgong
if.compare.goto 0x8001 = 89 <evo.not_possible>   #Muk
if.compare.goto 0x8001 = 90 <evo.not_possible>   #Shellder
if.compare.goto 0x8001 = 91 <evo.not_possible>   #Cloyster
if.compare.goto 0x8001 = 97 <evo.not_possible>   #Hypno
if.compare.goto 0x8001 = 99 <evo.not_possible>   #Kingler
if.compare.goto 0x8001 = 101 <evo.not_possible>   #Electrode
if.compare.goto 0x8001 = 102 <evo.not_possible>   #Exeggcute
if.compare.goto 0x8001 = 103 <evo.not_possible>   #Exeggcutor
if.compare.goto 0x8001 = 105 <evo.not_possible>   #Marowak
if.compare.goto 0x8001 = 106 <evo.not_possible>   #Kicklee
if.compare.goto 0x8001 = 107 <evo.not_possible>   #Hitmonchan
if.compare.goto 0x8001 = 108 <evo.not_possible>   #Lickitung
if.compare.goto 0x8001 = 110 <evo.not_possible>   #Weezing
if.compare.goto 0x8001 = 112 <evo.not_possible>   #Rhydon
if.compare.goto 0x8001 = 114 <evo.not_possible>   #Tangela 
if.compare.goto 0x8001 = 115 <evo.not_possible>   #Kangaskhan
if.compare.goto 0x8001 = 119 <evo.not_possible>   #Seaking
if.compare.goto 0x8001 = 120 <evo.not_possible>   #Staryu
if.compare.goto 0x8001 = 121 <evo.not_possible>   #Starmie
if.compare.goto 0x8001 = 122 <evo.not_possible>   #Mr.Mime
if.compare.goto 0x8001 = 124 <evo.not_possible>   #Jynx
if.compare.goto 0x8001 = 125 <evo.not_possible>   #Electabuzz
if.compare.goto 0x8001 = 126 <evo.not_possible>   #Magmar
if.compare.goto 0x8001 = 127 <evo.not_possible>   #Pinsir
if.compare.goto 0x8001 = 128 <evo.not_possible>   #Tauros
if.compare.goto 0x8001 = 130 <evo.not_possible>   #Gyarados
if.compare.goto 0x8001 = 131 <evo.not_possible>   #Lapras
if.compare.goto 0x8001 = 132 <evo.not_possible>   #Ditto
if.compare.goto 0x8001 = 133 <evo.not_possible>   #Evee
if.compare.goto 0x8001 = 134 <evo.not_possible>   #Vaporeon
if.compare.goto 0x8001 = 135 <evo.not_possible>   #Jolteon
if.compare.goto 0x8001 = 136 <evo.not_possible>   #Flareon
if.compare.goto 0x8001 = 139 <evo.not_possible>   #Omastar
if.compare.goto 0x8001 = 141 <evo.not_possible>   #Kabutops
if.compare.goto 0x8001 = 142 <evo.not_possible>   #Aerodactyl
if.compare.goto 0x8001 = 143 <evo.not_possible>   #Snorlax
if.compare.goto 0x8001 = 144 <evo.not_possible>   #Articuno
if.compare.goto 0x8001 = 145 <evo.not_possible>   #Zapdos
if.compare.goto 0x8001 = 146 <evo.not_possible>   #Moltres
if.compare.goto 0x8001 = 149 <evo.not_possible>   #Dragonite
if.compare.goto 0x8001 = 150 <evo.not_possible>   #Mewtwo
if.compare.goto 0x8001 = 151 <evo.not_possible>   #Mew
if.compare.goto 0x8001 = 154 <evo.not_possible>   #Meganium
if.compare.goto 0x8001 = 157 <evo.not_possible>   #Typhlosion
if.compare.goto 0x8001 = 160 <evo.not_possible>   #Feraligatr
if.compare.goto 0x8001 = 162 <evo.not_possible>   #Furret
if.compare.goto 0x8001 = 164 <evo.not_possible>   #Noctowl
if.compare.goto 0x8001 = 166 <evo.not_possible>   #Ledian
if.compare.goto 0x8001 = 168 <evo.not_possible>   #Ariados
if.compare.goto 0x8001 = 169 <evo.not_possible>   #Crobat
if.compare.goto 0x8001 = 171 <evo.not_possible>   #Lanturn
if.compare.goto 0x8001 = 176 <evo.not_possible>   #Togetic
if.compare.goto 0x8001 = 178 <evo.not_possible>   #Xatu
if.compare.goto 0x8001 = 181 <evo.not_possible>   #Ampharos
if.compare.goto 0x8001 = 182 <evo.not_possible>   #Bellossom
if.compare.goto 0x8001 = 184 <evo.not_possible>   #Azurill
if.compare.goto 0x8001 = 185 <evo.not_possible>   #Sudowoodoo
if.compare.goto 0x8001 = 186 <evo.not_possible>   #Politoed
if.compare.goto 0x8001 = 189 <evo.not_possible>   #Jumpluff
if.compare.goto 0x8001 = 190 <evo.not_possible>   #Aipom
if.compare.goto 0x8001 = 191 <evo.not_possible>   #Sunkern
if.compare.goto 0x8001 = 192 <evo.not_possible>   #Sunflora
if.compare.goto 0x8001 = 193 <evo.not_possible>   #Yanma
if.compare.goto 0x8001 = 195 <evo.not_possible>   #Quagsire
if.compare.goto 0x8001 = 196 <evo.not_possible>   #Espeon
if.compare.goto 0x8001 = 197 <evo.not_possible>   #Umbreon
if.compare.goto 0x8001 = 198 <evo.not_possible>   #Murcrow
if.compare.goto 0x8001 = 199 <evo.not_possible>   #Slowking
if.compare.goto 0x8001 = 200 <evo.not_possible>   #Misdreavous
if.compare.goto 0x8001 = 201 <evo.not_possible>   #Unown
if.compare.goto 0x8001 = 202 <evo.not_possible>   #Wobuffet
if.compare.goto 0x8001 = 203 <evo.not_possible>   #Girafarig
if.compare.goto 0x8001 = 205 <evo.not_possible>   #Forretress
if.compare.goto 0x8001 = 206 <evo.not_possible>   #Dunsparce
if.compare.goto 0x8001 = 207 <evo.not_possible>   #Gligar
if.compare.goto 0x8001 = 208 <evo.not_possible>   #steelix
if.compare.goto 0x8001 = 210 <evo.not_possible>   #Granbull
if.compare.goto 0x8001 = 211 <evo.not_possible>   #Qwillfish
if.compare.goto 0x8001 = 212 <evo.not_possible>   #Scizor
if.compare.goto 0x8001 = 213 <evo.not_possible>   #Shuckle
if.compare.goto 0x8001 = 214 <evo.not_possible>   #Heracross
if.compare.goto 0x8001 = 215 <evo.not_possible>   #Sneasel
if.compare.goto 0x8001 = 217 <evo.not_possible>   #Ursaring
if.compare.goto 0x8001 = 219 <evo.not_possible>   #Magcargo
if.compare.goto 0x8001 = 221 <evo.not_possible>   #Pilloswine
if.compare.goto 0x8001 = 222 <evo.not_possible>   #Corsola
if.compare.goto 0x8001 = 224 <evo.not_possible>   #Octillery
if.compare.goto 0x8001 = 225 <evo.not_possible>   #Delibird
if.compare.goto 0x8001 = 226 <evo.not_possible>   #Mantine
if.compare.goto 0x8001 = 227 <evo.not_possible>   #Skarmory
if.compare.goto 0x8001 = 229 <evo.not_possible>   #Houndoom
if.compare.goto 0x8001 = 230 <evo.not_possible>   #Kingdra
if.compare.goto 0x8001 = 232 <evo.not_possible>   #Donphan
if.compare.goto 0x8001 = 233 <evo.not_possible>   #Porygon2
if.compare.goto 0x8001 = 234 <evo.not_possible>   #Stantler
if.compare.goto 0x8001 = 235 <evo.not_possible>   #Smeargle
if.compare.goto 0x8001 = 237 <evo.not_possible>   #Hitmontop
if.compare.goto 0x8001 = 241 <evo.not_possible>   #Miltank
if.compare.goto 0x8001 = 242 <evo.not_possible>   #Blissey
if.compare.goto 0x8001 = 243 <evo.not_possible>   #Raikou
if.compare.goto 0x8001 = 244 <evo.not_possible>   #Entei
if.compare.goto 0x8001 = 245 <evo.not_possible>   #Suicune
if.compare.goto 0x8001 = 248 <evo.not_possible>   #Tyranitar
if.compare.goto 0x8001 = 249 <evo.not_possible>   #Lugia
if.compare.goto 0x8001 = 250 <evo.not_possible>   #Ho-Oh
if.compare.goto 0x8001 = 251 <evo.not_possible>   #Celebi

if.compare.goto 0x8001 = 279 <evo.not_possible>   #Sceptile
if.compare.goto 0x8001 = 282 <evo.not_possible>   #Blaziken
if.compare.goto 0x8001 = 285 <evo.not_possible>   #Swampert
if.compare.goto 0x8001 = 287 <evo.not_possible>   #Mightyena
if.compare.goto 0x8001 = 289 <evo.not_possible>   #Linoone
if.compare.goto 0x8001 = 292 <evo.not_possible>   #Beautifly
if.compare.goto 0x8001 = 294 <evo.not_possible>   #Dustox
if.compare.goto 0x8001 = 297 <evo.not_possible>   #Ludicolo
if.compare.goto 0x8001 = 300 <evo.not_possible>   #Shiftry
if.compare.goto 0x8001 = 305 <evo.not_possible>   #Swallow
if.compare.goto 0x8001 = 310 <evo.not_possible>   #Pelipper
if.compare.goto 0x8001 = 394 <evo.not_possible>   #Guardevoir
if.compare.goto 0x8001 = 312 <evo.not_possible>   #Masquerain
if.compare.goto 0x8001 = 307 <evo.not_possible>   #Breloom
if.compare.goto 0x8001 = 366 <evo.not_possible>   #Slaking
if.compare.goto 0x8001 = 302 <evo.not_possible>   #Ninjask
if.compare.goto 0x8001 = 303 <evo.not_possible>   #Shedinja
if.compare.goto 0x8001 = 372 <evo.not_possible>   #Exploud
if.compare.goto 0x8001 = 336 <evo.not_possible>   #Haryama
if.compare.goto 0x8001 = 320 <evo.not_possible>   #Nosepass
if.compare.goto 0x8001 = 316 <evo.not_possible>   #Delicatty
if.compare.goto 0x8001 = 322 <evo.not_possible>   #Sableye
if.compare.goto 0x8001 = 355 <evo.not_possible>   #Mawile
if.compare.goto 0x8001 = 384 <evo.not_possible>   #Aggron
if.compare.goto 0x8001 = 357 <evo.not_possible>   #Medicham
if.compare.goto 0x8001 = 338 <evo.not_possible>   #Manectric
if.compare.goto 0x8001 = 353 <evo.not_possible>   #Plusle
if.compare.goto 0x8001 = 354 <evo.not_possible>   #Minun
if.compare.goto 0x8001 = 386 <evo.not_possible>   #Volbeat
if.compare.goto 0x8001 = 387 <evo.not_possible>   #Illumise
if.compare.goto 0x8001 = 363 <evo.not_possible>   #Roselia
if.compare.goto 0x8001 = 368 <evo.not_possible>   #Swallot
if.compare.goto 0x8001 = 331 <evo.not_possible>   #Sharpedo
if.compare.goto 0x8001 = 314 <evo.not_possible>   #Wailord
if.compare.goto 0x8001 = 340 <evo.not_possible>   #Camerupt
if.compare.goto 0x8001 = 321 <evo.not_possible>   #Torcoal
if.compare.goto 0x8001 = 352 <evo.not_possible>   #Grumpig
if.compare.goto 0x8001 = 308 <evo.not_possible>   #Spinda
if.compare.goto 0x8001 = 334 <evo.not_possible>   #Flygon
if.compare.goto 0x8001 = 345 <evo.not_possible>   #Cacturn
if.compare.goto 0x8001 = 359 <evo.not_possible>   #Altaria
if.compare.goto 0x8001 = 380 <evo.not_possible>   #Zangoose
if.compare.goto 0x8001 = 379 <evo.not_possible>   #Seviper
if.compare.goto 0x8001 = 348 <evo.not_possible>   #Lunatone
if.compare.goto 0x8001 = 349 <evo.not_possible>   #Solrock
if.compare.goto 0x8001 = 324 <evo.not_possible>   #Whiscash
if.compare.goto 0x8001 = 327 <evo.not_possible>   #Crawdaunt
if.compare.goto 0x8001 = 319 <evo.not_possible>   #Claydoll
if.compare.goto 0x8001 = 389 <evo.not_possible>   #Cradily
if.compare.goto 0x8001 = 391 <evo.not_possible>   #Armaldo
if.compare.goto 0x8001 = 329 <evo.not_possible>   #Milotic
if.compare.goto 0x8001 = 385 <evo.not_possible>   #Castform
if.compare.goto 0x8001 = 317 <evo.not_possible>   #Kecleon
if.compare.goto 0x8001 = 378 <evo.not_possible>   #Banette
if.compare.goto 0x8001 = 362 <evo.not_possible>   #Dusclops
if.compare.goto 0x8001 = 369 <evo.not_possible>   #Tropius
if.compare.goto 0x8001 = 411 <evo.not_possible>   #Chimecho
if.compare.goto 0x8001 = 376 <evo.not_possible>   #Absol
if.compare.goto 0x8001 = 347 <evo.not_possible>   #Glalie
if.compare.goto 0x8001 = 343 <evo.not_possible>   #Walrain
if.compare.goto 0x8001 = 374 <evo.not_possible>   #Huntail
if.compare.goto 0x8001 = 375 <evo.not_possible>   #Gorebyss
if.compare.goto 0x8001 = 381 <evo.not_possible>   #Relicanth
if.compare.goto 0x8001 = 325 <evo.not_possible>   #Luvdisc
if.compare.goto 0x8001 = 397 <evo.not_possible>   #Salamence
if.compare.goto 0x8001 = 400 <evo.not_possible>   #Metagross
if.compare.goto 0x8001 = 401 <evo.not_possible>   #Regirock
if.compare.goto 0x8001 = 402 <evo.not_possible>   #Regice
if.compare.goto 0x8001 = 403 <evo.not_possible>   #Registeel
if.compare.goto 0x8001 = 407 <evo.not_possible>   #Latias
if.compare.goto 0x8001 = 408 <evo.not_possible>   #Latios
if.compare.goto 0x8001 = 404 <evo.not_possible>   #Kyogre
if.compare.goto 0x8001 = 405 <evo.not_possible>   #Groudon
if.compare.goto 0x8001 = 406 <evo.not_possible>   #Rayquaza
if.compare.goto 0x8001 = 409 <evo.not_possible>   #Jirachi
if.compare.goto 0x8001 = 410 <evo.not_possible>   #Deoxys
if.compare.goto 0x8001 > 411 <evo.not_possible>   #Egg and Unowns
goto <evo.checklist.special>

evo.checklist.special:                                      # This is the Special Checklist for Pokemon thats Evolution is not their Index Number+1
#Golbat-Crobat  42 -> 169                                   # Or of those who have a Split Evolution path.
if.compare.goto 0x8001 = 42 <evo.Golbat>

#Poliwhirl-politoed 61 -> 186
if.compare.goto 0x8001 = 61 <evo.Poliwhirl>

#Slowpoke-Slowking 79 -> 199
if.compare.goto 0x8001 = 79 <evo.Slowpoke>

#onix-steelix 95 -> 208
if.compare.goto 0x8001 = 95 <evo.Steelix>

#Tyrogue -Hitmonchan - Kicklee -Hitmontop 236 , 107, 108, 237
if.compare.goto 0x8001 = 236 <evo.Tyrogue>

#Chancey - Blissey 113 -> 242
if.compare.goto 0x8001 = 113 <evo.Blissey>

#Seadra- Kingdra, 117 -> 230
if.compare.goto 0x8001 = 117 <evo.Seadra>

#Scyther - Scizor, 123 -> 212
if.compare.goto 0x8001 = 123 <evo.Scyther>

#Magby - Magmar, 240 -> 126
if.compare.goto 0x8001 = 240 <evo.Magby>

#Smoochum .- Jinx, 238 -> 124
if.compare.goto 0x8001 = 238 <evo.Smoochum>

#Elekid - Elektek, 239 -> 125
if.compare.goto 0x8001 = 239 <evo.Elekid>

#Evee - Espeon - Umbreon, 133, 196, 197
if.compare.goto 0x8001 = 133 <evo.Evee>

#Porygon - Porygon2 , 137 -> 233
if.compare.goto 0x8001 = 137 <evo.Porygon>

#Pichu - Pikachu, 172 , 25
if.compare.goto 0x8001 = 172 <evo.Pichu>

#cleffa - clefairy, 173 -> 35
if.compare.goto 0x8001 = 173 <evo.Cleffa>

#Igglybuff - Jigglypuff, 174 -> 39
if.compare.goto 0x8001 = 174 <evo.Igglybuff>

#Azurill - Marill, 350 -> 183
if.compare.goto 0x8001 = 350 <evo.Azurill>

#Wurmple - Silcoon - Cascoon, 2290 -> 291 / 291
if.compare.goto 0x8001 = 265 <evo.Wurmple>

#Nincada - Ninjask / Shedinja, 301 -> 302 / 303
if.compare.goto 0x8001 = 301 <evo.Nincada>

#Clamperl, Huntail, Gorebyss, 373 -> 374 / 375
if.compare.goto 0x8001 = 373 <evo.Clamperl>

goto <evo.do>

evo.Golbat:
call <evo.confirm>
setvar 0x8002 169
goto <evo.do.special>

evo.Poliwhirl:
call <evo.confirm>
setvar 0x8002 186
goto <evo.do.special>

evo.Slowpoke:                                              #This Pokemons Evolution Path splits up into 2 Options, so I used Multichoice List 66 here. 
bufferPokemon 0 0x8001                                     #Keep in mind that you need to create these prior to using this script.
msgbox.npc <auto>                                          #There are more Multichoice Boxes below that I didnt mark, so keep in mind to modify these.
{
Your [buffer1] can evolve into\n
2 different Pokémon.\pn
Pick your desired Evolution!
}
multichoice 0 0 66 0
if.compare.goto 0x800D = 0 <evo.Slowpoke.o1>
if.compare.goto 0x800D = 1 <evo.Slowpoke.o2>
if.compare.goto 0x800D >= 127 <evo.exit>

evo.Slowpoke.o1:
bufferPokemon 1 80
call <evo.confirm>
setvar 0x8002 80
goto <evo.do.special>

evo.Slowpoke.o2:
bufferPokemon 1 199
call <evo.confirm>
setvar 0x8002 199
goto <evo.do.special>

evo.Steelix:
setvar 0x8002 208
call <evo.confirm>
goto <evo.do.special>

evo.Tyrogue:                                                #This Pokemons Evolution Path splits up into 3 Options, so I used Multichoice List 65 here.
bufferPokemon 0 0x8001                                      #Keep in mind that you need to create these prior to using this script.
msgbox.npc <auto>                                           #There are more Multichoice Boxes below that I didnt mark, so keep in mind to modify these.
{
Your [buffer0] can evolve into\n
3 different Pokémon.\pn
Pick your desired Evolution!
}
multichoice 0 0 65 0
if.compare.goto 0x800D = 0 <evo.Tyrogue.o1>
if.compare.goto 0x800D = 1 <evo.Tyrogue.o2>
if.compare.goto 0x800D = 2 <evo.Tyrogue.o3>
if.compare.goto 0x800D >= 127 <evo.exit>

evo.Tyrogue.o1:
bufferPokemon 1 107
setvar 0x8002 107
call <evo.confirm>
goto <evo.do.special>

evo.Tyrogue.o2:
bufferPokemon 1 108
setvar 0x8002 108
call <evo.confirm>
goto <evo.do.special>

evo.Tyrogue.o3:
bufferPokemon 1 237
setvar 0x8002 237
call <evo.confirm>
goto <evo.do.special>

evo.Blissey:
setvar 0x8002 242
call <evo.confirm>
goto <evo.do.special>

evo.Seadra:
setvar 0x8002 230 
call <evo.confirm>
goto <evo.do.special>

evo.Scyther:
setvar 0x8002 212
call <evo.confirm>
goto <evo.do.special>

evo.Magby:
setvar 0x8002 126
call <evo.confirm>
goto <evo.do.special>

evo.Smoochum:
setvar 0x8002 124
call <evo.confirm>
goto <evo.do.special>

evo.Elekid:
setvar 0x8002 125
call <evo.confirm>
goto <evo.do.special>

evo.Evee:
bufferPokemon 0 0x8001
msgbox.npc <auto>
{
Your [buffer1] can evolve into\n
2 different Pokémon.\pn
Pick your desired Evolution!
}
multichoice 0 0 66 0
if.compare.goto 0x800D = 0 <evo.Evee.o1>
if.compare.goto 0x800D = 1 <evo.Evee.o2>
if.compare.goto 0x800D >= 127 <evo.exit>

evo.Evee.o1:
bufferPokemon 1 196
setvar 0x8002 196
call <evo.confirm>
goto <evo.do.special>

evo.Evee.o2:
bufferPokemon 1 197
setvar 0x8002 197
call <evo.confirm>
goto <evo.do.special>

evo.Porygon:
setvar 0x8002 233
call <evo.confirm>
goto <evo.do.special>

evo.Pichu:
setvar 0x8002 25
call <evo.confirm>
goto <evo.do.special>

evo.Cleffa:
setvar 0x8002 35
call <evo.confirm>
goto <evo.do.special>

evo.Igglybuff:
setvar 0x8002 39
call <evo.confirm>
goto <evo.do.special>

evo.Azurill:
setvar 0x8002 183
call <evo.confirm>
goto <evo.do.special>

evo.Wurmple:
bufferPokemon 0 0x8001
msgbox.npc <auto>
{
Your [buffer1] can evolve into\n
2 different Pokémon.\pn
Pick your desired Evolution!
}
multichoice 0 0 66 0
if.compare.goto 0x800D = 0 <evo.Wurmple.o1>
if.compare.goto 0x800D = 1 <evo.Wurmple.o2>
if.compare.goto 0x800D >= 127 <evo.exit>

evo.Wurmple.o1:
bufferPokemon 1 291
setvar 0x8002 291
call <evo.confirm>
goto <evo.do.special>

evo.Wurmple.o2:
bufferPokemon 1 292
setvar 0x8002 292
call <evo.confirm>
goto <evo.do.special>

evo.Nincada:
msgbox.npc <auto>
{
evo.Nincada    
}
bufferPokemon 0 0x8001
msgbox.npc <auto>
{
Your [buffer1] can evolve into\n
2 different Pokémon.\pn
Pick your desired Evolution!
}
multichoice 0 0 66 0
if.compare.goto 0x800D = 0 <evo.Nincada.o1>
if.compare.goto 0x800D = 1 <evo.Nincada.o2>
if.compare.goto 0x800D >= 127 <evo.exit>

evo.Nincada.o1:
bufferPokemon 1 302
setvar 0x8002 302
call <evo.confirm>
goto <evo.do.special>

evo.Nincada.o2:
bufferPokemon 1 303
setvar 0x8002 303
call <evo.confirm>
goto <evo.do.special>

evo.Clamperl:
bufferPokemon 0 0x8001
msgbox.npc <auto>
{
Your [buffer1] can evolve into\n
2 different Pokémon.\pn
Pick your desired Evolution!
}
multichoice 0 0 66 0
if.compare.goto 0x800D = 0 <evo.Clamperl.o1>
if.compare.goto 0x800D = 1 <evo.Clamperl.o2>
if.compare.goto 0x800D >= 127 <evo.exit>

evo.Clamperl.o1:
bufferPokemon 1 374
setvar 0x8002 374
call <evo.confirm>
goto <evo.do.special>

evo.Clamperl.o2:
bufferPokemon 1 375
setvar 0x8002 375
call <evo.confirm>
goto <evo.do.special>

evo.do:
bufferPokemon 0 0x8001
copyvar 0x8002 0x8001
addvar 0x8002 1
bufferPokemon 1 0x8002
call <evo.confirm>
callasm 0xXXXXXX
givePokemon 0x8002 1 0 0 0 
msgbox.npc <auto>
{
Your [buffer1] \nevolved into [buffer2]
}
sound mus_level_up
checksound
release
end

evo.do.special:
bufferPokemon 0 0x8001
bufferPokemon 1 0x8002
callasm 0xXXXXXX
givePokemon 0x8002 1 0 0 0 
msgbox.npc <auto>
{
Your [buffer1] \nevolved into [buffer2]
}
sound mus_level_up
checksound
release
end
⚠️ **GitHub.com Fallback** ⚠️