Haven's Unofficial Build Of Leon's Dynamic Pokemon Expansion Complete FireRed Upgrade Rombase - haven1433/HexManiacAdvance GitHub Wiki

Haven's Unofficial Build Of Leon's Dynamic Pokemon Expansion / Complete FireRed Upgrade Rombase

(hubol dpe/cfru for short)

If you open an unedited BPRE0 rom in HexManiacAdvance, you can apply HUBOL DPE/CFRU from the Utilities menu. As the name implies, this is an unofficial build of Leon's DPE/CFRU rombase. It's the fastest way to get started using DPE/CFRU. After applying the patch, you can make changes to your game in HMA as usual.

What changes are made compared to Leon's Rom Base?

  • Shortened item 370/371 names (MysticTicket / AuroraTicket) since they were too long.
  • Trainers that have either (or both) of auto-items or auto-moves for their Pokémon can now give their Pokémon IVs. The IVs can be any value between 0 and 255 (normal vanilla limit is 31), and the value will be applied to all IVs. Pokémon that use both custom moves and custom items still utilize the trainers-with-evs table instead (called data.trainers.evs in HMA).

Using Included Features

Using Trainers with EVs

A new table, data.trainers.evs, lets you customize trainer Pokémon much more than you could before. If you set a Pokémon trainer to use custom moves and custom items, its "IVs" value will pull from this table.

For example, if you set Brock to use both custom moves and custom items, and then set his first Geodude IVs = 10, then:

Customize Example
Nature Geodude will be Modest
IVs Geodude will have 31 IVs in each stat
EVs Geodude will have 6 hp, 252 Special Attack, and 252 Special Defense EVs
Ball It will use Brock's class-based ball
Ability It will have a Random ability (from among the 2 abilities it could normally have).

Go check data.traieners.evs for more info, or to customize what each slot does. Note that expanding this table after insertion is not safe.

Feature Flags

Use setflag and clearflag in scripts in your game to turn these features on/off.

Battle Flags:

Name Flag Description Clears After Battle?
Inverse 0x900 Enable Inverse Battles Yes
Sky 0x901 Enable Sky Battles Yes
No Catching 0x902 Cannot catch Pokémon during this battle Yes
No Running 0x903 Cannot run away during this battle Yes
No Catching/Running 0x904 Cannot catch Pokémon or run away during this battle Yes
Trainer Catching 0x905 Can catch trainer Pokémon during this trainer battle Yes
Exp Share 0x906 All Pokémon gain experience after the battle
Double Battle 0x907 The next battle will be a double battle, if possible
Smart Wild 0x09C The next wild Pokémon you face will use AI instead of random moves. Yes
Scale Wild Pokémon 0x90D Wild Pokémon levels will match your team's lowest level
Scale Trainer Pokémon 0x90E Trainer Pokémon levels will match your team's highest level
Hidden Ability 0x90F The next wild Pokémon (or givepokemon) will have its Hidden Ability Yes
Gigantamax 0x928 The next wild Pokémon (or givepokemon) will be able to Gigantamax, if it has an evolution that supports it Yes
Wild Double 0x910 The next wild battle will be a double Yes
Shiny 0x913 The next wild Pokémon (or givepokemon) will be shiny Yes
No Bag 0x915 No bag items in battle
Dynamax 0x918 If you have the Dynamax Band item, you can Dynamax in battle
Fast Battle Messages 0x925 Battle Messages won't pause
Reset Consumables 0x927 Consumable Hold Items (like berries / gems) are reset after the battle Yes
Species Randomizer 0x940 Use random Pokémon for wild, trainers, and givepokemon
Learnset Randomizer 0x941 Learn random moves during levelup
Ability Randomizer 0x942 Have random Abilities for Pokémon

You can also use the macro cfru.wild.moves in scripts to set the moves of the next wild Pokémon you fight:

cfru.wild.moves SURF "ICE BEAM" SING EARTHQUAKE

Menu Flags:

Name Flag Description
Hide Bag 0x91B Don't show 'Bag' in the menu
Hide Player 0x91C Don't show 'Player' in the menu
Hide Save 0x91D Don't show 'Save' in the menu
Show DexNav 0x91E Show Tools in the menu. The Tools menu replaces Pokédex, and lets you access both the Pokédex and the DevNav. Do not give the player the DexNav until they have the Pokédex.

Other Flags:

Name Flag Description
No Random Encounters 0x911 No wild encounters from grass/caves/surfing. You can still get encounters from fishing / smashing rocks / sweet scent.
Enable Running 0x82F If not set, the player cannot run
Move Relearner Any Level 0x916 Move Relearner teaches moves of any level
Egg Relearner 0x917 Move Relearner teaches egg moves
Daily Events 0xE00 - 0xEFF Use these flags however you like. They will be automatically cleared every day.

Regional Pokedex

The DPE introduces a new table, called data.pokedex.kanto, to store the order of the regional dex. The default regional dex table always holds the hoenn region's order, because that's how GameFreak programmed it.

You can still use HMA's utility to reorder the national dex. But to reorder/expand the regional dex, you have to edit the data.pokedex.kanto table.

  • Entry 0 of the table is the number of pokemon you want in the dex. It's shown as a pokemon, but really it's just the number that matters. If you want 151 pokemon in your regional dex, set this value to 151.
  • The remaining entries show you which pokemon will appear in each slot of the regional dex. So if you want the 7th pokemon to be Pikachu, set data.pokedex.kanto/7 to Pikachu. This table is safe to expand, but make sure you update entry 0 to match.

Roaming Pokémon

As with vanilla, you can edit the roaming maps using data.maps.roaming.sets. Roaming Pokémon always appear in maps from bank 3, so you use the table to specify which maps from bank 3 are in each set. When you change maps, the roaming Pokémon will usually change to another map in the same set, but will occasionally switch to another set. There are 25 sets, and you should not expand them.

You can setup Roaming Pokémon using the cfru.init.roamer macro, like this:

cfru.init.roamer Charizard 50 OnLand NotWater
  • You can only have one roaming Pokémon of each species. If you try to add another, the result variable (0x800D) will be set to 0.
  • You can only have up to 10 roaming Pokémon at once. If you try to add another, the result variable (0x800D) will be set to 0.
  • When you successfully add a new roaming Pokémon, the result variable (0x800D) will be set to 1.
  • If you choose to customize data.maps.roaming.sets, make sure to keep at least 2 different maps in each set, and at least one set with a different first map. Otherwise, roaming Pokémon have a 1/16 chance of hanging your game every time they change maps while on your map (usually because you failed to catch them).

How to use Mega Evolutions

Mega Evolution will be available in battle if you have the key item Mega Ring in your inventory. If you don't have the ring, you won't be able to Mega Evolve. Additionally, your Pokémon needs to meet the criteria for one of its mega evolutions from the evolution table. This usually means holding a Mega Stone such as Venasaurite, but could mean having a specific learned move or holding a primal reversion item.

When setting up a custom Mega Evolution on a new Pokémon, remember that you need to give the mega evolved form an entry in its evolution table to let it turn back into the normal form. Look at an existing Mega-Pokémon's evolution table to see how to set this up.

Mega-Evolve by pressing START while selecting a Pokémon move in battle.

How to use Z-Moves

Z-Moves will be available in battle if you have the key item Z Power Ring in your inventory. If you don't have the ring, you won't be able to use Z moves. Additionally, your Pokémon needs to be holding a Z Crystal, such as Normalium Z, and have a Normal-Type move.

Use Z-Moves by pressing START while selecting a Pokémon move in battle.

How to use Dynamax

Dynamax will be available in battle when you set flag 0x918. Additionally, you need to have the key item Dynamax Band in your inventory. If you don't have the band, or if the flag isn't set, you won't be able to Dynamax.

When setting up a custom Gigantamax on a new Pokémon, remember that you need to give the Gigantamaxed form an entry in its evolution table to let it turn back into the normal form. Look at an existing Gigantamax's evolution table to see how to set this up.

Dynamax by pressing START while selecting a Pokémon move in battle. Mega Evolutions / Z Moves take precedence over Dynamax, so be careful about what items your Pokémon hold in battle.

How to Make Dynamax Raids

Raid battles are started with special 0x118. Flag 0x91A is used to avoid forcing the end to a raid battle, and also disables catching the Raid Boss. No other documentation about the CFRU's Dynamax Raids exists.

Other Included Features

There's nothing you need to do to interact with these features. They're just changes you get by using this rombase.

  • Experience points after catching a Pokémon
  • Day/Night
  • Additional Pokémon, Abilities (+ Hidden Abilities), Moves, Tutors, OWs, TMs, and Items
  • Buy 10 Pokéballs to get a Premier Ball
  • Save File: More PC Boxes / Flags / Vars
  • Fix for the "GameFreak Presents" intro screen
  • Gender Text Color
  • Faster New Game (skip controls tutorial)
  • Decapitalization
  • Sideways Stairs
  • Various battle engine improvements
    • Ability popups in battle
    • Press L on a move in battle for info about that move
    • Indicate which moves are not effective / super effective

Using your own DPE/CFRU

Both DPE/CFRU and Leon's base for it are designed to be customizable. Use those instead of HUBOL if you're interested in turning some of the features on/off for yourself. If you follow the official steps of applying Leon's patches, then the DPE, then the CFRU, HMA should still be able to pick up most of the data in the game. However, any CFRU-specific tables (such as the trainers-with-evs table, or class-specific Pokéball table) probably won't be found automatically.

Links to the full documentation