Clone
1
Evolution Based On Caught Pokeball
judicornadamsfoster edited this page 2026-09-27 20:26:22 +01:00

Evolution Based On Caught Pokeball

Want to evolve a Pokemon into different mons based on what Pokeball its caught in?

Now you can.

Poke ball
pokeball poke

Great ball
greatball great

Ultra ball
ultraball ultra

Premier ball
premier premier

Luxury ball
luxury luxury

include/constants/pokemon.h

add this line to the evolution sectiion (increase the number by 1 from the last entry, 16 used for this example)

#define EVO_POKEBALL 16 // catch with a specific pokeball and level up

src/pokemon.c

in section u16 GetEvolutionTargetSpecies
add to EVO_NORMAL section:

            case EVO_POKEBALL:
                if (GetMonData(mon, MON_DATA_POKEBALL, NULL)
                    == gEvolutionTable[species][i].param)
                    targetSpecies = gEvolutionTable[species][i].targetSpecies;
                break;

src/data/pokemon/evolution.c

add the evolution method to a Pokemon and choose a specific pokeball from the valid balls in your hack
(Eevee and Poke/Great/Ultra/Premier/Luxury balls chosen for this example)

    [SPECIES_EEVEE]      = {{EVO_POKEBALL, ITEM_POKE_BALL, SPECIES_JOLTEON},
                            {EVO_POKEBALL, ITEM_GREAT_BALL, SPECIES_VAPOREON},
                            {EVO_POKEBALL, ITEM_ULTRA_BALL, SPECIES_FLAREON},
                            {EVO_POKEBALL, ITEM_PREMIER_BALL, SPECIES_ESPEON},
                            {EVO_POKEBALL, ITEM_LUXURY_BALL, SPECIES_UMBREON}},