pokeemerald-expansion

Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read this guide to learn how to fork the repository and clone locally from there.

What is pokeemerald-expansion?

pokeemerald-expansion is a decomp hack base project based off pret's pokeemerald decompilation project. It's recommended that any new projects that plan on using it, to clone this repository instead of pret's vanilla repository, as we regurlarly incorporate pret's documentation changes. This is NOT a standalone romhack, and as such, most features will be unavailable and/or unbalanced if played as is.

If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. You can phrase it as the following:

Based off RHH's pokeemerald-expansion v1.8.0 https://github.com/rh-hideout/pokeemerald-expansion/

What features are included?

  • IMPORTANT❗❗ Read through these to learn what features you can toggle:
  • Upgraded battle engine.
    • Gen5+ damage calculation.
    • 2v2 Wild battles support.
    • 1v2/2v1 battles support.
    • Fairy Type (configurable).
    • Physical/Special/Status Category (configurable).
    • New moves and abilities up to Scarlet and Violet.
      • Custom Contest data up to SwSh, newer moves are WIP. (source)
    • Battle gimmick support:
      • Mega Evolution
      • Primal Reversion
      • Ultra Burst
      • Z-Moves
        • Gen 8+ damaging moves are given power extrapolated from Gen 7.
        • Gen 8+ status moves have no additional effects, like Healing Wish.
      • Dynamax and Gigantamax
    • Initial battle parameters
      • Queueing stat boosts (aka, Totem Boosts)
      • Setting Terrains.
    • Mid-turn speed recalculation.
    • Quick Poké Ball selection in Wild Battles
      • Hold R to change selection with the D-Pad.
      • Press R to use last selected Poké Ball.
    • Run option shortcut
    • Faster battle intro - Message and animation/cry happens at the same time.
    • Faster HP drain.
    • Battle Debug menu.
      • Accessed by pressing Select on the "Fight/Bag/Pokémon/Run" menu.
    • Option to use AI flags in wild Pokémon battles.
    • FRLG/Gen4+ whiteout money calculation.
    • Configurable experience settings
      • Experience on catch.
      • Splitting experience.
      • Trainer experience.
      • Scaled experience.
      • Unevolved experience boost.
    • Frostbite.
      • Doesn't replace freezing unless a config is enabled, so you can mix and match.
    • Critical capture.
    • Removed badge boosts (configurable).
    • Recalculating stats at the end of every battle.
    • Level 100 Pokémon can earn EVs.
    • Inverse battle support.
    • TONS of other features listed here.
  • Full Trainer customization
    • Nickname, EVs, IVs, moves, ability, ball, friendship, nature, gender, shininess.
    • Custom tag battle support (teaming up an NPC in a double battle).
    • Sliding trainer messages.
    • Upgraded Trainer AI
      • Considers newer move effects.
      • New flag options to let you customize the intelligence of your trainers.
      • Faster calculations.
    • Specify Poké Balls by Trainer class.
  • Pokémon Species from Generations 1-9.
    • Simplified process to add new Pokémon.
    • Option to disable unwanted families.
    • Updated sprites to DS style.
    • Updated stats, types, abilities and egg groups (configurable).
    • Updated Hoenn's Regional Dex to match ORAS' (configurable).
    • Updated National Dex incorporating the new species.
    • Sprite and animation visualizer.
      • Accesible by pressing Select on a Pokémon's Summary screen.
    • Gen4+ evolution methods, with some changes:
      • Mossy Rock, Icy Rock and Magnetic Field locations match ORAS'.
        • Leaf, Ice and Thunder Stones may also be used.
      • Inkay just needs level 30 to evolve.
        • You can't physically have both the RTC and gyroscope, so we skip this requirement.
      • Sylveon uses Gen8+'s evolution method (friendship + Fairy Move).
      • Option to use hold evolution items directly like stones.
    • Hidden Abilities.
      • Available via Ability Patch.
      • Compatible with Ghoul's DexNav branch.
    • All gender differences.
      • Custom female icons for female Hippopotas Hippowdon, Pikachu and Wobbufett
    • 3 Perfect IVs on Legendaries, Mythicals and Ultra Beasts.
  • Customizable form change tables. Full list of methods here.
    • Item holding (eg. Giratina/Arceus)
    • Item using (eg. Oricorio)
      • Time of day option for Shaymin
    • Fainting
    • Battle begin and end (eg. Xerneas)
      • Move change option for Zacian/Zamazenta
    • Battle end in terrains (eg. Burmy)
    • Switched in battle (eg. Palafin)
    • HP Threshold (eg. Darmanitan)
    • Weather (eg. Castform)
    • End of turn (eg. Morpeko)
    • Time of day (eg. Shaymin)
    • Fusions (eg. Kyurem)
  • Breeding Improvements
    • Incense Baby Pokémon now happen automatically (configurable).
    • Level 1 eggs (configurable).
    • Poké Ball inheriting (configurable).
    • Egg Move Transfer, including Mirror Herb (configurable).
    • Nature inheriting 100% of the time with Everstone (configurable)
    • Gen6+ Ability inheriting (configurable).
  • Items from newer Generations. Full list here.
    • Gen 6+ Exp. Share (configurable)
    • Berserk Gene
    • Most battle items from Gen 4+
    • Existing item data but missing effects:
      • Gimmighoul Coin
      • Booster Energy
      • Tera Shards
      • Tera Orb
  • Feature branches incorporated (with permission):
    • RHH intro credits by @Xhyzi.
      • A small signature from all of us to show the collective effort in the project :)
    • Overworld debug by @TheXaman
      • May be disabled.
      • Accesible by pressing R + Start in the overworld by default.
      • Additional features:
        • Clear Boxes: cleans every Pokémon from the Boxes.
        • Hatch an Egg: lets you choose an Egg in your party and immediately hatch it.
    • HGSS Pokédex by @TheXaman
      • May be disabled.
      • Additional features:
        • Support for new evolution methods.
        • Dark Mode.
    • Nature Colors in summary screen by @DizzyEggg
    • Dynamic Multichoice by @SBird1337
    • Saveblock Cleansing by @ghoulslash
  • Other features
    • Pressing B while holding a Pokémon drops them like in modern games (configurable).
    • Running indoors (configurable).
    • Configurable overworld poison damage.
    • Configurable flags for disabling Wild encounters and Trainer battles.
    • Configurable flags for forcing or disabling Shinies.
    • Reusable TM (configurable).
    • B2W2+ Repel system that also supports LGPE's Lures
    • Gen6+'s EV cap.
    • All bugfixes from pret included.
    • Fixed overworld snow effect.

There are some mechanics, moves and abilities that are missing and being developed. Check the project's milestones to see which ones.

Documentation on features can be found here

If I already have a project based on regular pokeemerald, can I use pokeemerald-expansion?

Yes! Keep in mind that we keep up with pret's documentation of pokeemerald, which means that if your project a bit old, you might get merge conflicts that you need to solve manually.

  • If you haven't set up a remote, run the command git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion.
  • Once you have your remote set up, run the command git pull RHH master.

With this, you'll get the latest version of pokeemerald-expansion, plus a couple of bugfixes that haven't been released into the next patch version :)

How do I update my version of pokeemerald-expansion?

  • If you haven't set up a remote, run the command git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion.
  • Check your current version.
    • You can check in the debug menu's Utilities -> Expansion Version option.
    • If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the changelogs to determine your version based on the features available on your repository.
  • Once you have your remote set up, run the command git pull RHH expansion/X.Y.Z, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.8.4, use git pull RHH expansion/1.8.4).
    • Important: If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on)
  • Alternatively, you can update to unreleased versions of the expansion.
    • master (stable): It contains unreleased bugfixes that will come in the next patch version. To merge, use git pull RHH master.
    • upcoming (unstable, with potential bugs): It contains unreleased features that will come in the next minor version. To merge, use git pull RHH upcoming.

Please consider crediting the entire list of contributors in your project, as they have all worked hard to develop this project :)

There's a bug in the project. How do I let you guys know?

Please submit any issues with the project here. Make sure that the issue wasn't reported by someone else by searching using the filters.

Can I contribute even if I'm not a member of ROM Hacking Hideout?

Yes! Contributions are welcome via Pull Requests and they will be reviewed by maintainers. Don't feel discouraged if we take a bit to review your PR, we'll get to it.

Who maintains the project?

The project was originally started by DizzyEgg alongside other contributors.

The project has now gotten larger and DizzyEgg is now maintaining the project as part of the ROM Hacking Hideout community. Some members of this community are taking on larger roles to help maintain the project.

What is the ROM Hacking Hideout?

A Discord-based ROM hacking community that has many members who hack using the disassembly and decompilation projects for Pokémon. Quite a few contributors to the original feature branches by DizzyEgg were members of ROM Hacking Hideout. You can call it RHH for short!

Click here to join the RHH Discord Server!

Instructions

These instructions explain how to set up the tools required to build pokeemerald Expansion, which assembles the source files into a ROM (pokeemerald.gba).

These instructions come with notes which can be expanded by clicking the "Note..." text. In general, you should not need to open these unless if you get an error or if you need additional clarification.

If you run into trouble, ask for help on Discord or IRC (see README.md).

Windows

Windows has instructions for building with three possible terminals, providing 3 different options in case the user stumbles upon unexpected errors.

Unscientific benchmarks suggest msys2 is 2x slower than WSL1, and Cygwin is 5-6x slower than WSL1.

Note for advanced users: WSL2...

WSL2 is an option and is even faster than WSL1 if files are stored on the WSL2 file system, but some tools may have trouble interacting with the WSL2 file system over the network drive. For example, tools which use Qt versions before 5.15.2 such as porymap may have problems with parsing the \wsl$ network drive path.

All of the Windows instructions assume that the default drive is C:\. If this differs to your actual drive letter, then replace C with the correct drive letter when reading the instructions.

A note of caution: As Windows 7 is officially unsupported by Microsoft and Windows 8 has very little usage, some maintainers are unwilling to maintain the Windows 7/8 instructions. Thus, these instructions may break in the future with fixes taking longer than fixes to the Windows 10 instructions.

Windows 10/11 (WSL1)

WSL1 is the preferred terminal to build pokeemerald Expansion. The following instructions will explain how to install WSL1 (referred to interchangeably as WSL).

Installing WSL1

  1. Open Windows Powershell as Administrator, and run the following command (Right Click or Shift+Insert is paste in the Powershell).

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    
  2. Once the process finishes, restart your machine.

  3. The next step is to choose and install a Linux distribution from the Microsoft Store. The following instructions will assume Ubuntu as the Linux distribution of choice.

    Note for advanced users...

    You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested.

  4. Open the Microsoft Store Linux Selection, click Ubuntu, then click Get, which will install the Ubuntu distribution.

    Notes...

    Note 1: If a dialog pops up asking for you to sign into a Microsoft Account, then just close the dialog. Note 2: If the link does not work, then open the Microsoft Store manually, and search for the Ubuntu app (choose the one with no version number).

Setting up WSL1

Some tips before proceeding:

  • In WSL, Copy and Paste is either done via
    • right-click (selection + right click to Copy, right click with no selection to Paste)
    • Ctrl+Shift+C/Ctrl+Shift+V (enabled by right-clicking the title bar, going to Properties, then checking the checkbox next to "Use Ctrl+Shift+C/V as Copy/Paste").
  • Some of the commands that you'll run will ask for your WSL password and/or confirmation to perform the stated action. This is to be expected, just enter your WSL password and/or the yes action when necessary.
  1. Open Ubuntu (e.g. using Search).

  2. WSL/Ubuntu will set up its own installation when it runs for the first time. Once WSL/Ubuntu finishes installing, it will ask for a username and password (to be input in).

    Note...

    When typing in the password, there will be no visible response, but the terminal will still read in input.

  3. Update WSL/Ubuntu before continuing. Do this by running the following command. These commands will likely take a long time to finish:

    sudo apt update && sudo apt upgrade
    

Note: If the repository you plan to build has an older revision of the INSTALL.md, then follow the legacy WSL1 instructions from here.

  1. Certain packages are required to build pokeemerald Expansion. Install these packages by running the following command:

    sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev
    
    Note...

    If the above command does not work, try the above command but replacing apt with apt-get.

    This will install GCC v10 on Ubuntu 22.04. pokeemerald Expansion works with GCC v10, but remote repositories and the RHH Team use GCC v13 for stricter error-checking. If you want to upgrade from v10 to v13, also follow the devkitpro install instructions.

Installing devkitARM on WSL1

  1. Change directory to somewhere you can download a package, such as C:\Users\<user>\Downloads (the Downloads location for most users). To do so, enter this command, where *<user> is your Windows username:

    cd /mnt/c/Users/<user>/Downloads
    
  2. Once the directory has been changed, run the following commands to install devkitARM.

    sudo apt install wget
    wget https://apt.devkitpro.org/install-devkitpro-pacman
    chmod +x ./install-devkitpro-pacman
    sudo ./install-devkitpro-pacman
    sudo dkp-pacman -S gba-dev
    

    The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.

  3. Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL):

    source /etc/profile.d/devkit-env.sh
    

devkitARM is now installed.

Installing Python on WSL1

To install Python on WSL1, simply run the following commands:

sudo apt update && sudo apt upgrade
sudo apt install python3

Python is now installed.

Choosing where to store pokeemerald Expansion (WSL1)

WSL has its own file system that's not natively accessible from Windows, but Windows files are accessible from WSL. So you're going to want to store pokeemerald Expansion within Windows.

For example, say you want to store pokeemerald Expansion in C:\Users\<user>\Desktop\decomps. First, ensure that the folder already exists. Then, enter this command to change directory to said folder, where <user> is your Windows username:

cd /mnt/c/Users/<user>/Desktop/decomps
Notes...

Note 1: The Windows C:\ drive is called /mnt/c/ in WSL. Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. cd "/mnt/c/users/<user>/Desktop/decomp folder". Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed

If this works, then proceed to Installation.

Otherwise, ask for help on Discord or IRC (see README.md), or continue reading below for Windows instructions using msys2.

Windows (msys2)

Installing devkitARM

  1. Download the devkitPro installer here.
  2. Run the devkitPro installer. In the "Choose Components" screen, uncheck everything except GBA Development unless if you plan to install other devkitPro components for other purposes. Keep the install location as C:\devkitPro and leave the Start Menu option unchanged.

Setting up msys2

Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert.

  1. Open msys2 at C:\devkitPro\msys2\msys2_shell.bat.

  2. Certain packages are required to build pokeemerald Expansion. Install these by running the following two commands:

    pacman -Sy msys2-keyring
    pacman -S make gcc zlib-devel git
    
    Note...

    The commands will ask for confirmation, just enter the yes action when prompted.

  3. Download libpng.

  4. Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at C:\Users\⁠<user>, where <user> is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to C:\Users\<user>\Downloads (the Downloads location for most users), enter this command:

    cd Downloads
    
    Notes...

    Note 1: While not shown, msys uses forward slashes / instead of backwards slashes \ as the directory separator. Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. cd "Downloads/My Downloads". Note 3: Windows path names are case-insensitive so adhering to capitalization isn’t needed. Note 4: If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. cd c:/devkitpro/msys2 if it was saved there.

  5. Run the following commands to uncompress and install libpng.

    tar xf libpng-1.6.37.tar.xz
    cd libpng-1.6.37
    ./configure --prefix=/usr
    make check
    make install
    
  6. Then finally, run the following command to change back to the user profile folder.

    cd
    

Installing Python on msys2

To install Python on msys2, simply run the following commands:

pacman -S mingw-w64-x86_64-python3

Python is now installed.

Choosing where to store pokeemerald Expansion (msys2)

At this point, you can choose a folder to store pokeemerald Expansion into. If you're okay with storing pokeemerald Expansion in the user profile folder, then proceed to Installation. Otherwise, you'll need to account for where pokeemerald Expansion is stored when changing directory to the pokeemerald-expansion folder.

For example, if you want to store pokeemerald Expansion in C:\Users\<user>\Desktop\decomps (where <user> is your Windows username), enter this command:

cd Desktop/decomps

If this works, then proceed to Installation.

Otherwise, ask for help on Discord or IRC (see README.md), or continue reading below for Windows instructions using Cygwin.

Windows (Cygwin)

  1. If devkitARM is not installed, then follow the instructions used to install devkitARM for the msys2 setup before continuing. Remember to not continue following the msys2 instructions by mistake!

Installing Cygwin

  1. Download Cygwin: setup-x86_64.exe for 64-bit Windows, setup-x86.exe for 32-bit.

  2. Run the Cygwin setup. Within the Cygwin setup, leave the default settings until the "Choose A Download Site" screen.

  3. At "Choose a Download Site", select any mirror within the Available Download Sites.

  4. At "Select Packages", set the view to "Full" (top left) and search for the following packages:

    • make
    • git
    • gcc-core
    • gcc-g++
    • libpng-devel

    To quickly find these, use the search bar and type the name of each package. Ensure that the selected package name is the exact same as the one you're trying to download, e.g. cmake is NOT the same as make.

  5. For each package, double click on the text that says "Skip" next to each package to select the most recent version to install. If the text says anything other than "Skip", (e.g. Keep or a version number), then the package is or will be installed and you don't need to do anything.

  6. Once all required packages have been selected, finish the installation.

Configuring devkitARM for Cygwin

Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert.

  1. Open Cygwin.

  2. Run the following commands to configure devkitPro to work with Cygwin.

    export DEVKITPRO=/cygdrive/c/devkitpro
    echo export DEVKITPRO=$DEVKITPRO >> ~/.bashrc
    export DEVKITARM=$DEVKITPRO/devkitARM
    echo export DEVKITARM=$DEVKITARM >> ~/.bashrc
    
    Note...

    Replace the drive letter c with the actual drive letter if it is not c.

Choosing where to store pokeemerald Expansion (Cygwin)

Cygwin has its own file system that's within Windows, at C:\cygwin64\home\<user>. If you don't want to store pokeemerald Expansion there, you'll need to account for where ppokeemerald Expansion is stored when changing directory to the pokeemerald-expansion folder.

For example, if you want to store pokeemerald Expansion in C:\Users\<user>\Desktop\decomps, enter this command, where <user> is your Windows username:

cd c:/Users/<user>/Desktop/decomps

Note that the directory must exist in Windows. If you want to store pokeemerald Expansion in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the cd command.

Notes...

Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. cd "c:/users/<user>/Desktop/decomp folder". Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed

If this works, then proceed to Installation. Otherwise, ask for help on Discord or IRC (see README.md).

macOS

  1. If the Xcode Command Line Tools are not installed, download the tools here, open your Terminal, and run the following command:

    xcode-select --install
    

Installing libpng (macOS)

Note for advanced users...

This guide installs libpng via Homebrew as it is the easiest method, however advanced users can install libpng through other means if they so desire.

  1. Open the Terminal.

  2. If Homebrew is not installed, then install Homebrew by following the instructions on the website.

  3. Run the following command to install libpng.

    brew install libpng
    

    libpng is now installed.

    Continue to Installing pkg-config (macOS) if pkg-config is not installed. Otherwise, continue to Installing devkitARM (macOS) if devkitARM is not installed.

    If both pkg-config and devkitARM are already installed, go to Choosing where to store pokeemerald Expansion (macOS).

Installing pkg-config (macOS)

Note for advanced users...

This guide installs pkg-config via Homebrew as it is the easiest method, however advanced users can install pkg-config through other means if they so desire.

  1. Open the Terminal.

  2. If Homebrew is not installed, then install Homebrew by following the instructions on the website.

  3. Run the following command to install libpng.

    brew install pkg-config
    

    pkg-config is now installed.

    Continue to Installing devkitARM (macOS) if devkitARM is not installed, otherwise, go to Choosing where to store pokeemerald Expansion (macOS).

Installing devkitARM (macOS)

  1. Download the devkitpro-pacman-installer.pkg package from here.

  2. Open the package to install devkitPro pacman.

  3. In the Terminal, run the following commands to install devkitARM:

    sudo dkp-pacman -Sy
    sudo dkp-pacman -S gba-dev
    sudo dkp-pacman -S devkitarm-rules
    

    The command with gba-dev will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.

  4. After the tools are installed, devkitARM must now be made accessible from anywhere by the system. To do so, run the following commands:

    export DEVKITPRO=/opt/devkitpro
    echo "export DEVKITPRO=$DEVKITPRO" >> ~/.zshrc
    export DEVKITARM=$DEVKITPRO/devkitARM
    echo "export DEVKITARM=$DEVKITARM" >> ~/.zshrc
    
    echo "if [ -f ~/.zshrc ]; then . ~/.zshrc; fi" >> ~/.zprofile
    

    Note: Starting with macOS 10.15, the default Unix shell is now zsh. If you migrated from an older version of macOS, you might still be using bash. You can check my running echo $0 in the terminal.

    If your terminal is using bash instead of zsh...
    export DEVKITPRO=/opt/devkitpro
    echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc
    export DEVKITARM=$DEVKITPRO/devkitARM
    echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc
    
    echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile
    

Installing Python (macOS)

  1. Download the latest Python package from here.
  2. Open the package to install Python.

Python is now installed.

Choosing where to store pokeemerald Expansion (macOS)

At this point, you can choose a folder to store pokeemerald Expansion into. If you're okay with storing pokeemerald Expansion in the user folder, then proceed to Installation. Otherwise, you'll need to account for where pokeemerald Expansion is stored when changing directory to the pokeemerald-expansion folder.

For example, if you want to store pokeemerald Expansion in ~/Desktop/decomps, enter this command to change directory to the desired folder:

cd Desktop/decomps

Note that the directory must exist in the folder system. If you want to store pokeemerald Expansion in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Finder) before executing the cd command.

Note...

Note: If the path has spaces, then the path must be wrapped with quotations, e.g. cd "Desktop/decomp folder"

If this works, then proceed to Installation. Otherwise, ask for help on Discord or IRC (see README.md).

Linux

Open Terminal and enter the following commands, depending on which distro you're using.

Debian/Ubuntu-based distributions

Run the following command to install the necessary packages:

sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev

Then proceed to Choosing where to store pokeemerald Expansion (Linux).

Note for legacy repos...

If the repository you plan to build has an older revision of the INSTALL.md, then you will have to install devkitARM. Install all the above packages except for the arm-none-eabi packages, and follow the instructions to install devkitARM on Debian/Ubuntu-based distributions.

Installing devkitARM on Debian/Ubuntu-based distributions

  1. Change directory to somewhere you can download a packages, like a Downloads folder. Then, run the following commands to install devkitARM:

    wget https://apt.devkitpro.org/install-devkitpro-pacman
    chmod +x ./install-devkitpro-pacman
    sudo ./install-devkitpro-pacman
    sudo dkp-pacman -S gba-dev
    

    The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.

  2. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal):

    source /etc/profile.d/devkit-env.sh
    

devkitARM is now installed.

Arch Linux

Run this command as root to install the necessary packages:

pacman -S base-devel arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib git libpng

Installing devkitARM on Arch Linux

  1. Follow devkitPro's instructions to configure pacman to download devkitPro packages.

  2. Install gba-dev: run the following command as root.

    pacman -S gba-dev
    

    This will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.

  3. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal):

    source /etc/profile.d/devkit-env.sh
    

devkitARM is now installed.

Then proceed to Choosing where to store pokeemerald Expansion (Linux).

Other distributions

(Specific instructions for other distributions would be greatly appreciated!)

  1. Try to find the required software in its repositories:

    • gcc
    • g++
    • make
    • git
    • libpng-dev
  2. Follow the instructions here to install devkitPro pacman. As a reminder, the goal is to configure an existing pacman installation to recognize devkitPro's repositories.

  3. Once devkitPro pacman is configured, run the following commands:

    sudo pacman -Sy
    sudo pacman -S gba-dev
    

    The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.

Installing Python in Linux

Installing Python depends on your distribution, please refere to the instructions here.

Choosing where to store pokeemerald Expansion (Linux)

At this point, you can choose a folder to store pokeemerald Expansion into. If so, you'll have to account for the modified folder path when changing directory to the pokeemerald-expansion folder.

If this works, then proceed to Installation. Otherwise, ask for help on Discord or IRC (see README.md).

Installation

Note for Windows users...

Consider adding an exception for the pokeemerald-expansion and/or decomps folder in Windows Security using these instructions. This prevents Microsoft Defender from scanning them which might improve performance while building.

  1. If pokeemerald Expansion is not already downloaded (some users may prefer to download pokeemerald Expansion via a git client like GitHub Desktop), run:

    git clone https://github.com/rh-hideout/pokeemerald-expansion
    
    Note for WSL1...

    If you get an error stating fatal: could not set 'core.filemode' to 'false', then run the following commands:

    cd
    sudo umount /mnt/c
    sudo mount -t drvfs C: /mnt/c -o metadata,noatime
    cd <folder where pokeemerald-expansion is to be stored>
    

    Where <folder where pokeemerald-expansion is to be stored> is the path of the folder where you chose to store pokeemerald Expansion. Then run the git clone command again.

Now you're ready to build pokeemerald Expansion.

Build pokeemerald Expansion

If you aren't in the pokeemerald-expansion directory already, then change directory to the pokeemerald-expansion folder:

cd pokeemerald-expansion

To build pokeemerald.gba (Note: to speed up builds, see Parallel builds):

make

If it has built successfully you will have the output file pokeemerald.gba in your project folder.

Note for Windows... > If you switched terminals since the last build (e.g. from msys2 to WSL1), you must run `make clean-tools` once before any subsequent `make` commands.

Building guidance

Parallel builds

See the GNU docs and this Stack Exchange thread for more information.

To speed up building, first get the value of nproc by running the following command:

nproc

Builds can then be sped up by running the following command:

make -j<output of nproc>

Replace <output of nproc> with the number that the nproc command returned.

nproc is not available on macOS. The alternative is sysctl -n hw.ncpu (relevant Stack Overflow thread).

Other toolchains

To build using a toolchain other than devkitARM, override the TOOLCHAIN environment variable with the path to your toolchain, which must contain the subdirectory bin.

make TOOLCHAIN="/path/to/toolchain/here"

The following is an example:

make TOOLCHAIN="/usr/local/arm-none-eabi"

To compile the modern target with this toolchain, the subdirectories lib, include, and arm-none-eabi must also be present.

Building with debug info

To build pokeemerald.elf with debug symbols under a modern toolchain:

make DINFO=1

Note that this is not necessary for a non-modern (agbcc) build since those are built with debug symbols by default.

agbcc

Deprecated; installing agbcc is optional since 1.7.0.
  1. Install agbcc into pokeemerald-expansion. The commands to run depend on certain conditions. You should only follow one of the listed instructions:
  • If agbcc has not been built before in the folder where you chose to store pokeemerald Expansion, run the following commands to build and install it into pokeemerald-expansion:

    git clone https://github.com/pret/agbcc
    cd agbcc
    ./build.sh
    ./install.sh ../pokeemerald-expansion
    
  • Otherwise, if agbcc has been built before (e.g. if the git clone above fails), but was last built on a different terminal than the one currently used (only relevant to Windows, e.g. switching from msys2 to WSL1), then run the following commands to build and install it into pokeemerald-expansion:

    cd agbcc
    git clean -fX
    ./build.sh
    ./install.sh ../pokeemerald-expansion
    
  • Otherwise, if agbcc has been built before on the same terminal, run the following commands to install agbcc into pokeemerald-expansion:

    cd agbcc
    ./install.sh ../pokeemerald-expansion
    
    Note...

    If building agbcc or pokeemerald results in an error, try deleting the agbcc folder and re-installing agbcc as if it has not been built before.

  1. Once agbcc is installed, change directory back to the base directory where pokeemerald-expansion and agbcc are stored:

    cd ..
    
  2. To compile with agbcc:

    make agbcc
    

Useful additional tools

Setting up WSL1 (Legacy Portion)

  1. Certain packages are required to build pokeemerald. Install these packages by running the following command:

    sudo apt install build-essential git libpng-dev gdebi-core
    

    Note: If the above command does not work, try the above command but replacing apt with apt-get.

  2. Once the packages have finished installing, download the devkitPro pacman package here. The file to download is devkitpro-pacman.amd64.deb.

  3. WSL has its own file system that's not accessible from Windows, but Windows files are accessible from WSL. To install the devkitPro package, you'll need to change to the current working directory where the package file was saved.

    For example, if the package file was saved to C:\Users\<user>\Downloads (the Downloads location for most users), enter this command, where <user> is your Windows username:

    cd /mnt/c/Users/<user>/Downloads
    

    Note 1: The Windows C:\ drive is called /mnt/c/ in WSL. Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. cd "/mnt/c/users/<user>/Downloads folder". Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed

  4. Once the directory has been changed to the folder containing the devkitPro pacman package, run the following commands to install devkitARM.

    sudo gdebi devkitpro-pacman.amd64.deb
    sudo dkp-pacman -Sy
    sudo dkp-pacman -S gba-dev
    

    The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.

    Note: devkitpro-pacman.amd64.deb is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead.

  5. Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL):

    source /etc/profile.d/devkit-env.sh
    

Proceed to Choosing where to store pokeemerald (WSL1) of the current INSTALL.md.

Pokeemerald-Expansion Changelogs

1.8.x

1.7.x

1.6.x

1.5.x

1.4.x

1.3.x

1.2.x

1.1.x

1.0.x

Pre-1.0.x:

Version 1.8.4

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.8.4`.

🌋 IMPORTANT CHANGES 🌋

Reverted Guillotine feature branch by @AsparagusEduardo:

  • This was a runtime decapitalization branch introduced silently in version 1.8.0. We didn't properly announce as it was hastily merged and we were hoping that future versions of it would have fixed issues that we encountered after the merge. However, issues kept piling on and we felt the need to revert it as it was also silently breaking other features as well.
  • We will work on an alternate decapitalization option in the future.

💥 Softlock/Crash fixes 💥

🧬 General 🧬

Fixed

✨ Feature Branches ✨

TheXaman's Debug Menu:

Fixed

SBird/Karathan's Dynamic Multichoices:

Changed

TheXaman's HGSS Pokédex Plus:

Fixed

  • Multiple evolution page fixes by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4514
    • Fixed duplicate icons when 2 or more evolution methods share the same target species (eg. Magnezone evolution via Thunder Stone or Electromagnetic field).
    • Fixed arrow not loading when there are multiple evolution methods to the same target species that hadn't been caught.
    • Fixed wonky D-Pad inconsistency when scrolling down.
    • Fixed regression from #3562 (1.7.0) that caused non-evolving Pokémon to not show their "X has no evolution" text.
      • Change from the original branch: The message no longer shows for Pokémon that are part of an evolutionary family, even if they don't evolve themselves (eg. Venusaur).
  • Added failsafe for Egg Groups without text defined by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4628

ghoulslash's Saveblock Cleansing:

Changed

🐉 Pokémon 🐉

Added

Changed

Fixed

⚔️ Battle General ⚔️

Fixed

🤹 Moves 🤹

Changed

Fixed

🎭 Abilities 🎭

Fixed

🧶 Items 🧶

Added

Fixed

🤖 Battle AI 🤖

Changed

Fixed

🧹 Other Cleanup 🧹

Fixed

🧪 Test Runner 🧪

Added

Fixed

📦 Pret merges 📦

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.3...expansion/1.8.4

Version 1.8.3

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.8.3`.

💥 Softlock/Crash fixes 💥

🧬 General 🧬

Changed

Fixed

✨ Feature Branches ✨

TheXaman's HGSS Pokédex Plus:

Fixed

🐉 Pokémon 🐉

Changed

Fixed

⚔️ Battle General ⚔️

Changed

Fixed

🤹 Moves 🤹

Fixed

🎭 Abilities 🎭

Changed

Fixed

🧶 Items 🧶

Fixed

🤖 Battle AI 🤖

Changed

🧪 Test Runner 🧪

Added

Changed

Fixed

  • Fixed AI test error messages by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4404
    • The error messages for EXPECT_MOVE and EXPECT_SWITCH were backwards, saying, e.g. Expected MOVE, got SWITCH when it should say Expected SWITCH, got MOVE.
  • Fixed typos in Embody Aspect tests by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4439
  • Fixed Battle Test organization by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4504
    • Fixed Cud Chew's file being in the move effect folder.
    • Fixed Cud Chew's file name and test names (Cud Chuw).
    • Fixed Gastro Acid and Role Play's files being in the ability folder.
    • Moved Recoil file to move flags folder.
    • Renamed White Herb's file to restore_stats.c.
    • Renamed Techno Blast's file to change_type_on_item.c.
    • semi_invulnerable_moves.c to semi_invulnerable.c.
    • two_turn_moves.c to two_turns_attack.c.
    • Combined Burn Up/Double Shock to a single file fail_if_not_arg_type.c
    • Added Spit Up/Swallow files that point Stockpile's file.
    • Moved secondary effect files to their own folder.
    • Combinations of secondary effects moved to their own folder
    • Split hit_set_entry_hazards.c to separate files for Spikes/Stealth Rock.
    • Grouped Hex/Venoshock to the same file double_power_on_arg_status.c

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.2...expansion/1.8.3

Version 1.8.2

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.8.2`.

🌋 Important changes 🌋

  • Added check during compilation to make sure that the code is inside a git directory before building by @SBird1337 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4363
    • If you downloaded the code using the "Download ZIP" option on GitHub, you will not be able to update your expansion version or merge any other feature brances, which is why we added this check to make sure that users don't fall into this trap.

💥 Softlock/Crash fixes 💥

🧬 General 🧬

Changed

Fixed

✨ Feature Branches ✨

TheXaman's Debug Menu:

Fixed

TheXaman's HGSS Pokédex Plus:

Changed

Fixed

🐉 Pokémon 🐉

Added

Changed

Fixed

⚔️ Battle General ⚔️

Fixed

🤹 Moves 🤹

Fixed

🎭 Abilities 🎭

Added

Fixed

🧶 Items 🧶

Fixed

🤖 Battle AI 🤖

Fixed

🧹 Other Cleanup 🧹

Added

Fixed

🧪 Test Runner 🧪

Added

📦 Pret merges 📦

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.1...expansion/1.8.2

Version 1.8.1

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.8.1`.

🌋 IMPORTANT CHANGES 🌋

🧬 General 🧬

Added

Changed

Fixed

🧹 Other Cleanup 🧹

Changed

Fixed

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.0...expansion/1.8.1

Version 1.8.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.8.0`.

🌋 IMPORTANT CHANGES 🌋

🧬 General 🧬

Added

Changed

Fixed

✨ Feature Branches ✨

Incorporated @SBird1337's Dynamic Multichoices by @SBird1337 in https://github.com/rh-hideout/pokeemerald-expansion/pull/3826

  • This allows to set up custom multichoices much easier!
  • Allows you to control what options appear based custom conditions (such as them being based on what items you have currently, or even completely at random!).
  • Event callbacks can be added as well, to fully customize what happens with your multichoices.
    • Included there's DYN_MULTICHOICE_CB_SHOW_ITEM, which shows icons of the items defined by your script.
  • Compatible with Poryscript.
  • For more information and how to use it, please visit the Pokécommunity thread.

Incorporated @ghoulslash's Saveblock Cleansing branch by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4113

  • Differences from the the standalone branch:
    • Moved configs to dedicated file (include/config/save.h).
      • Fixed comments to the proper amount of space saved.
    • Added FREE_MYSTERY_GIFT, saving 876 bytes in SaveBlock1.
    • Converted #ifndef configs to the config format the rest of expansion uses
    • Cleaned up the code and fixed to work on modern.

TheXaman's Debug Menu:

Added

Changed

Fixed

🐉 Pokémon 🐉

Added

Changed

⚔️ Battle General ⚔️

Added

Changed

Fixed

🤹 Moves 🤹

Added

Changed

Fixed

🎭 Abilities 🎭

Added

Changed

Fixed

🧶 Items 🧶

Added

Changed

Fixed

🤖 Battle AI 🤖

Added

Changed

Fixed

🧹 Other Cleanup 🧹

🧪 Test Runner 🧪

Added

Changed

Fixed

📦 Pret merges 📦

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.7.4...expansion/1.8.0

Version 1.7.4

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.Y.Z`.

🧬 General 🧬

Fixed

🐉 Pokémon 🐉

Fixed

⚔️ Battle General ⚔️

Fixed

🤹 Moves 🤹

Fixed

🎭 Abilities 🎭

Added

Fixed

🧶 Items 🧶

Fixed

🧹 Other Cleanup 🧹

Changed

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.7.3...expansion/1.7.4

Version 1.7.3

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.7.3`.

🌋 IMPORTANT CHANGES 🌋

🧬 General 🧬

🐉 Pokémon 🐉

Changed

Fixed

⚔️ Battle General ⚔️

Fixed

🤹 Moves 🤹

Changed

Fixed

🎭 Abilities 🎭

Fixed

🧶 Items 🧶

Fixed

🤖 Battle AI 🤖

Fixed

🧪 Test Runner 🧪

Added

Changed

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.7.2...expansion/1.7.3

Version 1.7.2

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.7.2`.

🧬 General 🧬

Changed

Fixed

🐉 Pokémon 🐉

Added

Changed

  • Multiple Pokémon graphical improvements by @katykat5099 in https://github.com/rh-hideout/pokeemerald-expansion/pull/3805
    • Improved Tyrantrum's back sprite.
    • Improved Zigzagoon and Linoone's palette
    • Updated Gen 9 Pokémon icons to @CyanSMP64's improvements
      • Annihilape
      • Arctibax and Baxcalibur
      • Bellibolt
      • Bramblin and Brambleghast
      • Cetoddle and Cetitan
      • Charcadet, Armarouge and Ceruledge.
      • Chi-Yu and Chien-Pao
      • Clodsire
      • Crocalor
      • Dolliv
      • Dudunsparce
      • Esparthra

Fixed

⚔️ Battle General ⚔️

Changed

Fixed

🤹 Moves 🤹

Fixed

🧶 Items 🧶

Fixed

🤖 Battle AI 🤖

Fixed

🧹 Other Cleanup 🧹

Fixed

🧪 Test Runner 🧪

Added

Changed

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.7.1...expansion/1.7.2

Version 1.7.1

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.7.1`.

🧬 General 🧬

Changed

Fixed

🐉 Pokémon 🐉

Fixed

🤹 Moves 🤹

Added

Fixed

🎭 Abilities 🎭

Fixed

🧶 Items 🧶

Fixed

🧹 Cleanup 🧹

🧪 Test Runner 🧪

Added

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.7.0...expansion/1.7.1

Version 1.7.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.7.0`.

🌋 IMPORTANT CHANGES 🌋

The Expansion now uses Modern compilers by default

🧬 General 🧬

Added

Changed

Fixed

🐉 Pokémon 🐉

Added

Changed

  • Species Simplifier™ (Parts 1, 2 and 3)
    • Moved most data from multiple arrays to new fields in gSpeciesInfo
      • gSpeciesNames array -> speciesName field.
      • gLevelUpLearnsets array -> levelUpLearnset field.
      • gTeachableLearnsets array -> teachableLearnset field.
      • gEvolutionTable array -> evolutions field.
      • gFormSpeciesIdTables array -> formSpeciesIdTable field.
      • gFormChangeTablePointers array -> formChangeTable field.
      • Refactored Cry tables to simplify the process of adding new cries.
        • Now there's a single entry in the table per cry, and species are asigned cry IDs in gSpeciesInfo's cryId field.
      • Graphical data now have their pointers in gSpeciesInfo (Sprites, palettes and animations)
        • Removed all files in src/data/pokemon_graphics/ with the exception of front_pic_anims.h.
          • gMonBackPicCoords array -> backPicSize field.
          • gMonBackPicTable array -> backPic field.
            • gMonBackPicTableFemale array -> backPicFemale field.
          • gMonFrontPicCoords array -> frontPicSize field.
          • gMonFrontPicTable array -> frontPic field.
            • gMonFrontPicTableFemale array -> frontPicFemale field.
          • gMonPaletteTableFemale array -> palette field.
            • gMonPaletteTableFemale array -> paletteFemale field.
          • gMonShinyPaletteTable array -> shinyPalette field.
            • gMonShinyPaletteTableFemale array -> shinyPaletteFemale field.
          • gEnemyMonElevation array -> enemyMonElevation field.
          • gMonIconPaletteIndices array -> iconPalIndex field.
            • gMonIconPaletteIndicesFemale array -> iconPalIndexFemale field.
        • Removed unused 2nd animations.
      • Dex Entries
        • Individual form information is visible in the HGSS Pokédex (Vanilla Dex TBD)
        • National Dex numbers are assigned to the species in gSpeciesInfo, removing the need of sSpeciesToHoennPokedexNum and sSpeciesToNationalPokedexNum arrays.
        • Height and Weight are now saved separately per form, so weight in battle is now more accurate.
          • Pokédex size page proportions are also separate.
        • Pokédex descriptions are now saved as compound strings in gSpeciesInfo and differ by form. Shared entries are at the top of src/data/pokemon/species_info.h.
    • Added toggles to disable specific family groups of species
      • Located in include/config/species_enabled.h.
        • Moved the original P_GEN_x_POKEMON configs to this file.
      • Options to disable groups of species:
        • Battle-gimmick forms (Megas, Primals, etc.)
        • Regional Forms (Includes evolutions of those species, such as Sirfetch'd)
        • Pikachu extra forms.
        • Cross-Generation Evolutions
          • Also added separate option to add cross-evolutions to the Regional Dex.
      • Generation 1-3 families can now be disabled.
      • Pokémon will not evolve into species that have been disabled.
      • Pokémon will produce offspring of species that have been disabled.
      • Pokémon will not change form into forms that have been disabled.
      • Fixes and cleanup
    • Grouped data by species family.
    • Converted species flags to gcc flags.
    • Converted P_UPDATED_STATS "ifdef blocks" to ternaries.
    • Added Mega Evolution hidden ability failsafes.
    • Separated gSpeciesInfo by Generation by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3729
    • Fixes and cleanup
  • Updated P_UPDATED_ABILITIES Gen 9's config for Piplup's line, Gallade and Shiftry by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3353
    • Shiftry's 2nd regular ability was changed from Early Bird to Wind Rider.
    • Piplup, Prinplup and Empoleon's Hidden abilities were changed from Defiant to Competitive.
    • Gallade was given Sharpness as a 2nd regular ability.
  • Updated Legends Arceus Pokémon data and Level Up learnsets to Scarlet/Violet's by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3458
  • Applied missing uses of PLACEHOLDER_ANIM_SINGLE_FRAME by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3562
  • Renamed PLACEHOLDER_TWO_FRAME_ANIMATION to PLACEHOLDER_ANIM_TWO_FRAMES by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3562
  • Removed Old Unown Level Up Learnsets by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3562
  • Added FORM_CHANGE_TIME_OF_DAY form change that automatically changes Form during times of day (used by Shaymin to revert to Land Forme at night) by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/1690
  • Added FORM_CHANGE_STATUS form change that triggers when they adquire status condition (used by Shaymin to revert to Land Forme when frozen) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3734
    • Currently it doesn't:
      • Prevent Shaymin from changing into Sky Forme when frozen.
      • Change Form in the Battle Pike.
  • Evolutions now call for GetTimeOfDay instead of checking the times directly by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/3369

Fixed

⚔️ Battle General ⚔️

Added

Changed

Fixed

🤹 Moves 🤹

Added

Changed

Fixed

🎭 Abilities 🎭

Added

Changed

Fixed

🧶 Items 🧶

Added

Changed

Fixed

🤖 Battle AI 🤖

  • Added AI Tests
    • By @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3361
      • AI prefers Bubble over Water Gun if it's slower (both are power 40).
      • AI prefers Water Gun over Bubble if it knows that foe has Contrary.
      • AI prefers moves with better accuracy, but only if they both require the same number of hits to KO.
      • AI prefers moves which deal more damage instead of moves which are super-effective but deal less damage.
      • AI prefers Earthquake over Drill Run if both require the same number of hits to KO.
      • AI chooses the safest option to faint the target, taking into account accuracy and move effect.
      • AI won't use ground type attacks against flying type Pokémon unless Gravity is in effect.
      • AI will not switch in a Pokémon which is slower and gets 1HKOed after fainting.
      • AI switches if Perish Song is about to kill.
      • AI won't use a Weather changing move if partner already chose such move.
      • AI will not use Helping Hand if partner does not have any damage moves.
      • AI will not use a status move if partner already chose Helping Hand.
      • AI without any flags chooses moves at random.
    • By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3382
      • AI prefers a weaker moves over one with a downside effect if both require the same number of hits to KO.
      • AI prefers moves with the best possible score, chosen randomly if tied.
      • AI can choose a status move that boosts the attack by two.
    • By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3515
      • AI won't use Solar Beam if there is no Sun up or the user is not holding Power Herb.
    • By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3583
      • AI chooses moves with secondary effect that have a 100% chance to trigger
    • Cleanup by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3748
  • Smarter SwitchAI Mon Choices + HasBadOdds Switch Check by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/3253
    • Use AI_FLAG_SMART_MON_CHOICES to enable smarter decisions when choosing which mon gets sent out
    • HasBadOdds expands AI_FLAG_SMART_SWITCHING to switch out in cases where a mon has a bad matchup and lots of HP remaining
  • Extend AI_FLAG_SMART_SWITCHING for Encore / hazards / lowered attacking stats + Tests by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/3557

Changed

Fixed

🧹 Other Cleanup 🧹

🧪 Test Runner 🧪

Added

Changed

Fixed

📦 Pret merges 📦

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.6.2...expansion/1.7.0

Version 1.6.2

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.6.2`.

🌋 IMPORTANT CHANGES 🌋

Battle changes

  • Battler Types are now obtained via GetBattlerType instead of gBattleMons[battlerId].type1/2/3 to better consider Roost. Be sure to update your custom battle effects to account for this change.

🧬 General 🧬

Fixed

🐉 Pokémon 🐉

Changed

Fixed

🤹 Moves 🤹

Changed

Fixed

🎭 Abilities 🎭

Changed

Fixed

🧶 Items 🧶

Fixed

🧹 Cleanup 🧹

🧪 Test Runner 🧪

Added

Changed

Fixed

New Contributors

Full Changelog

https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.6.1...expansion/1.6.2

Version 1.6.1

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.6.1`.

CRITICAL FIX, please update to avoid the issues detailed down below:

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.6.0...expansion/1.6.1

Version 1.6.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.6.0`.

Added

General

Item Effects

Move Effects

Move Animations

Graphics

Changed

General

Graphical changes

Refactors

Move animations

Battle AI

Cleanup

Fixed

Softlocks

General

Graphics

Battle Mechanics

Test Runner

General

Tests added for:

Pret merges:

  • Pret merge (2023/08/31) by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3268
    • VAR_TEMP aliases
    • TM and HM item constants by their move name without numbers.
    • Stat change documentation.
    • Factory Menu + Dome Tourney documentation.
    • Berry Fix Documentation.
    • Missing uses of DISPLAY_WIDTH and DISPLAY_HEIGHT.
    • Static assertion for Battle Palace Flags.
    • Static assertion for Rotating Gates.
    • Automatic increase of TEXT_BUFF_ARRAY_COUNT and POKEMON_NAME_BUFFER_SIZE.
    • Proper bravoTrainerTower documentation.
    • Birth Island Rock documentation.
    • 6 new bugfixes.
  • Pret merge (2023/09/26) by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3347
    • Add include guards for assembly constants files
    • Add blockBoxRS field to BoxPokemon struct
    • Bugfix for abilities affecting wild encounter tables
      • Fixes a potential buffer overread in TryGetAbilityInfluencedWildMonIndex. The bug can occur if an electric type mon is in the first slots of a fishing encounter table and the player carries a mon with the ABILITY_STATIC ability. This never happens in the vanilla codebase.
    • Add missing constant usage in m4a_1

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.5.3...expansion/1.6.0

Version 1.5.3

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.5.3`.

CRITICAL FIX, please update to avoid the issues detailed down below:

  • Fixed memory corruption when handling trigger sprites by @SBird1337 in https://github.com/rh-hideout/pokeemerald-expansion/pull/3238
    • This had the posibility of manifesting in weird ways, like camera and music changes, NPC duplication and more. If you've had this issue in the past, we heavily recommend you update to this version of the expansion.
    • Thank you @Bassoonian for helping us pinpointing the issue.

image image

Fixed

Battle Mechanics

Test Runner

Changed

Fixed

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.5.2...expansion/1.5.3

Version 1.5.2

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.5.2`.

Changed

General

Refactors

Fixed

Softlocks

Graphics

Battle Mechanics

Battle AI

Pret merges:

Test Runner

Changed

Fixed

Tests added for:

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.5.1...expansion/1.5.2

Version 1.5.1

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.5.1`.

Changed

General

Fixed

General

Softlocks

Graphics

Battle Mechanics

Battle AI

Battle Tests

Added

Changed

  • Minor test changes by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3072
    • Regularizes the whitespace.
    • Removes unnecessary ;s after }s.
    • Parametrizes item_effect_restore_hp.c and uses I_HEALTH_RECOVERY everywhere.
    • Inlines uses of macros where I think it makes the test easier to follow.
    • Use 3-arg PASSES_RANDOMLY in the Snow + Blizzard test (improves performance).
    • More conservative unlink error reporting. Ctrl-C in make check should not complain about being unable to unlink ROMs which weren't created yet.
    • Better names for the ROMs in /tmp.
    • Prints the test runner number in Hydra, making it easier to track down bugs involving state leaking from a test to the following tests.
    • Simplify TO_DO_BATTLE_TEST's implementation.
    • Introduce a TearDownBattle function which was repeated twice.

Fixed

Latest pret commit:

https://github.com/pret/pokeemerald/commit/9c4a59f865360b7d6e0dede0e52812b897526588

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.5.0...expansion/1.5.1

Version 1.5.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.5.0`.

Added

General

Battle General

Move Effects

Item Effects

Battle AI

Tests

Changed

General

Graphical changes

Refactors

Cleanup

Fixed

General

Graphics

Battle Mechanics

Battle Animations

Battle AI

Pret merges

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.4.3...expansion/1.5.0

Version 1.4.3

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.4.3`.

Changed

Cleanup

Fixed

General

Battle Mechanics

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.4.2...expansion/1.4.3

Version 1.4.2

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.4.2`.

Fixed

General

Battle Mechanics

Battle AI

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.4.1...expansion/1.4.2

Version 1.4.1

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.4.1`.

CRITICAL FIX, please update to avoid the issues detailed down below:

  • Fixed electricity move animations causing softlocks with weird graphical results by @DizzyEggg in #2785

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.4.0...expansion/1.4.1

Version 1.4.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.4.0`.

Added

General

Moves

  • Generation IX Moves
    • Base move data by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/2467
    • New moves with existing effects:
      • Lumina Crash, Jet Punch, Ice Spinner, Triple Dive, Kowtow Cleave, Flower Trick, Torch Song, Aqua Step, Ruination, Pounce, Trailblaze, Chilling Water, Hyper Drill, Twin Beam, Armor Cannon, Bitter Blade, Comeuppance, Aqua Cutter, Blazing Torque, Noxious Torque, Combat Torque, Magical Torque
    • New move effects:
    • Missing move effects:
      • Tera Blast, Axe Kick, Last Respects, Order Up, Spicy Extract, Spin Out, Population Bomb, Glaive Rush, Revival Blessing, Salt Cure, Mortal Spin, Doodle, Fillet Away, Raging Bull, Make It Rain, Collision Course, Electro Drift, Shed Tail, Chilly Reception, Tidy Up, Snowscape, Rage Fist, Gigaton Hammer
  • Updated Gen 1-8 move effects to Gen 9 standards: by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/2467
    • LA moves with existing effects
      • Psyshield Bash, Raging Fury, Wave Crash, Chloroblast, Mountain Gale, Headlong Rush, Esper Wing, Shelter, Bitter Malice, Power Shift, Springtide Storm, Bleakwind Storm, Wildbolt Storm, Sandsear Storm
    • LA moves with new move effects
      • Mystical Power (EFFECT_SPECIAL_ATTACK_UP_HIT)
      • Victory Dance (EFFECT_VICTORY_DANCE)
    • PP adjustments.
      • (5 -> 10) Bleakwind Storm, Wildbolt Storm, Sandsear Storm
      • (10 -> 5) Recover, Soft-Boiled, Rest, Milk Drink, Slack Off, Roost, Shore Up
    • Power adjustments
      • (50 -> 90) Triple Arrows
      • (90 -> 120) Raging Fury
      • (120 -> 150) Wave Crash
      • (60 -> 80) Dire Claw
      • (100 -> 120) Headlong Rush
      • (60 -> 75) Bitter Malice
      • (75 -> 80) Esper Wing
      • (95 -> 100) Springtide Storm, Bleakwind Storm, Wildbolt Storm, Sandsear Storm
      • (80 -> 75) Wicked Blow
      • (70 -> 60) Grassy Glide
      • (130 -> 120) Glacial Lance
  • Implementing Teatime effect by @SonikkuA-DatH in https://github.com/rh-hideout/pokeemerald-expansion/pull/1956
  • Config for Gen 4's Roost pure-Flying behavior (B_ROOST_PURE_FLYING) by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/2530
  • Config for Gen 8 Howl's effect by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/2700

Abilities

  • Generation IX Abilities
    • 28 of 31 abilities implemented by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/2470
      • Lingering Aroma, Seed Sower, Thermal Exchange, Anger Shell, Purifying Salt, Well-Baked Body, Wind Rider, Rocky Payload, Wind Power, Electromorphosis, Protosynthesis, Quark Drive, Good as Gold, Vessel of Ruin, Sword of Ruin, Tablets of Ruin, Beads of Ruin, Orichalcum Pulse, Hadron Engine, Cud Chew, Sharpness, Supreme Overlord, Costar, Toxic Debris, Armor Tail, Earth Eater, Guard Dog and Mycelium Might
    • Not implemented yet:
      • Commander
      • Opportunist
      • Zero to Hero
  • Implemented Ice Face by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/2255

Items

Changed

Graphical changes

Refactors

Cleanup

Other

Fixed

Softlocks

Graphics

Battle Mechanics

Move Animations

Battle AI

Other

Pret merges

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.3.0...expansion/1.4.0

Version 1.3.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.3.0`.

Added

Changed

Fixed

Pret merges

Cleanup

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.2.0...expansion/1.3.0

Version 1.2.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.2.0`.

Added

Changed

Fixed

Cleanup

Pret merges

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.1.1...expansion/1.2.0

Added

Changed

Fixed

Pret merges

Cleanup

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.1.0...expansion/1.2.0

Version 1.1.1

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.1.1`.

What's Changed

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.1.0...expansion/1.1.1

Version 1.1.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.1.0`.

Added

Changed

Fixed

Pret merges

Cleanup

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.0.0...expansion/1.1.0

Version 1.0.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.0.0`.

BREAKING

ADDED

CHANGED

FIXES

PRET MERGES

CLEANUP

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/0.9.0...expansion/1.0.0

Version 0.9.0

## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/0.9.0`.

This version was labeled retroactively after our versioning scheme was decided, meaning the version number may be arbitrary.

ADDED

CHANGED

FIXES

PRET MERGES

CLEANUP

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/0.8.0...expansion/0.9.0

BREAKING

ADDED

CHANGED

FIXES

PRET MERGES

CLEANUP

New Contributors

Full Changelog: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/0.9.0...expansion/1.0.0