Skip to content

Change Starter Pokémon

Thomas Winwood edited this page Nov 19, 2019 · 4 revisions

A very popular modification of the Pokémon games is the change of the starter Pokémon due to personal preferences or to create a special challenge (Magikarp only, etc.). In this tutorial, we will learn how to change the starter Pokémon in the pokeemerald dissasembly.

Change the Species

Open src/starter_choose.c. You will find the following lines:

static const u16 sStarterMon[STARTER_MON_COUNT] =
{
    SPECIES_TREECKO,
    SPECIES_TORCHIC,
    SPECIES_MUDKIP,
};

Let us edit the species of the starter Pokémons, so you can beat Pokémon Emerald with the starters of the second generation. In most cases, the constant identifier of the species is obtained by putting SPECIES_ in front of the name of the Pokémon. But if you are not sure, for example if the name contains special characters, you can look it up in src/data/text/species_names.h.

static const u16 sStarterMon[STARTER_MON_COUNT] =
{
    SPECIES_CHIKORITA,
    SPECIES_CYNDAQUIL,
    SPECIES_TOTODILE,
};

That is basically it!

Change the Level

Additionally, let's change the level of the starter Pokémon to 3 to increase the challenge a bit. Open src/battle_setup.c and look at:

static void CB2_GiveStarter(void)
{
    u16 starterMon;

    *GetVarPointer(VAR_STARTER_MON) = gSpecialVar_Result;
    starterMon = GetStarterPokemon(gSpecialVar_Result);
    ScriptGiveMon(starterMon, 5, ITEM_NONE, 0, 0, 0);
    ResetTasks();
    PlayBattleBGM();
    SetMainCallback2(CB2_StartFirstBattle);
    BattleTransition_Start(B_TRANSITION_BLUR);
}

Interesting for us is the line ScriptGiveMon(starterMon, 5, ITEM_NONE, 0, 0, 0);.

u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)

So let's change the 5 to a 3. Save all files, make the ROM and have fun with your level 3 Cyndaquil!

Clone this wiki locally